aboutsummaryrefslogtreecommitdiff
path: root/src/encoding/json/v2_stream_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/encoding/json/v2_stream_test.go')
-rw-r--r--src/encoding/json/v2_stream_test.go24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/encoding/json/v2_stream_test.go b/src/encoding/json/v2_stream_test.go
index d7f9f11084..b185b46acb 100644
--- a/src/encoding/json/v2_stream_test.go
+++ b/src/encoding/json/v2_stream_test.go
@@ -8,6 +8,7 @@ package json
import (
"bytes"
+ "errors"
"io"
"log"
"net"
@@ -613,3 +614,26 @@ func TestDecoderInputOffset(t *testing.T) {
t.Fatal("unconsumed testdata")
}
}
+
+func TestDecoderMaxBytesError(t *testing.T) {
+ // Verify that Decoder.Decode returns the underlying IO error
+ // (not wrapped in *SyntaxError) when http.MaxBytesReader
+ // triggers a read limit, matching v1 behavior.
+ oversized := strings.Repeat("x", 1<<20+1)
+ body := `{"name":"` + oversized + `"}`
+
+ req := httptest.NewRequest(http.MethodPost, "/", strings.NewReader(body))
+ rec := httptest.NewRecorder()
+ req.Body = http.MaxBytesReader(rec, req.Body, 1<<20)
+
+ var v map[string]any
+ err := NewDecoder(req.Body).Decode(&v)
+ if err == nil {
+ t.Fatal("expected error, got nil")
+ }
+
+ var maxBytesErr *http.MaxBytesError
+ if !errors.As(err, &maxBytesErr) {
+ t.Errorf("errors.As(err, *http.MaxBytesError) = false, want true\nerror type: %T\nerror: %v", err, err)
+ }
+}