Hi,

we run coverity & clang scans time to time. I filtered all the
false positives and the following are results which seemed
suspicious to me. It's mostly for unlikely code paths which
could be triggered by error state or invalid input. I am not
familiar with the code internals, so maybe it's unlikely or
impossible such conditions would ever trigger, but I am providing
the results for investigation. The scan was run over 3.5.8,
but I verified it's also valid for 3.5.9.


11. postfix-3.5.8/src/util/dict_inline.c:116: alloc_fn: Storage is returned 
from allocation function "extpar".
12. postfix-3.5.8/src/util/dict_inline.c:116: var_assign: Assigning: "free_me" 
= storage returned from "extpar(&nameval, "{}", 1)".
13. postfix-3.5.8/src/util/dict_inline.c:116: var_assign: Assigning: "err" = 
"free_me".
17. postfix-3.5.8/src/util/dict_inline.c:125: overwrite_var: Overwriting "err" 
in "err = free_me = dict_file_get_error(dict)" leaks the storage that "err" 
points to.
#   123|   
#   124|            if ((base64_buf = dict_file_to_b64(dict, value)) == 0) {
#   125|->              err = free_me = dict_file_get_error(dict);
#   126|                break;
#   127|            }

I think it could miss at least one free() for respective free_me.


14. postfix-3.5.8/src/util/dict_inline.c:124: uninit_use_in_call: Using 
uninitialized value "value" when calling "dict_file_to_b64".
#   122|            VSTRING *base64_buf;
#   123|   
#   124|->          if ((base64_buf = dict_file_to_b64(dict, value)) == 0) {
#   125|                err = free_me = dict_file_get_error(dict);
#   126|                break;

I think it could call dict_file_to_b64 with uninitialized value.


5. Defect type: NULL_RETURNS
6. postfix-3.5.8/src/global/haproxy_srvr.c:456: returned_null: "mystrtok" 
returns "NULL" (checked 62 out of 76 times).
7. postfix-3.5.8/src/global/haproxy_srvr.c:456: dereference: Dereferencing a 
pointer that might be "NULL" "mystrtok(&cp, " \r")" when calling 
"haproxy_srvr_parse_proto".
8. postfix-3.5.8/src/global/dict_ldap.c:1692: example_checked: Example 1: 
"mystrtok(&s, ", \t\r\n")" has its value checked in "(h = mystrtok(&s, ", 
\t\r\n")) != NULL".
9. postfix-3.5.8/src/global/mail_conf.c:158: example_checked: Example 2: 
"mystrtok(&value, ", \t\r\n")" has its value checked in "(cp = mystrtok(&value, 
", \t\r\n")) != NULL".
10. postfix-3.5.8/src/global/mail_version.c:147: example_checked: Example 3: 
"mystrtok(&cp, "")" has its value checked in "(mp->snapshot = mystrtok(&cp, 
"")) == NULL".
11. postfix-3.5.8/src/global/map_search.c:211: example_checked: Example 4: 
"mystrtok(&attr_value, ", \t\r\n")" has its value checked in "(atom = 
mystrtok(&attr_value, ", \t\r\n")) != NULL".
12. postfix-3.5.8/src/global/match_service.c:107: example_checked: Example 5: 
"mystrtok(&bp, delim)" has its value checked in "(item = mystrtok(&bp, delim)) 
!= NULL".
#   454|        else if (haproxy_srvr_parse_lit(NEXT_TOKEN, "PROXY", (char *) 
0) < 0)
#   455|            err = "unexpected protocol header";
#   456|->      else if (haproxy_srvr_parse_proto(NEXT_TOKEN, &addr_family) < 0)
#   457|            err = "unsupported protocol type";
#   458|        else if (haproxy_srvr_parse_addr(NEXT_TOKEN, smtp_client_addr,

I think for malformed input it could fail by calling strncasecmp with NULL.


