1
0
mirror of https://github.com/imgproxy/imgproxy.git synced 2025-09-16 09:36:18 +02:00

Fix possible infinite loop during SVG sanitization

This commit is contained in:
DarthSim
2025-09-10 18:02:50 +03:00
parent e5d528d60a
commit 6f52eca85e
2 changed files with 18 additions and 17 deletions

View File

@@ -17,6 +17,7 @@
- Fix `X-Origin-Height` and `X-Result-Height` debug header values for animated images.
- Fix keeping copyright info in EXIF.
- Fix preserving color profiles in TIFF images.
- Fix freezes during sanitization or minification of some broken SVGs.
- (pro) Fix generating thumbnails for VP9 videos with high bit depth.
- (pro) Fix `IMGPROXY_CUSTOM_RESPONSE_HEADERS` and `IMGPROXY_RESPONSE_HEADERS_PASSTHROUGH` configs behavior when the `raw` processing option is used.

View File

@@ -37,11 +37,16 @@ func Sanitize(data *imagedata.ImageData) (*imagedata.ImageData, error) {
for {
tt, tdata := l.Next()
if ignoreTag > 0 {
switch tt {
case xml.ErrorToken:
if tt == xml.ErrorToken {
if l.Err() != io.EOF {
cancel()
return nil, l.Err()
}
break
}
if ignoreTag > 0 {
switch tt {
case xml.EndTagToken, xml.StartTagCloseVoidToken:
ignoreTag--
case xml.StartTagToken:
@@ -52,20 +57,6 @@ func Sanitize(data *imagedata.ImageData) (*imagedata.ImageData, error) {
}
switch tt {
case xml.ErrorToken:
if l.Err() != io.EOF {
cancel()
return nil, l.Err()
}
newData := imagedata.ImageData{
Data: buf.Bytes(),
Type: data.Type,
Headers: cloneHeaders(data.Headers),
}
newData.SetCancel(cancel)
return &newData, nil
case xml.StartTagToken:
curTagName = strings.ToLower(string(l.Text()))
@@ -94,4 +85,13 @@ func Sanitize(data *imagedata.ImageData) (*imagedata.ImageData, error) {
buf.Write(tdata)
}
}
newData := imagedata.ImageData{
Data: buf.Bytes(),
Type: data.Type,
Headers: cloneHeaders(data.Headers),
}
newData.SetCancel(cancel)
return &newData, nil
}