From 8abad8cb77c2a465813bd1e264e3101dd96f4aff Mon Sep 17 00:00:00 2001 From: Nicolas Lepage <19571875+nlepage@users.noreply.github.com> Date: Mon, 14 Oct 2024 23:28:21 +0200 Subject: [PATCH] fix: crash when request has no body --- internal/safejs/value.go | 8 ++++++++ request.go | 28 +++++++++++++++++----------- 2 files changed, 25 insertions(+), 11 deletions(-) diff --git a/internal/safejs/value.go b/internal/safejs/value.go index 26fd389..1c93691 100644 --- a/internal/safejs/value.go +++ b/internal/safejs/value.go @@ -73,6 +73,14 @@ func (v Value) IndexString(i int) (string, error) { return safejs.Value(sv).String() } +func (v Value) IsNull() bool { + return safejs.Value(v).IsNull() +} + +func (v Value) IsUndefined() bool { + return safejs.Value(v).IsUndefined() +} + func (v Value) New(args ...any) (Value, error) { args = toJSValue(args).([]any) r, err := safejs.Value(v).New(args...) diff --git a/request.go b/request.go index d45dbbc..824b0ba 100644 --- a/request.go +++ b/request.go @@ -1,6 +1,7 @@ package wasmhttp import ( + "io" "net/http" "net/http/httptest" "syscall/js" @@ -13,16 +14,6 @@ import ( func Request(uvalue js.Value) (*http.Request, error) { value := safejs.Safe(uvalue) - body, err := value.Get("body") - if err != nil { - return nil, err - } - - r, err := body.Call("getReader") - if err != nil { - return nil, err - } - method, err := value.GetString("method") if err != nil { return nil, err @@ -33,10 +24,25 @@ func Request(uvalue js.Value) (*http.Request, error) { return nil, err } + body, err := value.Get("body") + if err != nil { + return nil, err + } + + var bodyReader io.Reader + if !body.IsUndefined() && !body.IsNull() { + r, err := body.Call("getReader") + if err != nil { + return nil, err + } + + bodyReader = readablestream.NewReader(r) + } + req := httptest.NewRequest( method, url, - readablestream.NewReader(r), + bodyReader, ) headers, err := value.Get("headers")