summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Hommey <mh@glandium.org>2016-08-15 10:21:29 +0900
committerMike Hommey <mh@glandium.org>2016-08-15 10:21:29 +0900
commit70b8893d0b1092538b8db47cd8a7741dc37d4358 (patch)
tree6fdd207ac86efce3fef702ba1cc37577dfa68f17
parent5d8c55a4077b4586326d3c6b139dab48e41e6100 (diff)
downloadnspr-hg-70b8893d0b1092538b8db47cd8a7741dc37d4358.tar.gz
Bug 1295056 - Return consistent results for PL_str*cmp when one of the pointers is NULL. r=wtcNSPR_4_13_BETA2
-rw-r--r--lib/libc/src/strcase.c12
-rw-r--r--lib/libc/src/strcmp.c12
2 files changed, 16 insertions, 8 deletions
diff --git a/lib/libc/src/strcase.c b/lib/libc/src/strcase.c
index b938ba41..ad542587 100644
--- a/lib/libc/src/strcase.c
+++ b/lib/libc/src/strcase.c
@@ -48,8 +48,10 @@ PL_strcasecmp(const char *a, const char *b)
const unsigned char *ua = (const unsigned char *)a;
const unsigned char *ub = (const unsigned char *)b;
- if( ((const char *)0 == a) || (const char *)0 == b )
- return (PRIntn)(a-b);
+ if( (const char *)0 == a )
+ return ((const char *)0 == b) ? 0 : -1;
+ if( (const char *)0 == b )
+ return 1;
while( (uc[*ua] == uc[*ub]) && ('\0' != *a) )
{
@@ -67,8 +69,10 @@ PL_strncasecmp(const char *a, const char *b, PRUint32 max)
const unsigned char *ua = (const unsigned char *)a;
const unsigned char *ub = (const unsigned char *)b;
- if( ((const char *)0 == a) || (const char *)0 == b )
- return (PRIntn)(a-b);
+ if( (const char *)0 == a )
+ return ((const char *)0 == b) ? 0 : -1;
+ if( (const char *)0 == b )
+ return 1;
while( max && (uc[*ua] == uc[*ub]) && ('\0' != *a) )
{
diff --git a/lib/libc/src/strcmp.c b/lib/libc/src/strcmp.c
index 2d8fbcd9..296d7163 100644
--- a/lib/libc/src/strcmp.c
+++ b/lib/libc/src/strcmp.c
@@ -9,8 +9,10 @@
PR_IMPLEMENT(PRIntn)
PL_strcmp(const char *a, const char *b)
{
- if( ((const char *)0 == a) || (const char *)0 == b )
- return (PRIntn)(a-b);
+ if( (const char *)0 == a )
+ return ((const char *)0 == b) ? 0 : -1;
+ if( (const char *)0 == b )
+ return 1;
return (PRIntn)strcmp(a, b);
}
@@ -18,8 +20,10 @@ PL_strcmp(const char *a, const char *b)
PR_IMPLEMENT(PRIntn)
PL_strncmp(const char *a, const char *b, PRUint32 max)
{
- if( ((const char *)0 == a) || (const char *)0 == b )
- return (PRIntn)(a-b);
+ if( (const char *)0 == a )
+ return ((const char *)0 == b) ? 0 : -1;
+ if( (const char *)0 == b )
+ return 1;
return (PRIntn)strncmp(a, b, (size_t)max);
}