From eeb78bd141ea69a59c4361fac2cfe6fc36df59b3 Mon Sep 17 00:00:00 2001 From: tobi <31960611+tsmethurst@users.noreply.github.com> Date: Mon, 25 Apr 2022 14:45:44 +0200 Subject: [PATCH] [bugfix] Allow processing of .png files where checksum is not correct (#487) * add png stripping code from google/wuffs * experiment with stripping data from pngs * add test images * use StrippedPngDecode for pngs * add StrippedPngDecode func * update tests for (no)alphachannel pngs * nolint on copied function --- README.md | 1 + internal/media/image.go | 6 +- internal/media/manager_test.go | 144 +++++++++++++ internal/media/png-stripper.go | 204 ++++++++++++++++++ .../test/test-png-alphachannel-processed.png | Bin 0 -> 18904 bytes .../test/test-png-alphachannel-thumbnail.jpg | Bin 0 -> 6446 bytes .../test-png-noalphachannel-processed.png | Bin 0 -> 17471 bytes .../test-png-noalphachannel-thumbnail.jpg | Bin 0 -> 6446 bytes 8 files changed, 352 insertions(+), 3 deletions(-) create mode 100644 internal/media/png-stripper.go create mode 100644 internal/media/test/test-png-alphachannel-processed.png create mode 100644 internal/media/test/test-png-alphachannel-thumbnail.jpg create mode 100644 internal/media/test/test-png-noalphachannel-processed.png create mode 100644 internal/media/test/test-png-noalphachannel-thumbnail.jpg diff --git a/README.md b/README.md index 1a4740a2d..576af3b0c 100644 --- a/README.md +++ b/README.md @@ -196,6 +196,7 @@ The following libraries and frameworks are used by GoToSocial, with gratitude - [gin-contrib/static](https://github.com/gin-contrib/static); Gin static page middleware. [MIT License](https://spdx.org/licenses/MIT.html) - [go-fed/httpsig](https://github.com/go-fed/httpsig); secure HTTP signature library. [BSD-3-Clause License](https://spdx.org/licenses/BSD-3-Clause.html). - [google/uuid](https://github.com/google/uuid); UUID generation. [BSD-3-Clause License](https://spdx.org/licenses/BSD-3-Clause.html) +- [google/wuffs](https://github.com/google/wuffs); png-stripping code. [Apache-2.0 License](https://spdx.org/licenses/Apache-2.0.html). - [go-playground/validator](https://github.com/go-playground/validator); struct validation. [MIT License](https://spdx.org/licenses/MIT.html) - [gorilla/websocket](https://github.com/gorilla/websocket); Websocket connectivity. [BSD-2-Clause License](https://spdx.org/licenses/BSD-2-Clause.html). - [gruf/go-runners](https://codeberg.org/gruf/go-runners); worker pool library. [MIT License](https://spdx.org/licenses/MIT.html). diff --git a/internal/media/image.go b/internal/media/image.go index 4f2db0e95..cb26ad539 100644 --- a/internal/media/image.go +++ b/internal/media/image.go @@ -74,7 +74,7 @@ func decodeImage(r io.Reader, contentType string) (*imageMeta, error) { case mimeImageJpeg: i, err = jpeg.Decode(r) case mimeImagePng: - i, err = png.Decode(r) + i, err = StrippedPngDecode(r) default: err = fmt.Errorf("content type %s not recognised", contentType) } @@ -117,7 +117,7 @@ func deriveThumbnail(r io.Reader, contentType string, createBlurhash bool) (*ima case mimeImageJpeg: i, err = jpeg.Decode(r) case mimeImagePng: - i, err = png.Decode(r) + i, err = StrippedPngDecode(r) case mimeImageGif: i, err = gif.Decode(r) default: @@ -175,7 +175,7 @@ func deriveStaticEmoji(r io.Reader, contentType string) (*imageMeta, error) { switch contentType { case mimeImagePng: - i, err = png.Decode(r) + i, err = StrippedPngDecode(r) if err != nil { return nil, err } diff --git a/internal/media/manager_test.go b/internal/media/manager_test.go index 95cefe1db..75e706ba7 100644 --- a/internal/media/manager_test.go +++ b/internal/media/manager_test.go @@ -111,6 +111,150 @@ func (suite *ManagerTestSuite) TestSimpleJpegProcessBlocking() { suite.Equal(processedThumbnailBytesExpected, processedThumbnailBytes) } +func (suite *ManagerTestSuite) TestPngNoAlphaChannelProcessBlocking() { + ctx := context.Background() + + data := func(_ context.Context) (io.Reader, int, error) { + // load bytes from a test image + b, err := os.ReadFile("./test/test-png-noalphachannel.png") + if err != nil { + panic(err) + } + return bytes.NewBuffer(b), len(b), nil + } + + accountID := "01FS1X72SK9ZPW0J1QQ68BD264" + + // process the media with no additional info provided + processingMedia, err := suite.manager.ProcessMedia(ctx, data, nil, accountID, nil) + suite.NoError(err) + // fetch the attachment id from the processing media + attachmentID := processingMedia.AttachmentID() + + // do a blocking call to fetch the attachment + attachment, err := processingMedia.LoadAttachment(ctx) + suite.NoError(err) + suite.NotNil(attachment) + + // make sure it's got the stuff set on it that we expect + // the attachment ID and accountID we expect + suite.Equal(attachmentID, attachment.ID) + suite.Equal(accountID, attachment.AccountID) + + // file meta should be correctly derived from the image + suite.EqualValues(gtsmodel.Original{ + Width: 186, Height: 187, Size: 34782, Aspect: 0.9946524064171123, + }, attachment.FileMeta.Original) + suite.EqualValues(gtsmodel.Small{ + Width: 186, Height: 187, Size: 34782, Aspect: 0.9946524064171123, + }, attachment.FileMeta.Small) + suite.Equal("image/png", attachment.File.ContentType) + suite.Equal("image/jpeg", attachment.Thumbnail.ContentType) + suite.Equal(17471, attachment.File.FileSize) + suite.Equal("LFP?{^.A-?xd.9o#RVRQ~oj:_0xW", attachment.Blurhash) + + // now make sure the attachment is in the database + dbAttachment, err := suite.db.GetAttachmentByID(ctx, attachmentID) + suite.NoError(err) + suite.NotNil(dbAttachment) + + // make sure the processed file is in storage + processedFullBytes, err := suite.storage.Get(attachment.File.Path) + suite.NoError(err) + suite.NotEmpty(processedFullBytes) + + // load the processed bytes from our test folder, to compare + processedFullBytesExpected, err := os.ReadFile("./test/test-png-noalphachannel-processed.png") + suite.NoError(err) + suite.NotEmpty(processedFullBytesExpected) + + // the bytes in storage should be what we expected + suite.Equal(processedFullBytesExpected, processedFullBytes) + + // now do the same for the thumbnail and make sure it's what we expected + processedThumbnailBytes, err := suite.storage.Get(attachment.Thumbnail.Path) + suite.NoError(err) + suite.NotEmpty(processedThumbnailBytes) + + processedThumbnailBytesExpected, err := os.ReadFile("./test/test-png-noalphachannel-thumbnail.jpg") + suite.NoError(err) + suite.NotEmpty(processedThumbnailBytesExpected) + + suite.Equal(processedThumbnailBytesExpected, processedThumbnailBytes) +} + +func (suite *ManagerTestSuite) TestPngAlphaChannelProcessBlocking() { + ctx := context.Background() + + data := func(_ context.Context) (io.Reader, int, error) { + // load bytes from a test image + b, err := os.ReadFile("./test/test-png-alphachannel.png") + if err != nil { + panic(err) + } + return bytes.NewBuffer(b), len(b), nil + } + + accountID := "01FS1X72SK9ZPW0J1QQ68BD264" + + // process the media with no additional info provided + processingMedia, err := suite.manager.ProcessMedia(ctx, data, nil, accountID, nil) + suite.NoError(err) + // fetch the attachment id from the processing media + attachmentID := processingMedia.AttachmentID() + + // do a blocking call to fetch the attachment + attachment, err := processingMedia.LoadAttachment(ctx) + suite.NoError(err) + suite.NotNil(attachment) + + // make sure it's got the stuff set on it that we expect + // the attachment ID and accountID we expect + suite.Equal(attachmentID, attachment.ID) + suite.Equal(accountID, attachment.AccountID) + + // file meta should be correctly derived from the image + suite.EqualValues(gtsmodel.Original{ + Width: 186, Height: 187, Size: 34782, Aspect: 0.9946524064171123, + }, attachment.FileMeta.Original) + suite.EqualValues(gtsmodel.Small{ + Width: 186, Height: 187, Size: 34782, Aspect: 0.9946524064171123, + }, attachment.FileMeta.Small) + suite.Equal("image/png", attachment.File.ContentType) + suite.Equal("image/jpeg", attachment.Thumbnail.ContentType) + suite.Equal(18904, attachment.File.FileSize) + suite.Equal("LFP?{^.A-?xd.9o#RVRQ~oj:_0xW", attachment.Blurhash) + + // now make sure the attachment is in the database + dbAttachment, err := suite.db.GetAttachmentByID(ctx, attachmentID) + suite.NoError(err) + suite.NotNil(dbAttachment) + + // make sure the processed file is in storage + processedFullBytes, err := suite.storage.Get(attachment.File.Path) + suite.NoError(err) + suite.NotEmpty(processedFullBytes) + + // load the processed bytes from our test folder, to compare + processedFullBytesExpected, err := os.ReadFile("./test/test-png-alphachannel-processed.png") + suite.NoError(err) + suite.NotEmpty(processedFullBytesExpected) + + // the bytes in storage should be what we expected + suite.Equal(processedFullBytesExpected, processedFullBytes) + + // now do the same for the thumbnail and make sure it's what we expected + processedThumbnailBytes, err := suite.storage.Get(attachment.Thumbnail.Path) + suite.NoError(err) + suite.NotEmpty(processedThumbnailBytes) + + processedThumbnailBytesExpected, err := os.ReadFile("./test/test-png-alphachannel-thumbnail.jpg") + suite.NoError(err) + suite.NotEmpty(processedThumbnailBytesExpected) + + suite.Equal(processedThumbnailBytesExpected, processedThumbnailBytes) +} + func (suite *ManagerTestSuite) TestSimpleJpegProcessBlockingWithCallback() { ctx := context.Background() diff --git a/internal/media/png-stripper.go b/internal/media/png-stripper.go new file mode 100644 index 000000000..62ae393fe --- /dev/null +++ b/internal/media/png-stripper.go @@ -0,0 +1,204 @@ +/* + GoToSocial + Copyright (C) 2021-2022 GoToSocial Authors admin@gotosocial.org + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +package media + +/* + The code in this file is taken from the following source: + https://github.com/google/wuffs/blob/414a011491ff513b86d8694c5d71800f3cb5a715/script/strip-png-ancillary-chunks.go + + It presents a workaround for this issue: https://github.com/golang/go/issues/43382 + + The license for the copied code is reproduced below: + + Copyright 2021 The Wuffs Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +// strip-png-ancillary-chunks.go copies PNG data from stdin to stdout, removing +// any ancillary chunks. +// +// Specification-compliant PNG decoders are required to honor critical chunks +// but may ignore ancillary (non-critical) chunks. Stripping out ancillary +// chunks before decoding should mean that different PNG decoders will agree on +// the decoded output regardless of which ancillary chunk types they choose to +// honor. Specifically, some PNG decoders may implement color and gamma +// correction but not all do. +// +// This program will strip out all ancillary chunks, but it should be +// straightforward to copy-paste-and-modify it to strip out only certain chunk +// types (e.g. only "tRNS" transparency chunks). +// +// -------- +// +// A PNG file consists of an 8-byte magic identifier and then a series of +// chunks. Each chunk is: +// +// - a 4-byte uint32 payload length N. +// - a 4-byte chunk type (e.g. "gAMA" for gamma correction metadata). +// - an N-byte payload. +// - a 4-byte CRC-32 checksum of the previous (N + 4) bytes, including the +// chunk type but excluding the payload length. +// +// Chunk types consist of 4 ASCII letters. The upper-case / lower-case bit of +// the first letter denote critical or ancillary chunks: "IDAT" and "PLTE" are +// critical, "gAMA" and "tEXt" are ancillary. See +// https://www.w3.org/TR/2003/REC-PNG-20031110/#5Chunk-naming-conventions +// +// -------- + +import ( + "encoding/binary" + "image" + "image/png" + "io" +) + +// chunkTypeAncillaryBit is whether the first byte of a big-endian uint32 chunk +// type (the first of four ASCII letters) is lower-case. +const chunkTypeAncillaryBit = 0x20000000 + +// PNGAncillaryChunkStripper wraps another io.Reader to strip ancillary chunks, +// if the data is in the PNG file format. If the data isn't PNG, it is passed +// through unmodified. +type PNGAncillaryChunkStripper struct { + // Reader is the wrapped io.Reader. + Reader io.Reader + + // stickyErr is the first error returned from the wrapped io.Reader. + stickyErr error + + // buffer[rIndex:wIndex] holds data read from the wrapped io.Reader that + // wasn't passed through yet. + buffer [8]byte + rIndex int + wIndex int + + // pending and discard is the number of remaining bytes for (and whether to + // discard or pass through) the current chunk-in-progress. + pending int64 + discard bool + + // notPNG is set true if the data stream doesn't start with the 8-byte PNG + // magic identifier. If true, the wrapped io.Reader's data (including the + // first up-to-8 bytes) is passed through without modification. + notPNG bool + + // seenMagic is whether we've seen the 8-byte PNG magic identifier. + seenMagic bool +} + +// Read implements io.Reader. +func (r *PNGAncillaryChunkStripper) Read(p []byte) (int, error) { + for { + // If the wrapped io.Reader returned a non-nil error, drain r.buffer + // (what data we have) and return that error (if fully drained). + if r.stickyErr != nil { + n := copy(p, r.buffer[r.rIndex:r.wIndex]) + r.rIndex += n + if r.rIndex < r.wIndex { + return n, nil + } + return n, r.stickyErr + } + + // Handle trivial requests, including draining our buffer. + if len(p) == 0 { + return 0, nil + } else if r.rIndex < r.wIndex { + n := copy(p, r.buffer[r.rIndex:r.wIndex]) + r.rIndex += n + return n, nil + } + + // From here onwards, our buffer is drained: r.rIndex == r.wIndex. + + // Handle non-PNG input. + if r.notPNG { + return r.Reader.Read(p) + } + + // Continue processing any PNG chunk that's in progress, whether + // discarding it or passing it through. + for r.pending > 0 { + if int64(len(p)) > r.pending { + p = p[:r.pending] + } + n, err := r.Reader.Read(p) + r.pending -= int64(n) + r.stickyErr = err + if r.discard { + continue + } + return n, err + } + + // We're either expecting the 8-byte PNG magic identifier or the 4-byte + // PNG chunk length + 4-byte PNG chunk type. Either way, read 8 bytes. + r.rIndex = 0 + r.wIndex, r.stickyErr = io.ReadFull(r.Reader, r.buffer[:8]) + if r.stickyErr != nil { + // Undo io.ReadFull converting io.EOF to io.ErrUnexpectedEOF. + if r.stickyErr == io.ErrUnexpectedEOF { + r.stickyErr = io.EOF + } + continue + } + + // Process those 8 bytes, either: + // - a PNG chunk (if we've already seen the PNG magic identifier), + // - the PNG magic identifier itself (if the input is a PNG) or + // - something else (if it's not a PNG). + //nolint:gocritic + if r.seenMagic { + // The number of pending bytes is equal to (N + 4) because of the 4 + // byte trailer, a checksum. + r.pending = int64(binary.BigEndian.Uint32(r.buffer[:4])) + 4 + chunkType := binary.BigEndian.Uint32(r.buffer[4:]) + r.discard = (chunkType & chunkTypeAncillaryBit) != 0 + if r.discard { + r.rIndex = r.wIndex + } + } else if string(r.buffer[:8]) == "\x89PNG\x0D\x0A\x1A\x0A" { + r.seenMagic = true + } else { + r.notPNG = true + } + } +} + +// StrippedPngDecode strips ancillary data from png to allow more lenient decoding of pngs +// see: https://github.com/golang/go/issues/43382 +// and: https://github.com/google/wuffs/blob/414a011491ff513b86d8694c5d71800f3cb5a715/script/strip-png-ancillary-chunks.go +func StrippedPngDecode(r io.Reader) (image.Image, error) { + strippedPngReader := io.Reader(&PNGAncillaryChunkStripper{ + Reader: r, + }) + return png.Decode(strippedPngReader) +} diff --git a/internal/media/test/test-png-alphachannel-processed.png b/internal/media/test/test-png-alphachannel-processed.png new file mode 100644 index 0000000000000000000000000000000000000000..d3b67e66d1444150475226faa80238652a3ba918 GIT binary patch literal 18904 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 literal 0 HcmV?d00001 diff --git a/internal/media/test/test-png-noalphachannel-processed.png b/internal/media/test/test-png-noalphachannel-processed.png new file mode 100644 index 0000000000000000000000000000000000000000..46bec9097b14ca4cfadf9c574ca9a0b4e90211c7 GIT binary patch literal 17471 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 literal 0 HcmV?d00001