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

Crash in NoteEditor::addMediaFileToField #17895

Open
4 tasks done
mikehardy opened this issue Jan 29, 2025 · 2 comments
Open
4 tasks done

Crash in NoteEditor::addMediaFileToField #17895

mikehardy opened this issue Jan 29, 2025 · 2 comments
Assignees

Comments

@mikehardy
Copy link
Member

Checked for duplicates?

  • This issue is not a duplicate

Does it also happen in the desktop version?

  • This bug does not occur in the latest version of Anki Desktop

What are the steps to reproduce this bug?

Showing up in ACRA in 2.20.1

https://ankidroid.org/acra/app/1/bug/279480/report/569ac348-3900-4ccc-8cb5-276eac2154e6

java.lang.IndexOutOfBoundsException: Index: 3, Size: 2
	at java.util.LinkedList.checkElementIndex(LinkedList.java:566)
	at java.util.LinkedList.get(LinkedList.java:487)
	at com.ichi2.anki.NoteEditor$addMediaFileToField$1.invokeSuspend(NoteEditor.kt:1879)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:104)
	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:8913)
	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)
	Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [s0{Cancelling}@5d1efd6, Dispatchers.Main.immediate]

Line of code on main is the last line here, it appears that editFields has been mutated sometime between when it was set and when this method was called, but index wasn't re-calculated...

private fun addMediaFileToField(
index: Int,
field: IField,
) {
lifecycleScope.launch {
val note = getCurrentMultimediaEditableNote()
note.setField(index, field)
val fieldEditText = editFields!![index]

Logcat indicates there was lots of change happening in the multimedia edit, follow it carefully when trying to reproduce, listing exact reproduction steps will be helpful prior to starting

01-27 10:58:55.794 I/AnkiDroid(11046): SingleFragmentActivity::i::onAttach
01-27 10:58:55.794 I/AnkiDroid(11046): SingleFragmentActivity::i::onCreate
01-27 10:58:55.818 I/AnkiDroid(11046): SingleFragmentActivity::i::onViewCreated
01-27 10:58:55.832 I/AnkiDroid(11046): SingleFragmentActivity::i::onStart
01-27 10:58:55.833 I/AnkiDroid(11046): SingleFragmentActivity::i::onResume
01-27 10:59:23.460 I/AnkiDroid(11046): SingleFragmentActivity::i::onPause
01-27 10:59:23.460 I/AnkiDroid(11046): SingleFragmentActivity::i::onStop
01-27 10:59:23.460 I/AnkiDroid(11046): SingleFragmentActivity::i::onViewDestroyed
01-27 10:59:23.460 I/AnkiDroid(11046): SingleFragmentActivity::i::onDestroy
01-27 10:59:23.460 I/AnkiDroid(11046): SingleFragmentActivity::i::onDetach
01-27 10:59:24.466 I/AnkiDroid(11046): Adding media to collection: /data/user/0/com.ichi2.anki/cache/17379863644194893776289156105681.jpg
01-27 10:59:25.512 I/AnkiDroid(11046): SingleFragmentActivity::i::onAttach
01-27 10:59:25.513 I/AnkiDroid(11046): SingleFragmentActivity::i::onCreate
01-27 10:59:25.531 I/AnkiDroid(11046): SingleFragmentActivity::i::onViewCreated
01-27 10:59:25.539 I/AnkiDroid(11046): SingleFragmentActivity::i::onStart
01-27 10:59:25.539 I/AnkiDroid(11046): SingleFragmentActivity::i::onResume
01-27 10:59:26.480 I/AnkiDroid(11046): Selected Image option
01-27 10:59:26.505 I/AnkiDroid(11046): Selected Image option
01-27 10:59:26.512 I/AnkiDroid(11046): Selected Image option
01-27 10:59:26.550 I/AnkiDroid(11046): SingleFragmentActivity::onPause
01-27 10:59:26.551 I/AnkiDroid(11046): SingleFragmentActivity::q7::onPause
01-27 10:59:26.552 I/AnkiDroid(11046): SingleFragmentActivity::i::onPause
01-27 10:59:26.553 I/AnkiDroid(11046): SingleFragmentActivity::i::onStop
01-27 10:59:26.553 I/AnkiDroid(11046): SingleFragmentActivity::i::onViewDestroyed
01-27 10:59:26.553 I/AnkiDroid(11046): SingleFragmentActivity::i::onDestroy
01-27 10:59:26.553 I/AnkiDroid(11046): SingleFragmentActivity::i::onDetach
01-27 10:59:26.596 I/AnkiDroid(11046): Setting theme to BLACK
01-27 10:59:26.599 I/AnkiDroid(11046): MultimediaActivity::onCreate
01-27 10:59:26.618 I/AnkiDroid(11046): MultimediaActivity::onStart
01-27 10:59:26.618 I/AnkiDroid(11046): MultimediaActivity::MultimediaImageFragment::onAttach
01-27 10:59:26.619 I/AnkiDroid(11046): MultimediaActivity::MultimediaImageFragment::onCreate
01-27 10:59:26.677 I/AnkiDroid(11046): MultimediaActivity::MultimediaImageFragment::onViewCreated
01-27 10:59:26.678 I/AnkiDroid(11046): MultimediaActivity::MultimediaImageFragment::onStart
01-27 10:59:26.685 I/AnkiDroid(11046): MultimediaActivity::onResume
01-27 10:59:26.686 I/AnkiDroid(11046): MultimediaActivity::MultimediaImageFragment::onResume
01-27 10:59:26.772 I/AnkiDroid(11046): MultimediaActivity::onPause
01-27 10:59:26.772 I/AnkiDroid(11046): MultimediaActivity::MultimediaImageFragment::onPause
01-27 10:59:28.630 I/AnkiDroid(11046): SingleFragmentActivity::onStop
01-27 10:59:28.631 I/AnkiDroid(11046): SingleFragmentActivity::q7::onStop
01-27 10:59:28.634 I/AnkiDroid(11046): SingleFragmentActivity::onSaveInstanceState
01-27 10:59:28.634 I/AnkiDroid(11046): Saving instance
01-27 10:59:28.634 I/AnkiDroid(11046): SingleFragmentActivity::q7::onSaveInstanceState
01-27 10:59:28.667 I/AnkiDroid(11046): NotificationService: OnStartCommand
01-27 10:59:30.253 I/AnkiDroid(11046): MultimediaActivity::onStop
01-27 10:59:30.254 I/AnkiDroid(11046): MultimediaActivity::MultimediaImageFragment::onStop
01-27 10:59:30.256 I/AnkiDroid(11046): MultimediaActivity::onSaveInstanceState
01-27 10:59:30.256 I/AnkiDroid(11046): MultimediaActivity::MultimediaImageFragment::onSaveInstanceState
01-27 10:59:31.812 I/AnkiDroid(11046): MultimediaActivity::onStart
01-27 10:59:31.812 I/AnkiDroid(11046): MultimediaActivity::MultimediaImageFragment::onStart
01-27 10:59:31.906 I/AnkiDroid(11046): MultimediaActivity::onResume
01-27 10:59:31.907 I/AnkiDroid(11046): MultimediaActivity::MultimediaImageFragment::onResume
01-27 10:59:33.337 I/AnkiDroid(11046): finishWithAnimation DEFAULT
01-27 10:59:33.354 I/AnkiDroid(11046): MultimediaActivity::onPause
01-27 10:59:33.354 I/AnkiDroid(11046): MultimediaActivity::MultimediaImageFragment::onPause
01-27 10:59:33.381 I/AnkiDroid(11046): Setting theme to BLACK
01-27 10:59:33.384 I/AnkiDroid(11046): MultimediaActivity::onCreate
01-27 10:59:33.409 I/AnkiDroid(11046): MultimediaActivity::onStart
01-27 10:59:33.410 I/AnkiDroid(11046): MultimediaActivity::MultimediaImageFragment::onAttach
01-27 10:59:33.410 I/AnkiDroid(11046): MultimediaActivity::MultimediaImageFragment::onCreate
01-27 10:59:33.438 I/AnkiDroid(11046): MultimediaActivity::MultimediaImageFragment::onViewCreated
01-27 10:59:33.438 I/AnkiDroid(11046): MultimediaActivity::MultimediaImageFragment::onStart
01-27 10:59:33.442 I/AnkiDroid(11046): MultimediaActivity::onResume
01-27 10:59:33.445 I/AnkiDroid(11046): MultimediaActivity::MultimediaImageFragment::onResume
01-27 10:59:33.508 I/AnkiDroid(11046): MultimediaActivity::onPause
01-27 10:59:33.508 I/AnkiDroid(11046): MultimediaActivity::MultimediaImageFragment::onPause
01-27 10:59:34.010 I/AnkiDroid(11046): MultimediaActivity::onStop
01-27 10:59:34.011 I/AnkiDroid(11046): MultimediaActivity::MultimediaImageFragment::onStop
01-27 10:59:34.013 I/AnkiDroid(11046): MultimediaActivity::onDestroy
01-27 10:59:34.013 I/AnkiDroid(11046): MultimediaActivity::MultimediaImageFragment::onViewDestroyed
01-27 10:59:34.018 I/AnkiDroid(11046): MultimediaActivity::MultimediaImageFragment::onDestroy
01-27 10:59:34.019 I/AnkiDroid(11046): MultimediaActivity::MultimediaImageFragment::onDetach
01-27 10:59:35.739 I/AnkiDroid(11046): finishWithAnimation DEFAULT
01-27 10:59:35.783 I/AnkiDroid(11046): Setting theme to BLACK
01-27 10:59:35.786 I/AnkiDroid(11046): MultimediaActivity::onCreate
01-27 10:59:35.798 I/AnkiDroid(11046): MultimediaActivity::onStart
01-27 10:59:35.798 I/AnkiDroid(11046): MultimediaActivity::MultimediaImageFragment::onAttach
01-27 10:59:35.798 I/AnkiDroid(11046): MultimediaActivity::MultimediaImageFragment::onCreate
01-27 10:59:35.866 I/AnkiDroid(11046): MultimediaActivity::MultimediaImageFragment::onViewCreated
01-27 10:59:35.866 I/AnkiDroid(11046): MultimediaActivity::MultimediaImageFragment::onStart
01-27 10:59:35.870 I/AnkiDroid(11046): MultimediaActivity::onResume
01-27 10:59:35.871 I/AnkiDroid(11046): MultimediaActivity::MultimediaImageFragment::onResume
01-27 10:59:35.933 I/AnkiDroid(11046): MultimediaActivity::onPause
01-27 10:59:35.933 I/AnkiDroid(11046): MultimediaActivity::MultimediaImageFragment::onPause
01-27 10:59:36.537 I/AnkiDroid(11046): MultimediaActivity::onStop
01-27 10:59:36.537 I/AnkiDroid(11046): MultimediaActivity::MultimediaImageFragment::onStop
01-27 10:59:36.541 I/AnkiDroid(11046): MultimediaActivity::onDestroy
01-27 10:59:36.542 I/AnkiDroid(11046): MultimediaActivity::MultimediaImageFragment::onViewDestroyed
01-27 10:59:36.543 I/AnkiDroid(11046): MultimediaActivity::MultimediaImageFragment::onDestroy
01-27 10:59:36.544 I/AnkiDroid(11046): MultimediaActivity::MultimediaImageFragment::onDetach
01-27 10:59:37.616 I/AnkiDroid(11046): MultimediaActivity::onStop
01-27 10:59:37.617 I/AnkiDroid(11046): MultimediaActivity::MultimediaImageFragment::onStop
01-27 10:59:37.618 I/AnkiDroid(11046): MultimediaActivity::onSaveInstanceState
01-27 10:59:37.619 I/AnkiDroid(11046): MultimediaActivity::MultimediaImageFragment::onSaveInstanceState
01-27 10:59:38.749 I/AnkiDroid(11046): MultimediaActivity::onStart
01-27 10:59:38.749 I/AnkiDroid(11046): MultimediaActivity::MultimediaImageFragment::onStart
01-27 10:59:38.818 I/AnkiDroid(11046): MultimediaActivity::onResume
01-27 10:59:38.819 I/AnkiDroid(11046): MultimediaActivity::MultimediaImageFragment::onResume
01-27 10:59:39.730 I/AnkiDroid(11046): finishWithAnimation DEFAULT
01-27 10:59:39.744 I/AnkiDroid(11046): MultimediaActivity::onPause
01-27 10:59:39.744 I/AnkiDroid(11046): MultimediaActivity::MultimediaImageFragment::onPause
01-27 10:59:39.754 I/AnkiDroid(11046): SingleFragmentActivity::onStart
01-27 10:59:39.754 I/AnkiDroid(11046): SingleFragmentActivity::q7::onStart
01-27 10:59:39.765 I/AnkiDroid(11046): SingleFragmentActivity::onResume
01-27 10:59:39.766 I/AnkiDroid(11046): SingleFragmentActivity::i::onAttach
01-27 10:59:39.766 I/AnkiDroid(11046): SingleFragmentActivity::i::onCreate
01-27 10:59:39.778 I/AnkiDroid(11046): SingleFragmentActivity::i::onViewCreated
01-27 10:59:39.790 I/AnkiDroid(11046): SingleFragmentActivity::i::onStart
01-27 10:59:39.791 I/AnkiDroid(11046): SingleFragmentActivity::q7::onResume
01-27 10:59:39.791 I/AnkiDroid(11046): SingleFragmentActivity::i::onResume

Expected behaviour

No crash

Debug info

I don't think it is device dependent, the crash shows up on lots of android versions and devices


ANDROID_VERSION
14
APP_VERSION_CODE
322001300
APP_VERSION_NAME
2.20.1
AVAILABLE_MEM_SIZE
72627994624
BRAND
samsung
BUILD
BOARD
atoll
BOOTLOADER
P619XXS5CXC8
BRAND
samsung
CPU_ABI
arm64-v8a
CPU_ABI2
DEVICE
gta4xlve

(Optional) Anything else you want to share?

No response

Research

  • I have checked the manual and the FAQ and could not find a solution to my issue
  • (Optional) I have confirmed the issue is not resolved in the latest alpha release (instructions)
@mikehardy
Copy link
Member Author

@criticalAY - may be a subtle data structure accounting issue in an area you've handled - likely could use test regression cover

@criticalAY criticalAY self-assigned this Jan 29, 2025
@criticalAY
Copy link
Contributor

@mikehardy I tried going through the logs and repro it but no luck, I will try to inspect the root cause possible

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants