summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorJoe Onorato <joeo@android.com>2009-06-26 17:18:01 -0400
committerJoe Onorato <joeo@android.com>2009-06-26 17:18:01 -0400
commit12a4da328a234b171b78cc341544817e9a074057 (patch)
tree706ced47f799ce47486e1ca622e74f112fad8b22 /core
parent8a27f923eb9dbbe3c2d0184e82d9f1a98f1e4cdc (diff)
downloadframeworks_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.cpp12
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));