Index: nspr/nspr/lib/libc/src/strcmp.c
===================================================================
--- nspr.orig/nspr/lib/libc/src/strcmp.c
+++ nspr/nspr/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);
 }
Index: nspr/nspr/lib/tests/string.c
===================================================================
--- nspr.orig/nspr/lib/tests/string.c
+++ nspr/nspr/lib/tests/string.c
@@ -873,6 +873,8 @@ PRBool test_011(void)
           { (const char *)0, (const char *)0, 0 },
           { (const char *)0, "word", -1 },
           { "word", (const char *)0, 1 },
+          { (const char *)0, (const char *)-1, -1 },
+          { (const char *)-1, (const char *)0, 1 },
           { "word", "word", 0 },
           { "aZYXVUT", "bZYXVUT", -1 },
           { "aZYXVUT", "bAAAAAA", -1 },
@@ -928,8 +930,12 @@ PRBool test_011(void)
         }
 
         printf("FAIL %d: %s-%s -> %d, not %d\n", i,
-               array[i].one ? array[i].one : "(null)",
-               array[i].two ? array[i].two : "(null)",
+               array[i].one ? (array[i].one == (const char *)-1 ? "(highptr)"
+                                                                : array[i].one)
+                            : "(null)",
+               array[i].two ? (array[i].two == (const char *)-1 ? "(highptr)"
+                                                                : array[i].two)
+                            : "(null)",
                rv, array[i].sign);
         return PR_FALSE;
     }
