# HG changeset patch # User Mychaela Falconia # Date 1613101499 0 # Node ID 90e7020df08a77125c580a5b9c36e76655ef5433 # Parent 72a24b8538eb585e3374a7c2d3649113bbf2552f GSM7 string parsers accept new bypass-encoding escapes diff -r 72a24b8538eb -r 90e7020df08a libcommon/alpha_fromfile.c --- a/libcommon/alpha_fromfile.c Fri Feb 12 03:33:26 2021 +0000 +++ b/libcommon/alpha_fromfile.c Fri Feb 12 03:44:59 2021 +0000 @@ -33,13 +33,20 @@ if (*cp == '\0') goto unterm_qstring; c = *cp++; + if (c >= '0' && c <= '7' && isxdigit(*cp)) { + c = ((c - '0') << 4) | decode_hex_digit(*cp++); + goto bypass_encoding; + } switch (c) { case 'n': c = '\n'; - break; + goto bypass_encoding; case 'r': c = '\r'; - break; + goto bypass_encoding; + case 'e': + c = 0x1B; + goto bypass_encoding; case '"': case '\\': break; @@ -57,6 +64,7 @@ filename_for_errs, lineno_for_errs); return(0); } +bypass_encoding: if (c & 0x80) nadd = 2; else diff -r 72a24b8538eb -r 90e7020df08a libcommon/gsm7_encode.c --- a/libcommon/gsm7_encode.c Fri Feb 12 03:33:26 2021 +0000 +++ b/libcommon/gsm7_encode.c Fri Feb 12 03:44:59 2021 +0000 @@ -29,13 +29,20 @@ return(-1); } c = *cp++; + if (c >= '0' && c <= '7' && isxdigit(*cp)) { + c = ((c - '0') << 4) | decode_hex_digit(*cp++); + goto bypass_encoding; + } switch (c) { case 'n': c = '\n'; - break; + goto bypass_encoding; case 'r': c = '\r'; - break; + goto bypass_encoding; + case 'e': + c = 0x1B; + goto bypass_encoding; case '"': case '\\': break; @@ -51,6 +58,7 @@ "error: character in alpha tag string cannot be encoded in GSM7\n"); return(-1); } +bypass_encoding: if (c & 0x80) nadd = 2; else