Skip to content

Commit 8d69a59

Browse files
committed
Fix strcmp treating null and empty strings as equal
Previously, strcmp could return equality when comparing a null value with an empty string. This happened because rtrim(null) returned an empty string, causing null and "" to be treated as equivalent during comparison. This change preserves the semantic difference between null and empty strings by handling null values explicitly and delegating comparison to Comparator.nullsFirst after trimming. Behavior: - null is considered less than any non-null String - empty strings are not equal to null - trailing whitespace is ignored during comparison Issue: 207440
1 parent 5eb8ee1 commit 8d69a59

File tree

1 file changed

+7
-2
lines changed

1 file changed

+7
-2
lines changed

common/src/main/java/com/genexus/CommonUtil.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.math.BigInteger;
2020
import java.net.HttpURLConnection;
2121
import java.net.URL;
22+
import java.util.Comparator;
2223
import java.util.regex.Matcher;
2324
import java.util.regex.Pattern;
2425

@@ -853,8 +854,12 @@ public static boolean dateCompare( Date left , Date right)
853854
public static int strcmp( String left ,
854855
String right )
855856
{
856-
return rtrim(left).compareTo(rtrim(right));
857-
}
857+
return Comparator.nullsFirst(String::compareTo)
858+
.compare(
859+
left == null ? null : rtrim(left),
860+
right == null ? null : rtrim(right)
861+
);
862+
}
858863

859864
public static boolean strcmp2( String left ,
860865
String right )

0 commit comments

Comments
 (0)