diff --git a/core/java/android/inputmethodservice/RemoteInputConnection.java b/core/java/android/inputmethodservice/RemoteInputConnection.java
index 657f842..ae97fe7 100644
--- a/core/java/android/inputmethodservice/RemoteInputConnection.java
+++ b/core/java/android/inputmethodservice/RemoteInputConnection.java
@@ -108,7 +108,11 @@
     @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 @@
     @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 @@
     @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 29c1b1b..7a668fb 100644
--- a/core/java/com/android/internal/inputmethod/RemoteInputConnectionImpl.java
+++ b/core/java/com/android/internal/inputmethod/RemoteInputConnectionImpl.java
@@ -233,6 +233,11 @@
                 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 @@
                 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 @@
                 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);
