[PATCH] Correct a potential segfault in ModuleManager
Gautier DI FOLCO
gautier.difolco at gmail.com
Wed Mar 12 02:55:10 PDT 2014
2014-03-03 0:04 GMT+01:00 Gautier DI FOLCO <gautier.difolco at gmail.com>:
> 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
>
Gentle ping.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20140312/18c0e0b9/attachment.html>
More information about the cfe-commits
mailing list