From ab628eff7f2aad03d13dea8c0fe7a444c72884fb Mon Sep 17 00:00:00 2001 From: "A.J. Stein" Date: Sun, 6 Oct 2024 10:40:30 -0400 Subject: [PATCH] Return empty String sequence in kind for in #132 --- .../core/metapath/function/library/FnSubstring.java | 8 +++++++- .../core/metapath/function/library/FnSubstringTest.java | 3 +++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/gov/nist/secauto/metaschema/core/metapath/function/library/FnSubstring.java b/core/src/main/java/gov/nist/secauto/metaschema/core/metapath/function/library/FnSubstring.java index 8a9154ba..aaefd202 100644 --- a/core/src/main/java/gov/nist/secauto/metaschema/core/metapath/function/library/FnSubstring.java +++ b/core/src/main/java/gov/nist/secauto/metaschema/core/metapath/function/library/FnSubstring.java @@ -113,8 +113,14 @@ private static ISequence execute( */ @NonNull public static IStringItem substring(@NonNull IStringItem sourceString, @NonNull IDecimalItem start, @NonNull IDecimalItem length) { + String sourceStringData = sourceString.toString(); + + if (sourceStringData.length() == 0) { + return IStringItem.valueOf(""); + } + int startIndex = start.asInteger().intValue() - 1; int endIndex = startIndex + length.asInteger().intValue(); - return IStringItem.valueOf(sourceString.toString().substring(startIndex, endIndex)); + return IStringItem.valueOf(sourceStringData.substring(startIndex, endIndex)); } } diff --git a/core/src/test/java/gov/nist/secauto/metaschema/core/metapath/function/library/FnSubstringTest.java b/core/src/test/java/gov/nist/secauto/metaschema/core/metapath/function/library/FnSubstringTest.java index 5f2d8e2b..de92f500 100644 --- a/core/src/test/java/gov/nist/secauto/metaschema/core/metapath/function/library/FnSubstringTest.java +++ b/core/src/test/java/gov/nist/secauto/metaschema/core/metapath/function/library/FnSubstringTest.java @@ -24,6 +24,9 @@ class FnSubstringTest extends ExpressionTestBase { private static Stream provideValues() { // NOPMD - false positive return Stream.of( + Arguments.of( + string(""), + "substring((), 1, 3)"), Arguments.of( ISequence.of(string("ada")), "substring('metadata', 4, 3)"));