Reviewed By: jvillard Differential Revision: D3579581 fbshipit-source-id: 9c74d92master
							parent
							
								
									9378913223
								
							
						
					
					
						commit
						dfb7c15303
					
				| @ -0,0 +1,39 @@ | |||||||
|  | /*
 | ||||||
|  |  * Copyright (c) 2016 - present Facebook, Inc. | ||||||
|  |  * All rights reserved. | ||||||
|  |  * | ||||||
|  |  * This source code is licensed under the BSD style license found in the | ||||||
|  |  * LICENSE file in the root directory of this source tree. An additional grant | ||||||
|  |  * of patent rights can be found in the PATENTS file in the same directory. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | #include <stdio.h> | ||||||
|  | 
 | ||||||
|  | class OpenFile { | ||||||
|  |  public: | ||||||
|  |   OpenFile(const char* filename) { _filename = fopen(filename, "r"); } | ||||||
|  | 
 | ||||||
|  |   ~OpenFile() { fclose(_filename); } | ||||||
|  | 
 | ||||||
|  |  private: | ||||||
|  |   FILE* _filename; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | void resource_leak(const char* filename) { | ||||||
|  |   char buffer[100]; | ||||||
|  |   FILE* file = fopen(filename, "r"); | ||||||
|  | 
 | ||||||
|  |   if (file == NULL) | ||||||
|  |     return; | ||||||
|  |   else | ||||||
|  |     fgets(buffer, 100, file); | ||||||
|  | 
 | ||||||
|  |   return; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void no_resource_leak(const char* filename) { | ||||||
|  |   OpenFile f(filename); | ||||||
|  |   return; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | int main() {} | ||||||
| @ -0,0 +1,62 @@ | |||||||
|  | /* | ||||||
|  |  * Copyright (c) 2015 - present Facebook, Inc. | ||||||
|  |  * All rights reserved. | ||||||
|  |  * | ||||||
|  |  * This source code is licensed under the BSD style license found in the | ||||||
|  |  * LICENSE file in the root directory of this source tree. An additional grant | ||||||
|  |  * of patent rights can be found in the PATENTS file in the same directory. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | package endtoend.cpp.infer; | ||||||
|  | 
 | ||||||
|  | import static org.hamcrest.MatcherAssert.assertThat; | ||||||
|  | import static utils.matchers.ResultContainsExactly.containsExactly; | ||||||
|  | 
 | ||||||
|  | import com.google.common.collect.ImmutableList; | ||||||
|  | 
 | ||||||
|  | import org.junit.BeforeClass; | ||||||
|  | import org.junit.ClassRule; | ||||||
|  | import org.junit.Test; | ||||||
|  | 
 | ||||||
|  | import java.io.IOException; | ||||||
|  | 
 | ||||||
|  | import utils.DebuggableTemporaryFolder; | ||||||
|  | import utils.InferException; | ||||||
|  | import utils.InferResults; | ||||||
|  | import utils.InferRunner; | ||||||
|  | 
 | ||||||
|  | public class ResourceLeakRaiiTest { | ||||||
|  | 
 | ||||||
|  |   public static final String FILE = | ||||||
|  |       "infer/tests/codetoanalyze/cpp/errors/resource_leaks/raii.cpp"; | ||||||
|  | 
 | ||||||
|  |   private static ImmutableList<String> inferCmd; | ||||||
|  | 
 | ||||||
|  |   public static final String RESOURCE_LEAK = "RESOURCE_LEAK"; | ||||||
|  | 
 | ||||||
|  |   @ClassRule | ||||||
|  |   public static DebuggableTemporaryFolder folder = | ||||||
|  |       new DebuggableTemporaryFolder(); | ||||||
|  | 
 | ||||||
|  |   @BeforeClass | ||||||
|  |   public static void runInfer() throws InterruptedException, IOException { | ||||||
|  |     inferCmd = InferRunner.createCPPInferCommandWithMLBuckets(folder, FILE, "cpp"); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   @Test | ||||||
|  |   public void whenInferRunsOnObject_leakThenMLIsFound() | ||||||
|  |       throws InterruptedException, IOException, InferException { | ||||||
|  |     InferResults inferResults = InferRunner.runInferCPP(inferCmd); | ||||||
|  |     String[] methods = { "resource_leak" }; | ||||||
|  |     assertThat( | ||||||
|  |         "Results should contain " + RESOURCE_LEAK, | ||||||
|  |         inferResults, | ||||||
|  |         containsExactly( | ||||||
|  |             RESOURCE_LEAK, | ||||||
|  |             FILE, | ||||||
|  |             methods | ||||||
|  |         ) | ||||||
|  |     ); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  | } | ||||||
					Loading…
					
					
				
		Reference in new issue