diff options
author | Martijn Coenen <maco@google.com> | 2011-06-01 09:51:15 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2011-06-01 09:51:15 -0700 |
commit | ed1c8d7dc09996351db711be7d2acf0ff4715c2d (patch) | |
tree | 7476b4fb8989ec6026f0f189767c2579a98b2c36 /core/jni | |
parent | c8410017502dacff43ecd3e0926049b99fc186a8 (diff) | |
parent | 0aa1017f9183bca752c95af72f73120e102ab2d3 (diff) | |
download | frameworks_base-ed1c8d7dc09996351db711be7d2acf0ff4715c2d.zip frameworks_base-ed1c8d7dc09996351db711be7d2acf0ff4715c2d.tar.gz frameworks_base-ed1c8d7dc09996351db711be7d2acf0ff4715c2d.tar.bz2 |
am 0aa1017f: Prevent allocation overflows by corrupt NDEF records.
* commit '0aa1017f9183bca752c95af72f73120e102ab2d3':
Prevent allocation overflows by corrupt NDEF records.
Diffstat (limited to 'core/jni')
-rw-r--r-- | core/jni/android_nfc_NdefMessage.cpp | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/core/jni/android_nfc_NdefMessage.cpp b/core/jni/android_nfc_NdefMessage.cpp index 9beef2a..aff8aa6 100644 --- a/core/jni/android_nfc_NdefMessage.cpp +++ b/core/jni/android_nfc_NdefMessage.cpp @@ -102,6 +102,19 @@ static jint android_nfc_NdefMessage_parseNdefMessage(JNIEnv *e, jobject o, } TRACE("phFriNfc_NdefRecord_Parse() returned 0x%04x", status); + // We don't exactly know what *is* a valid length, but a simple + // sanity check is to make sure that the length of the header + // plus all fields does not exceed raw_msg_size. The min length + // of the header is 3 bytes: TNF, Type Length, Payload Length + // (ID length field is optional!) + uint64_t indicatedMsgLength = 3 + record.TypeLength + record.IdLength + + (uint64_t)record.PayloadLength; + if (indicatedMsgLength > + (uint64_t)raw_msg_size) { + LOGE("phFri_NdefRecord_Parse: invalid length field"); + goto end; + } + type = e->NewByteArray(record.TypeLength); if (type == NULL) { LOGD("NFC_Set Record Type Error\n"); |