[PATCH] Correct a potential segfault in ModuleManager

Gautier DI FOLCO gautier.difolco at gmail.com
Sun Mar 2 15:04:07 PST 2014


Hi doug.gregor,

lookupModuleName segfaulted in ModuleManager on "-" FileName when the FileManager was empty.

http://llvm-reviews.chandlerc.com/D2920

Files:
  lib/Serialization/ModuleManager.cpp
  unittests/CMakeLists.txt
  unittests/Makefile
  unittests/Serialization/CMakeLists.txt
  unittests/Serialization/ModuleManagerTest.cpp

Index: lib/Serialization/ModuleManager.cpp
===================================================================
--- lib/Serialization/ModuleManager.cpp
+++ lib/Serialization/ModuleManager.cpp
@@ -383,7 +383,7 @@
                                      const FileEntry *&File) {
   File = FileMgr.getFile(FileName, /*openFile=*/false, /*cacheFailure=*/false);
 
-  if (!File && FileName != "-") {
+  if (!File) {
     return false;
   }
 
Index: unittests/CMakeLists.txt
===================================================================
--- unittests/CMakeLists.txt
+++ unittests/CMakeLists.txt
@@ -12,6 +12,7 @@
 add_subdirectory(Basic)
 add_subdirectory(Lex)
 add_subdirectory(Driver)
+add_subdirectory(Serialization)
 if(CLANG_ENABLE_STATIC_ANALYZER)
   add_subdirectory(Frontend)
 endif()
Index: unittests/Makefile
===================================================================
--- unittests/Makefile
+++ unittests/Makefile
@@ -14,7 +14,7 @@
 
 IS_UNITTEST_LEVEL := 1
 CLANG_LEVEL := ..
-PARALLEL_DIRS = Basic Lex Driver libclang
+PARALLEL_DIRS = Basic Lex Driver libclang Serialization
 
 include $(CLANG_LEVEL)/../..//Makefile.config
 
Index: unittests/Serialization/CMakeLists.txt
===================================================================
--- unittests/Serialization/CMakeLists.txt
+++ unittests/Serialization/CMakeLists.txt
@@ -0,0 +1,7 @@
+add_clang_unittest(clangSerializationTests
+    ModuleManagerTest.cpp
+  )
+
+target_link_libraries(clangSerializationTests
+    clangSerialization
+  )
Index: unittests/Serialization/ModuleManagerTest.cpp
===================================================================
--- unittests/Serialization/ModuleManagerTest.cpp
+++ unittests/Serialization/ModuleManagerTest.cpp
@@ -0,0 +1,39 @@
+//=== unittests/Serialization/ModuleManagerTest.cpp - ModuleManager tests ===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include "clang/Basic/FileSystemOptions.h"
+#include "clang/Basic/FileManager.h"
+#include "clang/Serialization/ModuleManager.h"
+#include "gtest/gtest.h"
+
+using namespace clang;
+
+namespace {
+
+// Test a lookup of a unknown file when there is no Modules
+TEST(ModuleManager, LookupModuleUnknownFilenameDontFailAtStartup) {
+  FileSystemOptions f;
+  FileManager m(f);
+  serialization::ModuleManager ModuleMgr(m);
+  const FileEntry *File = 0;
+  ASSERT_FALSE(ModuleMgr.lookupModuleFile("UnknownModuleFile", 1, 1, File));
+  ASSERT_TRUE(File == NULL);
+}
+
+// Test a lookup of dash file when there is no Modules
+TEST(ModuleManager, LookupModuleDashFilenameDontFailAtStartup) {
+  FileSystemOptions f;
+  FileManager m(f);
+  serialization::ModuleManager ModuleMgr(m);
+  const FileEntry *File = 0;
+  ASSERT_FALSE(ModuleMgr.lookupModuleFile("-", 1, 1, File));
+  ASSERT_TRUE(File == NULL);
+}
+
+} // anonymous namespace
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D2920.1.patch
Type: text/x-patch
Size: 3032 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20140302/8cf25788/attachment.bin>


More information about the cfe-commits mailing list