Skip to content

Commit d6ef05e

Browse files
committed
fix(go): support empty lists and strings
Signed-off-by: Roman Volosatovs <rvolosatovs@riseup.net>
1 parent 2d88711 commit d6ef05e

1 file changed

Lines changed: 15 additions & 6 deletions

File tree

crates/wit-bindgen-go/src/interface.rs

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -477,6 +477,9 @@ impl InterfaceGenerator<'_> {
477477
}}
478478
if b < 0x80 {{
479479
x = x | uint32(b)<<s
480+
if x == 0 {{
481+
return "", nil
482+
}}
480483
buf := make([]byte, x)
481484
{slog}.Debug("reading string bytes", "len", x)
482485
_, err = r.Read(buf)
@@ -515,11 +518,14 @@ impl InterfaceGenerator<'_> {
515518
}}
516519
return nil, {fmt}.Errorf("failed to read byte list length byte: %w", err)
517520
}}
521+
if s == 28 && b > 0x0f {{
522+
return nil, {errors}.New("byte list length overflows a 32-bit integer")
523+
}}
518524
if b < 0x80 {{
519-
if i == 4 && b > 1 {{
520-
return nil, {errors}.New("byte list length overflows a 32-bit integer")
521-
}}
522525
x = x | uint32(b)<<s
526+
if x == 0 {{
527+
return nil, nil
528+
}}
523529
buf := make([]byte, x)
524530
{slog}.Debug("reading byte list contents", "len", x)
525531
_, err = {io}.ReadFull(r, buf)
@@ -562,11 +568,14 @@ impl InterfaceGenerator<'_> {
562568
}}
563569
return nil, {fmt}.Errorf("failed to read list length byte: %w", err)
564570
}}
571+
if s == 28 && b > 0x0f {{
572+
return nil, {errors}.New("list length overflows a 32-bit integer")
573+
}}
565574
if b < 0x80 {{
566-
if i == 4 && b > 1 {{
567-
return nil, {errors}.New("list length overflows a 32-bit integer")
568-
}}
569575
x = x | uint32(b)<<s
576+
if x == 0 {{
577+
return nil, nil
578+
}}
570579
vs := make("#,
571580
);
572581
self.print_list(ty);

0 commit comments

Comments
 (0)