All,

I just grabbed mod_jk main branch and configured/compiled on my MacOS clang toolchain. It built with no errors but a few warnings:

jk_lb_worker.c:1404:36: warning: address of array 'p->worker->session_cookie_path' will always evaluate to
      'true' [-Wpointer-bool-conversion]
1404 | if (p->worker->session_cookie_path && *p->worker->session_cookie_path) {
      |                         ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~ ~~
1 warning generated.

===

jk_ajp_common.c:2995:20: warning: address of array 'p->source' will always evaluate to 'true'
      [-Wpointer-bool-conversion]
 2995 |             if (p->source && *p->source) {
      |                 ~~~^~~~~~ ~~
1 warning generated.

===

jk_status.c:1879:23: warning: address of array 'aw->source' will always evaluate to 'true'
      [-Wpointer-bool-conversion]
1879 | aw->source && *aw->source ? aw->source : "undefined",
      |                   ~~~~^~~~~~ ~~
jk_status.c:1893:23: warning: address of array 'aw->source' will always evaluate to 'true'
      [-Wpointer-bool-conversion]
1893 | aw->source && *aw->source ? aw->source : "undefined",
      |                   ~~~~^~~~~~ ~~
jk_status.c:1997:27: warning: address of array 'wr->redirect' will always evaluate to 'true'
      [-Wpointer-bool-conversion]
1997 | wr->redirect ? (*wr->redirect ? wr->redirect : " ") : "&nbsp",
      |                       ~~~~^~~~~~~~ ~
jk_status.c:1998:27: warning: address of array 'wr->domain' will always evaluate to 'true'
      [-Wpointer-bool-conversion]
1998 | wr->domain ? (*wr->domain ? wr->domain : " ") : "&nbsp",
      |                       ~~~~^~~~~~ ~
jk_status.c:2042:60: warning: address of array 'aw->source' will always evaluate to 'true'
      [-Wpointer-bool-conversion]
2042 | jk_print_xml_att_string(s, l, off+2, "source", aw->source && *aw->source ? aw->source : "undefined"); | ~~~~^~~~~~ ~~ jk_status.c:2112:43: warning: address of array 'aw->source' will always evaluate to 'true'
      [-Wpointer-bool-conversion]
2112 | jk_printf(s, l, " source=%s", aw->source && *aw->source ? aw->source : "undefined");
      |                                       ~~~~^~~~~~ ~~
jk_status.c:2126:50: warning: address of array 'wr->route' will always evaluate to 'true'
      [-Wpointer-bool-conversion]
2126 | jk_printf(s, l, " route=\"%s\"", wr->route ? wr->route : "");
      |                                              ~~~~^~~~~ ~
jk_status.c:2127:53: warning: address of array 'wr->redirect' will always evaluate to 'true'
      [-Wpointer-bool-conversion]
2127 | jk_printf(s, l, " redirect=\"%s\"", wr->redirect ? wr->redirect : "");
      |                                                 ~~~~^~~~~~~~ ~
jk_status.c:2128:51: warning: address of array 'wr->domain' will always evaluate to 'true'
      [-Wpointer-bool-conversion]
2128 | jk_printf(s, l, " domain=\"%s\"", wr->domain ? wr->domain : "");
      |                                               ~~~~^~~~~~ ~
jk_status.c:2179:67: warning: address of array 'aw->source' will always evaluate to 'true'
      [-Wpointer-bool-conversion]
2179 | jk_print_prop_att_string(s, l, w, ajp_name, "source", aw->source && *aw->source ? aw->source : "undefined"); | ~~~~^~~~~~ ~~
10 warnings generated.

I think clang is noticing provable non-NULL cases, suggesting that the predicates are not required. I get these kinds of warnings all the time in my own code for null-checks that are technically superfluous but in there just in case the code changes somewhat unexpectedly within a function and suddenly the pointer CAN be null.

I'm posting this just in case anyone notices that we have a true logic error in programmer expectations and that these warnings represent actual bugs.

-chris


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to