From 406fdd32197c17b77216a16a9f494af2c5af493c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Sat, 29 Aug 2009 07:02:36 +0200 Subject: [PATCH] Memory leaks: Fixed two todo testcases (getcode handling of asprintf) --- src/checkmemoryleak.cpp | 15 +++++++++++++-- test/testmemleak.cpp | 4 ++-- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/checkmemoryleak.cpp b/src/checkmemoryleak.cpp index f5dd2c134..d5abd3884 100644 --- a/src/checkmemoryleak.cpp +++ b/src/checkmemoryleak.cpp @@ -627,9 +627,20 @@ Token *CheckMemoryLeakInFunction::getcode(const Token *tok, std::liststr() == ";") addtoken(";"); - if (varid && Token::Match(tok->previous(), "[(;{}] %varid% =", varid)) + if (Token::Match(tok->previous(), "[(;{}] %varid% =", varid) || + Token::Match(tok, "asprintf ( & %varid% ,", varid)) { - AllocType alloc = getAllocationType(tok->tokAt(2), varid); + AllocType alloc; + + if (Token::simpleMatch(tok, "asprintf (")) + { + alloc = Malloc; + tok = tok->next()->link(); + } + else + { + alloc = getAllocationType(tok->tokAt(2), varid); + } bool realloc = false; if (sz > 1 && diff --git a/test/testmemleak.cpp b/test/testmemleak.cpp index bcf7fdec2..ad946b666 100644 --- a/test/testmemleak.cpp +++ b/test/testmemleak.cpp @@ -351,8 +351,8 @@ private: ASSERT_EQUALS(";;do{}loop;", getcode("char *s; do { } while (a);", "s")); // asprintf.. - TODO_ASSERT_EQUALS(";;alloc;", getcode("char *s; asprintf(&s, \"xyz\");", "s")); - TODO_ASSERT_EQUALS(";;alloc;", getcode("char *s; asprintf(&s, \"s: %s\", s);", "s")); + ASSERT_EQUALS(";;alloc;", getcode("char *s; asprintf(&s, \"xyz\");", "s")); + ASSERT_EQUALS(";;alloc;", getcode("char *s; asprintf(&s, \"s: %s\", s);", "s")); ASSERT_EQUALS(";;;", getcode("char *s; asprintf(&p, \"s: %s\", s);", "s")); // use..