diff --git a/core/java/android/inputmethodservice/RemoteInputConnection.java b/core/java/android/inputmethodservice/RemoteInputConnection.java index 657f8428179f0..ae97fe7df7293 100644 --- a/core/java/android/inputmethodservice/RemoteInputConnection.java +++ b/core/java/android/inputmethodservice/RemoteInputConnection.java @@ -108,7 +108,11 @@ final class RemoteInputConnection implements InputConnection { @Nullable @AnyThread public CharSequence getTextAfterCursor(@IntRange(from = 0) int length, int flags) { - if (length < 0 || mCancellationGroup.isCanceled()) { + if (length < 0) { + // TODO: Should we throw an InvalidParameterException() based on targetSdkVersion? + Log.e(TAG, "length=" + length + " is invalid and always results in null result."); + } + if (mCancellationGroup.isCanceled()) { return null; } @@ -132,7 +136,11 @@ final class RemoteInputConnection implements InputConnection { @Nullable @AnyThread public CharSequence getTextBeforeCursor(@IntRange(from = 0) int length, int flags) { - if (length < 0 || mCancellationGroup.isCanceled()) { + if (length < 0) { + // TODO: Should we throw an InvalidParameterException() based on targetSdkVersion? + Log.e(TAG, "length=" + length + " is invalid and always results in null result."); + } + if (mCancellationGroup.isCanceled()) { return null; } @@ -185,7 +193,17 @@ final class RemoteInputConnection implements InputConnection { @AnyThread public SurroundingText getSurroundingText( @IntRange(from = 0) int beforeLength, @IntRange(from = 0) int afterLength, int flags) { - if (beforeLength < 0 || afterLength < 0 || mCancellationGroup.isCanceled()) { + if (beforeLength < 0) { + // TODO: Should we throw an InvalidParameterException() based on targetSdkVersion? + Log.e(TAG, "beforeLength=" + beforeLength + + " is invalid and always results in null result."); + } + if (afterLength < 0) { + // TODO: Should we throw an InvalidParameterException() based on targetSdkVersion? + Log.e(TAG, "afterLength=" + afterLength + + " is invalid and always results in null result."); + } + if (mCancellationGroup.isCanceled()) { return null; } diff --git a/core/java/com/android/internal/inputmethod/RemoteInputConnectionImpl.java b/core/java/com/android/internal/inputmethod/RemoteInputConnectionImpl.java index 29c1b1b2b604e..7a668fb74cb76 100644 --- a/core/java/com/android/internal/inputmethod/RemoteInputConnectionImpl.java +++ b/core/java/com/android/internal/inputmethod/RemoteInputConnectionImpl.java @@ -233,6 +233,11 @@ public final class RemoteInputConnectionImpl extends IInputContext.Stub { Log.w(TAG, "getTextAfterCursor on inactive InputConnection"); return null; } + if (length < 0) { + Log.i(TAG, "Returning null to getTextAfterCursor due to an invalid length=" + + length); + return null; + } return ic.getTextAfterCursor(length, flags); }, useImeTracing() ? result -> buildGetTextAfterCursorProto(length, flags, result) : null); } @@ -246,6 +251,11 @@ public final class RemoteInputConnectionImpl extends IInputContext.Stub { Log.w(TAG, "getTextBeforeCursor on inactive InputConnection"); return null; } + if (length < 0) { + Log.i(TAG, "Returning null to getTextBeforeCursor due to an invalid length=" + + length); + return null; + } return ic.getTextBeforeCursor(length, flags); }, useImeTracing() ? result -> buildGetTextBeforeCursorProto(length, flags, result) : null); } @@ -276,6 +286,16 @@ public final class RemoteInputConnectionImpl extends IInputContext.Stub { Log.w(TAG, "getSurroundingText on inactive InputConnection"); return null; } + if (beforeLength < 0) { + Log.i(TAG, "Returning null to getSurroundingText due to an invalid" + + " beforeLength=" + beforeLength); + return null; + } + if (afterLength < 0) { + Log.i(TAG, "Returning null to getSurroundingText due to an invalid" + + " afterLength=" + afterLength); + return null; + } return ic.getSurroundingText(beforeLength, afterLength, flags); }, useImeTracing() ? result -> buildGetSurroundingTextProto( beforeLength, afterLength, flags, result) : null);