Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
'if (dst_p->{}length > {}u) {{'.format(location, checker.maximum),
' decoder_abort(decoder_p, EBADLENGTH);',
'',
' return;',
'}',
''
]
first_decode_lines += [
'for ({0} = 0; {0} < dst_p->{1}length; {0}++) {{'.format(
unique_i,
location)
]
encode_lines = first_encode_lines + indent_lines(encode_lines) + ['}', '']
decode_lines = first_decode_lines + indent_lines(decode_lines) + ['}', '']
return encode_lines, decode_lines
checker,
default_condition_by_member_name)
encode_lines += member_encode_lines
decode_lines += member_decode_lines
if type_.additions is not None and len(type_.additions) > 0:
additions_encode_lines, additions_decode_lines = (
self.format_sequence_additions(type_, checker))
addition_condition = 'if(({}[0] & 0x80u) == 0x80u) {{'.format(
unique_present_mask)
encode_lines += [
'',
addition_condition
] + indent_lines(additions_encode_lines) + [
'}'
]
decode_lines += [
'',
addition_condition
] + indent_lines(additions_decode_lines) + [
'}',
'else {'
] + [
' dst_p->{}is_{}_addition_present = false;'.format(
self.location_inner('', '.'), addition.name)
for addition in type_.additions] + [
'}'
]
encode_lines += [
'case {}_choice_{}_e:'.format(self.location, member.name)
] + indent_lines(choice_encode_lines) + [
''
]
choice_decode_lines = [
'dst_p->{} = {}_choice_{}_e;'.format(choice,
self.location,
member.name)
] + choice_decode_lines + [
'break;'
]
decode_lines += [
'case {}:'.format(tag)
] + indent_lines(choice_decode_lines) + [
''
]
encode_lines = [
'',
'switch (src_p->{}) {{'.format(choice),
''
] + encode_lines + [
'default:',
' encoder_abort(encoder_p, EBADCHOICE);',
' break;',
'}',
''
]
decode_lines = [
first_decode_lines += [
'if (dst_p->{}length > {}u) {{'.format(location, checker.maximum),
' decoder_abort(decoder_p, EBADLENGTH);',
'',
' return;',
'}',
''
]
first_decode_lines += [
'for ({0} = 0; {0} < dst_p->{1}length; {0}++) {{'.format(
unique_i,
location)
]
encode_lines = first_encode_lines + indent_lines(encode_lines) + ['}', '']
decode_lines = first_decode_lines + indent_lines(decode_lines) + ['}', '']
return encode_lines, decode_lines
'CHOICE tags of more than four bytes are not yet supported.')
tag = bitstruct.unpack('u{}'.format(8 * tag_length),
member.tag)[0]
tag = '0x{{:0{}x}}'.format(2 * tag_length).format(tag)
choice_encode_lines = [
'encoder_append_uint(encoder_p, {}, {});'.format(
tag,
tag_length)
] + choice_encode_lines + [
'break;'
]
encode_lines += [
'case {}_choice_{}_e:'.format(self.location, member.name)
] + indent_lines(choice_encode_lines) + [
''
]
choice_decode_lines = [
'dst_p->{} = {}_choice_{}_e;'.format(choice,
self.location,
member.name)
] + choice_decode_lines + [
'break;'
]
decode_lines += [
'case {}:'.format(tag)
] + indent_lines(choice_decode_lines) + [
''
]
choice_encode_lines, choice_decode_lines = self.format_type_inner(
member,
member_checker)
index = type_.root_name_to_index[member.name]
choice_encode_lines = [
'encoder_append_non_negative_binary_integer(encoder_p, {}, {});'.format(
index,
type_.root_number_of_bits)
] + choice_encode_lines + [
'break;'
]
encode_lines += [
'case {}_choice_{}_e:'.format(self.location, member.name)
] + indent_lines(choice_encode_lines) + [
''
]
choice_decode_lines = [
'dst_p->{} = {}_choice_{}_e;'.format(choice,
self.location,
member.name)
] + choice_decode_lines + [
'break;'
]
decode_lines += [
'case {}:'.format(index)
] + indent_lines(choice_decode_lines) + [
''
]
encode_lines += [
'case {}_choice_{}_e:'.format(self.location, member.name)
] + indent_lines(choice_encode_lines) + [
''
]
choice_decode_lines = [
'dst_p->{} = {}_choice_{}_e;'.format(choice,
self.location,
member.name)
] + choice_decode_lines + [
'break;'
]
decode_lines += [
'case {}:'.format(index)
] + indent_lines(choice_decode_lines) + [
''
]
encode_lines = [
'',
'switch (src_p->{}) {{'.format(choice),
''
] + encode_lines + [
'default:',
' encoder_abort(encoder_p, EBADCHOICE);',
' break;',
'}',
''
]
decode_lines = [
additions_encode_lines, additions_decode_lines = (
self.format_sequence_additions(type_, checker))
addition_condition = 'if(({}[0] & 0x80u) == 0x80u) {{'.format(
unique_present_mask)
encode_lines += [
'',
addition_condition
] + indent_lines(additions_encode_lines) + [
'}'
]
decode_lines += [
'',
addition_condition
] + indent_lines(additions_decode_lines) + [
'}',
'else {'
] + [
' dst_p->{}is_{}_addition_present = false;'.format(
self.location_inner('', '.'), addition.name)
for addition in type_.additions] + [
'}'
]
return encode_lines, decode_lines
with self.asn1_members_backtrace_push(member.name):
with self.c_members_backtrace_push('value'):
with self.c_members_backtrace_push(member.name):
choice_type_lengths = self.get_encoded_type_lengths(
member,
member_checker)
choice_type_lengths.append(len(member.tag))
length_line = 'length = {};'.format(
encoded_lengths_as_string(choice_type_lengths))
wrapped_length_lines = textwrap.wrap(length_line, 100,
subsequent_indent=' ' * 4)
choice_length_lines += [
'case {}_choice_{}_e:'.format(self.location, member.name)
] + indent_lines(wrapped_length_lines) + [
' break;',
'']
length_lines = [
'uint32_t length;',
'',
'switch (src_p->{}) {{'.format(choice),
''
] + choice_length_lines + [
'default:',
' length = 0;'
' break;',
'}',
'return length;']
length_lines = [