diff options
author | Daniel Silverstone <dsilvers@digital-scurf.org> | 2019-09-07 14:59:40 +0100 |
---|---|---|
committer | Daniel Silverstone <dsilvers@digital-scurf.org> | 2019-09-07 14:59:40 +0100 |
commit | 5b1700a8917065508336c1318414daa6abb7ace2 (patch) | |
tree | ac1f80c00946fee424d8fcf61c18f823620ec5a3 | |
parent | 130c1dec2842b5a7f1256816b58ea4d41726c950 (diff) | |
download | libwapcaplet-5b1700a8917065508336c1318414daa6abb7ace2.tar.gz libwapcaplet-5b1700a8917065508336c1318414daa6abb7ace2.tar.bz2 |
Remove global context if no strings leak
If when we iterate the context there're no strings, then we
can delete the context too, which reduces false-positives on
leak checkers.
Closes #2490
Signed-off-by: Daniel Silverstone <dsilvers@digital-scurf.org>
-rw-r--r-- | include/libwapcaplet/libwapcaplet.h | 4 | ||||
-rw-r--r-- | src/libwapcaplet.c | 12 |
2 files changed, 15 insertions, 1 deletions
diff --git a/include/libwapcaplet/libwapcaplet.h b/include/libwapcaplet/libwapcaplet.h index d8cc841..e4c2cc9 100644 --- a/include/libwapcaplet/libwapcaplet.h +++ b/include/libwapcaplet/libwapcaplet.h @@ -278,6 +278,10 @@ static inline lwc_error lwc_string_caseless_hash_value( /** * Iterate the context and return every string in it. * + * If there are no strings found in the context, then this has the + * side effect of removing the global context which will reduce the + * chances of false-positives on leak checkers. + * * @param cb The callback to give the string to. * @param pw The private word for the callback. */ diff --git a/src/libwapcaplet.c b/src/libwapcaplet.c index 9bc1fc9..34a72cd 100644 --- a/src/libwapcaplet.c +++ b/src/libwapcaplet.c @@ -271,12 +271,22 @@ lwc_iterate_strings(lwc_iteration_callback_fn cb, void *pw) { lwc_hash n; lwc_string *str; + bool found = false; if (ctx == NULL) return; for (n = 0; n < ctx->bucketcount; ++n) { - for (str = ctx->buckets[n]; str != NULL; str = str->next) + for (str = ctx->buckets[n]; str != NULL; str = str->next) { + found = true; cb(str, pw); + } + } + + if (found == false) { + /* We found no strings, so remove the global context. */ + free(ctx->buckets); + free(ctx); + ctx = NULL; } } |