Quellcode durchsuchen

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

Andrei Vydrin vor 1 Jahr
Ursprung
Commit
4de9b83899
3 geänderte Dateien mit 29 neuen und 5 gelöschten Zeilen
  1. 1 1
      processing_handler.go
  2. 24 1
      processing_handler_test.go
  3. 4 3
      svg/svg.go

+ 1 - 1
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

+ 24 - 1
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()

+ 4 - 3
svg/svg.go

@@ -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)