aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Gruver <bgruv@google.com>2021-03-02 17:57:56 -0800
committerBen Gruver <bgruv@google.com>2021-03-02 17:57:56 -0800
commit5842cee8ec458327c1f59b8921bf93008bcd3e91 (patch)
tree7370728f645f7943b4b43d42c316cbb959ce6d73
parentc52c16b8e495f195a39fb02443a0788cfbe7368f (diff)
downloadgoogle-smali-5842cee8ec458327c1f59b8921bf93008bcd3e91.tar.gz
Fix bad formatting of some char values with the new BaksmaliWriter
-rw-r--r--baksmali/src/main/java/org/jf/baksmali/formatter/BaksmaliWriter.java18
-rw-r--r--baksmali/src/test/java/org/jf/baksmali/formatter/BaksmaliWriterTest.java17
2 files changed, 30 insertions, 5 deletions
diff --git a/baksmali/src/main/java/org/jf/baksmali/formatter/BaksmaliWriter.java b/baksmali/src/main/java/org/jf/baksmali/formatter/BaksmaliWriter.java
index 2af12c15..fb83d67b 100644
--- a/baksmali/src/main/java/org/jf/baksmali/formatter/BaksmaliWriter.java
+++ b/baksmali/src/main/java/org/jf/baksmali/formatter/BaksmaliWriter.java
@@ -245,29 +245,37 @@ public class BaksmaliWriter extends DexFormattedWriter {
}
protected void writeCharEncodedValue(CharEncodedValue encodedValue) throws IOException {
- writer.write('\'');
+
char c = encodedValue.getValue();
if ((c >= ' ') && (c < 0x7f)) {
+ writer.write('\'');
if ((c == '\'') || (c == '\"') || (c == '\\')) {
writer.write('\\');
}
writer.write(c);
+ writer.write('\'');
return;
} else if (c <= 0x7f) {
switch (c) {
- case '\n': writer.write("\\n"); return;
- case '\r': writer.write("\\r"); return;
- case '\t': writer.write("\\t"); return;
+ case '\n':
+ writer.write("'\\n'");
+ return;
+ case '\r':
+ writer.write("'\\r'");
+ return;
+ case '\t':
+ writer.write("'\\t'");
+ return;
}
}
+ writer.write('\'');
writer.write("\\u");
writer.write(Character.forDigit(c >> 12, 16));
writer.write(Character.forDigit((c >> 8) & 0x0f, 16));
writer.write(Character.forDigit((c >> 4) & 0x0f, 16));
writer.write(Character.forDigit(c & 0x0f, 16));
-
writer.write('\'');
}
diff --git a/baksmali/src/test/java/org/jf/baksmali/formatter/BaksmaliWriterTest.java b/baksmali/src/test/java/org/jf/baksmali/formatter/BaksmaliWriterTest.java
index 87f4e66e..6a503df8 100644
--- a/baksmali/src/test/java/org/jf/baksmali/formatter/BaksmaliWriterTest.java
+++ b/baksmali/src/test/java/org/jf/baksmali/formatter/BaksmaliWriterTest.java
@@ -262,6 +262,23 @@ public class BaksmaliWriterTest {
}
@Test
+ public void testWriteEncodedValue_char_normal() throws IOException {
+ Assert.assertEquals("'&'", performWriteChar('&'));
+ Assert.assertEquals("'\\\\'", performWriteChar('\\'));
+ Assert.assertEquals("'\\n'", performWriteChar('\n'));
+ Assert.assertEquals("'\\u7777'", performWriteChar('\u7777'));
+ }
+
+ private String performWriteChar(char c) throws IOException {
+ output = new StringWriter();
+ BaksmaliWriter writer = new BaksmaliWriter(output);
+
+ writer.writeEncodedValue(new ImmutableCharEncodedValue(c));
+ writer.close();
+ return output.toString();
+ }
+
+ @Test
public void testWriteUnsignedLongAsHex() throws IOException {
Assert.assertEquals("ffffffffffffffff", performWriteUnsignedLongAsHex(-1));
Assert.assertEquals("7fffffff", performWriteUnsignedLongAsHex(Integer.MAX_VALUE));