libc/_collate_lookup: Fix segfault seen on ISO-8859-5 locales
authorJohn Marino <draco@marino.st>
Sun, 19 Jun 2016 07:53:12 +0000 (09:53 +0200)
committerJohn Marino <draco@marino.st>
Sun, 19 Jun 2016 09:10:29 +0000 (11:10 +0200)
The fix for the Russian collation issue seemed to have bug in it.
Segfault was discovered by Lauri Tirkkonen of Illumos and confirmed by
Bapt@FreeBSD.org.  Lauri suggested this as a fix, but as of this writing
Bapt hasn't confirmed that this is final solution for FreeBSD.  Due to
personal reasons, I cannot wait for this confirmation longer.  I believe
this fix is better than what is currently in place, even if it is not
the final solution.

lib/libc/locale/collate.c

index 6912732..952083f 100644 (file)
@@ -301,7 +301,7 @@ _collate_lookup(struct xlocale_collate *table, const wchar_t *t, int *len,
        if ((sptr = *state) != NULL) {
                *pri = *sptr;
                sptr++;
-               if ((sptr == *state) || (sptr == NULL))
+               if ((sptr == *state) || (*sptr == 0))
                        *state = NULL;
                else
                        *state = sptr;