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

Evaluation of "Thunk"-Expression results in EXCEPTION_ACCESS_VIOLATION #32315

Closed
stefan-m-lenz opened this issue Jun 13, 2019 · 4 comments · Fixed by #35429
Closed

Evaluation of "Thunk"-Expression results in EXCEPTION_ACCESS_VIOLATION #32315

stefan-m-lenz opened this issue Jun 13, 2019 · 4 comments · Fixed by #35429
Labels
bug Indicates an unexpected problem or unintended behavior

Comments

@stefan-m-lenz
Copy link

It is probably a bit silly what I am doing. (I tried to somehow introduce a new scope block using AST and saw that an empty let-Block with no variables is translated to a :thunk-Expression, which I tried.)

Expr(:thunk, Meta.parse("x=17"))
Main.eval(Expr(:thunk, Meta.parse("x=17")))

This results in a crash of Julia the following error (with a fresh Julia session with version 1.1.1 on Windows 10):

Exception: EXCEPTION_ACCESS_VIOLATION at 0x6b5ccba9 -- jl_array_ptr_ref at /home/Administrator/buildbot/worker/package_win64/build/src/home/Administrator/buildbot/worker/package_win64/build/src\julia.h:807 [inlined]
body_attributes at /home/Administrator/buildbot/worker/package_win64/build/src/home/Administrator/buildbot/worker/package_win64/build/src\toplevel.c:364 [inlined]
jl_toplevel_eval_flex at /home/Administrator/buildbot/worker/package_win64/build/src/home/Administrator/buildbot/worker/package_win64/build/src\toplevel.c:739
in expression starting at no file:0
jl_array_ptr_ref at /home/Administrator/buildbot/worker/package_win64/build/src/home/Administrator/buildbot/worker/package_win64/build/src\julia.h:807 [inlined]
body_attributes at /home/Administrator/buildbot/worker/package_win64/build/src/home/Administrator/buildbot/worker/package_win64/build/src\toplevel.c:364 [inlined]
jl_toplevel_eval_flex at /home/Administrator/buildbot/worker/package_win64/build/src/home/Administrator/buildbot/worker/package_win64/build/src\toplevel.c:739
jl_toplevel_eval at /home/Administrator/buildbot/worker/package_win64/build/src/home/Administrator/buildbot/worker/package_win64/build/src\toplevel.c:773 [inlined]
jl_toplevel_eval_in at /home/Administrator/buildbot/worker/package_win64/build/src/home/Administrator/buildbot/worker/package_win64/build/src\toplevel.c:793
eval at .\boot.jl:328 [inlined]
eval at .\client.jl:404
jl_fptr_trampoline at /home/Administrator/buildbot/worker/package_win64/build/src/home/Administrator/buildbot/worker/package_win64/build/src\gf.c:1842
jl_apply_generic at /home/Administrator/buildbot/worker/package_win64/build/src/home/Administrator/buildbot/worker/package_win64/build/src\gf.c:2197
do_call at /home/Administrator/buildbot/worker/package_win64/build/src/home/Administrator/buildbot/worker/package_win64/build/src\interpreter.c:323
eval_value at /home/Administrator/buildbot/worker/package_win64/build/src/home/Administrator/buildbot/worker/package_win64/build/src\interpreter.c:411
eval_stmt_value at /home/Administrator/buildbot/worker/package_win64/build/src/home/Administrator/buildbot/worker/package_win64/build/src\interpreter.c:362 [inlined]
eval_body at /home/Administrator/buildbot/worker/package_win64/build/src/home/Administrator/buildbot/worker/package_win64/build/src\interpreter.c:759
jl_interpret_toplevel_thunk_callback at /home/Administrator/buildbot/worker/package_win64/build/src/home/Administrator/buildbot/worker/package_win64/build/src\interpreter.c:885
unknown function (ip: FFFFFFFFFFFFFFFE)
unknown function (ip: 00000000105E168F)
unknown function (ip: 0000000000000003)
jl_toplevel_eval_flex at /home/Administrator/buildbot/worker/package_win64/build/src/home/Administrator/buildbot/worker/package_win64/build/src\toplevel.c:764
jl_toplevel_eval at /home/Administrator/buildbot/worker/package_win64/build/src/home/Administrator/buildbot/worker/package_win64/build/src\toplevel.c:773 [inlined]
jl_toplevel_eval_in at /home/Administrator/buildbot/worker/package_win64/build/src/home/Administrator/buildbot/worker/package_win64/build/src\toplevel.c:793
eval at .\boot.jl:328
jl_apply_generic at /home/Administrator/buildbot/worker/package_win64/build/src/home/Administrator/buildbot/worker/package_win64/build/src\gf.c:2197
eval_user_input at C:\cygwin\home\Administrator\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.1\REPL\src\REPL.jl:85
macro expansion at C:\cygwin\home\Administrator\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.1\REPL\src\REPL.jl:117 [inlined]
#26 at .\task.jl:259
jl_apply_generic at /home/Administrator/buildbot/worker/package_win64/build/src/home/Administrator/buildbot/worker/package_win64/build/src\gf.c:2197
jl_apply at /home/Administrator/buildbot/worker/package_win64/build/src/home/Administrator/buildbot/worker/package_win64/build/src\julia.h:1571 [inlined]
start_task at /home/Administrator/buildbot/worker/package_win64/build/src/home/Administrator/buildbot/worker/package_win64/build/src\task.c:572
Allocations: 944350 (Pool: 943830; Big: 520); GC: 1

Versioninfo:

julia> versioninfo()
Julia Version 1.1.1
Commit 55e36cc308 (2019-05-16 04:10 UTC)
Platform Info:
  OS: Windows (x86_64-w64-mingw32)
  CPU: Intel(R) Core(TM) i5-4570 CPU @ 3.20GHz
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-6.0.1 (ORCJIT, haswell)
Environment:
  JULIA_PKGDIR = C:\.julia
@JeffBezanson
Copy link
Sponsor Member

That is an internal representation; it's part of the "IR" (intermediate representation), not the AST. eval accepts ASTs, which come from parse or quoted expressions. For example, to see the structure of a let:

julia> dump(:(let
       end))
Expr
  head: Symbol let
  args: Array{Any}((2,))
    1: Expr
      head: Symbol block
      args: Array{Any}((0,))
    2: Expr
      head: Symbol block
      args: Array{Any}((0,))

But, we could add an error check here to avoid a crash.

@stefan-m-lenz
Copy link
Author

Thank you very much for the tip! I hope this issue wasn't a complete waste of your time.

@c42f
Copy link
Member

c42f commented Jun 14, 2019

It's not a waste of time; ideally the runtime would never segfault unless someone incorrectly uses one of the unsafe_* family of functions (+related things like ccall). Thanks for the bug report.

@c42f c42f added the bug Indicates an unexpected problem or unintended behavior label Jun 14, 2019
@vtjnash
Copy link
Sponsor Member

vtjnash commented Jan 24, 2023

Expr is also internal, like unsafe, so can cause segfaults with eval

IanButterworth pushed a commit that referenced this issue Jan 28, 2023
Co-authored-by: Jameson Nash <vtjnash@gmail.com>
Co-authored-by: Dilum Aluthge <dilum@aluthge.com>
Closes #32315
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Indicates an unexpected problem or unintended behavior
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants