-
Notifications
You must be signed in to change notification settings - Fork 18.3k
Closed
Labels
FrozenDueToAgeNeedsFixThe path to resolution is known, but the work has not been done.The path to resolution is known, but the work has not been done.
Milestone
Description
Please answer these questions before submitting your issue. Thanks!
- What version of Go are you using (
go version
)?
go version devel +1f44643 Wed Jun 22 00:12:55 2016 +0000 darwin/amd64 - What operating system and processor architecture are you using (
go env
)?
GOARCH="amd64"
GOBIN="/Users/emmanuelodeke/go/bin"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/Users/emmanuelodeke/go"
GORACE=""
GOROOT="/Users/emmanuelodeke/go/src/go.googlesource.com/go"
GOTOOLDIR="/Users/emmanuelodeke/go/src/go.googlesource.com/go/pkg/tool/darwin_amd64"
CC="clang"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/kn/s30g1srd4h50bh6sd322tppm0000gn/T/go-build038095302=/tmp/go-build -gno-record-gcc-switches -fno-common"
CXX="clang++"
CGO_ENABLED="1" - What did you do?
Run program at https://play.golang.org/p/NqqvAkiIao with source of http://ualberta.ca/~odeke/tx.gif
$ go run NqqvAkiIao.go --source http://ualberta.ca/~odeke/tx.gif
If possible, provide a recipe for reproducing the error.
A complete runnable program is good.
A link on play.golang.org is best.
- What did you expect to see?
Successful decoding of a gif with no errors - What did you see instead?
gif: too much image data
/cc @montanaflynn who reported this issue first.
Code inlined
/*
After running this gif
https://67.media.tumblr.com//b02659b27081314a412215f4eb31dacf/tumblr_nu2x4whJgy1udf6d3o1_400.gif
through ffmpeg, Go fails to decode the gif with error:
`gif: too much image data`
Command:
$ ffmpeg -i https://67.media.tumblr.com//b02659b27081314a412215f4eb31dacf/tumblr_nu2x4whJgy1udf6d3o1_400.gif outf.gif
$ go run main.go --source outf.gif
- Repro URL
http://ualberta.ca/~odeke/tx.gif
Interestingly:
- The outfile is 1.0MB.
- The original file is 1.4MB.
*/
package main
import (
"flag"
"image/gif"
"log"
"net/http"
"path/filepath"
"strings"
)
func localAndNetBasedClient() *http.Client {
transport := new(http.Transport)
transport.RegisterProtocol("file", http.NewFileTransport(http.Dir("/")))
client := new(http.Client)
client.Transport = transport
return client
}
var httpPrefixes = []string{"http", "https"}
func ensureFitForFetch(source string) string {
for _, prefix := range httpPrefixes {
if strings.HasPrefix(source, prefix) {
return source
}
}
absSource, err := filepath.Abs(source)
if err == nil {
source = absSource
}
return strings.Join([]string{"file://", source}, "/")
}
func main() {
var source string
flag.StringVar(&source, "source",
"https://67.media.tumblr.com//b02659b27081314a412215f4eb31dacf/tumblr_nu2x4whJgy1udf6d3o1_400.gif",
"the URI of the gif you want to ensure properly decodes in Go")
flag.Parse()
client := localAndNetBasedClient()
source = ensureFitForFetch(source)
res, err := client.Get(source)
if err != nil {
log.Fatal(err)
}
defer res.Body.Close()
if _, err := gif.DecodeAll(res.Body); err != nil {
log.Fatal(err)
}
}
Metadata
Metadata
Assignees
Labels
FrozenDueToAgeNeedsFixThe path to resolution is known, but the work has not been done.The path to resolution is known, but the work has not been done.