]> git.ipfire.org Git - thirdparty/cups.git/commitdiff
cgi: Fix showing query string in Help 977/head
authorZdenek Dohnal <zdohnal@redhat.com>
Thu, 6 Jun 2024 15:28:59 +0000 (17:28 +0200)
committerZdenek Dohnal <zdohnal@redhat.com>
Thu, 6 Jun 2024 15:28:59 +0000 (17:28 +0200)
If a string was searched on CUPS Web UI help page, garbage was printed
out in search box. It was because text field pointer was freed before
and contained garbage - previously it was variable value which was
allocated, so the string survived `cgCleanVariables(()`, but the text
field is a pointer into form variables which gets cleaned up.

Fix is to use `strdup()` if `cgiGetTextfield()` returns non-NULL
pointer. The binary exits shortly after either way, so memory is taken
care of by OS.

cgi-bin/help.c

index e85dcdedf47edb75e94a3f3d286289ff475b0fc8..4b18f0dbdf6509cbdad4827d392dc31dd8f962c4 100644 (file)
@@ -28,7 +28,7 @@ main(int  argc,                               /* I - Number of command-line arguments */
                *si;                    /* Search index */
   help_node_t  *n;                     /* Current help node */
   int          i;                      /* Looping var */
-  const char   *query;                 /* Search query */
+  const char   *query = NULL;          /* Search query */
   const char   *cache_dir;             /* CUPS_CACHEDIR environment variable */
   const char   *docroot;               /* CUPS_DOCROOT environment variable */
   const char   *helpfile,              /* Current help file */
@@ -172,8 +172,9 @@ main(int  argc,                             /* I - Number of command-line arguments */
 
   if (cgiGetVariable("CLEAR"))
     cgiSetVariable("QUERY", "");
+  else if ((query = cgiGetTextfield("QUERY")) != NULL)
+    query = strdup(query);
 
-  query = cgiGetTextfield("QUERY");
   si    = helpSearchIndex(hi, query, topic, helpfile);
 
   cgiClearVariables();