Skip to content

dim can overflow in parse_array #66

@pfitzseb

Description

@pfitzseb

E.g. when parsing https://github.com/OpenMendel/MendelImpute.jl/blob/v1.2.3/test/run.jl. That file's obviously invalid, but we should presumably handle this case a bit more nicely. Meta.parse doesn't error here.

┌ Error: parsing failed for /home/pfitzseb/juliasyntaxtest/pkgs/MendelImpute_1.2.3/test/run.jl
│   ex =
│    Numeric flags unable to hold large integer -9223372036854775808
│    Stacktrace:
│      [1] error(s::String)
│        @ Base ./error.jl:35
│      [2] set_numeric_flags
│        @ ~/.julia/packages/JuliaSyntax/OawBx/src/parse_stream.jl:34 [inlined]
│      [3] parse_array(ps::JuliaSyntax.ParseState, mark::JuliaSyntax.ParseStreamPosition, closer::JuliaSyntax.Kind, end_is_symbol::Bool)
│        @ JuliaSyntax ~/.julia/packages/JuliaSyntax/OawBx/src/parser.jl:2634
│      [4] parse_cat(ps::JuliaSyntax.ParseState, closer::JuliaSyntax.Kind, end_is_symbol::Bool)
│        @ JuliaSyntax ~/.julia/packages/JuliaSyntax/OawBx/src/parser.jl:2814
│      [5] parse_call_chain(ps::JuliaSyntax.ParseState, mark::JuliaSyntax.ParseStreamPosition, is_macrocall::Bool)
│        @ JuliaSyntax ~/.julia/packages/JuliaSyntax/OawBx/src/parser.jl:1469
│      [6] parse_call_chain
│        @ ~/.julia/packages/JuliaSyntax/OawBx/src/parser.jl:1383 [inlined]
│      [7] parse_call(ps::JuliaSyntax.ParseState)
│        @ JuliaSyntax ~/.julia/packages/JuliaSyntax/OawBx/src/parser.jl:1311
│      [8] parse_factor(ps::JuliaSyntax.ParseState)
│        @ JuliaSyntax ~/.julia/packages/JuliaSyntax/OawBx/src/parser.jl:1258
│      [9] parse_unary(ps::JuliaSyntax.ParseState)
│        @ JuliaSyntax ~/.julia/packages/JuliaSyntax/OawBx/src/parser.jl:1101
│     [10] parse_juxtapose(ps::JuliaSyntax.ParseState)
│        @ JuliaSyntax ~/.julia/packages/JuliaSyntax/OawBx/src/parser.jl:1058
│     [11] parse_where(ps::JuliaSyntax.ParseState, down::typeof(JuliaSyntax.parse_juxtapose))
│        @ JuliaSyntax ~/.julia/packages/JuliaSyntax/OawBx/src/parser.jl:1013
│     [12] parse_unary_subtype(ps::JuliaSyntax.ParseState)
│        @ JuliaSyntax ~/.julia/packages/JuliaSyntax/OawBx/src/parser.jl:974
│     [13] parse_LtoR(ps::JuliaSyntax.ParseState, down::typeof(JuliaSyntax.parse_unary_subtype), is_op::typeof(JuliaSyntax.is_prec_bitshift))
│        @ JuliaSyntax ~/.julia/packages/JuliaSyntax/OawBx/src/parser.jl:347
│     [14] parse_shift(ps::JuliaSyntax.ParseState)
│        @ JuliaSyntax ~/.julia/packages/JuliaSyntax/OawBx/src/parser.jl:943
│     [15] parse_LtoR(ps::JuliaSyntax.ParseState, down::typeof(JuliaSyntax.parse_shift), is_op::typeof(JuliaSyntax.is_prec_rational))
│        @ JuliaSyntax ~/.julia/packages/JuliaSyntax/OawBx/src/parser.jl:347
│     [16] parse_rational(ps::JuliaSyntax.ParseState)
│        @ JuliaSyntax ~/.julia/packages/JuliaSyntax/OawBx/src/parser.jl:938
│     [17] parse_with_chains(ps::JuliaSyntax.ParseState, down::typeof(JuliaSyntax.parse_rational), is_op::typeof(JuliaSyntax.is_prec_times), chain_ops::Tuple{JuliaSyntax.Kind})
│        @ JuliaSyntax ~/.julia/packages/JuliaSyntax/OawBx/src/parser.jl:893
│     [18] parse_term(ps::JuliaSyntax.ParseState)
│        @ JuliaSyntax ~/.julia/packages/JuliaSyntax/OawBx/src/parser.jl:885
│     [19] parse_with_chains(ps::JuliaSyntax.ParseState, down::typeof(JuliaSyntax.parse_term), is_op::typeof(JuliaSyntax.is_prec_plus), chain_ops::Tuple{JuliaSyntax.Kind, JuliaSyntax.Kind})
│        @ JuliaSyntax ~/.julia/packages/JuliaSyntax/OawBx/src/parser.jl:893
│     [20] parse_expr(ps::JuliaSyntax.ParseState)
│        @ JuliaSyntax ~/.julia/packages/JuliaSyntax/OawBx/src/parser.jl:878
│     [21] parse_range(ps::JuliaSyntax.ParseState)
│        @ JuliaSyntax ~/.julia/packages/JuliaSyntax/OawBx/src/parser.jl:794
│     [22] parse_LtoR(ps::JuliaSyntax.ParseState, down::typeof(JuliaSyntax.parse_range), is_op::typeof(JuliaSyntax.is_prec_pipe_gt))
│        @ JuliaSyntax ~/.julia/packages/JuliaSyntax/OawBx/src/parser.jl:347
│     [23] parse_pipe_gt(ps::JuliaSyntax.ParseState)
│        @ JuliaSyntax ~/.julia/packages/JuliaSyntax/OawBx/src/parser.jl:781
│     [24] parse_RtoL(ps::JuliaSyntax.ParseState, down::typeof(JuliaSyntax.parse_pipe_gt), is_op::typeof(JuliaSyntax.is_prec_pipe_lt), self::typeof(JuliaSyntax.parse_pipe_lt))
│        @ JuliaSyntax ~/.julia/packages/JuliaSyntax/OawBx/src/parser.jl:361
│     [25] parse_pipe_lt(ps::JuliaSyntax.ParseState)
│        @ JuliaSyntax ~/.julia/packages/JuliaSyntax/OawBx/src/parser.jl:775
│     [26] parse_comparison(ps::JuliaSyntax.ParseState, subtype_comparison::Bool)
│        @ JuliaSyntax ~/.julia/packages/JuliaSyntax/OawBx/src/parser.jl:749
│     [27] parse_comparison(ps::JuliaSyntax.ParseState)
│        @ JuliaSyntax ~/.julia/packages/JuliaSyntax/OawBx/src/parser.jl:733
│     [28] parse_lazy_cond(ps::JuliaSyntax.ParseState, down::typeof(JuliaSyntax.parse_comparison), is_op::typeof(JuliaSyntax.is_prec_lazy_and), self::typeof(JuliaSyntax.parse_and))
│        @ JuliaSyntax ~/.julia/packages/JuliaSyntax/OawBx/src/parser.jl:698
│     [29] parse_and(ps::JuliaSyntax.ParseState)
│        @ JuliaSyntax ~/.julia/packages/JuliaSyntax/OawBx/src/parser.jl:726
│     [30] parse_lazy_cond(ps::JuliaSyntax.ParseState, down::typeof(JuliaSyntax.parse_and), is_op::typeof(JuliaSyntax.is_prec_lazy_or), self::typeof(JuliaSyntax.parse_or))
│        @ JuliaSyntax ~/.julia/packages/JuliaSyntax/OawBx/src/parser.jl:698
│     [31] parse_or(ps::JuliaSyntax.ParseState)
│        @ JuliaSyntax ~/.julia/packages/JuliaSyntax/OawBx/src/parser.jl:717
│     [32] parse_arrow(ps::JuliaSyntax.ParseState)
│        @ JuliaSyntax ~/.julia/packages/JuliaSyntax/OawBx/src/parser.jl:674
│     [33] parse_cond(ps::JuliaSyntax.ParseState)
│        @ JuliaSyntax ~/.julia/packages/JuliaSyntax/OawBx/src/parser.jl:629
│     [34] parse_RtoL(ps::JuliaSyntax.ParseState, down::typeof(JuliaSyntax.parse_cond), is_op::typeof(JuliaSyntax.is_prec_pair), self::typeof(JuliaSyntax.parse_pair))
│        @ JuliaSyntax ~/.julia/packages/JuliaSyntax/OawBx/src/parser.jl:361
│     [35] parse_pair(ps::JuliaSyntax.ParseState)
│        @ JuliaSyntax ~/.julia/packages/JuliaSyntax/OawBx/src/parser.jl:620
│     [36] parse_comma(ps::JuliaSyntax.ParseState, do_emit::Bool)
│        @ JuliaSyntax ~/.julia/packages/JuliaSyntax/OawBx/src/parser.jl:598
│     [37] parse_comma
│        @ ~/.julia/packages/JuliaSyntax/OawBx/src/parser.jl:596 [inlined]
│     [38] parse_assignment
│        @ ~/.julia/packages/JuliaSyntax/OawBx/src/parser.jl:558 [inlined]
│     [39] parse_eq
│        @ ~/.julia/packages/JuliaSyntax/OawBx/src/parser.jl:531 [inlined]
│     [40] parse_docstring(ps::JuliaSyntax.ParseState, down::typeof(JuliaSyntax.parse_eq))
│        @ JuliaSyntax ~/.julia/packages/JuliaSyntax/OawBx/src/parser.jl:489
│     [41] parse_docstring
│        @ ~/.julia/packages/JuliaSyntax/OawBx/src/parser.jl:487 [inlined]
│     [42] parse_Nary(ps::JuliaSyntax.ParseState, down::typeof(JuliaSyntax.parse_docstring), delimiters::Tuple{JuliaSyntax.Kind}, closing_tokens::Tuple{JuliaSyntax.Kind})
│        @ JuliaSyntax ~/.julia/packages/JuliaSyntax/OawBx/src/parser.jl:391
│     [43] parse_stmts(ps::JuliaSyntax.ParseState)
│        @ JuliaSyntax ~/.julia/packages/JuliaSyntax/OawBx/src/parser.jl:465
│     [44] parse_toplevel(ps::JuliaSyntax.ParseState)
│        @ JuliaSyntax ~/.julia/packages/JuliaSyntax/OawBx/src/parser.jl:429
│     [45] parse(stream::JuliaSyntax.ParseStream; rule::Symbol)
│        @ JuliaSyntax ~/.julia/packages/JuliaSyntax/OawBx/src/parser_api.jl:98
│     [46] #parse#83
│        @ ~/.julia/packages/JuliaSyntax/OawBx/src/parser_api.jl:123 [inlined]
│     [47] parse
│        @ ~/.julia/packages/JuliaSyntax/OawBx/src/parser_api.jl:120 [inlined]
│     [48] (::var"#21#23")()
│        @ Main ~/juliasyntaxtest/run.jl:40
│     [49] with_logstate(f::Function, logstate::Any)
│        @ Base.CoreLogging ./logging.jl:511
│     [50] with_logger(f::Function, logger::ConsoleLogger)
│        @ Base.CoreLogging ./logging.jl:623
│     [51] top-level scope
│        @ ~/juliasyntaxtest/run.jl:12
│     [52] include(fname::String)
│        @ Base.MainInclude ./client.jl:476
│     [53] top-level scope
│        @ REPL[2]:1
│     [54] eval
│        @ ./boot.jl:368 [inlined]
│     [55] eval_user_input(ast::Any, backend::REPL.REPLBackend)
│        @ REPL ~/julia-1.8.0/share/julia/stdlib/v1.8/REPL/src/REPL.jl:151
│     [56] repl_backend_loop(backend::REPL.REPLBackend)
│        @ REPL ~/julia-1.8.0/share/julia/stdlib/v1.8/REPL/src/REPL.jl:247
│     [57] start_repl_backend(backend::REPL.REPLBackend, consumer::Any)
│        @ REPL ~/julia-1.8.0/share/julia/stdlib/v1.8/REPL/src/REPL.jl:232
│     [58] run_repl(repl::REPL.AbstractREPL, consumer::Any; backend_on_current_task::Bool)
│        @ REPL ~/julia-1.8.0/share/julia/stdlib/v1.8/REPL/src/REPL.jl:369
│     [59] run_repl(repl::REPL.AbstractREPL, consumer::Any)
│        @ REPL ~/julia-1.8.0/share/julia/stdlib/v1.8/REPL/src/REPL.jl:355
│     [60] (::Base.var"#966#968"{Bool, Bool, Bool})(REPL::Module)
│        @ Base ./client.jl:419
│     [61] #invokelatest#2
│        @ ./essentials.jl:729 [inlined]
│     [62] invokelatest
│        @ ./essentials.jl:726 [inlined]
│     [63] run_main_repl(interactive::Bool, quiet::Bool, banner::Bool, history_file::Bool, color_set::Bool)
│        @ Base ./client.jl:404
│     [64] exec_options(opts::Base.JLOptions)
│        @ Base ./client.jl:318
└ @ Main ~/juliasyntaxtest/run.jl:45

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions