Skip to content

Commit 7928f90

Browse files
authored
Fix inverse_rle with negative lengths (#853)
1 parent 28f70ec commit 7928f90

File tree

3 files changed

+6
-2
lines changed

3 files changed

+6
-2
lines changed

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name = "StatsBase"
22
uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91"
33
authors = ["JuliaStats"]
4-
version = "0.33.21"
4+
version = "0.33.22"
55

66
[deps]
77
DataAPI = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a"

src/misc.jl

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,11 +60,14 @@ run lengths.
6060
function inverse_rle(vals::AbstractVector{T}, lens::AbstractVector{<:Integer}) where T
6161
m = length(vals)
6262
length(lens) == m || raise_dimerror()
63+
n = sum(lens)
64+
n >= 0 || throw(ArgumentError("lengths must be non-negative"))
6365

64-
r = Vector{T}(undef, sum(lens))
66+
r = Vector{T}(undef, n)
6567
p = 0
6668
@inbounds for i = 1 : m
6769
j = lens[i]
70+
j >= 0 || throw(ArgumentError("lengths must be non-negative"))
6871
v = vals[i]
6972
while j > 0
7073
r[p+=1] = v

test/misc.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ z = [1, 1, 2, 2, 2, 3, 1, 2, 2, 3, 3, 3, 3]
88
@test vals == [1, 2, 3, 1, 2, 3]
99
@test lens == [2, 3, 1, 1, 2, 4]
1010
@test inverse_rle(vals, lens) == z
11+
@test_throws ArgumentError inverse_rle(vals, fill(-1, length(lens)))
1112

1213
z = [true, true, false, false, true, false, true, true, true]
1314
vals, lens = rle(z)

0 commit comments

Comments
 (0)