Browse Source

tools: don't use bytelength as array length for arrays in TLVs.

This matters now we have an array in tlv_init_tlvs!  We were overallocating
in fromwire by 32x!

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
travis-debug
Rusty Russell 5 years ago
committed by Christian Decker
parent
commit
eb6a768741
  1. 23
      tools/gen/impl_template

23
tools/gen/impl_template

@ -60,25 +60,32 @@ towire_${f.type_obj.name}(${ptr}, ${'' if f.type_obj.is_assignable() else '&'}${
if f.type_obj.is_varsize():
typename += ' *'
%>\
% if f.is_varlen():
${fieldname} = ${f.size('*plen')} ? tal_arr(${ctx}, ${typename}, ${f.size('*plen')}) : NULL;
% endif
% if f.is_array() or f.is_varlen():
% if f.type_obj.has_array_helper():
## We assume array helpers only deal with things literally transcribed!!
% if f.is_varlen():
${fieldname} = ${f.size('*plen')} ? tal_arr(${ctx}, ${typename}, ${f.size('*plen')}) : NULL;
% endif
fromwire_${type_}_array(cursor, plen, ${fieldname}, ${f.size('*plen')});
% else:
% if f.is_varlen():
${fieldname} = ${f.size('*plen')} ? tal_arr(${ctx}, ${typename}, 0) : NULL;
% endif
% if f.is_implicit_len():
for (size_t i = 0; *plen != 0; i++)
for (size_t i = 0; *plen != 0; i++) {
% else:
for (size_t i = 0; i < ${f.size()}; i++)
for (size_t i = 0; i < ${f.size()}; i++) {
% endif
${typename} tmp;
% if f.type_obj.is_assignable():
(${fieldname})[i] = fromwire_${type_}(cursor, plen);
tmp = fromwire_${type_}(cursor, plen);
% elif f.is_varlen() and f.type_obj.is_varsize():
(${fieldname})[i] = fromwire_${type_}(${ctx}, cursor, plen);
tmp = fromwire_${type_}(${ctx}, cursor, plen);
% else:
fromwire_${type_}(cursor, plen, ${fieldname} + i);
fromwire_${type_}(cursor, plen, &tmp);
% endif
tal_arr_expand(&${fieldname}, tmp);
}
% endif
% else:
% if f.type_obj.is_assignable():

Loading…
Cancel
Save