GCC 12 static analyzer: warning: use of NULL '_frm' where non-null expected in cc.c
GCC 12.2.1 static analyzer (-fanalyzer
) from Fedora 37 identified the following errors in cc.c
.
Full GCC 12 static analyzer cc.c report
cc.c: In function 'isccc_cc_checkdup':
cc.c:1022:15: warning: use of NULL '_frm' where non-null expected [CWE-476] [-Wanalyzer-null-argument]
1022 | len = strlen(_frm) + strlen(_to) + strlen(_ser) + strlen(_tim) + 4;
| ^~~~~~~~~~~~
'isccc_cc_checkdup': events 1-6
|
| 976 | isccc_cc_checkdup(isccc_symtab_t *symtab, isccc_sexpr_t *message,
| | ^~~~~~~~~~~~~~~~~
| | |
| | (1) entry to 'isccc_cc_checkdup'
|......
| 980 | char *_ser = NULL, *_tim = NULL, *tmp;
| | ~~~~ ~~~~
| | | |
| | | (3) '_ser' is NULL
| | (2) '_ser' is NULL
|......
| 988 | if (!isccc_alist_alistp(_ctrl) ||
| | ~
| | |
| | (4) following 'true' branch...
| 989 | isccc_cc_lookupstring(_ctrl, "_ser", &_ser) != ISC_R_SUCCESS ||
| | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| | |
| | (5) ...to here
| | (6) calling 'isccc_cc_lookupstring' from 'isccc_cc_checkdup'
|
+--> 'isccc_cc_lookupstring': event 7
|
| 879 | isccc_cc_lookupstring(isccc_sexpr_t *alist, const char *key, char **strp) {
| | ^~~~~~~~~~~~~~~~~~~~~
| | |
| | (7) entry to 'isccc_cc_lookupstring'
|
'isccc_cc_lookupstring': event 8
|
|../../lib/isc/include/isc/assertions.h:45:10:
| 45 | ((void)((cond) || \
| | ~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| | |
| | (8) following 'false' branch (when 'strp' is non-NULL)...
| 46 | ((isc_assertion_failed)(__FILE__, __LINE__, \
| | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| 47 | isc_assertiontype_require, #cond), \
| | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| 48 | 0)))
| | ~~~~
../../lib/isc/include/isc/util.h:312:22: note: in expansion of macro 'ISC_REQUIRE'
| 312 | #define REQUIRE(e) ISC_REQUIRE(e)
| | ^~~~~~~~~~~
cc.c:882:9: note: in expansion of macro 'REQUIRE'
| 882 | REQUIRE(strp == NULL || *strp == NULL);
| | ^~~~~~~
|
'isccc_cc_lookupstring': event 9
|
| 882 | REQUIRE(strp == NULL || *strp == NULL);
| | ^~~~~
| | |
| | (9) ...to here
../../lib/isc/include/isc/assertions.h:45:18: note: in definition of macro 'ISC_REQUIRE'
| 45 | ((void)((cond) || \
| | ^~~~
cc.c:882:9: note: in expansion of macro 'REQUIRE'
| 882 | REQUIRE(strp == NULL || *strp == NULL);
| | ^~~~~~~
|
'isccc_cc_lookupstring': event 10
|
| 882 | REQUIRE(strp == NULL || *strp == NULL);
| | ^~~~~
| | |
| | (10) '_ser' is NULL
../../lib/isc/include/isc/assertions.h:45:18: note: in definition of macro 'ISC_REQUIRE'
| 45 | ((void)((cond) || \
| | ^~~~
cc.c:882:9: note: in expansion of macro 'REQUIRE'
| 882 | REQUIRE(strp == NULL || *strp == NULL);
| | ^~~~~~~
|
'isccc_cc_lookupstring': event 11
|
| 882 | REQUIRE(strp == NULL || *strp == NULL);
../../lib/isc/include/isc/assertions.h:45:18: note: in definition of macro 'ISC_REQUIRE'
| 45 | ((void)((cond) || \
| | ^~~~
cc.c:882:9: note: in expansion of macro 'REQUIRE'
| 882 | REQUIRE(strp == NULL || *strp == NULL);
| | ^~~~~~~
|
'isccc_cc_lookupstring': events 12-18
|
| 884 | kv = isccc_alist_assq(alist, key);
| | ^~
| | |
| | (12) ...to here
| 885 | if (kv != NULL) {
| | ~
| | |
| | (13) following 'true' branch (when 'kv' is non-NULL)...
| 886 | v = ISCCC_SEXPR_CDR(kv);
| | ~
| | |
| | (14) ...to here
| 887 | if (isccc_sexpr_binaryp(v)) {
| | ~
| | |
| | (15) following 'true' branch...
| 888 | if (strp != NULL) {
| | ~~ ~
| | | |
| | | (17) following 'true' branch (when 'strp' is non-NULL)...
| | (16) ...to here
| 889 | *strp = isccc_sexpr_tostring(v);
| | ~
| | |
| | (18) ...to here
|
<------+
|
'isccc_cc_checkdup': events 19-22
|
| 988 | if (!isccc_alist_alistp(_ctrl) ||
| | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| | |
| | (20) following 'false' branch...
| 989 | isccc_cc_lookupstring(_ctrl, "_ser", &_ser) != ISC_R_SUCCESS ||
| | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| | |
| | (19) returning to 'isccc_cc_checkdup' from 'isccc_cc_lookupstring'
| 990 | isccc_cc_lookupstring(_ctrl, "_tim", &_tim) != ISC_R_SUCCESS)
| | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| | |
| | (21) ...to here
| | (22) calling 'isccc_cc_lookupstring' from 'isccc_cc_checkdup'
|
+--> 'isccc_cc_lookupstring': event 23
|
| 879 | isccc_cc_lookupstring(isccc_sexpr_t *alist, const char *key, char **strp) {
| | ^~~~~~~~~~~~~~~~~~~~~
| | |
| | (23) entry to 'isccc_cc_lookupstring'
|
'isccc_cc_lookupstring': event 24
|
|../../lib/isc/include/isc/assertions.h:45:10:
| 45 | ((void)((cond) || \
| | ~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| | |
| | (24) following 'false' branch (when 'strp' is non-NULL)...
| 46 | ((isc_assertion_failed)(__FILE__, __LINE__, \
| | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| 47 | isc_assertiontype_require, #cond), \
| | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| 48 | 0)))
| | ~~~~
../../lib/isc/include/isc/util.h:312:22: note: in expansion of macro 'ISC_REQUIRE'
| 312 | #define REQUIRE(e) ISC_REQUIRE(e)
| | ^~~~~~~~~~~
cc.c:882:9: note: in expansion of macro 'REQUIRE'
| 882 | REQUIRE(strp == NULL || *strp == NULL);
| | ^~~~~~~
|
'isccc_cc_lookupstring': event 25
|
| 882 | REQUIRE(strp == NULL || *strp == NULL);
| | ^~~~~
| | |
| | (25) ...to here
../../lib/isc/include/isc/assertions.h:45:18: note: in definition of macro 'ISC_REQUIRE'
| 45 | ((void)((cond) || \
| | ^~~~
cc.c:882:9: note: in expansion of macro 'REQUIRE'
| 882 | REQUIRE(strp == NULL || *strp == NULL);
| | ^~~~~~~
|
'isccc_cc_lookupstring': event 26
|
| 882 | REQUIRE(strp == NULL || *strp == NULL);
| | ^~~~~
| | |
| | (26) '_tim' is NULL
../../lib/isc/include/isc/assertions.h:45:18: note: in definition of macro 'ISC_REQUIRE'
| 45 | ((void)((cond) || \
| | ^~~~
cc.c:882:9: note: in expansion of macro 'REQUIRE'
| 882 | REQUIRE(strp == NULL || *strp == NULL);
| | ^~~~~~~
|
'isccc_cc_lookupstring': event 27
|
| 882 | REQUIRE(strp == NULL || *strp == NULL);
../../lib/isc/include/isc/assertions.h:45:18: note: in definition of macro 'ISC_REQUIRE'
| 45 | ((void)((cond) || \
| | ^~~~
cc.c:882:9: note: in expansion of macro 'REQUIRE'
| 882 | REQUIRE(strp == NULL || *strp == NULL);
| | ^~~~~~~
|
'isccc_cc_lookupstring': events 28-34
|
| 884 | kv = isccc_alist_assq(alist, key);
| | ^~
| | |
| | (28) ...to here
| 885 | if (kv != NULL) {
| | ~
| | |
| | (29) following 'true' branch (when 'kv' is non-NULL)...
| 886 | v = ISCCC_SEXPR_CDR(kv);
| | ~
| | |
| | (30) ...to here
| 887 | if (isccc_sexpr_binaryp(v)) {
| | ~
| | |
| | (31) following 'true' branch...
| 888 | if (strp != NULL) {
| | ~~ ~
| | | |
| | | (33) following 'true' branch (when 'strp' is non-NULL)...
| | (32) ...to here
| 889 | *strp = isccc_sexpr_tostring(v);
| | ~
| | |
| | (34) ...to here
|
<------+
|
'isccc_cc_checkdup': events 35-36
|
| 988 | if (!isccc_alist_alistp(_ctrl) ||
| | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| 989 | isccc_cc_lookupstring(_ctrl, "_ser", &_ser) != ISC_R_SUCCESS ||
| | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| | |
| | (36) following 'false' branch...
| 990 | isccc_cc_lookupstring(_ctrl, "_tim", &_tim) != ISC_R_SUCCESS)
| | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| | |
| | (35) returning to 'isccc_cc_checkdup' from 'isccc_cc_lookupstring'
|
'isccc_cc_checkdup': event 37
|
|../../lib/isc/include/isc/assertions.h:57:9:
| 57 | ((void)((cond) || \
| | ^
| | |
| | (37) ...to here
../../lib/isc/include/isc/util.h:316:22: note: in expansion of macro 'ISC_INSIST'
| 316 | #define INSIST(e) ISC_INSIST(e)
| | ^~~~~~~~~~
cc.c:995:9: note: in expansion of macro 'INSIST'
| 995 | INSIST(_ser != NULL);
| | ^~~~~~
|
'isccc_cc_checkdup': event 38
|
|../../lib/isc/include/isc/assertions.h:57:10:
| 57 | ((void)((cond) || \
| | ~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| | |
| | (38) following 'true' branch...
| 58 | ((isc_assertion_failed)(__FILE__, __LINE__, \
| | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| 59 | isc_assertiontype_insist, #cond), \
| | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| 60 | 0)))
| | ~~~~
../../lib/isc/include/isc/util.h:316:22: note: in expansion of macro 'ISC_INSIST'
| 316 | #define INSIST(e) ISC_INSIST(e)
| | ^~~~~~~~~~
cc.c:995:9: note: in expansion of macro 'INSIST'
| 995 | INSIST(_ser != NULL);
| | ^~~~~~
|
'isccc_cc_checkdup': event 39
|
|../../lib/isc/include/isc/assertions.h:57:9:
| 57 | ((void)((cond) || \
| | ^
| | |
| | (39) ...to here
../../lib/isc/include/isc/util.h:316:22: note: in expansion of macro 'ISC_INSIST'
| 316 | #define INSIST(e) ISC_INSIST(e)
| | ^~~~~~~~~~
cc.c:996:9: note: in expansion of macro 'INSIST'
| 996 | INSIST(_tim != NULL);
| | ^~~~~~
|
'isccc_cc_checkdup': event 40
|
|../../lib/isc/include/isc/assertions.h:57:10:
| 57 | ((void)((cond) || \
| | ~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| | |
| | (40) following 'true' branch...
| 58 | ((isc_assertion_failed)(__FILE__, __LINE__, \
| | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| 59 | isc_assertiontype_insist, #cond), \
| | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| 60 | 0)))
| | ~~~~
../../lib/isc/include/isc/util.h:316:22: note: in expansion of macro 'ISC_INSIST'
| 316 | #define INSIST(e) ISC_INSIST(e)
| | ^~~~~~~~~~
cc.c:996:9: note: in expansion of macro 'INSIST'
| 996 | INSIST(_tim != NULL);
| | ^~~~~~
|
'isccc_cc_checkdup': event 41
|
| 1001 | tmp = NULL;
| | ^~~
| | |
| | (41) ...to here
|
'isccc_cc_checkdup': events 42-43
|
| 1001 | tmp = NULL;
| | ^
| | |
| | (42) 'tmp' is NULL
| 1002 | if (isccc_cc_lookupstring(_ctrl, "_frm", &tmp) != ISC_R_SUCCESS) {
| | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| | |
| | (43) calling 'isccc_cc_lookupstring' from 'isccc_cc_checkdup'
|
+--> 'isccc_cc_lookupstring': event 44
|
| 879 | isccc_cc_lookupstring(isccc_sexpr_t *alist, const char *key, char **strp) {
| | ^~~~~~~~~~~~~~~~~~~~~
| | |
| | (44) entry to 'isccc_cc_lookupstring'
|
'isccc_cc_lookupstring': event 45
|
|../../lib/isc/include/isc/assertions.h:45:10:
| 45 | ((void)((cond) || \
| | ~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| | |
| | (45) following 'false' branch (when 'strp' is non-NULL)...
| 46 | ((isc_assertion_failed)(__FILE__, __LINE__, \
| | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| 47 | isc_assertiontype_require, #cond), \
| | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| 48 | 0)))
| | ~~~~
../../lib/isc/include/isc/util.h:312:22: note: in expansion of macro 'ISC_REQUIRE'
| 312 | #define REQUIRE(e) ISC_REQUIRE(e)
| | ^~~~~~~~~~~
cc.c:882:9: note: in expansion of macro 'REQUIRE'
| 882 | REQUIRE(strp == NULL || *strp == NULL);
| | ^~~~~~~
|
'isccc_cc_lookupstring': event 46
|
| 882 | REQUIRE(strp == NULL || *strp == NULL);
| | ^~~~~
| | |
| | (46) ...to here
../../lib/isc/include/isc/assertions.h:45:18: note: in definition of macro 'ISC_REQUIRE'
| 45 | ((void)((cond) || \
| | ^~~~
cc.c:882:9: note: in expansion of macro 'REQUIRE'
| 882 | REQUIRE(strp == NULL || *strp == NULL);
| | ^~~~~~~
|
'isccc_cc_lookupstring': event 47
|
| 882 | REQUIRE(strp == NULL || *strp == NULL);
| | ^~~~~
| | |
| | (47) 'tmp' is NULL
../../lib/isc/include/isc/assertions.h:45:18: note: in definition of macro 'ISC_REQUIRE'
| 45 | ((void)((cond) || \
| | ^~~~
cc.c:882:9: note: in expansion of macro 'REQUIRE'
| 882 | REQUIRE(strp == NULL || *strp == NULL);
| | ^~~~~~~
|
'isccc_cc_lookupstring': event 48
|
| 882 | REQUIRE(strp == NULL || *strp == NULL);
../../lib/isc/include/isc/assertions.h:45:18: note: in definition of macro 'ISC_REQUIRE'
| 45 | ((void)((cond) || \
| | ^~~~
cc.c:882:9: note: in expansion of macro 'REQUIRE'
| 882 | REQUIRE(strp == NULL || *strp == NULL);
| | ^~~~~~~
|
'isccc_cc_lookupstring': event 49
|
| 884 | kv = isccc_alist_assq(alist, key);
| | ^~
| | |
| | (49) ...to here
|
<------+
|
'isccc_cc_checkdup': events 50-54
|
| 1002 | if (isccc_cc_lookupstring(_ctrl, "_frm", &tmp) != ISC_R_SUCCESS) {
| | ~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| | ||
| | |(50) returning to 'isccc_cc_checkdup' from 'isccc_cc_lookupstring'
| | (51) following 'false' branch...
|......
| 1005 | _frm = tmp;
| | ~~~~~~~~~~
| | | |
| | | (53) 'tmp' is NULL
| | (52) ...to here
|......
| 1008 | if (isccc_cc_lookupstring(_ctrl, "_to", &tmp) != ISC_R_SUCCESS) {
| | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| | |
| | (54) calling 'isccc_cc_lookupstring' from 'isccc_cc_checkdup'
|
+--> 'isccc_cc_lookupstring': event 55
|
| 879 | isccc_cc_lookupstring(isccc_sexpr_t *alist, const char *key, char **strp) {
| | ^~~~~~~~~~~~~~~~~~~~~
| | |
| | (55) entry to 'isccc_cc_lookupstring'
|
'isccc_cc_lookupstring': event 56
|
|../../lib/isc/include/isc/assertions.h:45:10:
| 45 | ((void)((cond) || \
| | ~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| | |
| | (56) following 'false' branch (when 'strp' is non-NULL)...
| 46 | ((isc_assertion_failed)(__FILE__, __LINE__, \
| | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| 47 | isc_assertiontype_require, #cond), \
| | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| 48 | 0)))
| | ~~~~
../../lib/isc/include/isc/util.h:312:22: note: in expansion of macro 'ISC_REQUIRE'
| 312 | #define REQUIRE(e) ISC_REQUIRE(e)
| | ^~~~~~~~~~~
cc.c:882:9: note: in expansion of macro 'REQUIRE'
| 882 | REQUIRE(strp == NULL || *strp == NULL);
| | ^~~~~~~
|
'isccc_cc_lookupstring': event 57
|
| 882 | REQUIRE(strp == NULL || *strp == NULL);
| | ^~~~~
| | |
| | (57) ...to here
../../lib/isc/include/isc/assertions.h:45:18: note: in definition of macro 'ISC_REQUIRE'
| 45 | ((void)((cond) || \
| | ^~~~
cc.c:882:9: note: in expansion of macro 'REQUIRE'
| 882 | REQUIRE(strp == NULL || *strp == NULL);
| | ^~~~~~~
|
'isccc_cc_lookupstring': event 58
|
| 882 | REQUIRE(strp == NULL || *strp == NULL);
| | ^~~~~
| | |
| | (58) 'tmp' is NULL
../../lib/isc/include/isc/assertions.h:45:18: note: in definition of macro 'ISC_REQUIRE'
| 45 | ((void)((cond) || \
| | ^~~~
cc.c:882:9: note: in expansion of macro 'REQUIRE'
| 882 | REQUIRE(strp == NULL || *strp == NULL);
| | ^~~~~~~
|
'isccc_cc_lookupstring': event 59
|
| 882 | REQUIRE(strp == NULL || *strp == NULL);
../../lib/isc/include/isc/assertions.h:45:18: note: in definition of macro 'ISC_REQUIRE'
| 45 | ((void)((cond) || \
| | ^~~~
cc.c:882:9: note: in expansion of macro 'REQUIRE'
| 882 | REQUIRE(strp == NULL || *strp == NULL);
| | ^~~~~~~
|
'isccc_cc_lookupstring': event 60
|
| 884 | kv = isccc_alist_assq(alist, key);
| | ^~
| | |
| | (60) ...to here
|
<------+
|
'isccc_cc_checkdup': events 61-65
|
| 1008 | if (isccc_cc_lookupstring(_ctrl, "_to", &tmp) != ISC_R_SUCCESS) {
| | ~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| | ||
| | |(61) returning to 'isccc_cc_checkdup' from 'isccc_cc_lookupstring'
| | (62) following 'false' branch...
|......
| 1011 | _to = tmp;
| | ~~~~~~~~~
| | | |
| | | (64) 'tmp' is NULL
| | (63) ...to here
|......
| 1017 | if (has_whitespace(_frm) || has_whitespace(_to) ||
| | ~~~~~~~~~~~~~~~~~~~~
| | |
| | (65) calling 'has_whitespace' from 'isccc_cc_checkdup'
|
+--> 'has_whitespace': events 66-67
|
| 961 | has_whitespace(const char *str) {
| | ^~~~~~~~~~~~~~
| | |
| | (66) entry to 'has_whitespace'
|......
| 964 | if (str == NULL) {
| | ~
| | |
| | (67) following 'true' branch (when 'str' is NULL)...
|
'has_whitespace': event 68
|
|cc1:
| (68): ...to here
|
<------+
|
'isccc_cc_checkdup': events 69-72
|
| 1017 | if (has_whitespace(_frm) || has_whitespace(_to) ||
| | ~^~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~
| | || |
| | || (71) ...to here
| | || (72) calling 'has_whitespace' from 'isccc_cc_checkdup'
| | |(69) returning to 'isccc_cc_checkdup' from 'has_whitespace'
| | (70) following 'false' branch...
|
+--> 'has_whitespace': events 73-74
|
| 961 | has_whitespace(const char *str) {
| | ^~~~~~~~~~~~~~
| | |
| | (73) entry to 'has_whitespace'
|......
| 964 | if (str == NULL) {
| | ~
| | |
| | (74) following 'true' branch (when 'str' is NULL)...
|
'has_whitespace': event 75
|
|cc1:
| (75): ...to here
|
<------+
|
'isccc_cc_checkdup': events 76-81
|
| 1017 | if (has_whitespace(_frm) || has_whitespace(_to) ||
| | ~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
| | | | |
| | | | (79) following 'false' branch...
| | | (76) returning to 'isccc_cc_checkdup' from 'has_whitespace'
| | (77) following 'false' branch...
| 1018 | has_whitespace(_ser) || has_whitespace(_tim))
| | ~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~
| | | |
| | | (80) ...to here
| | | (81) calling 'has_whitespace' from 'isccc_cc_checkdup'
| | (78) ...to here
|
+--> 'has_whitespace': events 82-83
|
| 961 | has_whitespace(const char *str) {
| | ^~~~~~~~~~~~~~
| | |
| | (82) entry to 'has_whitespace'
|......
| 964 | if (str == NULL) {
| | ~
| | |
| | (83) following 'false' branch (when 'str' is non-NULL)...
|
'has_whitespace': event 84
|
|cc1:
| (84): ...to here
|
<------+
|
'isccc_cc_checkdup': events 85-88
|
| 1017 | if (has_whitespace(_frm) || has_whitespace(_to) ||
| | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| 1018 | has_whitespace(_ser) || has_whitespace(_tim))
| | ~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~
| | | |
| | | (85) returning to 'isccc_cc_checkdup' from 'has_whitespace'
| | (86) following 'false' branch...
|......
| 1022 | len = strlen(_frm) + strlen(_to) + strlen(_ser) + strlen(_tim) + 4;
| | ~~~ ~~~~~~~~~~~~
| | | |
| | | (88) argument 1 ('_frm') NULL where non-null expected
| | (87) ...to here
|
In file included from cc.c:37:
/usr/include/string.h:407:15: note: argument 1 of 'strlen' must be non-null
407 | extern size_t strlen (const char *__s)
| ^~~~~~