Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

saveImage with .png filename causes assertion failure #51

Open
cwpearson opened this issue Aug 27, 2019 · 5 comments
Open

saveImage with .png filename causes assertion failure #51

cwpearson opened this issue Aug 27, 2019 · 5 comments

Comments

@cwpearson
Copy link
Contributor

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]
@Vindaar
Copy link
Member

Vindaar commented Aug 27, 2019

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.

@Vindaar
Copy link
Member

Vindaar commented Aug 30, 2019

Damn, this also runs perfectly fine on my linux machine. :/

@Vindaar
Copy link
Member

Vindaar commented Aug 30, 2019

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.

@cwpearson
Copy link
Contributor Author

Running the snippet on the base64 data you provided works fine!

@cwpearson
Copy link
Contributor Author

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants