Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
陈曦
sub2api
Commits
40feb86b
Commit
40feb86b
authored
Apr 29, 2026
by
shaw
Browse files
fix(httputil): add decompression bomb guard and fix errcheck lint
parent
f972a2fa
Changes
1
Hide whitespace changes
Inline
Side-by-side
backend/internal/pkg/httputil/body.go
View file @
40feb86b
...
...
@@ -16,6 +16,9 @@ import (
const
(
requestBodyReadInitCap
=
512
requestBodyReadMaxInitCap
=
1
<<
20
// maxDecompressedBodySize limits the decompressed request body to 64 MB
// to prevent decompression bomb attacks.
maxDecompressedBodySize
=
64
<<
20
)
// ReadRequestBodyWithPrealloc reads request body with preallocated buffer based
...
...
@@ -69,21 +72,21 @@ func decompressRequestBody(encoding string, raw []byte) ([]byte, error) {
return
nil
,
err
}
defer
dec
.
Close
()
return
io
.
ReadAll
(
dec
)
return
io
.
ReadAll
(
io
.
LimitReader
(
dec
,
maxDecompressedBodySize
)
)
case
"gzip"
,
"x-gzip"
:
gr
,
err
:=
gzip
.
NewReader
(
bytes
.
NewReader
(
raw
))
if
err
!=
nil
{
return
nil
,
err
}
defer
gr
.
Close
()
return
io
.
ReadAll
(
gr
)
defer
func
()
{
_
=
gr
.
Close
()
}()
return
io
.
ReadAll
(
io
.
LimitReader
(
gr
,
maxDecompressedBodySize
)
)
case
"deflate"
:
zr
,
err
:=
zlib
.
NewReader
(
bytes
.
NewReader
(
raw
))
if
err
!=
nil
{
return
nil
,
err
}
defer
zr
.
Close
()
return
io
.
ReadAll
(
zr
)
defer
func
()
{
_
=
zr
.
Close
()
}()
return
io
.
ReadAll
(
io
.
LimitReader
(
zr
,
maxDecompressedBodySize
)
)
default
:
return
nil
,
errors
.
New
(
"unsupported Content-Encoding"
)
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment