From 40ee778c63369ec444a91dac863c8eca40099979 Mon Sep 17 00:00:00 2001 From: Rob Gill Date: Wed, 13 Feb 2019 15:10:15 +1000 Subject: [PATCH] Fix memory leaks * Delete/free as appropriate Most cases involve not freeing memory after encountering error or unexpected situation (identified via cppcheck static analysis) Change-Id: I90ba2fca518b00d2dfa9ec1ddbcebe1920a34b7c Reviewed-on: https://review.haiku-os.org/c/haiku/+/1038 Reviewed-by: waddlesplash --- src/bin/copyattr.cpp | 1 + src/bin/diff_zip.cpp | 1 + src/bin/fortune.c | 3 +++ src/bin/makebootable/platform/bios_ia32/makebootable.cpp | 2 ++ src/bin/resattr.cpp | 2 ++ src/bin/settype.cpp | 8 +++++--- src/servers/net/Services.cpp | 4 +++- src/system/kernel/debug/tracing.cpp | 3 +++ 8 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/bin/copyattr.cpp b/src/bin/copyattr.cpp index fa36fbd059..e54e984d19 100644 --- a/src/bin/copyattr.cpp +++ b/src/bin/copyattr.cpp @@ -735,6 +735,7 @@ main(int argc, const char *const *argv) const char *destination = files[fileCount]; files[fileCount] = NULL; copy_files(files, fileCount, destination, parameters); + delete[] files; return 0; } diff --git a/src/bin/diff_zip.cpp b/src/bin/diff_zip.cpp index f4d4375536..0771ab37c6 100644 --- a/src/bin/diff_zip.cpp +++ b/src/bin/diff_zip.cpp @@ -369,6 +369,7 @@ main(int argc, const char* const* argv) execvp("zip", zipArgs); fprintf(stderr, "Error: Failed exec*() zip: %s\n", strerror(errno)); + delete[] rootNodes; return 1; } diff --git a/src/bin/fortune.c b/src/bin/fortune.c index 1303c53bf5..e3833b896d 100644 --- a/src/bin/fortune.c +++ b/src/bin/fortune.c @@ -130,6 +130,7 @@ main(int argc, char **argv) if (read(fd, buffer, stat.st_size) < 0) { fprintf(stderr, "Could not read from fortune file: %s\n", strerror(errno)); + free(buffer); return -1; } @@ -148,6 +149,7 @@ main(int argc, char **argv) if (!count) { printf("Out of cookies...\n"); + free(buffer); return 0; } @@ -168,5 +170,6 @@ main(int argc, char **argv) } puts(buffer + start); + free(buffer) return 0; } diff --git a/src/bin/makebootable/platform/bios_ia32/makebootable.cpp b/src/bin/makebootable/platform/bios_ia32/makebootable.cpp index 1f6c11116e..bb4ea6cd64 100644 --- a/src/bin/makebootable/platform/bios_ia32/makebootable.cpp +++ b/src/bin/makebootable/platform/bios_ia32/makebootable.cpp @@ -672,5 +672,7 @@ main(int argc, const char *const *argv) close(fd); } + delete[] files; + return 0; } diff --git a/src/bin/resattr.cpp b/src/bin/resattr.cpp index ec02f48daf..d325b344f1 100644 --- a/src/bin/resattr.cpp +++ b/src/bin/resattr.cpp @@ -309,5 +309,7 @@ main(int argc, const char *const *argv) overwrite); } + delete[] inputFiles; + return 0; } diff --git a/src/bin/settype.cpp b/src/bin/settype.cpp index 41047341e7..454df70099 100644 --- a/src/bin/settype.cpp +++ b/src/bin/settype.cpp @@ -85,7 +85,7 @@ check_mime_type(const char *type) if (type) { if (!BMimeType::IsValid(type)) { fprintf(stderr, "\"%s\" is no valid MIME type.\n", type); - + exit(1); } } @@ -104,7 +104,7 @@ main(int argc, const char *const *argv) const char *type = NULL; const char *signature = NULL; const char *preferredApp = NULL; - + // parse the arguments for (int argi = 1; argi < argc; ) { const char *arg = argv[argi++]; @@ -141,7 +141,7 @@ main(int argc, const char *const *argv) if (fileCount == 0) { fprintf(stderr, "Error: No file specified.\n"); print_usage_and_exit(true); - } + } // check for valid MIME types check_mime_type(preferredApp); @@ -237,5 +237,7 @@ main(int argc, const char *const *argv) } } + delete[] files; + return 0; } diff --git a/src/servers/net/Services.cpp b/src/servers/net/Services.cpp index 932b04c28c..e3bc4deca4 100644 --- a/src/servers/net/Services.cpp +++ b/src/servers/net/Services.cpp @@ -452,8 +452,10 @@ Services::_LaunchService(struct service& service, int socket) } args[service.arguments.size()] = NULL; - if (execv(service.arguments[0].c_str(), (char* const*)args) < 0) + if (execv(service.arguments[0].c_str(), (char* const*)args) < 0) { + free(args); exit(1); + } // we'll never trespass here } else { diff --git a/src/system/kernel/debug/tracing.cpp b/src/system/kernel/debug/tracing.cpp index ebb37810d4..64407f965e 100644 --- a/src/system/kernel/debug/tracing.cpp +++ b/src/system/kernel/debug/tracing.cpp @@ -1122,6 +1122,7 @@ private: TraceFilter* filter = new(&fFilters[fFilterCount++]) NotTraceFilter; if ((filter->fSubFilters.first = _ParseExpression()) != NULL) return filter; + delete(filter); return NULL; } else if (strcmp(token, "and") == 0) { TraceFilter* filter = new(&fFilters[fFilterCount++]) AndTraceFilter; @@ -1129,6 +1130,7 @@ private: && (filter->fSubFilters.second = _ParseExpression()) != NULL) { return filter; } + delete(filter); return NULL; } else if (strcmp(token, "or") == 0) { TraceFilter* filter = new(&fFilters[fFilterCount++]) OrTraceFilter; @@ -1136,6 +1138,7 @@ private: && (filter->fSubFilters.second = _ParseExpression()) != NULL) { return filter; } + delete(filter); return NULL; } else if (strcmp(token, "thread") == 0) { const char* arg = _NextToken();