Fix handling invalid header length am: 6444ca61c2 am: a53702a4d3
Original change: https://android-review.googlesource.com/c/platform/external/obex/+/3152137
Change-Id: I63849bb1338cca2651a8cabdb462deece028d2be
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/src/com/android/obex/ObexHelper.java b/src/com/android/obex/ObexHelper.java
index e00ed75..5b61cd0 100644
--- a/src/com/android/obex/ObexHelper.java
+++ b/src/com/android/obex/ObexHelper.java
@@ -211,12 +211,23 @@
length = ((0xFF & headerArray[index]) << 8) +
(0xFF & headerArray[index + 1]);
index += 2;
- if (length <= OBEX_BYTE_SEQ_HEADER_LEN ||
- length - OBEX_BYTE_SEQ_HEADER_LEN > headerArray.length - index) {
+
+ // An empty Name header
+ if (headerID == HeaderSet.NAME && length == OBEX_BYTE_SEQ_HEADER_LEN) {
+ headerImpl.setEmptyNameHeader();
+ continue;
+ }
+
+ if (length <= OBEX_BYTE_SEQ_HEADER_LEN) {
Log.e(TAG, "Remote sent an OBEX packet with " +
"incorrect header length = " + length);
break;
}
+ if (length - OBEX_BYTE_SEQ_HEADER_LEN > headerArray.length - index) {
+ Log.e(TAG, "Remote sent an OBEX packet with " +
+ "incorrect header length = " + length);
+ throw new IOException("Incorrect header length");
+ }
length -= OBEX_BYTE_SEQ_HEADER_LEN;
value = new byte[length];
System.arraycopy(headerArray, index, value, 0, length);