]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Fix dereference in a couple of GUC check hooks
authorÁlvaro Herrera <alvherre@kurilemu.de>
Tue, 24 Mar 2026 15:45:39 +0000 (16:45 +0100)
committerÁlvaro Herrera <alvherre@kurilemu.de>
Tue, 24 Mar 2026 15:45:39 +0000 (16:45 +0100)
check_backtrace_functions() and check_archive_directory() were doing an
empty-string check this way:
    *newval[0] == '\0'
which, because of operator precedence, is interpreted as *(newval[0])
instead of (*newval)[0] -- but these variables are pointers to C-strings
and we want to check the first character therein, rather than check the
first pointer of the array, so that interpretation is wrong.  This would
be wrong for any index element other than 0, as evidenced by every other
dereference of the same variable in check_backtrace_functions, which use
parentheses.

Add parentheses to make the intended dereference explicit.

This is just cosmetic at this stage, so no backpatch, although it's been
"wrong" for a long time.

Author: Zhang Hu <kongbaik228@gmail.com>
Reviewed-by: Junwang Zhao <zhjwpku@gmail.com>
Reviewed-by: Chao Li <lic@highgo.com>
Discussion: https://postgr.es/m/CAB5m2QssN6UO+ckr6ZCcV0A71mKUB6WdiTw1nHo43v4DTW1Dfg@mail.gmail.com

contrib/basic_archive/basic_archive.c
src/backend/utils/error/elog.c

index 8c7e9be624f4a92afcfda230c4e1a2b615c0fe54..914a0b56d162fe5ba2454209fa445cca1341f271 100644 (file)
@@ -100,7 +100,7 @@ check_archive_directory(char **newval, void **extra, GucSource source)
         * Our check_configured callback also checks for this and prevents
         * archiving from proceeding if it is still empty.
         */
-       if (*newval == NULL || *newval[0] == '\0')
+       if (*newval == NULL || (*newval)[0] == '\0')
                return true;
 
        /*
index 80b78f25267a804ef9fb6ec24dd2134584fbbe44..314ef85fdb447b7b20d9927f3c4369f59e0d6633 100644 (file)
@@ -2627,7 +2627,7 @@ check_backtrace_functions(char **newval, void **extra, GucSource source)
                return false;
        }
 
-       if (*newval[0] == '\0')
+       if ((*newval)[0] == '\0')
        {
                *extra = NULL;
                return true;