Skip to content

Commit 4d997d2

Browse files
committed
make use of expectedsize like transcode
1 parent 3190c35 commit 4d997d2

1 file changed

Lines changed: 14 additions & 2 deletions

File tree

src/chunkcodecs.jl

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,23 @@ end
2323
function try_resize_decode!(codec::Codec, dst::AbstractVector{UInt8}, src::AbstractVector{UInt8}, max_size::Int64; kwargs...)::MaybeSize
2424
dst_size::Int64 = length(dst)
2525
src_size::Int64 = length(src)
26-
src_left::Int64 = src_size
27-
dst_left::Int64 = dst_size
2826
check_contiguous(dst)
2927
check_contiguous(src)
3028
cconv_src = Base.cconvert(Ptr{UInt8}, src)
29+
if dst_size < max_size
30+
# Do the equivalent of `_default_output_buffer(codec, input)` in `transcode`
31+
# by resizing `dst`
32+
expected_dst_size::Int64 = GC.@preserve(cconv_src, min(initial_output_size(
33+
codec,
34+
Memory(Base.unsafe_convert(Ptr{UInt8}, cconv_src), src_size),
35+
), max_size))
36+
if expected_dst_size > dst_size
37+
resize!(dst, expected_dst_size)
38+
dst_size = expected_dst_size
39+
end
40+
end
41+
src_left::Int64 = src_size
42+
dst_left::Int64 = dst_size
3143
err = Error()
3244
# Outer loop to decode a concatenation of multiple compressed streams.
3345
while true

0 commit comments

Comments
 (0)