From: Yann Collet Date: Mon, 25 Nov 2019 23:50:58 +0000 (-0800) Subject: silence scan-build false positive X-Git-Tag: v1.4.5^2~141^2~10 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5e657aca905a767e0eed5ab692f6e1b30024d3f7;p=thirdparty%2Fzstd.git silence scan-build false positive blind attempt --- diff --git a/programs/util.c b/programs/util.c index ef1ee7b15..3ca404b34 100644 --- a/programs/util.c +++ b/programs/util.c @@ -629,8 +629,19 @@ UTIL_createExpandedFNT(const char** inputNames, size_t nbIfns, int followLinks) if (buf + pos > bufend) { free(buf); free((void*)fileNamesTable); return NULL; } pos += strlen(fileNamesTable[ifnNb]) + 1; } - - return UTIL_assembleFileNamesTable(fileNamesTable, nbFiles, buf); + { FileNamesTable* const fnt = UTIL_assembleFileNamesTable(fileNamesTable, nbFiles, buf); +#ifdef __clang_analyzer__ + /* scan-build does not understand ownership transfer. + * In _some_ versions, it believes that there is a leak of @buf and @fileNamesTable + * on leaving the function, which is not the case, + * as they are referenced inside the object created by UTIL_assembleFileNamesTable(). + * In order to silence this false warning, let's "pretend" that these memory objects are freed. + * This directive is only read by scan-build, due to __clang_analyzer__ macros */ + free(buf); + free(fileNamesTable); +#endif + return fnt; + } } } @@ -648,7 +659,18 @@ FileNamesTable* UTIL_createFNT_fromROTable(const char** filenames, size_t nbFile const char** const newFNTable = (const char**)malloc(sizeof_FNTable); if (newFNTable==NULL) return NULL; memcpy((void*)newFNTable, filenames, sizeof_FNTable); /* void* : mitigate a Visual compiler bug or limitation */ - return UTIL_assembleFileNamesTable(newFNTable, nbFilenames, NULL); + { FileNamesTable* const fnt = UTIL_assembleFileNamesTable(newFNTable, nbFilenames, NULL);; +#ifdef __clang_analyzer__ + /* scan-build does not understand ownership transfer. + * In _some_ versions, it believes that there is a leak of @newFNTable + * on leaving the function, which is not the case, + * as they are referenced inside the object created by UTIL_assembleFileNamesTable(). + * In order to silence this false warning, let's "pretend" that these memory objects are freed. + * This directive is only read by scan-build, due to __clang_analyzer__ macros */ + free(newFNTable); +#endif + return fnt; + } }