From 655fc2ce04f6aaaa13f5322f8c2150f0cff8fd4d Mon Sep 17 00:00:00 2001 From: Aayush Sabharwal Date: Fri, 25 Apr 2025 17:27:13 +0530 Subject: [PATCH] fix: fix stack overflow on `remake_buffer` of `Dict` --- src/remake.jl | 6 ++++++ test/remake_test.jl | 9 +++++++++ 2 files changed, 15 insertions(+) diff --git a/src/remake.jl b/src/remake.jl index 21de62d..ac18dd1 100644 --- a/src/remake.jl +++ b/src/remake.jl @@ -55,6 +55,12 @@ function remake_buffer(sys, oldbuffer::AbstractArray, idxs, vals) return newbuffer end +# We don't support `Dict`s as value providers. If we get a `Dict`, +# assume it is non-symbolic. +function remake_buffer(sys, oldbuffer::Dict, idxs, vals) + return Dict(idxs .=> vals) +end + remake_buffer(sys, ::Nothing, idxs, vals) = nothing function remake_buffer(sys, oldbuffer, idxs, vals) diff --git a/test/remake_test.jl b/test/remake_test.jl index ce261c2..e9e33e3 100644 --- a/test/remake_test.jl +++ b/test/remake_test.jl @@ -73,3 +73,12 @@ for (buf, newbuf, idxs, vals) in [ end @test isnothing(remake_buffer(sys, nothing, [], [])) + +@testset "`remake_buffer` with `Dict`" begin + sys = nothing + buf = Dict("a" => 1, "b" => 2) + buf2 = remake_buffer(sys, buf, collect(keys(buf)), collect(values(buf))) + @test isequal(buf, buf2) + buf2 = remake_buffer(sys, buf, buf) + @test isequal(buf, buf2) +end