From f33c0b2cd66e7e5a29ec0b366d0c0594084acc18 Mon Sep 17 00:00:00 2001 From: John Kerl Date: Sun, 25 Aug 2024 19:00:24 -0400 Subject: [PATCH] Error in `splita`/`splitax` when field contains a single non-string value (#1629) --- pkg/bifs/collections.go | 15 ++++++++------- test/cases/dsl-split-join/0021/expout | 4 ---- test/cases/dsl-split-join/0021/mlr | 3 ++- 3 files changed, 10 insertions(+), 12 deletions(-) diff --git a/pkg/bifs/collections.go b/pkg/bifs/collections.go index a734ee4519..247622740d 100644 --- a/pkg/bifs/collections.go +++ b/pkg/bifs/collections.go @@ -568,15 +568,16 @@ func BIF_splitnvx(input1, input2 *mlrval.Mlrval) *mlrval.Mlrval { // ---------------------------------------------------------------- // splita("3,4,5", ",") -> [3,4,5] func BIF_splita(input1, input2 *mlrval.Mlrval) *mlrval.Mlrval { - if !input1.IsStringOrVoid() { - return mlrval.FromNotStringError("splita", input1) + if !input1.IsLegit() { + return input1 } + input1String := input1.String() if !input2.IsString() { return mlrval.FromNotStringError("splita", input2) } fieldSeparator := input2.AcquireStringValue() - fields := lib.SplitString(input1.AcquireStringValue(), fieldSeparator) + fields := lib.SplitString(input1String, fieldSeparator) arrayval := make([]*mlrval.Mlrval, len(fields)) @@ -592,16 +593,16 @@ func BIF_splita(input1, input2 *mlrval.Mlrval) *mlrval.Mlrval { // BIF_splitax splits a string to an array, without type-inference: // e.g. splitax("3,4,5", ",") -> ["3","4","5"] func BIF_splitax(input1, input2 *mlrval.Mlrval) *mlrval.Mlrval { - if !input1.IsStringOrVoid() { - return mlrval.FromNotStringError("splitax", input1) + if !input1.IsLegit() { + return input1 } + input1String := input1.String() if !input2.IsString() { return mlrval.FromNotStringError("splitax", input2) } - input := input1.AcquireStringValue() fieldSeparator := input2.AcquireStringValue() - return bif_splitax_helper(input, fieldSeparator) + return bif_splitax_helper(input1String, fieldSeparator) } // bif_splitax_helper is split out for the benefit of BIF_splitax and diff --git a/test/cases/dsl-split-join/0021/expout b/test/cases/dsl-split-join/0021/expout index a49c0a7172..e69de29bb2 100644 --- a/test/cases/dsl-split-join/0021/expout +++ b/test/cases/dsl-split-join/0021/expout @@ -1,4 +0,0 @@ -[3, 4, 5] -[3, 4] -[3] -[] diff --git a/test/cases/dsl-split-join/0021/mlr b/test/cases/dsl-split-join/0021/mlr index 86e3dd532c..32232c0234 100644 --- a/test/cases/dsl-split-join/0021/mlr +++ b/test/cases/dsl-split-join/0021/mlr @@ -1,6 +1,7 @@ -end { +test/cases/dsl-split-join/0021/mlrend { print splita("3,4,5", ","); print splita("3,4", ","); print splita("3", ","); + print splita(3, ","); print splita("", ","); }