diff options
Diffstat (limited to 'layoutlib_utils/src/com/android/layoutlib/utils/ValueResourceParser.java')
| -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 |
