Error in splita/splitax when field contains a single non-string value (#1629)

This commit is contained in:
John Kerl 2024-08-25 19:00:24 -04:00 committed by GitHub
parent 73e2117b43
commit f33c0b2cd6
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 10 additions and 12 deletions

View file

@ -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

View file

@ -1,4 +0,0 @@
[3, 4, 5]
[3, 4]
[3]
[]

View file

@ -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("", ",");
}