diff --git a/processing_handler.go b/processing_handler.go index a913da4a..b8aa5ff0 100644 --- a/processing_handler.go +++ b/processing_handler.go @@ -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 diff --git a/processing_handler_test.go b/processing_handler_test.go index abafff4e..f5051e90 100644 --- a/processing_handler_test.go +++ b/processing_handler_test.go @@ -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() diff --git a/svg/svg.go b/svg/svg.go index 8e51d0b8..7e3d3e05 100644 --- a/svg/svg.go +++ b/svg/svg.go @@ -27,7 +27,7 @@ const feDropShadowTemplate = ` ` -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)