saveImage with `.png` filename causes assertion failure
cwpearson opened this issue · comments
Nim Compiler Version 0.20.2 [MacOSX: amd64]
Compiled at 2019-07-17
Copyright (c) 2006-2019 by Andreas Rumpf
git hash: 88a0edba4b1a3d535b54336fd589746add54e937
active boot switches: -d:release
Modifying examples/fig12_save_figure.nim to save a file with the png extension, then running
Running
nim c -r -d:webview --threads:on -d:debug examples/fig12_save_figure.nim
produces
Starting server
Plotly connected successfully!
/Users/pearson/repos/nim-plotly/src/plotly/image_retrieve.nim(150) listenForImage
/Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/asyncdispatch.nim(1562) poll
/Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/asyncdispatch.nim(1328) runOnce
/Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/asyncdispatch.nim(210) processPendingCallbacks
/Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/asyncmacro.nim(34) cbNimAsyncContinue
/Users/pearson/repos/nim-plotly/src/plotly/image_retrieve.nim(109) cbIter
/Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/base64.nim(184) decode
/Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/system/assertions.nim(27) failedAssertImpl
/Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/system/assertions.nim(20) raiseAssert
/Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/system/fatal.nim(39) sysFatal
[[reraised from:
/Users/pearson/repos/nim-plotly/src/plotly/image_retrieve.nim(150) listenForImage
/Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/asyncdispatch.nim(1562) poll
/Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/asyncdispatch.nim(1328) runOnce
/Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/asyncdispatch.nim(210) processPendingCallbacks
/Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/asyncmacro.nim(34) processRequestNimAsyncContinue
/Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/asynchttpserver.nim(261) processRequestIter
/Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/asyncfutures.nim(374) read
]]
[[reraised from:
/Users/pearson/repos/nim-plotly/src/plotly/image_retrieve.nim(150) listenForImage
/Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/asyncdispatch.nim(1562) poll
/Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/asyncdispatch.nim(1328) runOnce
/Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/asyncdispatch.nim(210) processPendingCallbacks
/Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/asyncmacro.nim(34) processClientNimAsyncContinue
/Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/asynchttpserver.nim(293) processClientIter
/Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/asyncfutures.nim(374) read
]]
[[reraised from:
/Users/pearson/repos/nim-plotly/src/plotly/image_retrieve.nim(150) listenForImage
/Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/asyncdispatch.nim(1562) poll
/Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/asyncdispatch.nim(1328) runOnce
/Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/asyncdispatch.nim(210) processPendingCallbacks
/Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/asyncfutures.nim(422) asyncCheckCallback
]]
Error: unhandled exception: /Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/base64.nim(184, 10) `i == s.len`
Async traceback:
/Users/pearson/repos/nim-plotly/src/plotly/image_retrieve.nim(150) listenForImage
/Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/asyncdispatch.nim(1562) poll
/Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/asyncdispatch.nim(1328) runOnce
/Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/asyncdispatch.nim(210) processPendingCallbacks
/Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/asyncmacro.nim(34) cbNimAsyncContinue
/Users/pearson/repos/nim-plotly/src/plotly/image_retrieve.nim(109) cbIter
/Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/base64.nim(184) decode
/Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/system/assertions.nim(27) failedAssertImpl
/Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/system/assertions.nim(20) raiseAssert
/Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/system/fatal.nim(39) sysFatal
#[
/Users/pearson/repos/nim-plotly/src/plotly/image_retrieve.nim(150) listenForImage
/Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/asyncdispatch.nim(1562) poll
/Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/asyncdispatch.nim(1328) runOnce
/Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/asyncdispatch.nim(210) processPendingCallbacks
/Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/asyncmacro.nim(34) processRequestNimAsyncContinue
/Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/asynchttpserver.nim(261) processRequestIter
/Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/asyncfutures.nim(374) read
]#
#[
/Users/pearson/repos/nim-plotly/src/plotly/image_retrieve.nim(150) listenForImage
/Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/asyncdispatch.nim(1562) poll
/Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/asyncdispatch.nim(1328) runOnce
/Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/asyncdispatch.nim(210) processPendingCallbacks
/Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/asyncmacro.nim(34) processClientNimAsyncContinue
/Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/asynchttpserver.nim(293) processClientIter
/Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/asyncfutures.nim(374) read
]#
Exception message: /Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/base64.nim(184, 10) `i == s.len`
Exception type: [AssertionError]
Hm, weird. It's been a while since I tried to save an image to png. I'll take a look at it in a few days.
Damn, this also runs perfectly fine on my linux machine. :/
But it's weird that it fails in decode
here
https://github.com/nim-lang/Nim/blob/devel/lib/pure/base64.nim#L184.
Would you be willing to test decoding the image manually on your machine?
Data as base64:
http://ix.io/1TOx
save it somewhere and then just run the following:
import base64
writeFile("test.png", readFile("pngAsBase64.txt").decode)
and see if that works flawlessly. It should simply create that fig12 example as test.png
.
Running the snippet on the base64 data you provided works fine!
I ran
nim c -r -d:webview --threads:on -d:debug examples/fig12_save_figure.nim
again, and I noticed that the webview pops up momentarily with what looks like a complete image rendered before the exceptions I posted before are emitted