diff --git a/graphics/java/android/graphics/FontListParser.java b/graphics/java/android/graphics/FontListParser.java index 069f81b75b323..9490436d4f046 100644 --- a/graphics/java/android/graphics/FontListParser.java +++ b/graphics/java/android/graphics/FontListParser.java @@ -155,7 +155,7 @@ public class FontListParser { @VisibleForTesting public static int makeTag(char c1, char c2, char c3, char c4) { - return (c1 << 24) + (c2 << 16) + (c3 << 8) + c4; + return (c1 << 24) | (c2 << 16) | (c3 << 8) | c4; } private static boolean isSpacer(char c) { @@ -228,8 +228,10 @@ public class FontListParser { return new Font(fullFilename, index, axes, weight, isItalic); } - /** The 'tag' attribute value is read as four character values between 0 and 255 inclusive. */ - private static final Pattern TAG_PATTERN = Pattern.compile("[\\x00-\\xFF]{4}"); + /** The 'tag' attribute value is read as four character values between U+0020 and U+007E + * inclusive. + */ + private static final Pattern TAG_PATTERN = Pattern.compile("[\\x20-\\x7E]{4}"); /** The 'styleValue' attribute has an optional leading '-', followed by '', * '.', or '.' where '' is one or more of [0-9]. diff --git a/graphics/tests/graphicstests/src/android/graphics/VariationParserTest.java b/graphics/tests/graphicstests/src/android/graphics/VariationParserTest.java index e4d6aa8b64f50..d046c1103efc1 100644 --- a/graphics/tests/graphicstests/src/android/graphics/VariationParserTest.java +++ b/graphics/tests/graphicstests/src/android/graphics/VariationParserTest.java @@ -104,10 +104,19 @@ public class VariationParserTest extends TestCase { assertEquals(1, axis.length); } + @SmallTest + public void testInvalidTagCharacters() { + FontListParser.Axis[] axis = + FontListParser.parseFontVariationSettings("'\u0000\u0000\u0000\u0000' 10"); + assertEquals(0, axis.length); + axis = FontListParser.parseFontVariationSettings("'\u3042\u3044\u3046\u3048' 10"); + assertEquals(0, axis.length); + } + @SmallTest public void testMakeTag() { assertEquals(0x77647468, FontListParser.makeTag('w', 'd', 't', 'h')); assertEquals(0x41582020, FontListParser.makeTag('A', 'X', ' ', ' ')); assertEquals(0x20202020, FontListParser.makeTag(' ', ' ', ' ', ' ')); } -} \ No newline at end of file +}