[ELF] Diagnose malformed --dynsym option.
authorRui Ueyama <ruiu@google.com>
Fri, 4 Apr 2014 22:36:30 +0000 (22:36 +0000)
committerRui Ueyama <ruiu@google.com>
Fri, 4 Apr 2014 22:36:30 +0000 (22:36 +0000)
llvm-svn: 205654

lld/lib/Driver/GnuLdDriver.cpp
lld/unittests/DriverTests/GnuLdDriverTest.cpp

index 660ab10..64eb95d 100644 (file)
@@ -134,7 +134,7 @@ static error_code getFileMagic(ELFLinkingContext &ctx, StringRef path,
 // aliases yet.
 static bool parseDefsymOption(StringRef opt, StringRef &sym, uint64_t &addr) {
   size_t equalPos = opt.find('=');
-  if (equalPos == StringRef::npos)
+  if (equalPos == 0 || equalPos == StringRef::npos)
     return false;
   sym = opt.substr(0, equalPos);
   if (opt.substr(equalPos + 1).getAsInteger(0, addr))
index 8e2fadc..d46d0c6 100644 (file)
@@ -71,3 +71,13 @@ TEST_F(GnuLdParserTest, DefsymFail) {
   EXPECT_FALSE(
       parse("ld", "--start-group", "--end-group", "--defsym=sym=abc", nullptr));
 }
+
+TEST_F(GnuLdParserTest, DefsymMisssingSymbol) {
+  EXPECT_FALSE(
+      parse("ld", "--start-group", "--end-group", "--defsym==0", nullptr));
+}
+
+TEST_F(GnuLdParserTest, DefsymMisssingValue) {
+  EXPECT_FALSE(
+      parse("ld", "--start-group", "--end-group", "--defsym=sym=", nullptr));
+}