Repository: cshum/imagorvideo (language: go)

Issue:
SIGSEGV: segmentation violation code when sending filters on mp3 without cover
Hi,
I'm receiving the following output when sending an mp3 file without any cover : 

```shell
docker run -p 5000:8000 shumc/imagorvideo -imagor-unsafe -debug
2023-07-24T11:33:06.000Z        DEBUG   imagor@v1.4.6/imagor.go:654     imagor  {"version": "1.4.6", "unsafe": true, "request_timeout": "30s", "load_timeout": "20s", "process_timeout": "20s", "save_timeout": "20s", "process_concurrency": 0, "cache_header_ttl": "168h0m0s", "loaders": ["HTTPLoader"], "storages": [], "result_storages": [], "processors": ["Processor", "Processor"]}
2023-07-24T11:33:06.001Z        INFO    vips/processor.go:107   VIPS    {"log": "found /usr/local/lib/vips-modules-8.14"}
2023-07-24T11:33:06.001Z        INFO    vips/processor.go:107   VIPS    {"log": "using configure-time prefix"}
2023-07-24T11:33:06.001Z        INFO    vips/processor.go:107   VIPS    {"log": "VIPS_PREFIX = /usr/local"}
2023-07-24T11:33:06.001Z        INFO    vips/processor.go:107   VIPS    {"log": "VIPS_LIBDIR = /usr/local/lib"}
2023-07-24T11:33:06.001Z        INFO    vips/processor.go:107   VIPS    {"log": "prefix = /usr/local"}
2023-07-24T11:33:06.001Z        INFO    vips/processor.go:107   VIPS    {"log": "libdir = /usr/local/lib"}
2023-07-24T11:33:06.002Z        INFO    vips/processor.go:107   VIPS    {"log": "searching \"/usr/local/lib/vips-modules-8.14\""}
2023-07-24T11:33:06.002Z        INFO    vips/processor.go:107   VIPS    {"log": "loading \"/usr/local/lib/vips-modules-8.14/vips-heif.so\""}
2023-07-24T11:33:06.004Z        INFO    vips/processor.go:107   VIPS    {"log": "loading \"/usr/local/lib/vips-modules-8.14/vips-poppler.so\""}
2023-07-24T11:33:06.010Z        INFO    vips/processor.go:107   VIPS    {"log": "loading \"/usr/local/lib/vips-modules-8.14/vips-openslide.so\""}
2023-07-24T11:33:06.011Z        INFO    vips/processor.go:107   VIPS    {"log": "searching \"/usr/local/lib/vips-plugins-8.14\""}
2023-07-24T11:33:06.012Z        INFO    vips/processor.go:107   vips    {"log": "vips 8.14.2 started with concurrency=1 cache_max_files=0 cache_max_mem=0 cache_max=0"}
2023-07-24T11:33:06.013Z        INFO    vips/processor.go:107   vips    {"log": "registered image type=pdf load=true save=false"}
2023-07-24T11:33:06.013Z        INFO    vips/processor.go:107   vips    {"log": "registered image type=png load=true save=true"}
2023-07-24T11:33:06.013Z        INFO    vips/processor.go:107   vips    {"log": "registered image type=webp load=true save=true"}
2023-07-24T11:33:06.013Z        INFO    vips/processor.go:107   vips    {"log": "registered image type=heif load=true save=true"}
2023-07-24T11:33:06.013Z        INFO    vips/processor.go:107   vips    {"log": "registered image type=jpeg load=true save=true"}
2023-07-24T11:33:06.013Z        INFO    vips/processor.go:107   vips    {"log": "registered image type=tiff load=true save=true"}
2023-07-24T11:33:06.013Z        INFO    vips/processor.go:107   vips    {"log": "registered image type=jp2k load=true save=true"}
2023-07-24T11:33:06.013Z        INFO    vips/processor.go:107   vips    {"log": "registered image type=gif load=true save=true"}
2023-07-24T11:33:06.013Z        INFO    vips/processor.go:107   vips    {"log": "registered image type=svg load=true save=false"}
2023-07-24T11:33:06.013Z        INFO    server/server.go:116    listen  {"addr": ":8000"}
2023-07-24T11:33:07.789Z        DEBUG   imagor@v1.4.6/imagor.go:601     suppress        {"key": "filters:seek(0.1)/https://github.com/cshum/imagorvideo/raw/master/testdata/no_cover.mp3"}
2023-07-24T11:33:08.052Z        DEBUG   imagorvideo/processor.go:40     ffmpeg  {"log": "[mp3 @ 0xffff568e0280] Format mp3 probed with size=4096 and score=51"}
2023-07-24T11:33:08.052Z        DEBUG   imagorvideo/processor.go:40     ffmpeg  {"log": "id3v2 ver:4 flags:00 len:134"}
2023-07-24T11:33:08.052Z        DEBUG   imagorvideo/processor.go:40     ffmpeg  {"log": "[mp3 @ 0xffff568e0280] pad 576 0"}
2023-07-24T11:33:08.052Z        DEBUG   imagorvideo/processor.go:40     ffmpeg  {"log": "[mp3 @ 0xffff568e0280] Skipping 0 bytes of junk at 336."}
2023-07-24T11:33:08.052Z        DEBUG   imagorvideo/processor.go:40     ffmpeg  {"log": "[mp3 @ 0xffff568e0280] Before avformat_find_stream_info() pos: 336 bytes read:4096 seeks:0 nb_streams:1"}
2023-07-24T11:33:08.053Z        DEBUG   imagorvideo/processor.go:40     ffmpeg  {"log": "[mp3 @ 0xffff568e0280] demuxer injecting skip 1105 / discard 0"}
2023-07-24T11:33:08.053Z        DEBUG   imagorvideo/processor.go:40     ffmpeg  {"log": "[mp3float @ 0xffff5726c400] skip 1105 / discard 0 samples due to side data"}
2023-07-24T11:33:08.054Z        DEBUG   imagorvideo/processor.go:40     ffmpeg  {"log": "[mp3float @ 0xffff5726c400] skip 1105/1152 samples"}
2023-07-24T11:33:08.057Z        DEBUG   imagorvideo/processor.go:40     ffmpeg  {"log": "[mp3 @ 0xffff568e0280] All info found"}
2023-07-24T11:33:08.057Z        DEBUG   imagorvideo/processor.go:40     ffmpeg  {"log": "[mp3 @ 0xffff568e0280] After avformat_find_stream_info() pos: 19792 bytes read:20480 seeks:0 frames:50"}
2023-07-24T11:33:08.057Z        DEBUG   imagorvideo/processor.go:40     ffmpeg  {"log": "[mp3 @ 0xffff568e0280] demuxer injecting skip 1105 / discard 0"}
fatal error: unexpected signal during runtime execution
[signal SIGSEGV: segmentation violation code=0x1 addr=0x10 pc=0xffff88b0c288]

runtime stack:
runtime.throw({0x101cedb?, 0x0?})
        /usr/local/go/src/runtime/panic.go:1047 +0x40 fp=0xffff589fc760 sp=0xffff589fc730 pc=0x43d7c0
runtime.sigpanic()
        /usr/local/go/src/runtime/signal_unix.go:821 +0x240 fp=0xffff589fc7a0 sp=0xffff589fc760 pc=0x453dd0

goroutine 10 [syscall]:
runtime.cgocall(0xd46c34, 0x400071efa8)
        /usr/local/go/src/runtime/cgocall.go:157 +0x50 fp=0x400071ef70 sp=0x400071ef30 pc=0x40ab20
github.com/cshum/imagorvideo/ffmpeg._Cfunc_avcodec_flush_buffers(0x0)
        _cgo_gotypes.go:913 +0x30 fp=0x400071efa0 sp=0x400071ef70 pc=0xd10fd0
github.com/cshum/imagorvideo/ffmpeg.seekDuration.func2(0x3fb999999999999a?)
        /go/src/github.com/cshum/imagorvideo/ffmpeg/ffmpeg.go:257 +0x40 fp=0x400071efe0 sp=0x400071efa0 pc=0xd12cb0
github.com/cshum/imagorvideo/ffmpeg.seekDuration(0x4000532410?, 0xf91480?)
        /go/src/github.com/cshum/imagorvideo/ffmpeg/ffmpeg.go:257 +0x70 fp=0x400071f010 sp=0x400071efe0 pc=0xd12c10
github.com/cshum/imagorvideo/ffmpeg.(*AVContext).SeekDuration(...)
        /go/src/github.com/cshum/imagorvideo/ffmpeg/ffmpeg.go:135
github.com/cshum/imagorvideo/ffmpeg.(*AVContext).SeekPosition(0x400059c5e0?, 0x3?)
        /go/src/github.com/cshum/imagorvideo/ffmpeg/ffmpeg.go:130 +0x2c fp=0x400071f040 sp=0x400071f010 pc=0xd11f9c
github.com/cshum/imagorvideo.(*Processor).Process(_, {_, _}, _, {0x0, {0x40001024e8, 0x57}, {0x40001024fa, 0x45}, 0x1, ...}, ...)
        /go/src/github.com/cshum/imagorvideo/processor.go:150 +0x5bc fp=0x400071f580 sp=0x400071f040 pc=0xd4273c
github.com/cshum/imagor.(*Imagor).Do.func2({0x1332e58, 0x40004fef30}, 0x4000425720)
        /go/pkg/mod/github.com/cshum/imagor@v1.4.6/imagor.go:388 +0xe04 fp=0x400071fe30 sp=0x400071f580 pc=0x7fd444
github.com/cshum/imagor.(*Imagor).suppress.func2()
        /go/pkg/mod/github.com/cshum/imagor@v1.4.6/imagor.go:613 +0xa8 fp=0x400071fee0 sp=0x400071fe30 pc=0x7ffba8
golang.org/x/sync/singleflight.(*Group).doCall.func2(0x400071ff46, 0x4000100f50, 0x0?)
        /go/pkg/mod/golang.org/x/sync@v0.2.0/singleflight/singleflight.go:189 +0x60 fp=0x400071ff20 sp=0x400071fee0 pc=0x7f6880
golang.org/x/sync/singleflight.(*Group).doCall(0x0?, 0x0?, {0x40001024e8?, 0x0?}, 0x0?)
        /go/pkg/mod/golang.org/x/sync@v0.2.0/singleflight/singleflight.go:191 +0x84 fp=0x400071ff90 sp=0x400071ff20 pc=0x7f67a4
golang.org/x/sync/singleflight.(*Group).DoChan.func1()
        /go/pkg/mod/golang.org/x/sync@v0.2.0/singleflight/singleflight.go:129 +0x38 fp=0x400071ffd0 sp=0x400071ff90 pc=0x7f66e8
runtime.goexit()
        /usr/local/go/src/runtime/asm_arm64.s:1172 +0x4 fp=0x400071ffd0 sp=0x400071ffd0 pc=0x470474
created by golang.org/x/sync/singleflight.(*Group).DoChan
        /go/pkg/mod/golang.org/x/sync@v0.2.0/singleflight/singleflight.go:129 +0x388

goroutine 1 [chan receive]:
runtime.gopark(0x40004fdd78?, 0x806f00?, 0x20?, 0x4a?, 0x0?)
        /usr/local/go/src/runtime/proc.go:381 +0xe0 fp=0x400081fce0 sp=0x400081fcc0 pc=0x4402b0
runtime.chanrecv(0x400052c000, 0x0, 0x1)
        /usr/local/go/src/runtime/chan.go:583 +0x468 fp=0x400081fd70 sp=0x400081fce0 pc=0x40d608
runtime.chanrecv1(0xfbb160?, 0x0?)
        /usr/local/go/src/runtime/chan.go:442 +0x14 fp=0x400081fda0 sp=0x400081fd70 pc=0x40d164
github.com/cshum/imagor/server.(*Server).RunContext(0x4000170780, {0x1333830, 0x400014b400})
        /go/pkg/mod/github.com/cshum/imagor@v1.4.6/server/server.go:124 +0x264 fp=0x400081feb0 sp=0x400081fda0 pc=0x809654
github.com/cshum/imagor/server.(*Server).Run(0x400011e160?)
        /go/pkg/mod/github.com/cshum/imagor@v1.4.6/server/server.go:104 +0x9c fp=0x400081ff10 sp=0x400081feb0 pc=0x8093ac
main.main()
        /go/src/github.com/cshum/imagorvideo/cmd/imagorvideo/main.go:21 +0xc8 fp=0x400081ff70 sp=0x400081ff10 pc=0xd434b8
runtime.main()
        /usr/local/go/src/runtime/proc.go:250 +0x200 fp=0x400081ffd0 sp=0x400081ff70 pc=0x43fea0
runtime.goexit()
        /usr/local/go/src/runtime/asm_arm64.s:1172 +0x4 fp=0x400081ffd0 sp=0x400081ffd0 pc=0x470474

goroutine 2 [force gc (idle)]:
runtime.gopark(0x0?, 0x0?, 0x0?, 0x0?, 0x0?)
        /usr/local/go/src/runtime/proc.go:381 +0xe0 fp=0x400005cfa0 sp=0x400005cf80 pc=0x4402b0
runtime.goparkunlock(...)
        /usr/local/go/src/runtime/proc.go:387
runtime.forcegchelper()
        /usr/local/go/src/runtime/proc.go:305 +0xb0 fp=0x400005cfd0 sp=0x400005cfa0 pc=0x440100
runtime.goexit()
        /usr/local/go/src/runtime/asm_arm64.s:1172 +0x4 fp=0x400005cfd0 sp=0x400005cfd0 pc=0x470474
created by runtime.init.6
        /usr/local/go/src/runtime/proc.go:293 +0x24

goroutine 3 [GC sweep wait]:
runtime.gopark(0x1?, 0x0?, 0x0?, 0x0?, 0x0?)
        /usr/local/go/src/runtime/proc.go:381 +0xe0 fp=0x400005d760 sp=0x400005d740 pc=0x4402b0
runtime.goparkunlock(...)
        /usr/local/go/src/runtime/proc.go:387
runtime.bgsweep(0x0?)
        /usr/local/go/src/runtime/mgcsweep.go:319 +0x100 fp=0x400005d7b0 sp=0x400005d760 pc=0x42bb00
runtime.gcenable.func1()
        /usr/local/go/src/runtime/mgc.go:178 +0x28 fp=0x400005d7d0 sp=0x400005d7b0 pc=0x420b58
runtime.goexit()
        /usr/local/go/src/runtime/asm_arm64.s:1172 +0x4 fp=0x400005d7d0 sp=0x400005d7d0 pc=0x470474
created by runtime.gcenable
        /usr/local/go/src/runtime/mgc.go:178 +0x6c

goroutine 4 [GC scavenge wait]:
runtime.gopark(0x400007c000?, 0x131f7a0?, 0x0?, 0x0?, 0x0?)
        /usr/local/go/src/runtime/proc.go:381 +0xe0 fp=0x400005df50 sp=0x400005df30 pc=0x4402b0
runtime.goparkunlock(...)
        /usr/local/go/src/runtime/proc.go:387
runtime.(*scavengerState).park(0x1ae4aa0)
        /usr/local/go/src/runtime/mgcscavenge.go:400 +0x5c fp=0x400005df80 sp=0x400005df50 pc=0x429a2c
runtime.bgscavenge(0x0?)
        /usr/local/go/src/runtime/mgcscavenge.go:633 +0xa8 fp=0x400005dfb0 sp=0x400005df80 pc=0x429fc8
runtime.gcenable.func2()
        /usr/local/go/src/runtime/mgc.go:179 +0x28 fp=0x400005dfd0 sp=0x400005dfb0 pc=0x420af8
runtime.goexit()
        /usr/local/go/src/runtime/asm_arm64.s:1172 +0x4 fp=0x400005dfd0 sp=0x400005dfd0 pc=0x470474
created by runtime.gcenable
        /usr/local/go/src/runtime/mgc.go:179 +0xac

goroutine 18 [finalizer wait]:
runtime.gopark(0x400005c5a8?, 0x413a90?, 0x20?, 0xb9?, 0xffff82e935e0?)
        /usr/local/go/src/runtime/proc.go:381 +0xe0 fp=0x400005c580 sp=0x400005c560 pc=0x4402b0
runtime.runfinq()
        /usr/local/go/src/runtime/mfinal.go:193 +0x100 fp=0x400005c7d0 sp=0x400005c580 pc=0x41fba0
runtime.goexit()
        /usr/local/go/src/runtime/asm_arm64.s:1172 +0x4 fp=0x400005c7d0 sp=0x400005c7d0 pc=0x470474
created by runtime.createfing
        /usr/local/go/src/runtime/mfinal.go:163 +0x80

goroutine 21 [GC worker (idle)]:
runtime.gopark(0x75f6efb7a017?, 0x40001009a8?, 0x98?, 0x87?, 0x7aa128?)
        /usr/local/go/src/runtime/proc.go:381 +0xe0 fp=0x4000058740 sp=0x4000058720 pc=0x4402b0
runtime.gcBgMarkWorker()
        /usr/local/go/src/runtime/mgc.go:1275 +0xe4 fp=0x40000587d0 sp=0x4000058740 pc=0x422934
runtime.goexit()
        /usr/local/go/src/runtime/asm_arm64.s:1172 +0x4 fp=0x40000587d0 sp=0x40000587d0 pc=0x470474
created by runtime.gcBgMarkStartWorkers
        /usr/local/go/src/runtime/mgc.go:1199 +0x28

goroutine 22 [GC worker (idle)]:
runtime.gopark(0x75f6efb7d309?, 0x0?, 0x0?, 0x0?, 0x0?)
        /usr/local/go/src/runtime/proc.go:381 +0xe0 fp=0x4000058f40 sp=0x4000058f20 pc=0x4402b0
runtime.gcBgMarkWorker()
        /usr/local/go/src/runtime/mgc.go:1275 +0xe4 fp=0x4000058fd0 sp=0x4000058f40 pc=0x422934
runtime.goexit()
        /usr/local/go/src/runtime/asm_arm64.s:1172 +0x4 fp=0x4000058fd0 sp=0x4000058fd0 pc=0x470474
created by runtime.gcBgMarkStartWorkers
        /usr/local/go/src/runtime/mgc.go:1199 +0x28

goroutine 5 [select]:
runtime.gopark(0x400005a778?, 0x3?, 0x50?, 0x27?, 0x400005a762?)
        /usr/local/go/src/runtime/proc.go:381 +0xe0 fp=0x400005a610 sp=0x400005a5f0 pc=0x4402b0
runtime.selectgo(0x400005a778, 0x400005a75c, 0x400024a600?, 0x0, 0x0?, 0x1)
        /usr/local/go/src/runtime/select.go:327 +0x68c fp=0x400005a720 sp=0x400005a610 pc=0x44ff4c
go.opencensus.io/stats/view.(*worker).start(0x400024a600)
        /go/pkg/mod/go.opencensus.io@v0.24.0/stats/view/worker.go:292 +0x88 fp=0x400005a7b0 sp=0x400005a720 pc=0xc272b8
go.opencensus.io/stats/view.init.0.func1()
        /go/pkg/mod/go.opencensus.io@v0.24.0/stats/view/worker.go:34 +0x28 fp=0x400005a7d0 sp=0x400005a7b0 pc=0xc26618
runtime.goexit()
        /usr/local/go/src/runtime/asm_arm64.s:1172 +0x4 fp=0x400005a7d0 sp=0x400005a7d0 pc=0x470474
created by go.opencensus.io/stats/view.init.0
        /go/pkg/mod/go.opencensus.io@v0.24.0/stats/view/worker.go:34 +0xa0

goroutine 6 [select, locked to thread]:
runtime.gopark(0x400005afa0?, 0x2?, 0x0?, 0x0?, 0x400005af9c?)
        /usr/local/go/src/runtime/proc.go:381 +0xe0 fp=0x400005ae30 sp=0x400005ae10 pc=0x4402b0
runtime.selectgo(0x400005afa0, 0x400005af98, 0x0?, 0x0, 0x0?, 0x1)
        /usr/local/go/src/runtime/select.go:327 +0x68c fp=0x400005af40 sp=0x400005ae30 pc=0x44ff4c
runtime.ensureSigM.func1()
        /usr/local/go/src/runtime/signal_unix.go:1000 +0x194 fp=0x400005afd0 sp=0x400005af40 pc=0x467084
runtime.goexit()
        /usr/local/go/src/runtime/asm_arm64.s:1172 +0x4 fp=0x400005afd0 sp=0x400005afd0 pc=0x470474
created by runtime.ensureSigM
        /usr/local/go/src/runtime/signal_unix.go:983 +0xd8

goroutine 23 [syscall]:
runtime.notetsleepg(0x0?, 0x0?)
        /usr/local/go/src/runtime/lock_futex.go:236 +0x34 fp=0x400051f790 sp=0x400051f750 pc=0x4125d4
os/signal.signal_recv()
        /usr/local/go/src/runtime/sigqueue.go:152 +0x30 fp=0x400051f7b0 sp=0x400051f790 pc=0x46c7a0
os/signal.loop()
        /usr/local/go/src/os/signal/signal_unix.go:23 +0x1c fp=0x400051f7d0 sp=0x400051f7b0 pc=0x806bfc
runtime.goexit()
        /usr/local/go/src/runtime/asm_arm64.s:1172 +0x4 fp=0x400051f7d0 sp=0x400051f7d0 pc=0x470474
created by os/signal.Notify.func1.1
        /usr/local/go/src/os/signal/signal.go:151 +0x28

goroutine 24 [select]:
runtime.gopark(0x400051ffa8?, 0x2?, 0x0?, 0x0?, 0x400051ff94?)
        /usr/local/go/src/runtime/proc.go:381 +0xe0 fp=0x400051fe40 sp=0x400051fe20 pc=0x4402b0
runtime.selectgo(0x400051ffa8, 0x400051ff90, 0x0?, 0x0, 0x0?, 0x1)
        /usr/local/go/src/runtime/select.go:327 +0x68c fp=0x400051ff50 sp=0x400051fe40 pc=0x44ff4c
os/signal.NotifyContext.func1()
        /usr/local/go/src/os/signal/signal.go:288 +0x68 fp=0x400051ffd0 sp=0x400051ff50 pc=0x806818
runtime.goexit()
        /usr/local/go/src/runtime/asm_arm64.s:1172 +0x4 fp=0x400051ffd0 sp=0x400051ffd0 pc=0x470474
created by os/signal.NotifyContext
        /usr/local/go/src/os/signal/signal.go:287 +0x170

goroutine 25 [IO wait]:
runtime.gopark(0x0?, 0x0?, 0x0?, 0x0?, 0x0?)
        /usr/local/go/src/runtime/proc.go:381 +0xe0 fp=0x400006dab0 sp=0x400006da90 pc=0x4402b0
runtime.netpollblock(0x0?, 0x0?, 0x0?)
        /usr/local/go/src/runtime/netpoll.go:527 +0x158 fp=0x400006daf0 sp=0x400006dab0 pc=0x438d88
internal/poll.runtime_pollWait(0xffff82e1bf08, 0x72)
        /usr/local/go/src/runtime/netpoll.go:306 +0xa0 fp=0x400006db20 sp=0x400006daf0 pc=0x46a560
internal/poll.(*pollDesc).wait(0x40000ac200?, 0x0?, 0x0)
        /usr/local/go/src/internal/poll/fd_poll_runtime.go:84 +0x28 fp=0x400006db50 sp=0x400006db20 pc=0x4ed428
internal/poll.(*pollDesc).waitRead(...)
        /usr/local/go/src/internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Accept(0x40000ac200)
        /usr/local/go/src/internal/poll/fd_unix.go:614 +0x250 fp=0x400006dc00 sp=0x400006db50 pc=0x4f1eb0
net.(*netFD).accept(0x40000ac200)
        /usr/local/go/src/net/fd_unix.go:172 +0x28 fp=0x400006dcc0 sp=0x400006dc00 pc=0x5a2708
net.(*TCPListener).accept(0x400000e4f8)
        /usr/local/go/src/net/tcpsock_posix.go:148 +0x28 fp=0x400006dcf0 sp=0x400006dcc0 pc=0x5b9758
net.(*TCPListener).Accept(0x400000e4f8)
        /usr/local/go/src/net/tcpsock.go:297 +0x2c fp=0x400006dd30 sp=0x400006dcf0 pc=0x5b891c
net/http.(*onceCloseListener).Accept(0x400050e480?)
        <autogenerated>:1 +0x30 fp=0x400006dd50 sp=0x400006dd30 pc=0x6bcff0
net/http.(*Server).Serve(0x4000170780, {0x1332090, 0x400000e4f8})
        /usr/local/go/src/net/http/server.go:3059 +0x2cc fp=0x400006de80 sp=0x400006dd50 pc=0x69952c
net/http.(*Server).ListenAndServe(0x4000170780)
        /usr/local/go/src/net/http/server.go:2988 +0x84 fp=0x400006deb0 sp=0x400006de80 pc=0x699224
github.com/cshum/imagor/server.(*Server).listenAndServe(0x0?)
        /go/pkg/mod/github.com/cshum/imagor@v1.4.6/server/server.go:162 +0x44 fp=0x400006def0 sp=0x400006deb0 pc=0x80a014
github.com/cshum/imagor/server.(*Server).RunContext.func1()
        /go/pkg/mod/github.com/cshum/imagor@v1.4.6/server/server.go:112 +0x28 fp=0x400006dfd0 sp=0x400006def0 pc=0x8096c8
runtime.goexit()
        /usr/local/go/src/runtime/asm_arm64.s:1172 +0x4 fp=0x400006dfd0 sp=0x400006dfd0 pc=0x470474
created by github.com/cshum/imagor/server.(*Server).RunContext
        /go/pkg/mod/github.com/cshum/imagor@v1.4.6/server/server.go:111 +0x70

goroutine 26 [select]:
runtime.gopark(0x4000684ed8?, 0x3?, 0xd8?, 0x4c?, 0x4000684df2?)
        /usr/local/go/src/runtime/proc.go:381 +0xe0 fp=0x4000684ca0 sp=0x4000684c80 pc=0x4402b0
runtime.selectgo(0x4000684ed8, 0x4000684dec, 0x57?, 0x0, 0x1?, 0x1)
        /usr/local/go/src/runtime/select.go:327 +0x68c fp=0x4000684db0 sp=0x4000684ca0 pc=0x44ff4c
github.com/cshum/imagor.(*Imagor).suppress(0x40000986c0, {0x1332e20?, 0x40004fede0}, {0x40001024e8, 0x57}, 0x4000100eb0)
        /go/pkg/mod/github.com/cshum/imagor@v1.4.6/imagor.go:620 +0x368 fp=0x4000684f50 sp=0x4000684db0 pc=0x7ff948
github.com/cshum/imagor.(*Imagor).Do(_, _, {0x0, {0x40001024e8, 0x57}, {0x40001024fa, 0x45}, 0x1, {0x0, 0x0}, ...})
        /go/pkg/mod/github.com/cshum/imagor@v1.4.6/imagor.go:333 +0x1240 fp=0x4000685470 sp=0x4000684f50 pc=0x7fc590
github.com/cshum/imagor.(*Imagor).ServeHTTP(0x40000986c0, {0x13322a0, 0x40005102a0}, 0x40000a8400)
        /go/pkg/mod/github.com/cshum/imagor@v1.4.6/imagor.go:171 +0x298 fp=0x4000685990 sp=0x4000685470 pc=0x7faa98
github.com/cshum/imagor/server.pathHandler.func1.1({0x13322a0, 0x40005102a0}, 0x40000a8400)
        /go/pkg/mod/github.com/cshum/imagor@v1.4.6/server/handler.go:58 +0x10c fp=0x40006859e0 sp=0x4000685990 pc=0x80793c
net/http.HandlerFunc.ServeHTTP(0xffff82e1be18?, {0x13322a0?, 0x40005102a0?}, 0x698edc?)
        /usr/local/go/src/net/http/server.go:2122 +0x38 fp=0x4000685a10 sp=0x40006859e0 pc=0x696068
github.com/cshum/imagor/server.(*Server).panicHandler.func1({0x13322a0?, 0x40005102a0?}, 0x40000ac280?)
        /go/pkg/mod/github.com/cshum/imagor@v1.4.6/server/handler.go:41 +0x84 fp=0x4000685a80 sp=0x4000685a10 pc=0x8073f4
net/http.HandlerFunc.ServeHTTP(0x0?, {0x13322a0?, 0x40005102a0?}, 0x68f378?)
        /usr/local/go/src/net/http/server.go:2122 +0x38 fp=0x4000685ab0 sp=0x4000685a80 pc=0x696068
net/http.serverHandler.ServeHTTP({0x400011f860?}, {0x13322a0, 0x40005102a0}, 0x40000a8400)
        /usr/local/go/src/net/http/server.go:2936 +0x2c0 fp=0x4000685b60 sp=0x4000685ab0 pc=0x6990a0
net/http.(*conn).serve(0x4000092870, {0x1332e58, 0x400011f620})
        /usr/local/go/src/net/http/server.go:1995 +0x518 fp=0x4000685fa0 sp=0x4000685b60 pc=0x694e78
net/http.(*Server).Serve.func3()
        /usr/local/go/src/net/http/server.go:3089 +0x30 fp=0x4000685fd0 sp=0x4000685fa0 pc=0x699880
runtime.goexit()
        /usr/local/go/src/runtime/asm_arm64.s:1172 +0x4 fp=0x4000685fd0 sp=0x4000685fd0 pc=0x470474
created by net/http.(*Server).Serve
        /usr/local/go/src/net/http/server.go:3089 +0x4e8

goroutine 7 [IO wait]:
runtime.gopark(0x40005bf150?, 0x400012a930?, 0xa?, 0x0?, 0x0?)
        /usr/local/go/src/runtime/proc.go:381 +0xe0 fp=0x40005b73f0 sp=0x40005b73d0 pc=0x4402b0
runtime.netpollblock(0x0?, 0xffffffff?, 0xff?)
        /usr/local/go/src/runtime/netpoll.go:527 +0x158 fp=0x40005b7430 sp=0x40005b73f0 pc=0x438d88
internal/poll.runtime_pollWait(0xffff82e1bd28, 0x72)
        /usr/local/go/src/runtime/netpoll.go:306 +0xa0 fp=0x40005b7460 sp=0x40005b7430 pc=0x46a560
internal/poll.(*pollDesc).wait(0x400024ae00?, 0x40005b8000?, 0x0)
        /usr/local/go/src/internal/poll/fd_poll_runtime.go:84 +0x28 fp=0x40005b7490 sp=0x40005b7460 pc=0x4ed428
internal/poll.(*pollDesc).waitRead(...)
        /usr/local/go/src/internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0x400024ae00, {0x40005b8000, 0x1000, 0x1000})
        /usr/local/go/src/internal/poll/fd_unix.go:167 +0x200 fp=0x40005b7530 sp=0x40005b7490 pc=0x4ee770
net.(*netFD).Read(0x400024ae00, {0x40005b8000?, 0x40005b75c8?, 0x68f0bc?})
        /usr/local/go/src/net/fd_posix.go:55 +0x28 fp=0x40005b7580 sp=0x40005b7530 pc=0x5a0ae8
net.(*conn).Read(0x400012cff0, {0x40005b8000?, 0x0?, 0x40004fec98?})
        /usr/local/go/src/net/net.go:183 +0x34 fp=0x40005b75d0 sp=0x40005b7580 pc=0x5b0f34
net.(*TCPConn).Read(0x40004fec90?, {0x40005b8000?, 0x0?, 0x0?})
        <autogenerated>:1 +0x2c fp=0x40005b7600 sp=0x40005b75d0 pc=0x5c302c
net/http.(*connReader).Read(0x40004fec90, {0x40005b8000, 0x1000, 0x1000})
        /usr/local/go/src/net/http/server.go:782 +0x224 fp=0x40005b7660 sp=0x40005b7600 pc=0x68f974
bufio.(*Reader).fill(0x40005153e0)
        /usr/local/go/src/bufio/bufio.go:106 +0xfc fp=0x40005b76a0 sp=0x40005b7660 pc=0x622fac
bufio.(*Reader).ReadSlice(0x40005153e0, 0x0?)
        /usr/local/go/src/bufio/bufio.go:372 +0x30 fp=0x40005b76f0 sp=0x40005b76a0 pc=0x623c10
bufio.(*Reader).ReadLine(0x40005153e0)
        /usr/local/go/src/bufio/bufio.go:401 +0x24 fp=0x40005b7740 sp=0x40005b76f0 pc=0x623e44
net/textproto.(*Reader).readLineSlice(0x40004fecc0)
        /usr/local/go/src/net/textproto/reader.go:56 +0x7c fp=0x40005b7830 sp=0x40005b7740 pc=0x627f1c
net/textproto.(*Reader).ReadLine(...)
        /usr/local/go/src/net/textproto/reader.go:39
net/http.readRequest(0xffff82e93108?)
        /usr/local/go/src/net/http/request.go:1042 +0x78 fp=0x40005b79d0 sp=0x40005b7830 pc=0x68b348
net/http.(*conn).readRequest(0x400050e480, {0x1332db0, 0x4000100870})
        /usr/local/go/src/net/http/server.go:990 +0x1e4 fp=0x40005b7b60 sp=0x40005b79d0 pc=0x690c94
net/http.(*conn).serve(0x400050e480, {0x1332e58, 0x400011f620})
        /usr/local/go/src/net/http/server.go:1920 +0x2c4 fp=0x40005b7fa0 sp=0x40005b7b60 pc=0x694c24
net/http.(*Server).Serve.func3()
        /usr/local/go/src/net/http/server.go:3089 +0x30 fp=0x40005b7fd0 sp=0x40005b7fa0 pc=0x699880
runtime.goexit()
        /usr/local/go/src/runtime/asm_arm64.s:1172 +0x4 fp=0x40005b7fd0 sp=0x40005b7fd0 pc=0x470474
created by net/http.(*Server).Serve
        /usr/local/go/src/net/http/server.go:3089 +0x4e8

goroutine 8 [IO wait]:
runtime.gopark(0x0?, 0x0?, 0x0?, 0x0?, 0x0?)
        /usr/local/go/src/runtime/proc.go:381 +0xe0 fp=0x400005b540 sp=0x400005b520 pc=0x4402b0
runtime.netpollblock(0x0?, 0xffffffff?, 0xff?)
        /usr/local/go/src/runtime/netpoll.go:527 +0x158 fp=0x400005b580 sp=0x400005b540 pc=0x438d88
internal/poll.runtime_pollWait(0xffff82e1be18, 0x72)
        /usr/local/go/src/runtime/netpoll.go:306 +0xa0 fp=0x400005b5b0 sp=0x400005b580 pc=0x46a560
internal/poll.(*pollDesc).wait(0x40000ac280?, 0x400011f871?, 0x0)
        /usr/local/go/src/internal/poll/fd_poll_runtime.go:84 +0x28 fp=0x400005b5e0 sp=0x400005b5b0 pc=0x4ed428
internal/poll.(*pollDesc).waitRead(...)
        /usr/local/go/src/internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0x40000ac280, {0x400011f871, 0x1, 0x1})
        /usr/local/go/src/internal/poll/fd_unix.go:167 +0x200 fp=0x400005b680 sp=0x400005b5e0 pc=0x4ee770
net.(*netFD).Read(0x40000ac280, {0x400011f871?, 0x0?, 0x0?})
        /usr/local/go/src/net/fd_posix.go:55 +0x28 fp=0x400005b6d0 sp=0x400005b680 pc=0x5a0ae8
net.(*conn).Read(0x4000010428, {0x400011f871?, 0x0?, 0x0?})
        /usr/local/go/src/net/net.go:183 +0x34 fp=0x400005b720 sp=0x400005b6d0 pc=0x5b0f34
net.(*TCPConn).Read(0x0?, {0x400011f871?, 0x0?, 0x0?})
        <autogenerated>:1 +0x2c fp=0x400005b750 sp=0x400005b720 pc=0x5c302c
net/http.(*connReader).backgroundRead(0x400011f860)
        /usr/local/go/src/net/http/server.go:674 +0x44 fp=0x400005b7b0 sp=0x400005b750 pc=0x68f3f4
net/http.(*connReader).startBackgroundRead.func2()
        /usr/local/go/src/net/http/server.go:670 +0x28 fp=0x400005b7d0 sp=0x400005b7b0 pc=0x68f318
runtime.goexit()
        /usr/local/go/src/runtime/asm_arm64.s:1172 +0x4 fp=0x400005b7d0 sp=0x400005b7d0 pc=0x470474
created by net/http.(*connReader).startBackgroundRead
        /usr/local/go/src/net/http/server.go:670 +0xc8

goroutine 9 [chan receive]:
runtime.gopark(0x400005bf78?, 0x51bce0?, 0x0?, 0x0?, 0x0?)
        /usr/local/go/src/runtime/proc.go:381 +0xe0 fp=0x400005bee0 sp=0x400005bec0 pc=0x4402b0
runtime.chanrecv(0x4000102660, 0x0, 0x1)
        /usr/local/go/src/runtime/chan.go:583 +0x468 fp=0x400005bf70 sp=0x400005bee0 pc=0x40d608
runtime.chanrecv1(0x0?, 0x0?)
        /usr/local/go/src/runtime/chan.go:442 +0x14 fp=0x400005bfa0 sp=0x400005bf70 pc=0x40d164
github.com/cshum/imagor.withContext.func1()
        /go/pkg/mod/github.com/cshum/imagor@v1.4.6/context.go:47 +0x38 fp=0x400005bfd0 sp=0x400005bfa0 pc=0x7f9b48
runtime.goexit()
        /usr/local/go/src/runtime/asm_arm64.s:1172 +0x4 fp=0x400005bfd0 sp=0x400005bfd0 pc=0x470474
created by github.com/cshum/imagor.withContext
        /go/pkg/mod/github.com/cshum/imagor@v1.4.6/context.go:46 +0x128

goroutine 52 [select]:
runtime.gopark(0x40005b6f10?, 0x6?, 0x78?, 0x6c?, 0x40005b6de4?)
        /usr/local/go/src/runtime/proc.go:381 +0xe0 fp=0x40005b6c30 sp=0x40005b6c10 pc=0x4402b0
runtime.selectgo(0x40005b6f10, 0x40005b6dd8, 0xfe5d1e?, 0x0, 0x0?, 0x1)
        /usr/local/go/src/runtime/select.go:327 +0x68c fp=0x40005b6d40 sp=0x40005b6c30 pc=0x44ff4c
net/http.(*http2clientStream).writeRequest(0x40000fc600, 0x40000a8000)
        /usr/local/go/src/net/http/h2_bundle.go:8399 +0x844 fp=0x40005b6f80 sp=0x40005b6d40 pc=0x679e24
net/http.(*http2clientStream).doRequest(0x0?, 0x0?)
        /usr/local/go/src/net/http/h2_bundle.go:8261 +0x20 fp=0x40005b6fb0 sp=0x40005b6f80 pc=0x6795a0
net/http.(*http2ClientConn).RoundTrip.func3()
        /usr/local/go/src/net/http/h2_bundle.go:8190 +0x2c fp=0x40005b6fd0 sp=0x40005b6fb0 pc=0x67954c
runtime.goexit()
        /usr/local/go/src/runtime/asm_arm64.s:1172 +0x4 fp=0x40005b6fd0 sp=0x40005b6fd0 pc=0x470474
created by net/http.(*http2ClientConn).RoundTrip
        /usr/local/go/src/net/http/h2_bundle.go:8190 +0x2f8

goroutine 53 [sync.Cond.Wait]:
runtime.gopark(0xd?, 0x0?, 0xf8?, 0xc?, 0x440350?)
        /usr/local/go/src/runtime/proc.go:381 +0xe0 fp=0x4000070cd0 sp=0x4000070cb0 pc=0x4402b0
runtime.goparkunlock(...)
        /usr/local/go/src/runtime/proc.go:387
sync.runtime_notifyListWait(0x40000fc648, 0x1)
        /usr/local/go/src/runtime/sema.go:527 +0x14c fp=0x4000070d20 sp=0x4000070cd0 pc=0x46c32c
sync.(*Cond).Wait(0x40000fc638)
        /usr/local/go/src/sync/cond.go:70 +0xcc fp=0x4000070d60 sp=0x4000070d20 pc=0x4780fc
net/http.(*http2pipe).Read(0x40000fc630, {0x4000485c4d, 0x2d303, 0x2d303})
        /usr/local/go/src/net/http/h2_bundle.go:3688 +0x11c fp=0x4000070dd0 sp=0x4000070d60 pc=0x66544c
net/http.http2transportResponseBody.Read({0x4000070f80?}, {0x4000485c4d?, 0x4000070e90?, 0x1?})
        /usr/local/go/src/net/http/h2_bundle.go:9470 +0x54 fp=0x4000070e70 sp=0x4000070dd0 pc=0x67fe24
github.com/cshum/imagor/fanoutreader.(*Fanout).readAll(0x4000092480)
        /go/pkg/mod/github.com/cshum/imagor@v1.4.6/fanoutreader/fanout.go:54 +0xb0 fp=0x4000070fb0 sp=0x4000070e70 pc=0x7ef200
github.com/cshum/imagor/fanoutreader.(*Fanout).do.func1.1()
        /go/pkg/mod/github.com/cshum/imagor@v1.4.6/fanoutreader/fanout.go:44 +0x28 fp=0x4000070fd0 sp=0x4000070fb0 pc=0x7ef118
runtime.goexit()
        /usr/local/go/src/runtime/asm_arm64.s:1172 +0x4 fp=0x4000070fd0 sp=0x4000070fd0 pc=0x470474
created by github.com/cshum/imagor/fanoutreader.(*Fanout).do.func1
        /go/pkg/mod/github.com/cshum/imagor@v1.4.6/fanoutreader/fanout.go:44 +0x60

goroutine 35 [IO wait]:
runtime.gopark(0x0?, 0x9b?, 0x8?, 0xc6?, 0x41c5bc?)
        /usr/local/go/src/runtime/proc.go:381 +0xe0 fp=0x400006c580 sp=0x400006c560 pc=0x4402b0
runtime.netpollblock(0x0?, 0xffffffff?, 0xff?)
        /usr/local/go/src/runtime/netpoll.go:527 +0x158 fp=0x400006c5c0 sp=0x400006c580 pc=0x438d88
internal/poll.runtime_pollWait(0xffff82e1bb48, 0x72)
        /usr/local/go/src/runtime/netpoll.go:306 +0xa0 fp=0x400006c5f0 sp=0x400006c5c0 pc=0x46a560
internal/poll.(*pollDesc).wait(0x400024a100?, 0x40000f0000?, 0x0)
        /usr/local/go/src/internal/poll/fd_poll_runtime.go:84 +0x28 fp=0x400006c620 sp=0x400006c5f0 pc=0x4ed428
internal/poll.(*pollDesc).waitRead(...)
        /usr/local/go/src/internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0x400024a100, {0x40000f0000, 0xc80, 0xc80})
        /usr/local/go/src/internal/poll/fd_unix.go:167 +0x200 fp=0x400006c6c0 sp=0x400006c620 pc=0x4ee770
net.(*netFD).Read(0x400024a100, {0x40000f0000?, 0x400006c798?, 0x6?})
        /usr/local/go/src/net/fd_posix.go:55 +0x28 fp=0x400006c710 sp=0x400006c6c0 pc=0x5a0ae8
net.(*conn).Read(0x4000010038, {0x40000f0000?, 0x400006c7c8?, 0x4131a4?})
        /usr/local/go/src/net/net.go:183 +0x34 fp=0x400006c760 sp=0x400006c710 pc=0x5b0f34
net.(*TCPConn).Read(0x400006c7d8?, {0x40000f0000?, 0x40004b6030?, 0x18?})
        <autogenerated>:1 +0x2c fp=0x400006c790 sp=0x400006c760 pc=0x5c302c
crypto/tls.(*atLeastReader).Read(0x40004b6030, {0x40000f0000?, 0x40004b6030?, 0x0?})
        /usr/local/go/src/crypto/tls/conn.go:788 +0x40 fp=0x400006c7e0 sp=0x400006c790 pc=0x5ee0f0
bytes.(*Buffer).ReadFrom(0x40001b0d10, {0x13262e0, 0x40004b6030})
        /usr/local/go/src/bytes/buffer.go:202 +0x90 fp=0x400006c840 sp=0x400006c7e0 pc=0x490ce0
crypto/tls.(*Conn).readFromUntil(0x40001b0a80, {0x13295c0?, 0x4000010038}, 0x64d53c?)
        /usr/local/go/src/crypto/tls/conn.go:810 +0xd0 fp=0x400006c880 sp=0x400006c840 pc=0x5ee2d0
crypto/tls.(*Conn).readRecordOrCCS(0x40001b0a80, 0x0)
        /usr/local/go/src/crypto/tls/conn.go:617 +0xd4 fp=0x400006cbf0 sp=0x400006c880 pc=0x5ec1b4
crypto/tls.(*Conn).readRecord(...)
        /usr/local/go/src/crypto/tls/conn.go:583
crypto/tls.(*Conn).Read(0x40001b0a80, {0x4000241000, 0x1000, 0x665dc8?})
        /usr/local/go/src/crypto/tls/conn.go:1316 +0x170 fp=0x400006cc60 sp=0x400006cbf0 pc=0x5f0fe0
bufio.(*Reader).Read(0x40007cb380, {0x40007f4740, 0x9, 0x40d0c8?})
        /usr/local/go/src/bufio/bufio.go:237 +0x1d8 fp=0x400006cca0 sp=0x400006cc60 pc=0x6235a8
io.ReadAtLeast({0x13254e0, 0x40007cb380}, {0x40007f4740, 0x9, 0x9}, 0x9)
        /usr/local/go/src/io/io.go:332 +0xa0 fp=0x400006ccf0 sp=0x400006cca0 pc=0x47c900
io.ReadFull(...)
        /usr/local/go/src/io/io.go:351
net/http.http2readFrameHeader({0x40007f4740?, 0x9?, 0x400006cd98?}, {0x13254e0?, 0x40007cb380?})
        /usr/local/go/src/net/http/h2_bundle.go:1567 +0x58 fp=0x400006cd40 sp=0x400006ccf0 pc=0x65d198
net/http.(*http2Framer).ReadFrame(0x40007f4700)
        /usr/local/go/src/net/http/h2_bundle.go:1831 +0x80 fp=0x400006cdf0 sp=0x400006cd40 pc=0x65d960
net/http.(*http2clientConnReadLoop).run(0x400006cf88)
        /usr/local/go/src/net/http/h2_bundle.go:9187 +0xf8 fp=0x400006cf40 sp=0x400006cdf0 pc=0x67e2a8
net/http.(*http2ClientConn).readLoop(0x4000170900)
        /usr/local/go/src/net/http/h2_bundle.go:9082 +0x5c fp=0x400006cfb0 sp=0x400006cf40 pc=0x67d7bc
net/http.(*http2Transport).newClientConn.func1()
        /usr/local/go/src/net/http/h2_bundle.go:7779 +0x28 fp=0x400006cfd0 sp=0x400006cfb0 pc=0x676b08
runtime.goexit()
        /usr/local/go/src/runtime/asm_arm64.s:1172 +0x4 fp=0x400006cfd0 sp=0x400006cfd0 pc=0x470474
created by net/http.(*http2Transport).newClientConn
        /usr/local/go/src/net/http/h2_bundle.go:7779 +0xa18

goroutine 51 [runnable]:
syscall.Syscall(0x4000681668?, 0x4ee770?, 0xffff82e1ba58?, 0x72?)
        /usr/local/go/src/syscall/syscall_linux.go:69 +0x20 fp=0x4000681630 sp=0x40006815c0 pc=0x4d3660
syscall.read(0x400024a500?, {0x400083e14a?, 0x4000?, 0x10?})
        /usr/local/go/src/syscall/zsyscall_linux_arm64.go:711 +0x40 fp=0x4000681670 sp=0x4000681630 pc=0x4d15f0
syscall.Read(...)
        /usr/local/go/src/syscall/syscall_unix.go:178
internal/poll.ignoringEINTRIO(...)
        /usr/local/go/src/internal/poll/fd_unix.go:794
internal/poll.(*FD).Read(0x400024a500?, {0x400083e14a?, 0x5eb6?, 0x5eb6?})
        /usr/local/go/src/internal/poll/fd_unix.go:163 +0x224 fp=0x4000681710 sp=0x4000681670 pc=0x4ee794
net.(*netFD).Read(0x400024a500, {0x400083e14a?, 0x40006818c8?, 0x5ec978?})
        /usr/local/go/src/net/fd_posix.go:55 +0x28 fp=0x4000681760 sp=0x4000681710 pc=0x5a0ae8
net.(*conn).Read(0x40000100e0, {0x400083e14a?, 0x4000681848?, 0x49087c?})
        /usr/local/go/src/net/net.go:183 +0x34 fp=0x40006817b0 sp=0x4000681760 pc=0x5b0f34
net.(*TCPConn).Read(0x4000681828?, {0x400083e14a?, 0x40004b6720?, 0x18?})
        <autogenerated>:1 +0x2c fp=0x40006817e0 sp=0x40006817b0 pc=0x5c302c
crypto/tls.(*atLeastReader).Read(0x40004b6720, {0x400083e14a?, 0x40004b6720?, 0x0?})
        /usr/local/go/src/crypto/tls/conn.go:788 +0x40 fp=0x4000681830 sp=0x40006817e0 pc=0x5ee0f0
bytes.(*Buffer).ReadFrom(0x40001b1410, {0x13262e0, 0x40004b6720})
        /usr/local/go/src/bytes/buffer.go:202 +0x90 fp=0x4000681890 sp=0x4000681830 pc=0x490ce0
crypto/tls.(*Conn).readFromUntil(0x40001b1180, {0x13295c0?, 0x40000100e0}, 0xa000?)
        /usr/local/go/src/crypto/tls/conn.go:810 +0xd0 fp=0x40006818d0 sp=0x4000681890 pc=0x5ee2d0
crypto/tls.(*Conn).readRecordOrCCS(0x40001b1180, 0x0)
        /usr/local/go/src/crypto/tls/conn.go:662 +0x824 fp=0x4000681c40 sp=0x40006818d0 pc=0x5ec904
crypto/tls.(*Conn).readRecord(...)
        /usr/local/go/src/crypto/tls/conn.go:583
crypto/tls.(*Conn).Read(0x40001b1180, {0x40008aa000, 0x1000, 0xf2a9c0?})
        /usr/local/go/src/crypto/tls/conn.go:1316 +0x170 fp=0x4000681cb0 sp=0x4000681c40 pc=0x5f0fe0
bufio.(*Reader).Read(0x40008a8120, {0x4000839fee, 0x12, 0x9?})
        /usr/local/go/src/bufio/bufio.go:237 +0x1d8 fp=0x4000681cf0 sp=0x4000681cb0 pc=0x6235a8
io.ReadAtLeast({0x13254e0, 0x40008a8120}, {0x4000836000, 0x4000, 0x4000}, 0x4000)
        /usr/local/go/src/io/io.go:332 +0xa0 fp=0x4000681d40 sp=0x4000681cf0 pc=0x47c900
io.ReadFull(...)
        /usr/local/go/src/io/io.go:351
net/http.(*http2Framer).ReadFrame(0x4000510380)
        /usr/local/go/src/net/http/h2_bundle.go:1839 +0x108 fp=0x4000681df0 sp=0x4000681d40 pc=0x65d9e8
net/http.(*http2clientConnReadLoop).run(0x4000681f88)
        /usr/local/go/src/net/http/h2_bundle.go:9187 +0xf8 fp=0x4000681f40 sp=0x4000681df0 pc=0x67e2a8
net/http.(*http2ClientConn).readLoop(0x40000fc480)
        /usr/local/go/src/net/http/h2_bundle.go:9082 +0x5c fp=0x4000681fb0 sp=0x4000681f40 pc=0x67d7bc
net/http.(*http2Transport).newClientConn.func1()
        /usr/local/go/src/net/http/h2_bundle.go:7779 +0x28 fp=0x4000681fd0 sp=0x4000681fb0 pc=0x676b08
runtime.goexit()
        /usr/local/go/src/runtime/asm_arm64.s:1172 +0x4 fp=0x4000681fd0 sp=0x4000681fd0 pc=0x470474
created by net/http.(*http2Transport).newClientConn
        /usr/local/go/src/net/http/h2_bundle.go:7779 +0xa18
``` 
steps to reproduce : 
docker run -p 8000:8000 shumc/imagorvideo -imagor-unsafe -debug;

