Use plain bytes for rule parsers
Bug: 143697198
Test: atest FrameworksServicesTests:RuleXmlParserTest
Change-Id: I1cba1e985048330c0d9f7c2189042efc59a08049
diff --git a/services/core/java/com/android/server/integrity/parser/RuleBinaryParser.java b/services/core/java/com/android/server/integrity/parser/RuleBinaryParser.java
index 111b95a..aad177e 100644
--- a/services/core/java/com/android/server/integrity/parser/RuleBinaryParser.java
+++ b/services/core/java/com/android/server/integrity/parser/RuleBinaryParser.java
@@ -25,7 +25,7 @@
public class RuleBinaryParser implements RuleParser {
@Override
- public List<Rule> parse(String ruleText) {
+ public List<Rule> parse(byte[] ruleBytes) {
// TODO: Implement binary text parser.
return null;
}
diff --git a/services/core/java/com/android/server/integrity/parser/RuleParser.java b/services/core/java/com/android/server/integrity/parser/RuleParser.java
index 4e1f914..81783d5 100644
--- a/services/core/java/com/android/server/integrity/parser/RuleParser.java
+++ b/services/core/java/com/android/server/integrity/parser/RuleParser.java
@@ -24,8 +24,8 @@
/** A helper class to parse rules into the {@link Rule} model. */
public interface RuleParser {
- /** Parse rules from a string. */
- List<Rule> parse(String ruleText) throws RuleParseException;
+ /** Parse rules from bytes. */
+ List<Rule> parse(byte[] ruleBytes) throws RuleParseException;
/** Parse rules from an input stream. */
List<Rule> parse(InputStream inputStream) throws RuleParseException;
diff --git a/services/core/java/com/android/server/integrity/parser/RuleXmlParser.java b/services/core/java/com/android/server/integrity/parser/RuleXmlParser.java
index 1212a08..2e99d0f 100644
--- a/services/core/java/com/android/server/integrity/parser/RuleXmlParser.java
+++ b/services/core/java/com/android/server/integrity/parser/RuleXmlParser.java
@@ -51,10 +51,10 @@
private static final String IS_HASHED_VALUE_ATTRIBUTE = "H";
@Override
- public List<Rule> parse(String ruleText) throws RuleParseException {
+ public List<Rule> parse(byte[] ruleBytes) throws RuleParseException {
try {
XmlPullParser xmlPullParser = Xml.newPullParser();
- xmlPullParser.setInput(new StringReader(ruleText));
+ xmlPullParser.setInput(new StringReader(new String(ruleBytes, StandardCharsets.UTF_8)));
return parseRules(xmlPullParser);
} catch (Exception e) {
throw new RuleParseException(e.getMessage(), e);
diff --git a/services/tests/servicestests/src/com/android/server/integrity/parser/RuleXmlParserTest.java b/services/tests/servicestests/src/com/android/server/integrity/parser/RuleXmlParserTest.java
index 495923d..a14197b 100644
--- a/services/tests/servicestests/src/com/android/server/integrity/parser/RuleXmlParserTest.java
+++ b/services/tests/servicestests/src/com/android/server/integrity/parser/RuleXmlParserTest.java
@@ -30,6 +30,7 @@
import java.io.ByteArrayInputStream;
import java.io.InputStream;
+import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
@@ -109,7 +110,7 @@
/* isHashedValue= */ false))),
Rule.DENY);
- List<Rule> rules = xmlParser.parse(ruleXmlCompoundFormula);
+ List<Rule> rules = xmlParser.parse(ruleXmlCompoundFormula.getBytes(StandardCharsets.UTF_8));
assertThat(rules).isEqualTo(Collections.singletonList(expectedRule));
}
@@ -154,7 +155,7 @@
"test_cert",
/* isHashedValue= */ false))),
Rule.DENY);
- List<Rule> rules = xmlParser.parse(ruleXmlCompoundFormula);
+ List<Rule> rules = xmlParser.parse(ruleXmlCompoundFormula.getBytes(StandardCharsets.UTF_8));
assertThat(rules).isEqualTo(Collections.singletonList(expectedRule));
}
@@ -200,7 +201,7 @@
/* isHashedValue= */ false))),
Rule.DENY);
- List<Rule> rules = xmlParser.parse(ruleXmlCompoundFormula);
+ List<Rule> rules = xmlParser.parse(ruleXmlCompoundFormula.getBytes(StandardCharsets.UTF_8));
assertThat(rules).isEqualTo(Collections.singletonList(expectedRule));
}
@@ -237,7 +238,7 @@
/* isHashedValue= */ false))),
Rule.DENY);
- List<Rule> rules = xmlParser.parse(ruleXmlCompoundFormula);
+ List<Rule> rules = xmlParser.parse(ruleXmlCompoundFormula.getBytes(StandardCharsets.UTF_8));
assertThat(rules).isEqualTo(Collections.singletonList(expectedRule));
}
@@ -273,7 +274,7 @@
assertExpectException(
RuleParseException.class,
/* expectedExceptionMessageRegex */ "Connector NOT must have 1 formula only",
- () -> xmlParser.parse(ruleXmlCompoundFormula));
+ () -> xmlParser.parse(ruleXmlCompoundFormula.getBytes(StandardCharsets.UTF_8)));
}
@Test
@@ -302,7 +303,7 @@
assertExpectException(
RuleParseException.class,
/* expectedExceptionMessageRegex */ "For input string: \"INVALID_OPERATOR\"",
- () -> xmlParser.parse(ruleXmlCompoundFormula));
+ () -> xmlParser.parse(ruleXmlCompoundFormula.getBytes(StandardCharsets.UTF_8)));
}
@Test
@@ -330,7 +331,7 @@
assertExpectException(
RuleParseException.class,
/* expectedExceptionMessageRegex */ "For input string: \"INVALID_EFFECT\"",
- () -> xmlParser.parse(ruleXmlCompoundFormula));
+ () -> xmlParser.parse(ruleXmlCompoundFormula.getBytes(StandardCharsets.UTF_8)));
}
@Test
@@ -360,7 +361,7 @@
assertExpectException(
RuleParseException.class,
/* expectedExceptionMessageRegex */ "Found unexpected tag: InvalidAtomicFormula",
- () -> xmlParser.parse(ruleXmlCompoundFormula));
+ () -> xmlParser.parse(ruleXmlCompoundFormula.getBytes(StandardCharsets.UTF_8)));
}
@Test
@@ -387,7 +388,7 @@
/* isHashedValue= */ false),
Rule.DENY);
- List<Rule> rules = xmlParser.parse(ruleXmlAtomicFormula);
+ List<Rule> rules = xmlParser.parse(ruleXmlAtomicFormula.getBytes(StandardCharsets.UTF_8));
assertThat(rules).isEqualTo(Collections.singletonList(expectedRule));
}
@@ -415,7 +416,7 @@
AtomicFormula.VERSION_CODE, AtomicFormula.EQ, 1),
Rule.DENY);
- List<Rule> rules = xmlParser.parse(ruleXmlAtomicFormula);
+ List<Rule> rules = xmlParser.parse(ruleXmlAtomicFormula.getBytes(StandardCharsets.UTF_8));
assertThat(rules).isEqualTo(Collections.singletonList(expectedRule));
}
@@ -441,7 +442,7 @@
new AtomicFormula.BooleanAtomicFormula(AtomicFormula.PRE_INSTALLED, true),
Rule.DENY);
- List<Rule> rules = xmlParser.parse(ruleXmlAtomicFormula);
+ List<Rule> rules = xmlParser.parse(ruleXmlAtomicFormula.getBytes(StandardCharsets.UTF_8));
assertThat(rules).isEqualTo(Collections.singletonList(expectedRule));
}
@@ -470,7 +471,7 @@
/* isHashedValue= */ false),
Rule.DENY);
- List<Rule> rules = xmlParser.parse(ruleXmlAtomicFormula);
+ List<Rule> rules = xmlParser.parse(ruleXmlAtomicFormula.getBytes(StandardCharsets.UTF_8));
assertThat(rules).isEqualTo(Collections.singletonList(expectedRule));
}
@@ -495,7 +496,7 @@
assertExpectException(
RuleParseException.class,
/* expectedExceptionMessageRegex */ "Found unexpected key: -1",
- () -> xmlParser.parse(ruleXmlAtomicFormula));
+ () -> xmlParser.parse(ruleXmlAtomicFormula.getBytes(StandardCharsets.UTF_8)));
}
@Test
@@ -517,7 +518,7 @@
assertExpectException(
RuleParseException.class,
/* expectedExceptionMessageRegex */ "Unknown effect: -1",
- () -> xmlParser.parse(ruleXmlAtomicFormula));
+ () -> xmlParser.parse(ruleXmlAtomicFormula.getBytes(StandardCharsets.UTF_8)));
}
@Test
@@ -545,7 +546,7 @@
assertExpectException(
RuleParseException.class,
/* expectedExceptionMessageRegex */ "Unknown connector: -1",
- () -> xmlParser.parse(ruleXmlCompoundFormula));
+ () -> xmlParser.parse(ruleXmlCompoundFormula.getBytes(StandardCharsets.UTF_8)));
}
@Test
@@ -569,7 +570,7 @@
assertExpectException(
RuleParseException.class,
/* expectedExceptionMessageRegex */ "For input string: \"com.app.test\"",
- () -> xmlParser.parse(ruleXmlAtomicFormula));
+ () -> xmlParser.parse(ruleXmlAtomicFormula.getBytes(StandardCharsets.UTF_8)));
}
@Test
@@ -595,7 +596,7 @@
assertExpectException(
RuleParseException.class,
/* expectedExceptionMessageRegex */ "Rules must start with RuleList <RL> tag",
- () -> xmlParser.parse(ruleXmlWithNoRuleList));
+ () -> xmlParser.parse(ruleXmlWithNoRuleList.getBytes(StandardCharsets.UTF_8)));
}
@Test