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 `X-Origin-Height` and `X-Result-Height` debug header values for animated images.
- Fix keeping copyright info in EXIF. - Fix keeping copyright info in EXIF.
- Fix preserving color profiles in TIFF images. - 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 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. - (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 { for {
tt, tdata := l.Next() tt, tdata := l.Next()
if ignoreTag > 0 { if tt == xml.ErrorToken {
switch tt { if l.Err() != io.EOF {
case xml.ErrorToken:
cancel() cancel()
return nil, l.Err() return nil, l.Err()
}
break
}
if ignoreTag > 0 {
switch tt {
case xml.EndTagToken, xml.StartTagCloseVoidToken: case xml.EndTagToken, xml.StartTagCloseVoidToken:
ignoreTag-- ignoreTag--
case xml.StartTagToken: case xml.StartTagToken:
@@ -52,20 +57,6 @@ func Sanitize(data *imagedata.ImageData) (*imagedata.ImageData, error) {
} }
switch tt { 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: case xml.StartTagToken:
curTagName = strings.ToLower(string(l.Text())) curTagName = strings.ToLower(string(l.Text()))
@@ -94,4 +85,13 @@ func Sanitize(data *imagedata.ImageData) (*imagedata.ImageData, error) {
buf.Write(tdata) buf.Write(tdata)
} }
} }
newData := imagedata.ImageData{
Data: buf.Bytes(),
Type: data.Type,
Headers: cloneHeaders(data.Headers),
}
newData.SetCancel(cancel)
return &newData, nil
} }