Skip to content

[0.73] "Fix crash in getChildDrawingOrder" (#40859) is included in 0.72.11 and 0.74. But not in 0.73.6 #164

Closed
@jacobmolby

Description

@jacobmolby

Old Version

0.72.11

New Version

0.73.6

Description

I'm not sure this belongs here. If not, feel free to move or close it.

In 0.72.11 #40859 was included. When trying to upgrade to 0.73.6 I started getting crashes.

I investigated and it seems that it hasn't been included in 0.73.6.

But it seems to be included in 0.74.0.

Would it be possible to make a 0.73 release that includes this fix?

Steps to reproduce

  1. Have a FlatList that with custom CellRendererComponent that uses zIndex as well as maintainVisibleContentPosition.
  2. Try to add an element to the data array
  3. See that it crashes on Android (in 0.73.6, but not in 0.72.11)

The reproducer crashes with both expo 49 and 50, since 49 uses RN 0.72.10 and 50 uses 0.73.6

Affected Platforms

Runtime - Android

Output of npx react-native info

System:
  OS: macOS 14.1.2
  CPU: (10) arm64 Apple M2 Pro
  Memory: 105.28 MB / 16.00 GB
  Shell:
    version: 3.6.0
    path: /opt/homebrew/bin/fish
Binaries:
  Node:
    version: 21.1.0
    path: ~/.local/share/nvm/v21.1.0/bin/node
  Yarn: Not Found
  npm:
    version: 10.2.0
    path: ~/.local/share/nvm/v21.1.0/bin/npm
  Watchman: Not Found
Managers:
  CocoaPods:
    version: 1.15.2
    path: /Users/jacobmolby/.rbenv/shims/pod
SDKs:
  iOS SDK:
    Platforms:
      - DriverKit 23.0
      - iOS 17.0
      - macOS 14.0
      - tvOS 17.0
      - watchOS 10.0
  Android SDK: Not Found
IDEs:
  Android Studio: 2023.2 AI-232.10227.8.2321.11479570
  Xcode:
    version: 15.0.1/15A507
    path: /usr/bin/xcodebuild
Languages:
  Java:
    version: 17.0.10
    path: /usr/bin/javac
  Ruby:
    version: 2.7.5
    path: /Users/jacobmolby/.rbenv/shims/ruby
npmPackages:
  "@react-native-community/cli": Not Found
  react:
    installed: 18.2.0
    wanted: 18.2.0
  react-native:
    installed: 0.73.6
    wanted: 0.73.6
  react-native-macos: Not Found
npmGlobalPackages:
  "*react-native*": Not Found
Android:
  hermesEnabled: true
  newArchEnabled: false
iOS:
  hermesEnabled: true
  newArchEnabled: false

Stacktrace or Logs

FATAL EXCEPTION: main
Process: host.exp.exponent, PID: 20107
java.lang.ArrayIndexOutOfBoundsException: length=37; index=37
	at abi49_0_0.com.facebook.react.uimanager.ViewGroupDrawingOrderHelper.getChildDrawingOrder(SourceFile:61)
	at abi49_0_0.com.facebook.react.views.view.ReactViewGroup.getChildDrawingOrder(SourceFile:14)
	at android.view.ViewGroup.getAndVerifyPreorderedIndex(ViewGroup.java:2120)
	at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4530)
	at abi49_0_0.com.facebook.react.views.view.ReactViewGroup.dispatchDraw(SourceFile:4)
	at android.view.View.updateDisplayListIfDirty(View.java:23993)
	at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4760)
	at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4732)
	at android.view.View.updateDisplayListIfDirty(View.java:23953)
	at android.view.View.draw(View.java:24878)
	at android.view.ViewGroup.drawChild(ViewGroup.java:4776)
	at abi49_0_0.com.facebook.react.views.view.ReactViewGroup.drawChild(SourceFile:20)
	at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4534)
	at abi49_0_0.com.facebook.react.views.view.ReactViewGroup.dispatchDraw(SourceFile:4)
	at android.view.View.updateDisplayListIfDirty(View.java:23993)
	at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4760)
	at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4732)
	at android.view.View.updateDisplayListIfDirty(View.java:23953)
	at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4760)
	at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4732)
	at android.view.View.updateDisplayListIfDirty(View.java:23953)
	at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4760)
	at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4732)
	at android.view.View.updateDisplayListIfDirty(View.java:23953)
	at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4760)
	at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4732)
	at android.view.View.updateDisplayListIfDirty(View.java:23953)
	at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4760)
	at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4732)
	at android.view.View.updateDisplayListIfDirty(View.java:23953)
	at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4760)
	at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4732)
	at android.view.View.updateDisplayListIfDirty(View.java:23953)
	at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4760)
	at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4732)
	at android.view.View.updateDisplayListIfDirty(View.java:23953)
	at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4760)
	at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4732)
	at android.view.View.updateDisplayListIfDirty(View.java:23953)
	at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4760)
	at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4732)
	at android.view.View.updateDisplayListIfDirty(View.java:23953)
	at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4760)
	at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4732)
	at android.view.View.updateDisplayListIfDirty(View.java:23953)
	at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:764)
	at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:770)
	at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:868)
	at android.view.ViewRootImpl.draw(ViewRootImpl.java:5945)
	at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:5614)
	at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:4734)
	at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:3239)
	at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:11197)
	at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1650)
	at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1659)
	at android.view.Choreographer.doCallbacks(Choreographer.java:1129)
	at android.view.Choreographer.doFrame(Choreographer.java:1055)
	at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1622)
	at android.os.Handler.handleCallback(Handler.java:958)
	at android.os.Handler.dispatchMessage(Handler.java:99)
	at android.os.Looper.loopOnce(Looper.java:230)
	at android.os.Looper.loop(Looper.java:319)
	at android.app.ActivityThread.main(ActivityThread.java:8893)
	at java.lang.reflect.Method.invoke(Native Method)
	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:608)
	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1103)

Reproducer

https://snack.expo.dev/@jacobmolby/zindex-flatlist-android-crash

Screenshots and Videos

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type Pick RequestPick requests to include commits inside a React Native release

    Type

    No type

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions