dotnet / dotnet/maui

end should be < than charSequence length

Open
#32,004 3 comments 2 reactions 1 assignee Assigned to @Copilot View on GitHub
area-controls-entry platform/android s/triaged s/verified t/bug
Dominant language
C#
Stars
23.3k
Forks
2k
Avg merge
1d 10h
Merged PRs (30d)
297

Description

### Description

I am getting a crash when using `TextChanged` on a `Entry` modifying the value.

### Steps to Reproduce

1. Create a new .net Maui App
2. Add to the MainPage.xaml
```

```

3. Add to the code behind
```
private void Quantity_TextChanged(object sender, TextChangedEventArgs e)
{
if (string.IsNullOrEmpty(e.NewTextValue))
{
((Entry)sender).Text = "0";
}
}
```

4. Run app
5. Delete the contents of the entry box
6. Fatal error

### Link to public reproduction project repository

https://github.com/jdarwood007/MauiApp9

### Version with bug

9.0.110 SR11

### Is this a regression from previous behavior?

Not sure, did not test other versions

### Last version that worked well

Unknown/Other

### Affected platforms

Android

### Affected platform versions

Android 14

### Did you find any workaround?

The problem seems to be entirely calling this:
```
((Entry)sender).Text = "0";
```

### Relevant log output

```shell
[MessageQueue-JNI] Exception in MessageQueue callback: handleReceiveCallback

[MessageQueue-JNI] java.lang.IllegalArgumentException: end should be < than charSequence length

[MessageQueue-JNI] at androidx.core.util.Preconditions.checkArgument(Preconditions.java:52)

[MessageQueue-JNI] at androidx.emoji2.text.EmojiCompat.process(EmojiCompat.java:1127)

[MessageQueue-JNI] at androidx.emoji2.viewsintegration.EmojiTextWatcher.afterTextChanged(EmojiTextWatcher.java:99)

[MessageQueue-JNI] at android.widget.TextView.sendAfterTextChanged(TextView.java:12365)

[MessageQueue-JNI] at android.widget.TextView$ChangeWatcher.afterTextChanged(TextView.java:15851)

[MessageQueue-JNI] at android.text.SpannableStringBuilder.sendAfterTextChanged(SpannableStringBuilder.java:1278)

[MessageQueue-JNI] at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:578)

[MessageQueue-JNI] at androidx.emoji2.text.SpannableBuilder.replace(SpannableBuilder.java:308)

[MessageQueue-JNI] at android.text.SpannableStringBuilder.delete(SpannableStringBuilder.java:231)

[MessageQueue-JNI] at androidx.emoji2.text.SpannableBuilder.delete(SpannableBuilder.java:330)

[MessageQueue-JNI] at androidx.emoji2.text.SpannableBuilder.delete(SpannableBuilder.java:48)

[MessageQueue-JNI] at android.text.method.BaseKeyListener.backspaceOrForwardDelete(BaseKeyListener.java:372)

[MessageQueue-JNI] at android.text.method.BaseKeyListener.backspace(BaseKeyListener.java:71)

[MessageQueue-JNI] at android.text.method.BaseKeyListener.onKeyDown(BaseKeyListener.java:498)

[MessageQueue-JNI] at android.text.method.NumberKeyListener.onKeyDown(NumberKeyListener.java:146)

[MessageQueue-JNI] at android.widget.TextView.doKeyDown(TextView.java:9511)

[MessageQueue-JNI] at android.widget.TextView.onKeyDown(TextView.java:9283)

[MessageQueue-JNI] at android.view.KeyEvent.dispatch(KeyEvent.java:2928)

[MessageQueue-JNI] at android.view.View.dispatchKeyEvent(View.java:15591)

[MessageQueue-JNI] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)

[MessageQueue-JNI] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)

[MessageQueue-JNI] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)

[MessageQueue-JNI] at androidx.core.widget.NestedScrollView.dispatchKeyEvent(NestedScrollView.java:688)

[MessageQueue-JNI] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)

[MessageQueue-JNI] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)

[MessageQueue-JNI] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)

[MessageQueue-JNI] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)

[MessageQueue-JNI] at androidx.recyclerview.widget.RecyclerView.dispatchKeyEvent(RecyclerView.java:1981)

[MessageQueue-JNI] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)

[MessageQueue-JNI] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)

[MessageQueue-JNI] at androidx.coordinatorlayout.widget.CoordinatorLayout.dispatchKeyEvent(CoordinatorLayout.java:1946)

[MessageQueue-JNI] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)

[MessageQueue-JNI] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)

[MessageQueue-JNI] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)

[MessageQueue-JNI] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)

[MessageQueue-JNI] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)

[MessageQueue-JNI] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)

[MessageQueue-JNI] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)

[MessageQueue-JNI] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)

[MessageQueue-JNI] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)

[MessageQueue-JNI] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)

[MessageQueue-JNI] at com.android.internal.policy.DecorView.superDispatchKeyEvent(DecorView.java:478)

[MessageQueue-JNI] at com.android.internal.policy.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1894)

[MessageQueue-JNI] at android.app.Activity.dispatchKeyEvent(Activity.java:4335)

[MessageQueue-JNI] at androidx.core.app.ComponentActivity.superDispatchKeyEvent(ComponentActivity.kt:96)

[MessageQueue-JNI] at androidx.core.view.KeyEventDispatcher.dispatchKeyEvent(KeyEventDispatcher.java:86)

[MessageQueue-JNI] at androidx.core.app.ComponentActivity.dispatchKeyEvent(ComponentActivity.kt:110)

[MessageQueue-JNI] at androidx.appcompat.app.AppCompatActivity.dispatchKeyEvent(AppCompatActivity.java:604)

[MessageQueue-JNI] at androidx.appcompat.view.WindowCallbackWrapper.dispatchKeyEvent(WindowCallbackWrapper.java:59)

[MessageQueue-JNI] at androidx.appcompat.app.AppCompatDelegateImpl$AppCompatWindowCallback.dispatchKeyEvent(AppCompatDelegateImpl.java:3397)

[MessageQueue-JNI] at com.android.internal.policy.DecorView.dispatchKeyEvent(DecorView.java:392)

[MessageQueue-JNI] at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:6945)

[MessageQueue-JNI] at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:6811)

[MessageQueue-JNI] at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:6229)

[MessageQueue-JNI] at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:6286)

[MessageQueue-JNI] at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:6252)

[MessageQueue-JNI] at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:6417)

[MessageQueue-JNI] at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:6260)

[MessageQueue-JNI] at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:6474)

[MessageQueue-JNI] at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:6233)

[MessageQueue-JNI] at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:6286)

[MessageQueue-JNI] at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:6252)

[MessageQueue-JNI] at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:6260)

[MessageQueue-JNI] at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:6233)

[MessageQueue-JNI] at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:6286)

[MessageQueue-JNI] at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:6252)

[MessageQueue-JNI] at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:6450)

[MessageQueue-JNI] at android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent(ViewRootImpl.java:6661)

[MessageQueue-JNI] at android.view.inputmethod.InputMethodManager$PendingEvent.run(InputMethodManager.java:4278)

[MessageQueue-JNI] at android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:3715)

[MessageQueue-JNI] at android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.java:3706)

[MessageQueue-JNI] at android.view.inputmethod.InputMethodManager.-$$Nest$mfinishedInputEvent(Unknown Source:0)

[MessageQueue-JNI] at android.view.inputmethod.InputMethodManager$ImeInputEventSender.onInputEventFinished(InputMethodManager.java:4255)

[MessageQueue-JNI] at android.view.InputEventSender.dispatchInputEventFinished(InputEventSender.java:154)

[MessageQueue-JNI] at android.os.MessageQueue.nativePollOnce(Native Method)

[MessageQueue-JNI] at android.os.MessageQueue.next(MessageQueue.java:335)

[MessageQueue-JNI] at android.os.Looper.loopOnce(Looper.java:162)

[MessageQueue-JNI] at android.os.Looper.loop(Looper.java:294)

[MessageQueue-JNI] at android.app.ActivityThread.main(ActivityThread.java:8177)

[MessageQueue-JNI] at java.lang.reflect.Method.invoke(Native Method)

[MessageQueue-JNI] at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:552)

[MessageQueue-JNI] at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:971)

[AndroidRuntime] Shutting down VM

[AndroidRuntime] FATAL EXCEPTION: main

[AndroidRuntime] Process: com.companyname.mauiapp9, PID: 8438

[AndroidRuntime] java.lang.IllegalArgumentException: end should be < than charSequence length

[AndroidRuntime] at androidx.core.util.Preconditions.checkArgument(Preconditions.java:52)

[AndroidRuntime] at androidx.emoji2.text.EmojiCompat.process(EmojiCompat.java:1127)

[AndroidRuntime] at androidx.emoji2.viewsintegration.EmojiTextWatcher.afterTextChanged(EmojiTextWatcher.java:99)

[AndroidRuntime] at android.widget.TextView.sendAfterTextChanged(TextView.java:12365)

[AndroidRuntime] at android.widget.TextView$ChangeWatcher.afterTextChanged(TextView.java:15851)

[AndroidRuntime] at android.text.SpannableStringBuilder.sendAfterTextChanged(SpannableStringBuilder.java:1278)

[AndroidRuntime] at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:578)

[AndroidRuntime] at androidx.emoji2.text.SpannableBuilder.replace(SpannableBuilder.java:308)

[AndroidRuntime] at android.text.SpannableStringBuilder.delete(SpannableStringBuilder.java:231)

[AndroidRuntime] at androidx.emoji2.text.SpannableBuilder.delete(SpannableBuilder.java:330)

[AndroidRuntime] at androidx.emoji2.text.SpannableBuilder.delete(SpannableBuilder.java:48)

[AndroidRuntime] at android.text.method.BaseKeyListener.backspaceOrForwardDelete(BaseKeyListener.java:372)

[AndroidRuntime] at android.text.method.BaseKeyListener.backspace(BaseKeyListener.java:71)

[AndroidRuntime] at android.text.method.BaseKeyListener.onKeyDown(BaseKeyListener.java:498)

[AndroidRuntime] at android.text.method.NumberKeyListener.onKeyDown(NumberKeyListener.java:146)

[AndroidRuntime] at android.widget.TextView.doKeyDown(TextView.java:9511)

[AndroidRuntime] at android.widget.TextView.onKeyDown(TextView.java:9283)

[AndroidRuntime] at android.view.KeyEvent.dispatch(KeyEvent.java:2928)

[AndroidRuntime] at android.view.View.dispatchKeyEvent(View.java:15591)

[AndroidRuntime] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)

[AndroidRuntime] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)

[AndroidRuntime] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)

[AndroidRuntime] at androidx.core.widget.NestedScrollView.dispatchKeyEvent(NestedScrollView.java:688)

[AndroidRuntime] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)

[AndroidRuntime] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)

[AndroidRuntime] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)

[AndroidRuntime] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)

[AndroidRuntime] at androidx.recyclerview.widget.RecyclerView.dispatchKeyEvent(RecyclerView.java:1981)

[AndroidRuntime] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)

[AndroidRuntime] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)

[AndroidRuntime] at androidx.coordinatorlayout.widget.CoordinatorLayout.dispatchKeyEvent(CoordinatorLayout.java:1946)

[AndroidRuntime] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)

[AndroidRuntime] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)

[AndroidRuntime] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)

[AndroidRuntime] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)

[AndroidRuntime] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)

[AndroidRuntime] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)

[AndroidRuntime] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)

[AndroidRuntime] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)

[AndroidRuntime] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)

[AndroidRuntime] at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1966)

[AndroidRuntime] at com.android.internal.policy.DecorView.superDispatchKeyEvent(DecorView.java:478)

[AndroidRuntime] at com.android.internal.policy.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1894)

[AndroidRuntime] at android.app.Activity.dispatchKeyEvent(Activity.java:4335)

[AndroidRuntime] at androidx.core.app.ComponentActivity.superDispatchKeyEvent(ComponentActivity.kt:96)

[AndroidRuntime] at androidx.core.view.KeyEventDispatcher.dispatchKeyEvent(KeyEventDispatcher.java:86)

[AndroidRuntime] at androidx.core.app.ComponentActivity.dispatchKeyEvent(ComponentActivity.kt:110)

[AndroidRuntime] at androidx.appcompat.app.AppCompatActivity.dispatchKeyEvent(AppCompatActivity.java:604)

[AndroidRuntime] at androidx.appcompat.view.WindowCallbackWrapper.dispatchKeyEvent(WindowCallbackWrapper.java:59)

[AndroidRuntime] at androidx.appcompat.app.AppCompatDelegateImpl$AppCompatWindowCallback.dispatchKeyEvent(AppCompatDelegateImpl.java:3397)

[AndroidRuntime] at com.android.internal.policy.DecorView.dispatchKeyEvent(DecorView.java:392)

[AndroidRuntime] at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:6945)

[AndroidRuntime] at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:6811)

[AndroidRuntime] at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:6229)

[AndroidRuntime] at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:6286)

[AndroidRuntime] at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:6252)

[AndroidRuntime] at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:6417)

[AndroidRuntime] at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:6260)

[AndroidRuntime] at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:6474)

[AndroidRuntime] at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:6233)

[AndroidRuntime] at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:6286)

[AndroidRuntime] at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:6252)

[AndroidRuntime] at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:6260)

[AndroidRuntime] at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:6233)

[AndroidRuntime] at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:6286)

[AndroidRuntime] at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:6252)

[AndroidRuntime] at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:6450)

[AndroidRuntime] at android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent(ViewRootImpl.java:6661)

[AndroidRuntime] at android.view.inputmethod.InputMethodManager$PendingEvent.run(InputMethodManager.java:4278)

[AndroidRuntime] at android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:3715)

[AndroidRuntime] at android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.java:3706)

[AndroidRuntime] at android.view.inputmethod.InputMethodManager.-$$Nest$mfinishedInputEvent(Unknown Source:0)

[AndroidRuntime] at android.view.inputmethod.InputMethodManager$ImeInputEventSender.onInputEventFinished(InputMethodManager.java:4255)

[AndroidRuntime] at android.view.InputEventSender.dispatchInputEventFinished(InputEventSender.java:154)

[AndroidRuntime] at android.os.MessageQueue.nativePollOnce(Native Method)

[AndroidRuntime] at android.os.MessageQueue.next(MessageQueue.java:335)

[AndroidRuntime] at android.os.Looper.loopOnce(Looper.java:162)

[AndroidRuntime] at android.os.Looper.loop(Looper.java:294)

[AndroidRuntime] at android.app.ActivityThread.main(ActivityThread.java:8177)

[AndroidRuntime] at java.lang.reflect.Method.invoke(Native Method)

[AndroidRuntime] at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:552)

[AndroidRuntime] at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:971)
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.