diff options
| author | Xavier Ducrohet <> | 2009-04-18 12:15:12 -0700 |
|---|---|---|
| committer | The Android Open Source Project <initial-contribution@android.com> | 2009-04-18 12:15:12 -0700 |
| commit | 115934e27630cb0b8c45883cc90e33f72f0bf826 (patch) | |
| tree | 64942f51a6e149489481ddffdd85c5d5402b84ad | |
| parent | 4bbe1419ec230d072150a7fa147fe15042453030 (diff) | |
| download | sdk-115934e27630cb0b8c45883cc90e33f72f0bf826.zip sdk-115934e27630cb0b8c45883cc90e33f72f0bf826.tar.gz sdk-115934e27630cb0b8c45883cc90e33f72f0bf826.tar.bz2 | |
AI 146808: am: CL 146806 Make sure we check buffer length when removing escaped chars (like unicode) when parsing Value XML files.
Original author: xav
Merged from: //branches/cupcake/...
Automated import of CL 146808
| -rw-r--r-- | layoutlib_utils/src/com/android/layoutlib/utils/ValueResourceParser.java | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/layoutlib_utils/src/com/android/layoutlib/utils/ValueResourceParser.java b/layoutlib_utils/src/com/android/layoutlib/utils/ValueResourceParser.java index 8b768ef..4682d90 100644 --- a/layoutlib_utils/src/com/android/layoutlib/utils/ValueResourceParser.java +++ b/layoutlib_utils/src/com/android/layoutlib/utils/ValueResourceParser.java @@ -194,19 +194,21 @@ public final class ValueResourceParser extends DefaultHandler { char[] buffer = value.toCharArray(); for (int i = 0 ; i < length ; i++) { - if (buffer[i] == '\\') { + if (buffer[i] == '\\' && i + 1 < length) { if (buffer[i+1] == 'u') { - // this is unicode char. - int unicodeChar = Integer.parseInt(new String(buffer, i+2, 4), 16); - - // put the unicode char at the location of the \ - buffer[i] = (char)unicodeChar; - - // offset the rest of the buffer since we go from 6 to 1 char - if (i + 6 < buffer.length) { - System.arraycopy(buffer, i+6, buffer, i+1, length - i - 6); + if (i + 5 < length) { + // this is unicode char \u1234 + int unicodeChar = Integer.parseInt(new String(buffer, i+2, 4), 16); + + // put the unicode char at the location of the \ + buffer[i] = (char)unicodeChar; + + // offset the rest of the buffer since we go from 6 to 1 char + if (i + 6 < buffer.length) { + System.arraycopy(buffer, i+6, buffer, i+1, length - i - 6); + } + length -= 5; } - length -= 5; } else { if (buffer[i+1] == 'n') { // replace the 'n' char with \n |
