summaryrefslogtreecommitdiff
path: root/codegen.py
diff options
context:
space:
mode:
authorSimon MacMullen <simon@rabbitmq.com>2013-11-04 14:33:33 +0000
committerSimon MacMullen <simon@rabbitmq.com>2013-11-04 14:33:33 +0000
commitd3ee5d70a4d943ba5ce11981b4d723e948970a17 (patch)
treeae43845b45a0e88381adca45e4d9095d8ac7bfa8 /codegen.py
parent0397c4e2dbb8ac1eb5c1947df62dfa84c5a59ff2 (diff)
downloadrabbitmq-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.py8
1 files changed, 6 insertions, 2 deletions
diff --git a/codegen.py b/codegen.py
index 842549cf..91fa1154 100644
--- a/codegen.py
+++ b/codegen.py
@@ -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):