Skip to content

Picker.Item with element value crashes (re-opening #17812) #18086

Description

@simonbuchan

Is this a bug report?

Yes.

Have you read the Contributing Guidelines?

Yes

Environment

Environment:
OS: Windows 10
Node: 6.12.3
Yarn: 1.3.2
npm: 3.10.10
Watchman: Not Found
Xcode: N/A
Android Studio: Not Found

Packages: (wanted => installed)
react: 16.2.0 => 16.2.0
react-native: 0.53.3 => 0.53.3

Steps to Reproduce

After react-native init, replace App.js with:

importReact,{Component}from'react';import{Picker,Text,View}from'react-native';exportdefaultclassAppextendsComponent{render(){return(<View><Picker><Picker.Itemlabel="foo"value={<Text>Boom</Text>}/></Picker></View>);}}

Expected Behavior

I would like to get the element to render from Picker#onValueChange.

Actual Behavior

When testing in android emulator, crashes on startup (i.e. closes and shows "ProjectName has stopped" dialog)

> adb logcat *:S ReactNativeJS
--------- beginning of system
--------- beginning of main
02-25 20:55:25.190 27763 27818 I ReactNativeJS: Running application "ReactNativePickerItemCrash" with appParams: {"rootTag":1}. __DEV__ === true, development-level warning are ON, performance optimizations are OFF
02-25 20:55:25.276 27763 27818 E ReactNativeJS: RangeError: Maximum call stack size exceeded.
02-25 20:55:25.276 27763 27818 E ReactNativeJS:
02-25 20:55:25.276 27763 27818 E ReactNativeJS: This error is located at:
02-25 20:55:25.276 27763 27818 E ReactNativeJS: in AndroidDialogPicker (at PickerAndroid.android.js:107)
02-25 20:55:25.276 27763 27818 E ReactNativeJS: in PickerAndroid (at Picker.js:160)
02-25 20:55:25.276 27763 27818 E ReactNativeJS: in Picker (at App.js:8)
02-25 20:55:25.276 27763 27818 E ReactNativeJS: in RCTView (at View.js:71)
02-25 20:55:25.276 27763 27818 E ReactNativeJS: in View (at App.js:7)
02-25 20:55:25.276 27763 27818 E ReactNativeJS: in App (at renderApplication.js:35)
02-25 20:55:25.276 27763 27818 E ReactNativeJS: in RCTView (at View.js:71)
02-25 20:55:25.276 27763 27818 E ReactNativeJS: in View (at AppContainer.js:102)
02-25 20:55:25.276 27763 27818 E ReactNativeJS: in RCTView (at View.js:71)
02-25 20:55:25.276 27763 27818 E ReactNativeJS: in View (at AppContainer.js:122)
02-25 20:55:25.276 27763 27818 E ReactNativeJS: in AppContainer (at renderApplication.js:34)
02-25 20:55:25.528 27763 27818 E ReactNativeJS: { [Error: C++ exception in 'nativeFlushQueueImmediate'
02-25 20:55:25.528 27763 27818 E ReactNativeJS:
02-25 20:55:25.528 27763 27818 E ReactNativeJS: Malformed calls from JS: field sizes are different.
02-25 20:55:25.528 27763 27818 E ReactNativeJS:
02-25 20:55:25.528 27763 27818 E ReactNativeJS: [[19,29],[2,2],[["RangeError: Maximum call stack size exceeded.\n\nThis error is located at:\n in AndroidDialogPicker (at PickerAndroid.android.js:107)\n in PickerAndroid (at Picker.js:160)\n in Picker (at App.js:8)\n in RCTView (at View.js:71)\n in View (at App.js:7)\n in App (at renderApplication.js:35)\n in RCTView (at View.js:71)\n in View (at AppContainer.js:102)\n in RCTView (at View.js:71)\n in View (at AppContainer.js:122)\n in AppContainer (at renderApplication.js:34)",[[2251],2251,["lineNumber"],[67],67,["column"],["file","methodName","lineNumber","column"],["http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false"],"http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false",["file"],["isValidArgument"],"isValidArgument",["methodName"],[2251],2251,["lineNumber"],[67],67,["column"],["file","methodName","lineNumber","column"],["http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false"],"http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false",["file"],["isValidArgument"],"isValidArgument",["methodName"],[2251],2251,["lineNumber"],[67],67,["column"],["file","methodName","lineNumber","column"],["http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false"],"http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false",["file"],["isValidArgument"],"isValidArgument",["methodName"],[2251],2251,["lineNumber"],[67],67,["column"],["file","methodName","lineNumber","column"],["http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false"],"http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false",["file"],["isValidArgument"],"isValidArgument",["methodName"],[2251],2251,["lineNumber"],[67],67,["column"],["file","methodName","lineNumber","column"],["http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false"],"http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false",["file"],["isValidArgument"],"isValidArgument",["methodName"],[2251],2251,["lineNumber"],[67],67,["column"],["file","methodName","lineNumber","column"],["http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false"],"http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false",["file"],["isValidArgument"],"isValidArgument",["methodName"],[2251],2251,["lineNumber"],[67],67,["column"],["file","methodName","lineNumber","column"],["http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false"],"http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false",["file"],["isValidArgument"],"isValidArgument",["methodName"],[2251],2251,["lineNumber"],[67],67,["column"],["file","methodName","lineNumber","column"],["http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false"],"http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false",["file"],["isValidArgument"],"isValidArgument",["methodName"],[2251],2251,["lineNumber"],[67],67,["column"],["file","methodName","lineNumber","column"],["http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false"],"http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false",["file"],["isValidArgument"],"isValidArgument",["methodName"],[2251],2251,["lineNumber"],[67],67,["column"],["file","methodName","lineNumber","column"],["http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false"],"http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false",["file"],["isValidArgument"],"isValidArgument",["methodName"],[2251],2251,["lineNumber"],[67],67,["column"],["file","methodName","lineNumber","column"],["http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false"],"http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false",["file"],["isValidArgument"],"isValidArgument",["methodName"],[2251],2251,["lineNumber"],[67],67,["column"],["file","methodName","lineNumber","column"],["http://10.0.
02-25 20:55:25.574 27763 27818 E ReactNativeJS: RangeError: Maximum call stack size exceeded.
02-25 20:55:25.574 27763 27818 E ReactNativeJS:
02-25 20:55:25.574 27763 27818 E ReactNativeJS: This error is located at:
02-25 20:55:25.574 27763 27818 E ReactNativeJS: in AndroidDialogPicker (at PickerAndroid.android.js:107)
02-25 20:55:25.574 27763 27818 E ReactNativeJS: in PickerAndroid (at Picker.js:160)
02-25 20:55:25.574 27763 27818 E ReactNativeJS: in Picker (at App.js:8)
02-25 20:55:25.574 27763 27818 E ReactNativeJS: in RCTView (at View.js:71)
02-25 20:55:25.574 27763 27818 E ReactNativeJS: in View (at App.js:7)
02-25 20:55:25.574 27763 27818 E ReactNativeJS: in App (at renderApplication.js:35)
02-25 20:55:25.574 27763 27818 E ReactNativeJS: in RCTView (at View.js:71)
02-25 20:55:25.574 27763 27818 E ReactNativeJS: in View (at AppContainer.js:102)
02-25 20:55:25.574 27763 27818 E ReactNativeJS: in RCTView (at View.js:71)
02-25 20:55:25.574 27763 27818 E ReactNativeJS: in View (at AppContainer.js:122)
02-25 20:55:25.574 27763 27818 E ReactNativeJS: in AppContainer (at renderApplication.js:34)
--------- beginning of crash

Reproducible Demo

From the previous issue, https://snack.expo.io/BJ7CILeUM but Snack behavior is a little different, it complains about missing a render() method, but converted to using a component class, the error shows:

Device: (21:2525) Error: C++ exception in 'nativeFlushQueueImmediate'
Exception creating JSON string: JSON.stringify cannot serialize cyclic structures. (<unknown file>:21)
This error is located at:
in AndroidDialogPicker
in t
in t
in RCTView
in Unknown
in WrappedComponent
in t
in r
in RCTView
in RCTView
in t

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions