hsearch: fix null pointer arithmetic UB
authorSzabolcs Nagy <nsz@port70.net>
Fri, 3 Feb 2023 22:10:17 +0000 (23:10 +0100)
committerRich Felker <dalias@aerifal.cx>
Sun, 12 Feb 2023 22:41:23 +0000 (17:41 -0500)
htab->__tab->entries pointer may be 0 so delay using it in arithmetics.
this did not cause any known issue other than with ubsan instrumentation.

src/search/hsearch.c

index b3ac879..2634a67 100644 (file)
@@ -41,9 +41,9 @@ static int resize(size_t nel, struct hsearch_data *htab)
 {
        size_t newsize;
        size_t i, j;
+       size_t oldsize = htab->__tab->mask + 1;
        ENTRY *e, *newe;
        ENTRY *oldtab = htab->__tab->entries;
-       ENTRY *oldend = htab->__tab->entries + htab->__tab->mask + 1;
 
        if (nel > MAXSIZE)
                nel = MAXSIZE;
@@ -56,7 +56,7 @@ static int resize(size_t nel, struct hsearch_data *htab)
        htab->__tab->mask = newsize - 1;
        if (!oldtab)
                return 1;
-       for (e = oldtab; e < oldend; e++)
+       for (e = oldtab; e < oldtab + oldsize; e++)
                if (e->key) {
                        for (i=keyhash(e->key),j=1; ; i+=j++) {
                                newe = htab->__tab->entries + (i & htab->__tab->mask);