diff options
author | Anna Zaks <ganna@apple.com> | 2012-06-22 02:04:31 +0000 |
---|---|---|
committer | Anna Zaks <ganna@apple.com> | 2012-06-22 02:04:31 +0000 |
commit | 0d6989bd10cb66724fefa6c96aa70e4b82ff8740 (patch) | |
tree | 7d9f65b1e3e811a8d9a43c516b1b4859904e5d7d /clang/test/Analysis/malloc.mm | |
parent | 33da33676fe3026fb8e1b237e845698bff42ffb0 (diff) | |
download | bcm5719-llvm-0d6989bd10cb66724fefa6c96aa70e4b82ff8740.tar.gz bcm5719-llvm-0d6989bd10cb66724fefa6c96aa70e4b82ff8740.zip |
[analyzer] Malloc: Warn about use-after-free when memory ownership was
transfered with dataWithBytesNoCopy.
llvm-svn: 158958
Diffstat (limited to 'clang/test/Analysis/malloc.mm')
-rw-r--r-- | clang/test/Analysis/malloc.mm | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/clang/test/Analysis/malloc.mm b/clang/test/Analysis/malloc.mm index 855892da2bf..23297ec97cb 100644 --- a/clang/test/Analysis/malloc.mm +++ b/clang/test/Analysis/malloc.mm @@ -9,7 +9,6 @@ void free(void *); void testNSDatafFreeWhenDoneNoError(NSUInteger dataLength) { unsigned char *data = (unsigned char *)malloc(42); NSData *nsdata = [NSData dataWithBytesNoCopy:data length:dataLength]; - free(data); // no warning } void testNSDataFreeWhenDoneYES(NSUInteger dataLength) { @@ -55,11 +54,17 @@ void testNSStringFreeWhenDoneNO2(NSUInteger dataLength) { NSString *nsstr = [[NSString alloc] initWithCharactersNoCopy:data length:dataLength freeWhenDone:0]; // expected-warning{{leak}} } -// TODO: False Negative. -void testNSDatafFreeWhenDoneFN(NSUInteger dataLength) { - unsigned char *data = (unsigned char *)malloc(42); - NSData *nsdata = [NSData dataWithBytesNoCopy:data length:dataLength freeWhenDone:1]; - free(data); // false negative +void testRelinquished1() { + void *data = malloc(42); + NSData *nsdata = [NSData dataWithBytesNoCopy:data length:42 freeWhenDone:1]; + free(data); // expected-warning {{Attempt to free non-owned memory}} +} + +void testRelinquished2() { + void *data = malloc(42); + NSData *nsdata; + free(data); + [NSData dataWithBytesNoCopy:data length:42]; // expected-warning {{Attempt to free released memory}} } // Test CF/NS...NoCopy. PR12100: Pointers can escape when custom deallocators are provided. |