ELF: Check StringRef::getAsInteger's return value.
authorRui Ueyama <ruiu@google.com>
Thu, 29 Jan 2015 23:23:57 +0000 (23:23 +0000)
committerRui Ueyama <ruiu@google.com>
Thu, 29 Jan 2015 23:23:57 +0000 (23:23 +0000)
getAsInteger may partially update its result argument. We need to
check function return value to handle errors reliably.

llvm-svn: 227510

lld/lib/ReaderWriter/ELF/ArrayOrderPass.cpp

index b74c6dd..b279495 100644 (file)
@@ -42,13 +42,12 @@ void ArrayOrderPass::perform(std::unique_ptr<MutableFile> &f) {
     // according to their number. Sections without optional
     // numer suffix should go last.
 
-    uint32_t leftPriority = std::numeric_limits<uint32_t>::max();
-    if (!leftNum.empty())
-      leftNum.getAsInteger(10, leftPriority);
-
-    uint32_t rightPriority = std::numeric_limits<uint32_t>::max();
-    if (!rightNum.empty())
-      rightNum.getAsInteger(10, rightPriority);
+    uint32_t leftPriority;
+    uint32_t rightPriority;
+    if (leftNum.getAsInteger(10, leftPriority))
+      leftPriority = std::numeric_limits<uint32_t>::max();
+    if (rightNum.getAsInteger(10, rightPriority))
+      rightPriority = std::numeric_limits<uint32_t>::max();
 
     return leftPriority < rightPriority;
   });