From: Vincent Bernat Date: Sun, 13 Jan 2013 10:02:28 +0000 (+0100) Subject: clang: additional fixes detected by clang analyzer X-Git-Tag: 0.7.2~59 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=aa015c2618ececfb97eb132edddb5cadbe087681;p=thirdparty%2Flldpd.git clang: additional fixes detected by clang analyzer --- diff --git a/src/client/commands.c b/src/client/commands.c index 96a81227..be30b723 100644 --- a/src/client/commands.c +++ b/src/client/commands.c @@ -400,19 +400,22 @@ end: TAILQ_HEAD(, candidate_word) words; /* List of subnodes */ TAILQ_INIT(&words); current = cmdenv_top(&env); - TAILQ_FOREACH(candidate, ¤t->subentries, next) { - if ((!candidate->token || help || - !strncmp(env.argv[env.argc - 1], candidate->token, - strlen(env.argv[env.argc -1 ]))) && - (!candidate->validate || - candidate->validate(&env, candidate->arg) == 1)) { - struct candidate_word *cword = malloc(sizeof(struct candidate_word)); - if (!cword) break; - cword->word = candidate->token; - cword->doc = candidate->doc; - if (cword->word && strlen(cword->word) > maxl) - maxl = strlen(cword->word); - TAILQ_INSERT_TAIL(&words, cword, next); + if (!TAILQ_EMPTY(¤t->subentries)) { + TAILQ_FOREACH(candidate, ¤t->subentries, next) { + if ((!candidate->token || help || + !strncmp(env.argv[env.argc - 1], candidate->token, + strlen(env.argv[env.argc -1 ]))) && + (!candidate->validate || + candidate->validate(&env, candidate->arg) == 1)) { + struct candidate_word *cword = + malloc(sizeof(struct candidate_word)); + if (!cword) break; + cword->word = candidate->token; + cword->doc = candidate->doc; + if (cword->word && strlen(cword->word) > maxl) + maxl = strlen(cword->word); + TAILQ_INSERT_TAIL(&words, cword, next); + } } } if (!TAILQ_EMPTY(&words)) { diff --git a/src/daemon/edp.c b/src/daemon/edp.c index 063ed466..326d1940 100644 --- a/src/daemon/edp.c +++ b/src/daemon/edp.c @@ -503,7 +503,9 @@ edp_decode(struct lldpd *cfg, char *frame, int s, return 1; malformed: +#ifdef ENABLE_DOT1 free(lvlan); +#endif lldpd_chassis_cleanup(chassis, 1); lldpd_port_cleanup(port, 1); free(port); diff --git a/src/daemon/interfaces-linux.c b/src/daemon/interfaces-linux.c index 3a0bc30d..021e41c7 100644 --- a/src/daemon/interfaces-linux.c +++ b/src/daemon/interfaces-linux.c @@ -94,7 +94,7 @@ iflinux_eth_recv(struct lldpd *cfg, struct lldpd_hardware *hardware, int fd, char *buffer, size_t size) { int n; - struct sockaddr_ll from; + struct sockaddr_ll from = {}; socklen_t fromlen; log_debug("interfaces", "receive PDU from ethernet device %s", @@ -528,7 +528,7 @@ iface_bond_recv(struct lldpd *cfg, struct lldpd_hardware *hardware, int fd, char *buffer, size_t size) { int n; - struct sockaddr_ll from; + struct sockaddr_ll from = {}; socklen_t fromlen; struct bond_master *master = hardware->h_data; diff --git a/src/daemon/lldpd.c b/src/daemon/lldpd.c index 9833891f..9f968cd1 100644 --- a/src/daemon/lldpd.c +++ b/src/daemon/lldpd.c @@ -876,6 +876,7 @@ lldpd_update_localchassis(struct lldpd *cfg) char *hp; log_debug("localchassis", "update information for local chassis"); + assert(LOCAL_CHASSIS(cfg) != NULL); /* Set system name and description */ if (uname(&un) != 0) diff --git a/src/marshal.c b/src/marshal.c index 238be970..251a2b50 100644 --- a/src/marshal.c +++ b/src/marshal.c @@ -130,7 +130,7 @@ marshal_serialize_(struct marshal_info *mi, void *unserialized, void **input, for (current = mi->pointers; current->mi; current++) { size_t sublen; void *source; - void *target; + void *target = NULL; if (current->kind == ignore) continue; if (current->kind == pointer) { memcpy(&source, @@ -144,9 +144,10 @@ marshal_serialize_(struct marshal_info *mi, void *unserialized, void **input, sublen = marshal_serialize_(current->mi, source, &target, current->kind == substruct, refs, osize); - if (sublen == -1) { + if (sublen == -1 || target == NULL) { log_warnx("marshal", "unable to serialize substructure %s for %s", current->mi->name, mi->name); + free(target); free(serialized); return -1; } diff --git a/src/marshal.h b/src/marshal.h index 22c432af..0c4ad69b 100644 --- a/src/marshal.h +++ b/src/marshal.h @@ -106,11 +106,13 @@ extern struct marshal_info marshal_info_ignore; MARSHAL_END /* Serialization */ -ssize_t marshal_serialize_(struct marshal_info *, void *, void **, int, void *, int); +ssize_t marshal_serialize_(struct marshal_info *, void *, void **, int, void *, int) + __attribute__((nonnull (1, 2, 3) )); #define marshal_serialize(type, o, output) marshal_serialize_(&MARSHAL_INFO(type), o, output, 0, NULL, 0) /* Unserialization */ -size_t marshal_unserialize_(struct marshal_info *, void *, size_t, void **, void*, int, int); +size_t marshal_unserialize_(struct marshal_info *, void *, size_t, void **, void*, int, int) + __attribute__((nonnull (1, 2, 4) )); #define marshal_unserialize(type, o, l, input) \ marshal_unserialize_(&MARSHAL_INFO(type), o, l, input, NULL, 0, 0)