diff options
author | Simon MacMullen <simon@rabbitmq.com> | 2013-11-04 14:33:33 +0000 |
---|---|---|
committer | Simon MacMullen <simon@rabbitmq.com> | 2013-11-04 14:33:33 +0000 |
commit | d3ee5d70a4d943ba5ce11981b4d723e948970a17 (patch) | |
tree | ae43845b45a0e88381adca45e4d9095d8ac7bfa8 /codegen.py | |
parent | 0397c4e2dbb8ac1eb5c1947df62dfa84c5a59ff2 (diff) | |
download | rabbitmq-server-d3ee5d70a4d943ba5ce11981b4d723e948970a17.tar.gz |
Check UTF-8-ness of shortstrs in non-content-bearing methods. Note that we use the previously developed "fast" checker to avoid a dependency on xmerl, not so much because it is fast.
Diffstat (limited to 'codegen.py')
-rw-r--r-- | codegen.py | 8 |
1 files changed, 6 insertions, 2 deletions
@@ -187,7 +187,7 @@ def genErl(spec): elif type == 'table': return p+'Len:32/unsigned, '+p+'Tab:'+p+'Len/binary' - def genFieldPostprocessing(packed): + def genFieldPostprocessing(packed, hasContent): for f in packed: type = erlType(f.domain) if type == 'bit': @@ -199,6 +199,10 @@ def genErl(spec): elif type == 'table': print " F%d = rabbit_binary_parser:parse_table(F%dTab)," % \ (f.index, f.index) + # We skip the check on content-bearing methods for + # speed. This is a sanity check, not a security thing. + elif type == 'shortstr' and not hasContent: + print " rabbit_binary_parser:assert_utf8(F%d)," % (f.index) else: pass @@ -214,7 +218,7 @@ def genErl(spec): restSeparator = '' recordConstructorExpr = '#%s{%s}' % (m.erlangName(), fieldMapList(m.arguments)) print "decode_method_fields(%s, <<%s>>) ->" % (m.erlangName(), binaryPattern) - genFieldPostprocessing(packedFields) + genFieldPostprocessing(packedFields, m.hasContent) print " %s;" % (recordConstructorExpr,) def genDecodeProperties(c): |