Merge "Allow only U+0020..U+007E characters for axis tag."
diff --git a/graphics/java/android/graphics/FontListParser.java b/graphics/java/android/graphics/FontListParser.java
index 069f81b..9490436 100644
--- a/graphics/java/android/graphics/FontListParser.java
+++ b/graphics/java/android/graphics/FontListParser.java
@@ -155,7 +155,7 @@
 
     @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 @@
         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 '<digits>',
      *  '<digits>.<digits>', or '.<digits>' where '<digits>' 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 e4d6aa8..d046c11 100644
--- a/graphics/tests/graphicstests/src/android/graphics/VariationParserTest.java
+++ b/graphics/tests/graphicstests/src/android/graphics/VariationParserTest.java
@@ -105,9 +105,18 @@
     }
 
     @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
+}