From a9e6eecdd61b43367d5b7873532952db54b1b124 Mon Sep 17 00:00:00 2001 From: Benjamin Tissoires Date: Thu, 11 Apr 2019 17:27:12 +0200 Subject: [PATCH 8/9] dummy fix for covscan covscan seems lost here: Error: RESOURCE_LEAK (CWE-772): libXt-20190411/src/Intrinsic.c:1074: alloc_fn: Storage is returned from allocation function "__XtMalloc". libXt-20190411/src/Intrinsic.c:1074: var_assign: Assigning: "buf2" = storage returned from "__XtMalloc(4096U)". libXt-20190411/src/Intrinsic.c:1110: leaked_storage: Variable "buf2" going out of scope leaks the storage it points to. Error: USE_AFTER_FREE (CWE-416): libXt-20190411/src/Intrinsic.c:1113: alias: Assigning: "buf" = "buf2". Now both point to the same storage. libXt-20190411/src/Intrinsic.c:1108: freed_arg: "XtFree" frees "buf2". libXt-20190411/src/Intrinsic.c:1110: use_after_free: Using freed pointer "buf". Both are false positive, but we can make it understand where it is wrong. Signed-off-by: Benjamin Tissoires --- src/Intrinsic.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/Intrinsic.c b/src/Intrinsic.c index 450dce7..3a16d5e 100644 --- a/src/Intrinsic.c +++ b/src/Intrinsic.c @@ -1070,8 +1070,9 @@ String XtFindFile( int len; Boolean firstTime = TRUE; - buf = buf1 = __XtMalloc((unsigned)PATH_MAX); + buf1 = __XtMalloc((unsigned)PATH_MAX); buf2 = __XtMalloc((unsigned)PATH_MAX); + buf = buf1; if (predicate == NULL) predicate = TestFile; @@ -1105,9 +1106,12 @@ String XtFindFile( #ifdef XNL_DEBUG printf("File found.\n"); #endif /* XNL_DEBUG */ - if (buf == buf1) XtFree(buf2); - else XtFree(buf1); - return buf; + if (buf == buf1) { + XtFree(buf2); + return buf1; + } + XtFree(buf1); + return buf2; } if (buf == buf1) buf = buf2; -- 2.19.2