From fb3115a199435d62e65769217232b1f8f8237dcb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Sat, 3 Dec 2011 09:53:36 +0100 Subject: [PATCH] Fixed #3267 (False positive: resource leak in vdr-xinelib) --- lib/checkmemoryleak.cpp | 2 +- test/testmemleak.cpp | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/lib/checkmemoryleak.cpp b/lib/checkmemoryleak.cpp index 8dd8e2ca1..0d2baef12 100644 --- a/lib/checkmemoryleak.cpp +++ b/lib/checkmemoryleak.cpp @@ -1670,7 +1670,7 @@ void CheckMemoryLeakInFunction::simplifycode(Token *tok) // Delete "if { dealloc|assign|use ; return ; }" else if (Token::Match(tok2, "[;{}] if { dealloc|assign|use ; return ; }") && - !Token::findsimplematch(tok, "if alloc ;")) { + !Token::findmatch(tok, "if {| alloc ;")) { Token::eraseTokens(tok2, tok2->tokAt(8)); if (Token::simpleMatch(tok2->next(), "else")) tok2->deleteNext(); diff --git a/test/testmemleak.cpp b/test/testmemleak.cpp index e50345700..ce03a3367 100644 --- a/test/testmemleak.cpp +++ b/test/testmemleak.cpp @@ -705,7 +705,12 @@ private: ASSERT_EQUALS("; loop use ;", simplifycode("; loop { loop loop use ; } ;")); ASSERT_EQUALS("; }", simplifycode("; loop { if break ; break ; } ; }")); ASSERT_EQUALS("; }", simplifycode("; loop { if continue ; if continue ; } ; }")); - ASSERT_EQUALS("; loop if alloc ; if { dealloc ; return ; } }", simplifycode("; loop { if alloc ; } if { dealloc ; return ; } }")); + { + // ticket #3267 + const char expected[] = "; loop if alloc ; if { dealloc ; return ; } }"; + ASSERT_EQUALS(expected, simplifycode("; loop { if alloc ; } if { dealloc ; return ; } }")); + ASSERT_EQUALS(expected, simplifycode("; loop { if { alloc ; if(!var) { return ; } } } if { dealloc ; return ; } }")); + } ASSERT_EQUALS("; alloc ;", simplifycode("; alloc ; while(!var) alloc ;"));