On Wed, Apr 23, 2014 at 9:14 PM, Nico Weber <[email protected]> wrote:
> Author: nico > Date: Wed Apr 23 23:14:12 2014 > New Revision: 207073 > > URL: http://llvm.org/viewvc/llvm-project?rev=207073&view=rev > Log: > Fix two leaks in c-index-test found by LSan. > > The result of clang_getCursorSpelling() needs to be > clang_getCursorSpelling()ed. > *needs to be clang_disposeString()ed. > > Modified: > cfe/trunk/include/clang-c/CXString.h > cfe/trunk/tools/c-index-test/c-index-test.c > > Modified: cfe/trunk/include/clang-c/CXString.h > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang-c/CXString.h?rev=207073&r1=207072&r2=207073&view=diff > > ============================================================================== > --- cfe/trunk/include/clang-c/CXString.h (original) > +++ cfe/trunk/include/clang-c/CXString.h Wed Apr 23 23:14:12 2014 > @@ -31,7 +31,7 @@ extern "C" { > * \brief A character string. > * > * The \c CXString type is used to return strings from the interface when > - * the ownership of that string might different from one call to the next. > + * the ownership of that string might differ from one call to the next. > * Use \c clang_getCString() to retrieve the string data and, once > finished > * with the string data, call \c clang_disposeString() to free the string. > */ > > Modified: cfe/trunk/tools/c-index-test/c-index-test.c > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/c-index-test/c-index-test.c?rev=207073&r1=207072&r2=207073&view=diff > > ============================================================================== > --- cfe/trunk/tools/c-index-test/c-index-test.c (original) > +++ cfe/trunk/tools/c-index-test/c-index-test.c Wed Apr 23 23:14:12 2014 > @@ -1333,18 +1333,25 @@ static enum CXChildVisitResult PrintType > } > /* Print the record field offset if applicable. */ > { > - const char *FieldName = > clang_getCString(clang_getCursorSpelling(cursor)); > + CXString FieldSpelling = clang_getCursorSpelling(cursor); > + const char *FieldName = clang_getCString(FieldSpelling); > /* recurse to get the root anonymous record parent */ > CXCursor Parent, Root; > - if (clang_getCursorKind(cursor) == CXCursor_FieldDecl ) { > - const char *RootParentName; > + if (clang_getCursorKind(cursor) == CXCursor_FieldDecl) { > + CXString RootParentSpelling; > + const char *RootParentName = 0; > Parent = p; > do { > + if (RootParentName != 0) > + clang_disposeString(RootParentSpelling); > + > Root = Parent; > - RootParentName = clang_getCString(clang_getCursorSpelling(Root)); > + RootParentSpelling = clang_getCursorSpelling(Root); > + RootParentName = clang_getCString(RootParentSpelling); > Parent = clang_getCursorSemanticParent(Root); > - } while ( clang_getCursorType(Parent).kind == CXType_Record && > - !strcmp(RootParentName, "") ); > + } while (clang_getCursorType(Parent).kind == CXType_Record && > + !strcmp(RootParentName, "")); > + clang_disposeString(RootParentSpelling); > /* if RootParentName is "", record is anonymous. */ > { > long long Offset = > clang_Type_getOffsetOf(clang_getCursorType(Root), > @@ -1352,6 +1359,7 @@ static enum CXChildVisitResult PrintType > printf(" [offsetof=%lld]", Offset); > } > } > + clang_disposeString(FieldSpelling); > } > /* Print if its a bitfield */ > { > > > _______________________________________________ > cfe-commits mailing list > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits >
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