1. postfix-3.5.8/src/tlsproxy/tlsproxy.c:1881:49: warning[-Wmissing-braces]: 
missing braces around initializer
#      static const CONFIG_STR_TABLE str_table[] = {
#                                                  ^
#  1879|        0,
#  1880|       };
#  1881|->     static const CONFIG_STR_TABLE str_table[] = {
#  1882|        VAR_TLSP_TLS_CHAIN_FILES, DEF_TLSP_TLS_CHAIN_FILES, 
&var_tlsp_tls_chain_files, 0, 0,
#  1883|        VAR_TLSP_TLS_CERT_FILE, DEF_TLSP_TLS_CERT_FILE, 
&var_tlsp_tls_cert_file, 0, 0,

I think it should have braces around table lines. There are multiple tables 
with the same warning.


2. postfix-3.5.8/src/smtp/smtp_session.c:200: var_compare_op: Comparing 
"session->stream" to null implies that "session->stream" might be null.
5. postfix-3.5.8/src/smtp/smtp_session.c:208: var_deref_model: Passing null 
pointer "session->stream" to "tls_session_stop", which dereferences it.
#   206|            tls_proxy_context_free(session->tls_context);
#   207|        else
#   208|->          tls_client_stop(smtp_tls_ctx, session->stream,
#   209|                          var_smtp_starttls_tmout, 0, 
session->tls_context);
#   210|       }

It's suspicious that there is the NULL check, but later it could fail on NULL 
dereference.


7. postfix-3.5.8/src/smtpd/smtpd.c:1712: var_compare_op: Comparing 
"state->milters" to null implies that "state->milters" might be null.
9. postfix-3.5.8/src/smtpd/smtpd.c:1727: var_deref_model: Passing "state" to 
"mail_reset", which dereferences null "state->milters".
#  1725|        helo_reset(state);
#  1726|       chat_reset(state, var_smtpd_hist_thrsh);
#  1727|->     mail_reset(state);
#  1728|       rcpt_reset(state);
#  1729|       state->helo_name = mystrdup(printable(argv[1].strval, '?'));

It's suspicious that there is the NULL check, but later it could fail on NULL 
dereference.



The following are few suspicious clang warnings with the codepaths which could
trigger them, I haven't done deeper analysis of them:


1. postfix-3.5.8/src/util/dict_inline.c:131:2: warning[core.CallAndMessage]: 
2nd function call argument is an uninitialized value
#         dict->update(dict, vname, value);
#         ^                  ~~~~~
4. postfix-3.5.8/src/util/dict_inline.c:59:23: note: 'vname' declared without 
an initial value
#     char   *nameval, *vname, *value;
#                       ^~~~~
7. postfix-3.5.8/src/util/dict_inline.c:79:9: note: Assuming 'open_flags' is 
equal to O_RDONLY
#     if (open_flags != O_RDONLY)
#         ^~~~~~~~~~~~~~~~~~~~~~
10. postfix-3.5.8/src/util/dict_inline.c:79:5: note: Taking false branch
#     if (open_flags != O_RDONLY)
#     ^
13. postfix-3.5.8/src/util/dict_inline.c:88:9: note: Assuming 
'util_utf8_enable' is 0
#     if (DICT_NEED_UTF8_ACTIVATION(util_utf8_enable, dict_flags)
#         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
16. postfix-3.5.8/src/util/dict.h:176:3: note: expanded from macro 
'DICT_NEED_UTF8_ACTIVATION'
#         ((enable) && ((flags) & DICT_FLAG_UTF8_MASK))
#          ^~~~~~~~
19. postfix-3.5.8/src/util/dict_inline.c:88:9: note: Left side of '&&' is false
20. postfix-3.5.8/src/util/dict.h:176:12: note: expanded from macro 
'DICT_NEED_UTF8_ACTIVATION'
#         ((enable) && ((flags) & DICT_FLAG_UTF8_MASK))
#                   ^
23. postfix-3.5.8/src/util/dict_inline.c:101:9: note: Assuming the condition is 
false
#     if ((len = balpar(name, CHARS_BRACE)) == 0 || name[len] != 0
#         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
26. postfix-3.5.8/src/util/dict_inline.c:101:9: note: Left side of '||' is false
27. postfix-3.5.8/src/util/dict_inline.c:101:51: note: Assuming the condition 
is false
#     if ((len = balpar(name, CHARS_BRACE)) == 0 || name[len] != 0
#                                                   ^~~~~~~~~~~~~~
30. postfix-3.5.8/src/util/dict_inline.c:101:9: note: Left side of '||' is false
#     if ((len = balpar(name, CHARS_BRACE)) == 0 || name[len] != 0
#         ^
33. postfix-3.5.8/src/util/dict_inline.c:102:5: note: Assuming the condition is 
false
#         || *(cp = saved_name = mystrndup(name + 1, len - 2)) == 0)
#            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
36. postfix-3.5.8/src/util/dict_inline.c:101:5: note: Taking false branch
#     if ((len = balpar(name, CHARS_BRACE)) == 0 || name[len] != 0
#     ^
39. postfix-3.5.8/src/util/dict_inline.c:115:12: note: Assuming the condition 
is true
#     while ((nameval = mystrtokq(&cp, CHARS_COMMA_SP, CHARS_BRACE)) != 0) {
#            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
42. postfix-3.5.8/src/util/dict_inline.c:115:5: note: Loop condition is true. 
Entering loop body
#     while ((nameval = mystrtokq(&cp, CHARS_COMMA_SP, CHARS_BRACE)) != 0) {
#     ^
45. postfix-3.5.8/src/util/dict_inline.c:116:7: note: Assuming the condition is 
false
#         if ((nameval[0] != CHARS_BRACE[0]
#              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
48. postfix-3.5.8/src/util/dict_inline.c:116:7: note: Left side of '||' is false
49. postfix-3.5.8/src/util/dict_inline.c:117:10: note: Assuming the condition 
is false
#              || (err = free_me = extpar(&nameval, CHARS_BRACE, 
EXTPAR_FLAG_STRIP)) == 0)
#                 
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
52. postfix-3.5.8/src/util/dict_inline.c:118:6: note: Left side of '&&' is false
#             && (err = split_qnameval(nameval, &vname, &value)) != 0)
#             ^
55. postfix-3.5.8/src/util/dict_inline.c:121:6: note: Assuming the condition is 
false
#         if ((dict->flags & DICT_FLAG_SRC_RHS_IS_FILE) != 0) {
#             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
58. postfix-3.5.8/src/util/dict_inline.c:121:2: note: Taking false branch
#         if ((dict->flags & DICT_FLAG_SRC_RHS_IS_FILE) != 0) {
#         ^
61. postfix-3.5.8/src/util/dict_inline.c:131:2: note: 2nd function call 
argument is an uninitialized value
#         dict->update(dict, vname, value);
#         ^                  ~~~~~
#   129|        }
#   130|        /* No duplicate checks. See comments in dict_thash.c. */
#   131|->      dict->update(dict, vname, value);
#   132|        count += 1;
#   133|       }



1. postfix-3.5.8/src/tls/tls_proxy_client_scan.c:335:9: 
warning[core.NullDereference]: Access to field 'next' results in a dereference 
of a null pointer (loaded from variable 'tp')
#     if (tp->next)
#         ^
4. postfix-3.5.8/src/tls/tls_proxy_client_scan.c:509:5: note: 'head' 
initialized to a null pointer value
#     TLS_TLSA *head = 0;
#     ^~~~~~~~~~~~~~
7. postfix-3.5.8/src/tls/tls_proxy_client_scan.c:516:9: note: Assuming 
'msg_verbose' is 0
#     if (msg_verbose)
#         ^~~~~~~~~~~
10. postfix-3.5.8/src/tls/tls_proxy_client_scan.c:516:5: note: Taking false 
branch
#     if (msg_verbose)
#     ^
13. postfix-3.5.8/src/tls/tls_proxy_client_scan.c:519:30: note: Assuming 'ret' 
is not equal to 1
#     for (tpp = &head, n = 0; ret == 1 && n < count; n++, tpp = &tp->next) {
#                              ^~~~~~~~
16. postfix-3.5.8/src/tls/tls_proxy_client_scan.c:519:39: note: Left side of 
'&&' is false
#     for (tpp = &head, n = 0; ret == 1 && n < count; n++, tpp = &tp->next) {
#                                       ^
19. postfix-3.5.8/src/tls/tls_proxy_client_scan.c:540:9: note: 'ret' is not 
equal to 1
#     if (ret != 1) {
#         ^~~
22. postfix-3.5.8/src/tls/tls_proxy_client_scan.c:540:5: note: Taking true 
branch
#     if (ret != 1) {
#     ^
25. postfix-3.5.8/src/tls/tls_proxy_client_scan.c:541:29: note: Passing null 
pointer value via 1st parameter 'tp'
#         tls_proxy_client_tlsa_free(head);
#                                    ^~~~
28. postfix-3.5.8/src/tls/tls_proxy_client_scan.c:541:2: note: Calling 
'tls_proxy_client_tlsa_free'
#         tls_proxy_client_tlsa_free(head);
#         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
31. postfix-3.5.8/src/tls/tls_proxy_client_scan.c:335:9: note: Access to field 
'next' results in a dereference of a null pointer (loaded from variable 'tp')
#     if (tp->next)
#         ^~
#   333|   static void tls_proxy_client_tlsa_free(TLS_TLSA *tp)
#   334|   {
#   335|->     if (tp->next)
#   336|        tls_proxy_client_tlsa_free(tp->next);
#   337|       myfree(tp->mdalg);



1. postfix-3.5.8/src/tls/tls_proxy_client_scan.c:324:9: 
warning[core.NullDereference]: Access to field 'next' results in a dereference 
of a null pointer (loaded from variable 'tp')
#     if (tp->next)
#         ^
4. postfix-3.5.8/src/tls/tls_proxy_client_scan.c:451:5: note: 'head' 
initialized to a null pointer value
#     TLS_PKEYS *head = 0;
#     ^~~~~~~~~~~~~~~
7. postfix-3.5.8/src/tls/tls_proxy_client_scan.c:458:9: note: Assuming 
'msg_verbose' is 0
#     if (msg_verbose)
#         ^~~~~~~~~~~
10. postfix-3.5.8/src/tls/tls_proxy_client_scan.c:458:5: note: Taking false 
branch
#     if (msg_verbose)
#     ^
13. postfix-3.5.8/src/tls/tls_proxy_client_scan.c:461:30: note: Assuming 'ret' 
is not equal to 1
#     for (tpp = &head, n = 0; ret == 1 && n < count; n++, tpp = &tp->next) {
#                              ^~~~~~~~
16. postfix-3.5.8/src/tls/tls_proxy_client_scan.c:461:39: note: Left side of 
'&&' is false
#     for (tpp = &head, n = 0; ret == 1 && n < count; n++, tpp = &tp->next) {
#                                       ^
19. postfix-3.5.8/src/tls/tls_proxy_client_scan.c:489:9: note: Assuming 'buf' 
is null
#     if (buf)
#         ^~~
22. postfix-3.5.8/src/tls/tls_proxy_client_scan.c:489:5: note: Taking false 
branch
#     if (buf)
#     ^
25. postfix-3.5.8/src/tls/tls_proxy_client_scan.c:491:9: note: 'ret' is not 
equal to 1
#     if (ret != 1) {
#         ^~~
28. postfix-3.5.8/src/tls/tls_proxy_client_scan.c:491:5: note: Taking true 
branch
#     if (ret != 1) {
#     ^
31. postfix-3.5.8/src/tls/tls_proxy_client_scan.c:492:30: note: Passing null 
pointer value via 1st parameter 'tp'
#         tls_proxy_client_pkeys_free(head);
#                                     ^~~~
34. postfix-3.5.8/src/tls/tls_proxy_client_scan.c:492:2: note: Calling 
'tls_proxy_client_pkeys_free'
#         tls_proxy_client_pkeys_free(head);
#         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
37. postfix-3.5.8/src/tls/tls_proxy_client_scan.c:324:9: note: Access to field 
'next' results in a dereference of a null pointer (loaded from variable 'tp')
#     if (tp->next)
#         ^~
#   322|   static void tls_proxy_client_pkeys_free(TLS_PKEYS *tp)
#   323|   {
#   324|->     if (tp->next)
#   325|        tls_proxy_client_pkeys_free(tp->next);
#   326|       if (tp->pkey)



1. postfix-3.5.8/src/tls/tls_proxy_client_scan.c:313:9: 
warning[core.NullDereference]: Access to field 'next' results in a dereference 
of a null pointer (loaded from variable 'tp')
#     if (tp->next)
#         ^
4. postfix-3.5.8/src/tls/tls_proxy_client_scan.c:392:5: note: 'head' 
initialized to a null pointer value
#     TLS_CERTS *head = 0;
#     ^~~~~~~~~~~~~~~
7. postfix-3.5.8/src/tls/tls_proxy_client_scan.c:399:9: note: Assuming 
'msg_verbose' is 0
#     if (msg_verbose)
#         ^~~~~~~~~~~
10. postfix-3.5.8/src/tls/tls_proxy_client_scan.c:399:5: note: Taking false 
branch
#     if (msg_verbose)
#     ^
13. postfix-3.5.8/src/tls/tls_proxy_client_scan.c:402:30: note: Assuming 'ret' 
is not equal to 1
#     for (tpp = &head, n = 0; ret == 1 && n < count; n++, tpp = &tp->next) {
#                              ^~~~~~~~
16. postfix-3.5.8/src/tls/tls_proxy_client_scan.c:402:39: note: Left side of 
'&&' is false
#     for (tpp = &head, n = 0; ret == 1 && n < count; n++, tpp = &tp->next) {
#                                       ^
19. postfix-3.5.8/src/tls/tls_proxy_client_scan.c:430:9: note: 'buf' is null
#     if (buf)
#         ^~~
22. postfix-3.5.8/src/tls/tls_proxy_client_scan.c:430:5: note: Taking false 
branch
#     if (buf)
#     ^
25. postfix-3.5.8/src/tls/tls_proxy_client_scan.c:432:9: note: 'ret' is not 
equal to 1
#     if (ret != 1) {
#         ^~~
28. postfix-3.5.8/src/tls/tls_proxy_client_scan.c:432:5: note: Taking true 
branch
#     if (ret != 1) {
#     ^
31. postfix-3.5.8/src/tls/tls_proxy_client_scan.c:433:30: note: Passing null 
pointer value via 1st parameter 'tp'
#         tls_proxy_client_certs_free(head);
#                                     ^~~~
34. postfix-3.5.8/src/tls/tls_proxy_client_scan.c:433:2: note: Calling 
'tls_proxy_client_certs_free'
#         tls_proxy_client_certs_free(head);
#         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
37. postfix-3.5.8/src/tls/tls_proxy_client_scan.c:313:9: note: Access to field 
'next' results in a dereference of a null pointer (loaded from variable 'tp')
#     if (tp->next)
#         ^~
#   311|   static void tls_proxy_client_certs_free(TLS_CERTS *tp)
#   312|   {
#   313|->     if (tp->next)
#   314|        tls_proxy_client_certs_free(tp->next);
#   315|       if (tp->cert)



