Skip to content

hvncat miscomputes output bounds for empty Vectors #41047

Closed
@mfalt

Description

@mfalt

On: Version 1.7.0-DEV.1222 (2021-06-01)
Commit 4a8572f

Tried to figure out the new syntax for hvncat and ran into this bug:

julia> [[];;7;8]
2×2 Matrix{Any}:
 1  #undef
 2  #undef

Not sure what the expected behavior is, but since [7;8;;[]] throws an error, I assume that some boundscheck is missing.

This seems to be an almost equivalent call

 julia> hvncat(((1,2),(3,)), false, zeros(Int,0,), 7, 8)
2×2 Matrix{Int64}:
 7  0
 8  0

Trying to debug, these works as expected:

julia> hvncat(((1,2),(3,)), false, zeros(Int,2,0), 7.0, 8.0)
2×1 Matrix{Float64}:
 7.0
 8.0
julia> hvncat(((1,2),(3,)), false, zeros(Int, 2,), 7, 8)
2×2 Matrix{Int64}:
 0  7
 0  8

However, you can quickly cause a segfault:

julia> hvncat(((1,2),(3,)), false, zeros(Int,0,0,0), 7, 8)
Trace:
julia> hvncat(((1,2),(3,)), false, zeros(Int,0,0,0), 7, 8)
signal (11): Segmentation fault
in expression starting at none:0
jl_gc_pool_alloc at /work/mattiasf/juliagit_dev/src/gc.c:1211
jl_gc_alloc_ at /work/mattiasf/juliagit_dev/src/julia_internal.h:315 [inlined]
jl_gc_alloc at /work/mattiasf/juliagit_dev/src/gc.c:3278
_new_array_ at /work/mattiasf/juliagit_dev/src/array.c:122 [inlined]
_new_array at /work/mattiasf/juliagit_dev/src/array.c:188 [inlined]
jl_alloc_array_1d at /work/mattiasf/juliagit_dev/src/array.c:459
Array at ./boot.jl:453 [inlined]
Array at ./boot.jl:472 [inlined]
getindex at ./array.jl:411 [inlined]
with_repl_linfo at /work/mattiasf/juliagit_dev/usr/share/julia/stdlib/v1.7/REPL/src/REPL.jl:503
_jl_invoke at /work/mattiasf/juliagit_dev/src/gf.c:2244 [inlined]
jl_apply_generic at /work/mattiasf/juliagit_dev/src/gf.c:2426
display at /work/mattiasf/juliagit_dev/usr/share/julia/stdlib/v1.7/REPL/src/REPL.jl:254
display at /work/mattiasf/juliagit_dev/usr/share/julia/stdlib/v1.7/REPL/src/REPL.jl:266
_jl_invoke at /work/mattiasf/juliagit_dev/src/gf.c:2244 [inlined]
jl_apply_generic at /work/mattiasf/juliagit_dev/src/gf.c:2426
display at ./multimedia.jl:328
_jl_invoke at /work/mattiasf/juliagit_dev/src/gf.c:2244 [inlined]
jl_apply_generic at /work/mattiasf/juliagit_dev/src/gf.c:2426
jl_apply at /work/mattiasf/juliagit_dev/src/julia.h:1760 [inlined]
jl_f__call_latest at /work/mattiasf/juliagit_dev/src/builtins.c:751
#invokelatest#2 at ./essentials.jl:726 [inlined]
invokelatest at ./essentials.jl:724 [inlined]
print_response at /work/mattiasf/juliagit_dev/usr/share/julia/stdlib/v1.7/REPL/src/REPL.jl:288
#45 at /work/mattiasf/juliagit_dev/usr/share/julia/stdlib/v1.7/REPL/src/REPL.jl:272
jfptr_YY.45_20661 at /work/mattiasf/juliagit_dev/usr/lib/julia/sys.so (unknown line)
_jl_invoke at /work/mattiasf/juliagit_dev/src/gf.c:2244 [inlined]
jl_apply_generic at /work/mattiasf/juliagit_dev/src/gf.c:2426
with_repl_linfo at /work/mattiasf/juliagit_dev/usr/share/julia/stdlib/v1.7/REPL/src/REPL.jl:505
_jl_invoke at /work/mattiasf/juliagit_dev/src/gf.c:2244 [inlined]
jl_apply_generic at /work/mattiasf/juliagit_dev/src/gf.c:2426
print_response at /work/mattiasf/juliagit_dev/usr/share/julia/stdlib/v1.7/REPL/src/REPL.jl:270
do_respond at /work/mattiasf/juliagit_dev/usr/share/julia/stdlib/v1.7/REPL/src/REPL.jl:841
jfptr_do_respond_20618 at /work/mattiasf/juliagit_dev/usr/lib/julia/sys.so (unknown line)
_jl_invoke at /work/mattiasf/juliagit_dev/src/gf.c:2244 [inlined]
jl_apply_generic at /work/mattiasf/juliagit_dev/src/gf.c:2426
jl_apply at /work/mattiasf/juliagit_dev/src/julia.h:1760 [inlined]
jl_f__call_latest at /work/mattiasf/juliagit_dev/src/builtins.c:751
#invokelatest#2 at ./essentials.jl:726 [inlined]
invokelatest at ./essentials.jl:724 [inlined]
run_interface at /work/mattiasf/juliagit_dev/usr/share/julia/stdlib/v1.7/REPL/src/LineEdit.jl:2493
jfptr_run_interface_20024 at /work/mattiasf/juliagit_dev/usr/lib/julia/sys.so (unknown line)
_jl_invoke at /work/mattiasf/juliagit_dev/src/gf.c:2244 [inlined]
jl_apply_generic at /work/mattiasf/juliagit_dev/src/gf.c:2426
run_frontend at /work/mattiasf/juliagit_dev/usr/share/julia/stdlib/v1.7/REPL/src/REPL.jl:1227
#49 at ./task.jl:411
jfptr_YY.49_20803 at /work/mattiasf/juliagit_dev/usr/lib/julia/sys.so (unknown line)
_jl_invoke at /work/mattiasf/juliagit_dev/src/gf.c:2244 [inlined]
jl_apply_generic at /work/mattiasf/juliagit_dev/src/gf.c:2426
jl_apply at /work/mattiasf/juliagit_dev/src/julia.h:1760 [inlined]
start_task at /work/mattiasf/juliagit_dev/src/task.c:822
Allocations: 10796169 (Pool: 10791934; Big: 4235); GC: 13
[1]    3143063 segmentation fault (core dumped)  ./julia

Edit: Bug generalizes to higher dims: [zeros(Int,2,0);;;7;8]

Metadata

Metadata

Assignees

No one assigned

    Labels

    arrays[a, r, r, a, y, s]bugIndicates an unexpected problem or unintended behavior

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions