diff options
author | Matthew Sackman <matthew@lshift.net> | 2010-02-04 15:40:56 +0000 |
---|---|---|
committer | Matthew Sackman <matthew@lshift.net> | 2010-02-04 15:40:56 +0000 |
commit | fd34fb884352f9f010684665bb251abecd934874 (patch) | |
tree | b8eed88469ed3a7dd0ca49f331743e91fc9fb3a4 | |
parent | 30aa0f6084dd0a78f9ef196bc76d5302b269b7bc (diff) | |
parent | 4713a64bd42efe0c4e61e7f8bad0c7122a1c433a (diff) | |
download | rabbitmq-server-fd34fb884352f9f010684665bb251abecd934874.tar.gz |
merging default into bug 22254bug22254
-rw-r--r-- | codegen.py | 7 | ||||
-rw-r--r-- | src/rabbit_binary_generator.erl | 17 |
2 files changed, 18 insertions, 6 deletions
@@ -214,6 +214,8 @@ def genErl(spec): elif type == 'table': print " F%d = rabbit_binary_parser:parse_table(F%dTab)," % \ (f.index, f.index) + elif type == 'shortstr': + print " if F%dLen > 255 -> exit(method_field_shortstr_overflow); true -> ok end," % (f.index) else: pass @@ -246,7 +248,10 @@ def genErl(spec): elif type == 'table': print " F%dTab = rabbit_binary_generator:generate_table(F%d)," % (f.index, f.index) print " F%dLen = size(F%dTab)," % (f.index, f.index) - elif type in ['shortstr', 'longstr']: + elif type == 'shortstr': + print " F%dLen = size(F%d)," % (f.index, f.index) + print " if F%dLen > 255 -> exit(method_field_shortstr_overflow); true -> ok end," % (f.index) + elif type == 'longstr': print " F%dLen = size(F%d)," % (f.index, f.index) else: pass diff --git a/src/rabbit_binary_generator.erl b/src/rabbit_binary_generator.erl index b8e161a6..b903a6ee 100644 --- a/src/rabbit_binary_generator.erl +++ b/src/rabbit_binary_generator.erl @@ -196,12 +196,16 @@ generate_array(Array) when is_list(Array) -> fun ({Type, Value}) -> field_value_to_binary(Type, Value) end, Array)). -short_string_to_binary(String) when is_binary(String) and (size(String) < 256) -> - [<<(size(String)):8>>, String]; +short_string_to_binary(String) when is_binary(String) -> + Len = size(String), + if Len < 256 -> [<<(size(String)):8>>, String]; + true -> exit(content_properties_shortstr_overflow) + end; short_string_to_binary(String) -> StringLength = length(String), - true = (StringLength < 256), % assertion - [<<StringLength:8>>, String]. + if StringLength < 256 -> [<<StringLength:8>>, String]; + true -> exit(content_properties_shortstr_overflow) + end. long_string_to_binary(String) when is_binary(String) -> [<<(size(String)):32>>, String]; @@ -239,7 +243,10 @@ encode_properties(Bit, [T | TypeList], [Value | ValueList], FirstShortAcc, Flags end. encode_property(shortstr, String) -> - Len = size(String), <<Len:8/unsigned, String:Len/binary>>; + Len = size(String), + if Len < 256 -> <<Len:8/unsigned, String:Len/binary>>; + true -> exit(content_properties_shortstr_overflow) + end; encode_property(longstr, String) -> Len = size(String), <<Len:32/unsigned, String:Len/binary>>; encode_property(octet, Int) -> |