summaryrefslogtreecommitdiffstats
path: root/clang/test/Analysis/malloc.mm
diff options
context:
space:
mode:
authorAnna Zaks <ganna@apple.com>2012-06-22 02:04:31 +0000
committerAnna Zaks <ganna@apple.com>2012-06-22 02:04:31 +0000
commit0d6989bd10cb66724fefa6c96aa70e4b82ff8740 (patch)
tree7d9f65b1e3e811a8d9a43c516b1b4859904e5d7d /clang/test/Analysis/malloc.mm
parent33da33676fe3026fb8e1b237e845698bff42ffb0 (diff)
downloadbcm5719-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.mm17
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.
OpenPOWER on IntegriCloud