GET http://localhost:8000/unsafe/filters:seek(0.1)/https://github.com/cshum/imagorvideo/raw/master/testdata/no_cover.mp3

expected output should be an 406 ? But the whole server is going down instead


Discussion / hints:

Fix patch:
diff --git a/ffmpeg/ffmpeg.go b/ffmpeg/ffmpeg.go
index 2187d89..497ee98 100644
--- a/ffmpeg/ffmpeg.go
+++ b/ffmpeg/ffmpeg.go
@@ -132,6 +132,9 @@ func (av *AVContext) SeekPosition(f float64) error {
 
 // SeekDuration seeks to keyframe before the  specified duration
 func (av *AVContext) SeekDuration(ts time.Duration) error {
+	if av.formatContext == nil || av.codecContext == nil {
+		return ErrDecoderNotFound
+	}
 	return seekDuration(av, ts)
 }
 


Test patch:
diff --git a/processor_test.go b/processor_test.go
index 9b45767..3bb3fb5 100644
--- a/processor_test.go
+++ b/processor_test.go
@@ -64,6 +64,7 @@ func TestProcessor(t *testing.T) {
 	}, WithDebug(true), WithLogger(zap.NewExample()))
 	doGoldenTests(t, filepath.Join(testDataDir, "golden/result-fallback-image"), []test{
 		{name: "corrupted with fallback image", path: "fit-in/100x100/corrupt/everybody-betray-me.mkv", expectCode: 406},
+		{name: "corrupted with fallback image", path: "filters:seek(0.1)/no_cover.mp3", expectCode: 406},
 	}, WithDebug(false), WithLogger(zap.NewExample()), WithFallbackImage("demo.png"))
 }
 
diff --git a/testdata/golden/result-fallback-image/filters%3Aseek%280.1%29/no_cover.mp3 b/testdata/golden/result-fallback-image/filters%3Aseek%280.1%29/no_cover.mp3
new file mode 100644
index 0000000..8c74ba6
--- /dev/null
+++ b/testdata/golden/result-fallback-image/filters%3Aseek%280.1%29/no_cover.mp3
@@ -0,0 +1,1 @@
+{"message":"ffmpeg: decoder not found","status":406}
\ No newline at end of file