From 6e47f16fe16e2f798c09616c5c09b32a75cf8c03 Mon Sep 17 00:00:00 2001 From: Julien Neuhart Date: Wed, 15 Sep 2021 17:41:03 +0200 Subject: [PATCH] fix: filename case (#351) --- go.mod | 8 +- go.sum | 10 +++ pkg/modules/api/context.go | 3 +- pkg/modules/api/formdata.go | 4 +- pkg/modules/api/formdata_test.go | 84 +++++++++++++++++- pkg/modules/api/middlewares_test.go | 4 +- pkg/modules/chromium/chromium_test.go | 3 + test/testdata/chromium/html/sample5/MyImg.gif | Bin 0 -> 29685 bytes .../testdata/chromium/html/sample5/index.html | 15 ++++ 9 files changed, 118 insertions(+), 13 deletions(-) create mode 100644 test/testdata/chromium/html/sample5/MyImg.gif create mode 100644 test/testdata/chromium/html/sample5/index.html diff --git a/go.mod b/go.mod index 11612374..2e288727 100644 --- a/go.mod +++ b/go.mod @@ -5,17 +5,17 @@ go 1.17 require ( github.com/alexliesenfeld/health v0.6.0 github.com/andybalholm/brotli v1.0.3 // indirect - github.com/chromedp/cdproto v0.0.0-20210823203301-2c0adcc9edc4 + github.com/chromedp/cdproto v0.0.0-20210910012206-68626162910d github.com/chromedp/chromedp v0.7.4 github.com/golang/snappy v0.0.4 // indirect github.com/google/uuid v1.3.0 github.com/hashicorp/go-cleanhttp v0.5.2 // indirect github.com/hashicorp/go-retryablehttp v0.7.0 - github.com/klauspost/compress v1.13.4 // indirect + github.com/klauspost/compress v1.13.6 // indirect github.com/klauspost/pgzip v1.2.5 // indirect github.com/labstack/echo/v4 v4.5.0 github.com/labstack/gommon v0.3.0 - github.com/mattn/go-isatty v0.0.13 // indirect + github.com/mattn/go-isatty v0.0.14 // indirect github.com/mholt/archiver/v3 v3.5.0 github.com/microcosm-cc/bluemonday v1.0.15 github.com/nwaples/rardecode v1.1.2 // indirect @@ -26,7 +26,7 @@ require ( github.com/ulikunitz/xz v0.5.10 // indirect go.uber.org/atomic v1.9.0 // indirect go.uber.org/multierr v1.7.0 - go.uber.org/zap v1.19.0 + go.uber.org/zap v1.19.1 golang.org/x/crypto v0.0.0-20210817164053-32db794688a5 // indirect golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d // indirect golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d // indirect diff --git a/go.sum b/go.sum index 56a10994..adaa9e27 100644 --- a/go.sum +++ b/go.sum @@ -11,6 +11,8 @@ github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZx github.com/chromedp/cdproto v0.0.0-20210713064928-7d28b402946a/go.mod h1:At5TxYYdxkbQL0TSefRjhLE3Q0lgvqKKMSFUglJ7i1U= github.com/chromedp/cdproto v0.0.0-20210823203301-2c0adcc9edc4 h1:cD7F5LfNjC4dtb+BQe1KxxE8RsceYtS+Kyo+yEs4iUc= github.com/chromedp/cdproto v0.0.0-20210823203301-2c0adcc9edc4/go.mod h1:At5TxYYdxkbQL0TSefRjhLE3Q0lgvqKKMSFUglJ7i1U= +github.com/chromedp/cdproto v0.0.0-20210910012206-68626162910d h1:77O+89zb1W9dPNUGjXOGt/J4LP70jPIPz9Rxs3aSX1w= +github.com/chromedp/cdproto v0.0.0-20210910012206-68626162910d/go.mod h1:At5TxYYdxkbQL0TSefRjhLE3Q0lgvqKKMSFUglJ7i1U= github.com/chromedp/chromedp v0.7.4 h1:U+0d3WbB/Oj4mDuBOI0P7S3PJEued5UZIl5AJ3QulwU= github.com/chromedp/chromedp v0.7.4/go.mod h1:dBj+SXuQHznp6ZPwZeDDEBZKwclUwDLbZ0hjMialMYs= github.com/chromedp/sysutil v1.0.0 h1:+ZxhTpfpZlmchB58ih/LBHX52ky7w2VhQVKQMucy3Ic= @@ -54,6 +56,8 @@ github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0 github.com/klauspost/compress v1.10.10/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.13.4 h1:0zhec2I8zGnjWcKyLl6i3gPqKANCCn5e9xmviEEeX6s= github.com/klauspost/compress v1.13.4/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= +github.com/klauspost/compress v1.13.6 h1:P76CopJELS0TiO2mebmnzgWaajssP/EszplttgQxcgc= +github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/klauspost/pgzip v1.2.4/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= github.com/klauspost/pgzip v1.2.5 h1:qnWYvvKqedOF2ulHpMG72XQol4ILEJ8k2wwRl/Km8oE= @@ -77,6 +81,8 @@ github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2y github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.13 h1:qdl+GuBjcsKKDco5BsxPJlId98mSWNKqYA+Co0SC1yA= github.com/mattn/go-isatty v0.0.13/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= +github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= +github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mholt/archiver/v3 v3.5.0 h1:nE8gZIrw66cu4osS/U7UW7YDuGMHssxKutU8IfWxwWE= github.com/mholt/archiver/v3 v3.5.0/go.mod h1:qqTTPUK/HZPFgFQ/TJ3BzvTpF/dPtFVJXdQbCmeMxwc= github.com/microcosm-cc/bluemonday v1.0.15 h1:J4uN+qPng9rvkBZBoBb8YGR+ijuklIMpSOZZLjYpbeY= @@ -124,11 +130,14 @@ go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE= go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/goleak v1.1.10 h1:z+mqJhf6ss6BSfSM671tgKyZBFPTTJM+HLxnhPC3wu0= go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= +go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= go.uber.org/multierr v1.7.0 h1:zaiO/rmgFjbmCXdSYJWQcdvOCsthmdaHfr3Gm2Kx4Ec= go.uber.org/multierr v1.7.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= go.uber.org/zap v1.19.0 h1:mZQZefskPPCMIBCSEH0v2/iUqqLrYtaeqwD6FUGUnFE= go.uber.org/zap v1.19.0/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= +go.uber.org/zap v1.19.1 h1:ue41HOKd1vGURxrmeKIgELGb3jPW9DMUDGtsinblHwI= +go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= @@ -166,6 +175,7 @@ golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210525143221-35b2ab0089ea/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210820121016-41cdb8703e55 h1:rw6UNGRMfarCepjI8qOepea/SXwIBVfTKjztZ5gBbq4= golang.org/x/sys v0.0.0-20210820121016-41cdb8703e55/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= diff --git a/pkg/modules/api/context.go b/pkg/modules/api/context.go index 88fb79c3..41e53ce0 100644 --- a/pkg/modules/api/context.go +++ b/pkg/modules/api/context.go @@ -125,10 +125,9 @@ func newContext(echoCtx echo.Context, logger *zap.Logger, timeout time.Duration) copyToDisk := func(fh *multipart.FileHeader) error { // Avoid directory traversal and normalize filename. // See https://github.com/gotenberg/gotenberg/issues/104. - // See https://github.com/gotenberg/gotenberg/issues/228. t := transform.Chain(norm.NFD, runes.Remove(runes.In(unicode.Mn)), norm.NFC) - filename, _, err := transform.String(t, strings.ToLower(filepath.Base(fh.Filename))) + filename, _, err := transform.String(t, filepath.Base(fh.Filename)) if err != nil { return fmt.Errorf("transform filename: %w", err) } diff --git a/pkg/modules/api/formdata.go b/pkg/modules/api/formdata.go index c4260a36..376e8df5 100644 --- a/pkg/modules/api/formdata.go +++ b/pkg/modules/api/formdata.go @@ -396,7 +396,9 @@ func (form *FormData) mustAssign(key, value string, target interface{}) *FormDat // path binds the absolute path of a form data file to a string variable. func (form *FormData) path(filename string, target *string) *FormData { for name, path := range form.files { - if name == filename { + // See https://github.com/gotenberg/gotenberg/issues/228. + nameLowerExt := strings.TrimSuffix(name, filepath.Ext(name)) + strings.ToLower(filepath.Ext(name)) + if name == filename || nameLowerExt == filename { *target = path return form } diff --git a/pkg/modules/api/formdata_test.go b/pkg/modules/api/formdata_test.go index f16a4e5d..8773c9d0 100644 --- a/pkg/modules/api/formdata_test.go +++ b/pkg/modules/api/formdata_test.go @@ -850,6 +850,7 @@ func TestFormData_MandatoryPath(t *testing.T) { func TestFormData_Content(t *testing.T) { for i, tc := range []struct { form *FormData + filename string defaultValue string expect string expectErr bool @@ -863,6 +864,7 @@ func TestFormData_Content(t *testing.T) { "bar": "/bar", }, }, + filename: "foo", }, { form: &FormData{ @@ -870,6 +872,7 @@ func TestFormData_Content(t *testing.T) { "bar": "/bar", }, }, + filename: "foo", defaultValue: "foo", expect: "foo", }, @@ -879,6 +882,7 @@ func TestFormData_Content(t *testing.T) { "foo": "/foo", }, }, + filename: "foo", expectErr: true, }, { @@ -887,12 +891,31 @@ func TestFormData_Content(t *testing.T) { "foo": "/tests/test/testdata/api/sample1.txt", }, }, - expect: "foo", + filename: "foo", + expect: "foo", + }, + { + form: &FormData{ + files: map[string]string{ + "foo.TXT": "/tests/test/testdata/api/sample1.txt", + }, + }, + filename: "foo.txt", + expect: "foo", + }, + { + form: &FormData{ + files: map[string]string{ + "foo.txt": "/tests/test/testdata/api/sample1.txt", + }, + }, + filename: "foo.txt", + expect: "foo", }, } { var actual string - tc.form.Content("foo", &actual, tc.defaultValue) + tc.form.Content(tc.filename, &actual, tc.defaultValue) if actual != tc.expect { t.Errorf("test %d: expected '%s' but got '%s'", i, tc.expect, actual) @@ -911,11 +934,13 @@ func TestFormData_Content(t *testing.T) { func TestFormData_MandatoryContent(t *testing.T) { for i, tc := range []struct { form *FormData + filename string expect string expectErr bool }{ { form: &FormData{}, + filename: "foo", expectErr: true, }, { @@ -924,6 +949,7 @@ func TestFormData_MandatoryContent(t *testing.T) { "bar": "/bar", }, }, + filename: "foo", expectErr: true, }, { @@ -932,6 +958,7 @@ func TestFormData_MandatoryContent(t *testing.T) { "foo": "/foo", }, }, + filename: "foo", expectErr: true, }, { @@ -940,12 +967,31 @@ func TestFormData_MandatoryContent(t *testing.T) { "foo": "/tests/test/testdata/api/sample1.txt", }, }, - expect: "foo", + filename: "foo", + expect: "foo", + }, + { + form: &FormData{ + files: map[string]string{ + "foo.TXT": "/tests/test/testdata/api/sample1.txt", + }, + }, + filename: "foo.txt", + expect: "foo", + }, + { + form: &FormData{ + files: map[string]string{ + "foo.txt": "/tests/test/testdata/api/sample1.txt", + }, + }, + filename: "foo.txt", + expect: "foo", }, } { var actual string - tc.form.MandatoryContent("foo", &actual) + tc.form.MandatoryContent(tc.filename, &actual) if actual != tc.expect { t.Errorf("test %d: expected '%s' but got '%s'", i, tc.expect, actual) @@ -995,6 +1041,21 @@ func TestFormData_Paths(t *testing.T) { }, expectCount: 2, }, + { + form: &FormData{ + files: map[string]string{ + "foo.zip": "/foo.zip", + "b.PDF": "/b.PDF", + "a.pdf": "/a.pdf", + }, + }, + extensions: []string{".pdf"}, + expect: []string{ + "/a.pdf", + "/b.PDF", + }, + expectCount: 2, + }, } { var actual []string @@ -1051,6 +1112,21 @@ func TestFormData_MandatoryPaths(t *testing.T) { }, expectCount: 2, }, + { + form: &FormData{ + files: map[string]string{ + "foo.zip": "/foo.zip", + "b.PDF": "/b.PDF", + "a.pdf": "/a.pdf", + }, + }, + extensions: []string{".pdf"}, + expect: []string{ + "/a.pdf", + "/b.PDF", + }, + expectCount: 2, + }, } { var actual []string diff --git a/pkg/modules/api/middlewares_test.go b/pkg/modules/api/middlewares_test.go index 6c4a68c4..d3391eca 100644 --- a/pkg/modules/api/middlewares_test.go +++ b/pkg/modules/api/middlewares_test.go @@ -111,7 +111,7 @@ func TestHttpErrorHandler(t *testing.T) { func() { rand.Seed(time.Now().UnixNano()) - webhookPort := rand.Intn(65535 - 1025 + 1) + 1025 + webhookPort := rand.Intn(65535-1025+1) + 1025 tc.webhookClient.errorURL = fmt.Sprintf(tc.webhookClient.errorURL, webhookPort) @@ -825,7 +825,7 @@ func TestContextMiddlewareWithWebhook(t *testing.T) { webhook.HidePort = true rand.Seed(time.Now().UnixNano()) - webhookPort := rand.Intn(65535 - 1025 + 1) + 1025 + webhookPort := rand.Intn(65535-1025+1) + 1025 if tc.autoWebhookURLs { c.Request().Header.Set("Gotenberg-Webhook-Url", fmt.Sprintf("http://localhost:%d/", webhookPort)) diff --git a/pkg/modules/chromium/chromium_test.go b/pkg/modules/chromium/chromium_test.go index 8c1e374d..7e3d7718 100644 --- a/pkg/modules/chromium/chromium_test.go +++ b/pkg/modules/chromium/chromium_test.go @@ -312,6 +312,9 @@ func TestChromium_PDF(t *testing.T) { }(), }, }, + { + URL: "file:///tests/test/testdata/chromium/html/sample5/index.html", + }, } { func() { mod := new(Chromium) diff --git a/test/testdata/chromium/html/sample5/MyImg.gif b/test/testdata/chromium/html/sample5/MyImg.gif new file mode 100644 index 0000000000000000000000000000000000000000..6b066b53edc654a8a3037f2ed5787607a67fea4a GIT binary patch literal 29685 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

p00D}zTu$KmEJRkzASh)(@K7-9wp~2 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

-%qte=8FS)zy{Z??EX)jmlqiI{9V1867- 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 I2?Naj58Q}%!2kdN literal 0 HcmV?d00001 diff --git a/test/testdata/chromium/html/sample5/index.html b/test/testdata/chromium/html/sample5/index.html new file mode 100644 index 00000000..087135fc --- /dev/null +++ b/test/testdata/chromium/html/sample5/index.html @@ -0,0 +1,15 @@ + + + + + Gutenberg + + +

+
+

Gutenberg

+ +
+
+ + \ No newline at end of file