diff options
author | Ben Gruver <bgruv@google.com> | 2021-03-02 17:57:56 -0800 |
---|---|---|
committer | Ben Gruver <bgruv@google.com> | 2021-03-02 17:57:56 -0800 |
commit | 5842cee8ec458327c1f59b8921bf93008bcd3e91 (patch) | |
tree | 7370728f645f7943b4b43d42c316cbb959ce6d73 | |
parent | c52c16b8e495f195a39fb02443a0788cfbe7368f (diff) | |
download | google-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.java | 18 | ||||
-rw-r--r-- | baksmali/src/test/java/org/jf/baksmali/formatter/BaksmaliWriterTest.java | 17 |
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)); |