Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix iOS text selection crash by returning nil range #55909

Conversation

importRyan
Copy link

@importRyan importRyan commented Oct 16, 2024

Reverts a runtime crashing assertion introduced by #16496. Defensively favors returning a nil text selection range rather than crash. See issue #138464 for crash reports and reproduction recordings.

Without this revert, to avoid a crash hit in a minority of user interactions with a text field, we must degrade experiences for all users by disabling useful iOS text field behaviors (see #138464 for workarounds).

Pre-launch Checklist

  • I read the Contributor Guide and followed the process outlined there for submitting PRs.
  • I read the Tree Hygiene wiki page, which explains my responsibilities.
  • I read and followed the Flutter Style Guide and the C++, Objective-C, Java style guides.
  • I listed at least one issue that this PR fixes in the description above.
  • I added new tests to check the change I am making or feature I am adding, or the PR is test-exempt. See testing the engine for instructions on writing and running engine tests.
  • I updated/added relevant documentation (doc comments with ///).
  • I signed the CLA.
  • All existing and new tests are passing.

If you need help, consider asking for advice on the #hackers-new channel on Discord.

Fix iOS text selection crash by returning nil range

@importRyan importRyan marked this pull request as ready for review October 16, 2024 21:06
@chinmaygarde
Copy link
Member

cc @justinmc

@importRyan
Copy link
Author

@chinmaygarde Thanks for that bump. Is there a chance at getting this in the review queue soon?

This assertion is one of our most common crashes. Simply deselecting the text on some touches (this PR) is preferable to tossing the whole app session out.

If there's desire to fix the upstream range finding, that makes sense, but we'd love to save that for focused follow-on where there's a test battery.

@jmagman
Copy link
Member

jmagman commented Oct 28, 2024

@hellohuanlin can you take a look? My concern is that this regresses #16496 and b/149077991, in which case we need a different solution.
flutter/flutter#138464 (comment)

@jmagman jmagman requested a review from hellohuanlin October 28, 2024 19:58
@importRyan
Copy link
Author

Honest question: is a regression possible?

Sessions that currently crash will simply now continue, allowing VO/non-VO users to retry input strategies. #16496 stopped a crash when using VoiceOver in a provided sample app. That sample does not crash now.

Thanks for analyzing this and getting it in the queue!

Copy link
Contributor

@hellohuanlin hellohuanlin left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Honest question: is a regression possible?

Should be safe since it's removing NSAssert

@jmagman
Copy link
Member

jmagman commented Nov 4, 2024

Should be safe since it's removing NSAssert

@hellohuanlin NSAsserts are on in release mode in Flutter flutter/flutter#157837 (cbracken mentioned he wanted to fix that)

@jmagman
Copy link
Member

jmagman commented Nov 4, 2024

Formatting issue
https://logs.chromium.org/logs/flutter/buildbucket/cr-buildbucket/8732309981621212289/+/u/test:_test:_Check_formatting/stdout

@jmagman jmagman requested a review from cbracken November 6, 2024 22:09
@chinmaygarde
Copy link
Member

@cbracken @jmagman Are we still making progress on this one?

@chinmaygarde chinmaygarde added the Work in progress (WIP) Not ready (yet) for review! label Dec 9, 2024
@gvozditskiy
Copy link

Any progress with this one? Customers aren't very happy with crashes

@importRyan importRyan force-pushed the fix/text-selection-not-found-crashing-assertion branch from 275c59f to a3d596a Compare December 19, 2024 01:08
@importRyan
Copy link
Author

CI failure is only on mac_android_aot_engine. I don't get a retry option, so I'll push a commit to trigger again.

@importRyan
Copy link
Author

Who else would need to approve? Like @gvozditskiy, we'd love to get this crash silenced.

@hellohuanlin
Copy link
Contributor

We just need one more approval thanks. @chunhtai @LongCatIsLooong @cbracken

@jmagman jmagman added the autosubmit Merge PR when tree becomes green via auto submit App label Jan 10, 2025
Copy link
Contributor

auto-submit bot commented Jan 10, 2025

auto label is removed for flutter/engine/55909, Failed to merge flutter/engine/55909 with Pull request flutter/engine/55909 could not be merged: You're not authorized to push to this branch. Visit https://docs.github.com/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/about-protected-branches for more information..

@auto-submit auto-submit bot removed the autosubmit Merge PR when tree becomes green via auto submit App label Jan 10, 2025
@jmagman
Copy link
Member

jmagman commented Jan 10, 2025

Ah of course, this change needs to be recreated in https://github.com/flutter/flutter/tree/master/engine post-monorepo (this entire repository was moved to that subdirectory).

You can check out https://github.com/flutter/flutter/ and then cd engine/src/flutter. On this branch run git diff main | pbcopy and then in flutter/flutter run pbpaste | patch -p1, then recreate the PR. We'll approve it ASAP given this is already reviewed.

I am also happy to do this, but you'll lose the authorship.

@jtmcdole
Copy link
Contributor

Monorepo Migration Completed

TL;DR: Please migrate your PR to flutter/flutter

The flutter/engine repository has been migrated to the flutter/flutter repository. This PR will no longer be landed here and must be migrated. To migrate your PR to the flutter repository, please follow these steps:

  1. Create a patch for this PR:

    • Generate a patch set that represents the changes in this PR. The exact method will vary depending on your PR's history. If your PR includes merges, it is highly recommended that you rebase it onto main first.
    git format-patch $START_COMMIT..$END_COMMIT --stdout > combined_patch.patch
  2. Update the patch for the new engine location:

    • The engine source code now resides in the engine/ subdirectory within the flutter/flutter repository. You'll need to update the file paths in your patch accordingly.
    # Insert the `engine/` prefix to all paths. Note that this usage works on macOS and
    # linux versions of sed.
    sed -i.bak \
    -e 's|^\(diff --git a/\)\(.*\) b/\(.*\)|\1engine/\2 b/engine/src/flutter/\3|' \
    -e 's|^\(--- a/\)\(.*\)|\1engine/src/flutter/\2|' \
    -e 's|^\(\+\+\+ b/\)\(.*\)|\1engine/src/flutter/\2|' \
    combined_patch.patch
  3. Checkout and set up your Flutter development environment:

  4. Set up the engine development environment within the monorepo:

  5. Apply the patch to a new branch:

    • Create a new branch in your flutter/flutter repository.
    • Apply the updated patch to this branch:
    git apply combined_patch.patch
  6. Open a new PR:

    • Open a new PR in the flutter/flutter repository with your changes.
    • Reference this original PR in the new PR's description using flutter/engine#<PR_NUMBER>.

This is a canned message

@jtmcdole jtmcdole closed this Jan 14, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
platform-ios Work in progress (WIP) Not ready (yet) for review!
Projects
None yet
Development

Successfully merging this pull request may close these issues.

9 participants