]> git.ipfire.org Git - thirdparty/cups.git/commitdiff
search.c: Fix build failure due new GCC 1132/head
authorZdenek Dohnal <zdohnal@redhat.com>
Tue, 7 Jan 2025 16:44:30 +0000 (17:44 +0100)
committerZdenek Dohnal <zdohnal@redhat.com>
Tue, 7 Jan 2025 16:44:30 +0000 (17:44 +0100)
The warning by GCC is false positive because we don't access the freed
memory in the scope, only the pointer memory which contained address of
allocated memory on the heap, and used that for updating index pointer.

Using ptrdiff_t struct before realloc works the warning around.

cgi-bin/search.c

index 106d15406b67559e1fb27039fe1edb726afa33f8..823d0565250bf15e432870228b180a1ccb9745bd 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Search routines for CUPS.
  *
- * Copyright © 2020-2024 by OpenPrinting.
+ * Copyright © 2020-2025 by OpenPrinting.
  * Copyright © 2007-2018 by Apple Inc.
  * Copyright © 1997-2006 by Easy Software Products.
  *
@@ -169,26 +169,27 @@ cgiCompileSearch(const char *query)       /* I - Query string */
       if (wlen > slen)
       {
        /*
-        * Expand the RE string buffer...
+       * Expand the RE string buffer...
        */
 
-        char *temp;                    /* Temporary string pointer */
+       char *temp;                     /* Temporary string pointer */
+       const ptrdiff_t pos = sptr - s; /* Current pointer position (GCC workaround for use-after-free warning after realloc) */
 
 
        slen = wlen + 128;
-        temp = (char *)realloc(s, slen);
+       temp = (char *)realloc(s, slen);
        if (!temp)
        {
          free(s);
          free(re);
 
          if (lword)
-            free(lword);
+           free(lword);
 
          return (NULL);
        }
 
-        sptr = temp + (sptr - s);
+       sptr = temp + pos;
        s    = temp;
       }