1. postfix-3.5.8/src/global/maillog_client.c:256:10: 
warning[core.NonNullParamChecker]: Null pointer passed to 2nd parameter 
expecting 'nonnull'
#             if (setenv(POSTLOG_SERVICE_ENV, service_path, 1) < 0)
#                 ^                           ~~~~~~~~~~~~
4. postfix-3.5.8/src/global/maillog_client.c:170:10: note: Value assigned to 
'import_service_path'
#     if ((import_service_path = safe_getenv(POSTLOG_SERVICE_ENV)) != 0
#          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
7. postfix-3.5.8/src/global/maillog_client.c:170:9: note: Assuming pointer 
value is null
#     if ((import_service_path = safe_getenv(POSTLOG_SERVICE_ENV)) != 0
#         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
10. postfix-3.5.8/src/global/maillog_client.c:171:2: note: Left side of '&&' is 
false
#         && *import_service_path == 0)
#         ^
13. postfix-3.5.8/src/global/maillog_client.c:173:9: note: Assuming the 
condition is false
#     if ((import_hostname = safe_getenv(POSTLOG_HOSTNAME_ENV)) != 0
#         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
16. postfix-3.5.8/src/global/maillog_client.c:174:2: note: Left side of '&&' is 
false
#         && *import_hostname == 0)
#         ^
19. postfix-3.5.8/src/global/maillog_client.c:193:9: note: Assuming 
'var_maillog_file' is non-null
#     if (var_maillog_file ? *var_maillog_file == 0 : import_service_path == 0) 
{
#         ^~~~~~~~~~~~~~~~
22. postfix-3.5.8/src/global/maillog_client.c:193:9: note: '?' condition is true
23. postfix-3.5.8/src/global/maillog_client.c:193:28: note: Assuming the 
condition is false
#     if (var_maillog_file ? *var_maillog_file == 0 : import_service_path == 0) 
{
#                            ^~~~~~~~~~~~~~~~~~~~~~
26. postfix-3.5.8/src/global/maillog_client.c:193:5: note: Taking false branch
#     if (var_maillog_file ? *var_maillog_file == 0 : import_service_path == 0) 
{
#     ^
29. postfix-3.5.8/src/global/maillog_client.c:207:9: note: 'logger_mode' is 
equal to MAILLOG_CLIENT_MODE_POSTLOG
#     if (logger_mode == MAILLOG_CLIENT_MODE_POSTLOG) {
#         ^~~~~~~~~~~
32. postfix-3.5.8/src/global/maillog_client.c:207:5: note: Taking true branch
#     if (logger_mode == MAILLOG_CLIENT_MODE_POSTLOG) {
#     ^
35. postfix-3.5.8/src/global/maillog_client.c:211:6: note: 'var_maillog_file' 
is non-null
#         if (var_maillog_file && *var_maillog_file) {
#             ^~~~~~~~~~~~~~~~
38. postfix-3.5.8/src/global/maillog_client.c:211:6: note: Left side of '&&' is 
true
39. postfix-3.5.8/src/global/maillog_client.c:211:2: note: Taking true branch
#         if (var_maillog_file && *var_maillog_file) {
#         ^
42. postfix-3.5.8/src/global/maillog_client.c:216:6: note: Loop condition is 
true. Entering loop body
#             for (cpp = good_prefixes->argv; /* see below */ ; cpp++) {
#             ^
45. postfix-3.5.8/src/global/maillog_client.c:217:7: note: Assuming the 
condition is false
#                 if (*cpp == 0)
#                     ^~~~~~~~~
48. postfix-3.5.8/src/global/maillog_client.c:217:3: note: Taking false branch
#                 if (*cpp == 0)
#                 ^
51. postfix-3.5.8/src/global/maillog_client.c:221:3: note: Taking true branch
#                 if (strncmp(var_maillog_file, *cpp, strlen(*cpp)) == 0)
#                 ^
54. postfix-3.5.8/src/global/maillog_client.c:222:7: note: Execution continues 
on line 224
#                     break;
#                     ^
57. postfix-3.5.8/src/global/maillog_client.c:226:6: note: Assuming 
'var_myhostname' is non-null
#         if (var_myhostname && *var_myhostname) {
#             ^~~~~~~~~~~~~~
60. postfix-3.5.8/src/global/maillog_client.c:226:6: note: Left side of '&&' is 
true
61. postfix-3.5.8/src/global/maillog_client.c:226:24: note: Assuming the 
condition is true
#         if (var_myhostname && *var_myhostname) {
#                               ^~~~~~~~~~~~~~~
64. postfix-3.5.8/src/global/maillog_client.c:226:2: note: Taking true branch
#         if (var_myhostname && *var_myhostname) {
#         ^
67. postfix-3.5.8/src/global/maillog_client.c:234:6: note: Assuming 
'var_postlog_service' is null
#         if (var_postlog_service) {
#             ^~~~~~~~~~~~~~~~~~~
70. postfix-3.5.8/src/global/maillog_client.c:234:2: note: Taking false branch
#         if (var_postlog_service) {
#         ^
73. postfix-3.5.8/src/global/maillog_client.c:238:6: note: Null pointer value 
stored to 'service_path'
#             service_path = import_service_path;
#             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
76. postfix-3.5.8/src/global/maillog_client.c:242:5: note: Assuming the 
condition is false
#                         (flags & MAILLOG_CLIENT_FLAG_LOGWRITER_FALLBACK) ?
#                          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
79. postfix-3.5.8/src/global/maillog_client.c:242:4: note: '?' condition is 
false
#                         (flags & MAILLOG_CLIENT_FLAG_LOGWRITER_FALLBACK) ?
#                         ^
82. postfix-3.5.8/src/global/maillog_client.c:251:6: note: 
'import_service_path' is equal to null
#         if (import_service_path == 0
#             ^~~~~~~~~~~~~~~~~~~
85. postfix-3.5.8/src/global/maillog_client.c:252:6: note: Left side of '||' is 
true
#             || strcmp(service_path, import_service_path) != 0) {
#             ^
88. postfix-3.5.8/src/global/maillog_client.c:256:10: note: Null pointer passed 
to 2nd parameter expecting 'nonnull'
#             if (setenv(POSTLOG_SERVICE_ENV, service_path, 1) < 0)
#                 ^                           ~~~~~~~~~~~~
#   254|            msg_info("export %s=%s", POSTLOG_SERVICE_ENV, service_path);
#   255|   #endif
#   256|->          if (setenv(POSTLOG_SERVICE_ENV, service_path, 1) < 0)
#   257|                msg_fatal("setenv: %m");
#   258|        }



1. postfix-3.5.8/src/global/mail_task.c:74:13: warning[core.NullDereference]: 
Dereference of null pointer
#     return (vstring_str(canon_name));
#             ^~~~~~~~~~~~~~~~~~~~~~~
4. postfix-3.5.8/include/vstring.h:70:36: note: expanded from macro 
'vstring_str'
# #define vstring_str(vp)         ((char *) (vp)->vbuf.data)
#                                           ^~~~~~~~~~~~~~~
7. postfix-3.5.8/src/global/mail_task.c:58:5: note: 'canon_name' initialized to 
a null pointer value
#     static VSTRING *canon_name;
#     ^~~~~~~~~~~~~~~~~~~~~~~~~~
10. postfix-3.5.8/src/global/mail_task.c:62:9: note: Assuming 'argv0' is null
#     if (argv0) {
#         ^~~~~
13. postfix-3.5.8/src/global/mail_task.c:62:5: note: Taking false branch
#     if (argv0) {
#     ^
16. postfix-3.5.8/src/global/mail_task.c:74:13: note: Dereference of null 
pointer
#     return (vstring_str(canon_name));
#             ^~~~~~~~~~~~~~~~~~~~~~~
19. postfix-3.5.8/include/vstring.h:70:36: note: expanded from macro 
'vstring_str'
# #define vstring_str(vp)         ((char *) (vp)->vbuf.data)
#                                           ^~~~~~~~~~~~~~~
#    72|        vstring_sprintf(canon_name, "%s/%s", tag, argv0);
#    73|       }
#    74|->     return (vstring_str(canon_name));
#    75|   }


thanks & regards

Jaroslav

Reply via email to