Skip to content

Commit 96ae788

Browse files
committed
fix(go): allow non-utf8 resource handles
Signed-off-by: Roman Volosatovs <rvolosatovs@riseup.net>
1 parent fde29ca commit 96ae788

File tree

30 files changed

+156
-192
lines changed

30 files changed

+156
-192
lines changed

Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ wasmtime-wasi = { version = "24", default-features = false }
131131
wit-bindgen = { version = "0.30", default-features = false }
132132
wit-bindgen-core = { version = "0.30", default-features = false }
133133
wit-bindgen-wrpc = { version = "0.6.5", default-features = false, path = "./crates/wit-bindgen" }
134-
wit-bindgen-wrpc-go = { version = "0.8", default-features = false, path = "./crates/wit-bindgen-go" }
134+
wit-bindgen-wrpc-go = { version = "0.8.1", default-features = false, path = "./crates/wit-bindgen-go" }
135135
wit-bindgen-wrpc-rust = { version = "0.6.5", default-features = false, path = "./crates/wit-bindgen-rust" }
136136
wit-bindgen-wrpc-rust-macro = { version = "0.6.5", default-features = false, path = "./crates/wit-bindgen-rust-macro" }
137137
wit-component = { version = "0.215", default-features = false }

crates/wit-bindgen-go/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "wit-bindgen-wrpc-go"
3-
version = "0.8.0"
3+
version = "0.8.1"
44
description = """
55
Go bindings generator for wRPC
66
"""

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

Lines changed: 12 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1180,7 +1180,6 @@ impl InterfaceGenerator<'_> {
11801180
let fmt = self.deps.fmt();
11811181
let io = self.deps.io();
11821182
let slog = self.deps.slog();
1183-
let utf8 = self.deps.utf8();
11841183
uwrite!(
11851184
self.src,
11861185
"func(r interface {{ {io}.ByteReader; {io}.Reader }}) (",
@@ -1192,27 +1191,24 @@ impl InterfaceGenerator<'_> {
11921191
var x uint32
11931192
var s uint
11941193
for i := 0; i < 5; i++ {{
1195-
{slog}.Debug("reading owned resource ID length byte", "i", i)
1194+
{slog}.Debug("reading owned resource handle length byte", "i", i)
11961195
b, err := r.ReadByte()
11971196
if err != nil {{
11981197
if i > 0 && err == {io}.EOF {{
11991198
err = {io}.ErrUnexpectedEOF
12001199
}}
1201-
return "", {fmt}.Errorf("failed to read owned resource ID length byte: %w", err)
1200+
return nil, {fmt}.Errorf("failed to read owned resource handle length byte: %w", err)
12021201
}}
12031202
if b < 0x80 {{
12041203
if i == 4 && b > 1 {{
1205-
return "", {errors}.New("owned resource ID length overflows a 32-bit integer")
1204+
return nil, {errors}.New("owned resource handle length overflows a 32-bit integer")
12061205
}}
12071206
x = x | uint32(b)<<s
12081207
buf := make([]byte, x)
1209-
{slog}.Debug("reading owned resource ID bytes", "len", x)
1208+
{slog}.Debug("reading owned resource handle bytes", "len", x)
12101209
_, err = r.Read(buf)
12111210
if err != nil {{
1212-
return "", {fmt}.Errorf("failed to read owned resource ID bytes: %w", err)
1213-
}}
1214-
if !{utf8}.Valid(buf) {{
1215-
return "", {errors}.New("owned resource ID is not valid UTF-8")
1211+
return nil, {fmt}.Errorf("failed to read owned resource handle bytes: %w", err)
12161212
}}
12171213
return "#,
12181214
);
@@ -1224,7 +1220,7 @@ impl InterfaceGenerator<'_> {
12241220
x |= uint32(b&0x7f) << s
12251221
s += 7
12261222
}}
1227-
return "", {errors}.New("owned resource ID length overflows a 32-bit integer")
1223+
return nil, {errors}.New("owned resource handle length overflows a 32-bit integer")
12281224
}}({reader})"#,
12291225
);
12301226
}
@@ -1234,7 +1230,6 @@ impl InterfaceGenerator<'_> {
12341230
let fmt = self.deps.fmt();
12351231
let io = self.deps.io();
12361232
let slog = self.deps.slog();
1237-
let utf8 = self.deps.utf8();
12381233
uwrite!(
12391234
self.src,
12401235
"func(r interface {{ {io}.ByteReader; {io}.Reader }}) (",
@@ -1246,27 +1241,24 @@ impl InterfaceGenerator<'_> {
12461241
var x uint32
12471242
var s uint
12481243
for i := 0; i < 5; i++ {{
1249-
{slog}.Debug("reading borrowed resource ID length byte", "i", i)
1244+
{slog}.Debug("reading borrowed resource handle length byte", "i", i)
12501245
b, err := r.ReadByte()
12511246
if err != nil {{
12521247
if i > 0 && err == {io}.EOF {{
12531248
err = {io}.ErrUnexpectedEOF
12541249
}}
1255-
return "", {fmt}.Errorf("failed to read borrowed resource ID length byte: %w", err)
1250+
return nil, {fmt}.Errorf("failed to read borrowed resource handle length byte: %w", err)
12561251
}}
12571252
if b < 0x80 {{
12581253
if i == 4 && b > 1 {{
1259-
return "", {errors}.New("borrowed resource ID length overflows a 32-bit integer")
1254+
return nil, {errors}.New("borrowed resource handle length overflows a 32-bit integer")
12601255
}}
12611256
x = x | uint32(b)<<s
12621257
buf := make([]byte, x)
1263-
{slog}.Debug("reading borrowed resource ID bytes", "len", x)
1258+
{slog}.Debug("reading borrowed resource handle bytes", "len", x)
12641259
_, err = r.Read(buf)
12651260
if err != nil {{
1266-
return "", {fmt}.Errorf("failed to read borrowed resource ID bytes: %w", err)
1267-
}}
1268-
if !{utf8}.Valid(buf) {{
1269-
return "", {errors}.New("borrowed resource ID is not valid UTF-8")
1261+
return nil, {fmt}.Errorf("failed to read borrowed resource handle bytes: %w", err)
12701262
}}
12711263
return "#,
12721264
);
@@ -1278,7 +1270,7 @@ impl InterfaceGenerator<'_> {
12781270
x |= uint32(b&0x7f) << s
12791271
s += 7
12801272
}}
1281-
return "", {errors}.New("borrowed resource ID length overflows a 32-bit integer")
1273+
return nil, {errors}.New("borrowed resource handle length overflows a 32-bit integer")
12821274
}}({reader})"#,
12831275
);
12841276
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
// Generated by `wit-bindgen-wrpc-go` 0.7.0. DO NOT EDIT!
1+
// Generated by `wit-bindgen-wrpc-go` 0.8.1. DO NOT EDIT!
22
// client package contains wRPC bindings for `client` world
33
package client

examples/go/hello-client/bindings/wrpc_examples/hello/handler/bindings.wrpc.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Generated by `wit-bindgen-wrpc-go` 0.7.0. DO NOT EDIT!
1+
// Generated by `wit-bindgen-wrpc-go` 0.8.1. DO NOT EDIT!
22
package handler
33

44
import (

examples/go/hello-client/go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ go 1.22.2
44

55
require (
66
github.com/nats-io/nats.go v1.37.0
7-
wrpc.io/go v0.0.3
7+
wrpc.io/go v0.0.4
88
)
99

1010
require (
@@ -15,4 +15,4 @@ require (
1515
golang.org/x/sys v0.20.0 // indirect
1616
)
1717

18-
replace wrpc.io/go v0.0.3 => ../../../go
18+
replace wrpc.io/go v0.0.4 => ../../../go

examples/go/hello-server/bindings/exports/wrpc_examples/hello/handler/bindings.wrpc.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Generated by `wit-bindgen-wrpc-go` 0.7.0. DO NOT EDIT!
1+
// Generated by `wit-bindgen-wrpc-go` 0.8.1. DO NOT EDIT!
22
package handler
33

44
import (
@@ -68,7 +68,7 @@ func ServeInterface(s wrpc.Server, h Handler) (stop func() error, err error) {
6868
return nil
6969
}(r0, &buf)
7070
if err != nil {
71-
slog.WarnContext(ctx, "failed to write result value", "i", 0, "wrpc-examples:hello/handler", "name", "hello", "err", err)
71+
slog.WarnContext(ctx, "failed to write result value", "i", 0, "instance", "wrpc-examples:hello/handler", "name", "hello", "err", err)
7272
return
7373
}
7474
if write0 != nil {
@@ -77,21 +77,21 @@ func ServeInterface(s wrpc.Server, h Handler) (stop func() error, err error) {
7777
slog.DebugContext(ctx, "transmitting `wrpc-examples:hello/handler.hello` result")
7878
_, err = w.Write(buf.Bytes())
7979
if err != nil {
80-
slog.WarnContext(ctx, "failed to write result", "wrpc-examples:hello/handler", "name", "hello", "err", err)
80+
slog.WarnContext(ctx, "failed to write result", "instance", "wrpc-examples:hello/handler", "name", "hello", "err", err)
8181
return
8282
}
8383
if len(writes) > 0 {
8484
for index, write := range writes {
8585
w, err := w.Index(index)
8686
if err != nil {
87-
slog.ErrorContext(ctx, "failed to index writer", "index", index, "wrpc-examples:hello/handler", "name", "hello", "err", err)
87+
slog.ErrorContext(ctx, "failed to index writer", "index", index, "instance", "wrpc-examples:hello/handler", "name", "hello", "err", err)
8888
return
8989
}
9090
index := index
9191
write := write
9292
go func() {
9393
if err := write(w); err != nil {
94-
slog.WarnContext(ctx, "failed to write nested result value", "index", index, "wrpc-examples:hello/handler", "name", "hello", "err", err)
94+
slog.WarnContext(ctx, "failed to write nested result value", "index", index, "instance", "wrpc-examples:hello/handler", "name", "hello", "err", err)
9595
}
9696
}()
9797
}

examples/go/hello-server/bindings/server.wrpc.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Generated by `wit-bindgen-wrpc-go` 0.7.0. DO NOT EDIT!
1+
// Generated by `wit-bindgen-wrpc-go` 0.8.1. DO NOT EDIT!
22
// server package contains wRPC bindings for `server` world
33
package server
44

examples/go/hello-server/go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ go 1.22.2
44

55
require (
66
github.com/nats-io/nats.go v1.37.0
7-
wrpc.io/go v0.0.3
7+
wrpc.io/go v0.0.4
88
)
99

1010
require (
@@ -15,4 +15,4 @@ require (
1515
golang.org/x/sys v0.20.0 // indirect
1616
)
1717

18-
replace wrpc.io/go v0.0.3 => ../../../go
18+
replace wrpc.io/go v0.0.4 => ../../../go

0 commit comments

Comments
 (0)