aboutsummaryrefslogtreecommitdiff
path: root/parse.c
diff options
context:
space:
mode:
authorAndrew Chambers <[email protected]>2021-10-14 17:54:09 +1300
committerAndrew Chambers <[email protected]>2021-10-14 17:54:09 +1300
commit311a0567533bd9ac207ffde364990b0b4a27dd49 (patch)
tree26e670863947a85084ea17aee5d2219b98970b93 /parse.c
parentb46357d772e95a38cf749bb1d01fa3022a0aa929 (diff)
Fix mishandled string escapes.
Diffstat (limited to 'parse.c')
-rw-r--r--parse.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/parse.c b/parse.c
index b614843..62108a2 100644
--- a/parse.c
+++ b/parse.c
@@ -58,24 +58,26 @@ static String decodestring(char *s) {
s++;
if (*s >= '0' && *s <= '7') {
c = strtoul(s, &end, 8);
- s += 3;
+ s += 2;
} else if (*s == 'x') {
s++;
c = strtoul(s, &end, 16);
- s = end;
+ s = end-1;
} else if (*s == 'r') {
c = '\r';
} else if (*s == 'n') {
c = '\n';
} else if (*s == 't') {
c = '\t';
+ } else if (*s == '\\'){
+ c = '\\';
} else {
unreachable();
}
} else {
c = *s;
- s++;
}
+ s++;
if (len == cap) {
cap = cap ? len * 2 : 8;
data = realloc(data, cap);