diff options
author | Joe Onorato <joeo@android.com> | 2009-06-26 17:18:01 -0400 |
---|---|---|
committer | Joe Onorato <joeo@android.com> | 2009-06-26 17:18:01 -0400 |
commit | 12a4da328a234b171b78cc341544817e9a074057 (patch) | |
tree | 706ced47f799ce47486e1ca622e74f112fad8b22 /core | |
parent | 8a27f923eb9dbbe3c2d0184e82d9f1a98f1e4cdc (diff) | |
download | frameworks_base-12a4da328a234b171b78cc341544817e9a074057.zip frameworks_base-12a4da328a234b171b78cc341544817e9a074057.tar.gz frameworks_base-12a4da328a234b171b78cc341544817e9a074057.tar.bz2 |
Add an extra null terminator. String8::unlockBuffer is
supposed to be doing this, but it's not and I can't
figure out why. This makes BackupHelperDispatcher able
to read the keys correctly.
Also, we weren't writing the data size.
Diffstat (limited to 'core')
-rw-r--r-- | core/jni/android_backup_BackupHelperDispatcher.cpp | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/core/jni/android_backup_BackupHelperDispatcher.cpp b/core/jni/android_backup_BackupHelperDispatcher.cpp index 24d529b..2e3f0b9 100644 --- a/core/jni/android_backup_BackupHelperDispatcher.cpp +++ b/core/jni/android_backup_BackupHelperDispatcher.cpp @@ -87,6 +87,14 @@ readHeader_native(JNIEnv* env, jobject clazz, jobject headerObj, jobject fdObj) } } +#if 0 + LOGD("chunk header:"); + LOGD(" headerSize=%d", flattenedHeader.headerSize); + LOGD(" version=0x%08x", flattenedHeader.version); + LOGD(" dataSize=%d", flattenedHeader.dataSize); + LOGD(" nameLength=%d", flattenedHeader.nameLength); +#endif + if (flattenedHeader.dataSize < 0 || flattenedHeader.nameLength < 0 || remainingHeader < flattenedHeader.nameLength) { LOGW("Malformed V1 header remainingHeader=%d dataSize=%d nameLength=%d", remainingHeader, @@ -101,13 +109,12 @@ readHeader_native(JNIEnv* env, jobject clazz, jobject headerObj, jobject fdObj) } amt = read(fd, buf, flattenedHeader.nameLength); + buf[flattenedHeader.nameLength] = 0; keyPrefix.unlockBuffer(flattenedHeader.nameLength); remainingHeader -= flattenedHeader.nameLength; - LOGD("remainingHeader=%d", remainingHeader); - if (remainingHeader > 0) { lseek(fd, remainingHeader, SEEK_CUR); } @@ -183,6 +190,7 @@ writeHeader_native(JNIEnv* env, jobject clazz, jobject headerObj, jobject fdObj, header.headerSize = sizeof(chunk_header_v1) + header.nameLength + namePadding; header.version = VERSION_1_HEADER; + header.dataSize = prevPos - (pos + header.headerSize); lseek(fd, pos, SEEK_SET); err = write(fd, &header, sizeof(chunk_header_v1)); |