From 115934e27630cb0b8c45883cc90e33f72f0bf826 Mon Sep 17 00:00:00 2001 From: Xavier Ducrohet <> Date: Sat, 18 Apr 2009 12:15:12 -0700 Subject: 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 --- .../layoutlib/utils/ValueResourceParser.java | 24 ++++++++++++---------- 1 file changed, 13 insertions(+), 11 deletions(-) (limited to 'layoutlib_utils/src/com/android/layoutlib/utils/ValueResourceParser.java') 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 -- cgit v1.1