Commit 49bb04ee authored by Damien George's avatar Damien George
Browse files

py/makeqstrdata: Fix rendering of qstrs that have non-printable ASCII.

The qstr data needs to be turned into a proper C string so non-ASCII
chars must be properly escaped according to C rules.
parent 0c1de1cd
...@@ -106,9 +106,15 @@ def parse_input_headers(infiles): ...@@ -106,9 +106,15 @@ def parse_input_headers(infiles):
def make_bytes(cfg_bytes_len, cfg_bytes_hash, qstr): def make_bytes(cfg_bytes_len, cfg_bytes_hash, qstr):
qhash = compute_hash(qstr, cfg_bytes_hash) qhash = compute_hash(qstr, cfg_bytes_hash)
# Calculate len of str, taking escapes into account if all(32 <= ord(c) <= 126 and c != '\\' for c in qstr):
qlen = len(qstr.replace("\\\\", "-").replace("\\", "")) # qstr is all printable ASCII so render it as-is (for easier debugging)
qdata = qstr.replace('"', '\\"') qlen = len(qstr)
qdata = qstr
# qstr contains non-printable codes so render entire thing as hex pairs
qbytes = qstr.encode('utf8')
qlen = len(qbytes)
qdata = ''.join(('\\x%02x' % b) for b in qbytes)
if qlen >= (1 << (8 * cfg_bytes_len)): if qlen >= (1 << (8 * cfg_bytes_len)):
print('qstr is too long:', qstr) print('qstr is too long:', qstr)
assert False assert False
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment