Merge "Fix embedded spaces in tar stream EVEN HARDER"
This commit is contained in:
committed by
Android (Google) Code Review
commit
ba4b2faa09
@@ -503,10 +503,10 @@ int write_tarfile(const String8& packageName, const String8& domain,
|
||||
needExtended = true;
|
||||
}
|
||||
|
||||
// Non-7bit-clean path or embedded spaces also mean needing pax extended format
|
||||
// Non-7bit-clean path also means needing pax extended format
|
||||
if (!needExtended) {
|
||||
for (size_t i = 0; i < filepath.length(); i++) {
|
||||
if ((filepath[i] & 0x80) != 0 || filepath[i] == ' ') {
|
||||
if ((filepath[i] & 0x80) != 0) {
|
||||
needExtended = true;
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -2859,6 +2859,7 @@ class BackupManagerService extends IBackupManager.Stub {
|
||||
final int end = offset + maxChars;
|
||||
for (int i = offset; i < end; i++) {
|
||||
final byte b = data[i];
|
||||
// Numeric fields in tar can terminate with either NUL or SPC
|
||||
if (b == 0 || b == ' ') break;
|
||||
if (b < '0' || b > ('0' + radix - 1)) {
|
||||
throw new IOException("Invalid number in header");
|
||||
@@ -2871,8 +2872,8 @@ class BackupManagerService extends IBackupManager.Stub {
|
||||
String extractString(byte[] data, int offset, int maxChars) throws IOException {
|
||||
final int end = offset + maxChars;
|
||||
int eos = offset;
|
||||
// tar string fields can end with either NUL or SPC
|
||||
while (eos < end && data[eos] != 0 && data[eos] != ' ') eos++;
|
||||
// tar string fields terminate early with a NUL
|
||||
while (eos < end && data[eos] != 0) eos++;
|
||||
return new String(data, offset, eos-offset, "US-ASCII");
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user