fix(svg/sanitize): preserve headers from origin data

This commit is contained in:
Andrei Vydrin
2023-06-22 18:22:10 +07:00
committed by DarthSim
parent 4e4b9edb53
commit 4de9b83899
3 changed files with 29 additions and 5 deletions

View File

@@ -362,7 +362,7 @@ func handleProcessing(reqID string, rw http.ResponseWriter, r *http.Request) {
// Don't process SVG
if originData.Type == imagetype.SVG {
if config.SanitizeSvg {
sanitized, svgErr := svg.Satitize(originData)
sanitized, svgErr := svg.Sanitize(originData)
checkErr(ctx, "svg_processing", svgErr)
// Since we'll replace origin data, it's better to close it to return

View File

@@ -317,13 +317,36 @@ func (s *ProcessingHandlerTestSuite) TestSkipProcessingSVG() {
require.Equal(s.T(), 200, res.StatusCode)
actual := s.readBody(res)
expected, err := svg.Satitize(&imagedata.ImageData{Data: s.readTestFile("test1.svg")})
expected, err := svg.Sanitize(&imagedata.ImageData{Data: s.readTestFile("test1.svg")})
require.Nil(s.T(), err)
require.True(s.T(), bytes.Equal(expected.Data, actual))
}
func (s *ProcessingHandlerTestSuite) TestPreserveOriginSVGHeaders() {
rw := s.send("/unsafe/rs:fill:4:4/plain/local:///test1.svg")
res := rw.Result()
require.Equal(s.T(), 200, res.StatusCode)
actual := s.readBody(res)
originHeaders := map[string]string{
"Content-Type": "image/svg+xml",
"Cache-Control": "public, max-age=12345",
}
expected, err := svg.Sanitize(&imagedata.ImageData{
Data: s.readTestFile("test1.svg"),
Headers: originHeaders,
})
require.Nil(s.T(), err)
require.True(s.T(), bytes.Equal(expected.Data, actual))
require.Equal(s.T(), originHeaders, expected.Headers)
}
func (s *ProcessingHandlerTestSuite) TestNotSkipProcessingSVGToJPG() {
rw := s.send("/unsafe/rs:fill:4:4/plain/local:///test1.svg@jpg")
res := rw.Result()

View File

@@ -27,7 +27,7 @@ const feDropShadowTemplate = `
</feMerge>
`
func Satitize(data *imagedata.ImageData) (*imagedata.ImageData, error) {
func Sanitize(data *imagedata.ImageData) (*imagedata.ImageData, error) {
r := bytes.NewReader(data.Data)
l := xml.NewLexer(parse.NewInput(r))
@@ -62,8 +62,9 @@ func Satitize(data *imagedata.ImageData) (*imagedata.ImageData, error) {
}
newData := imagedata.ImageData{
Data: buf.Bytes(),
Type: data.Type,
Data: buf.Bytes(),
Type: data.Type,
Headers: data.Headers,
}
newData.SetCancel(cancel)