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:
@@ -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.
|
||||||
|
|
||||||
|
34
svg/svg.go
34
svg/svg.go
@@ -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
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user