Audit uses of StringRef::getAsInteger.
llvm-svn: 152565
diff --git a/lld/lib/Core/YamlReader.cpp b/lld/lib/Core/YamlReader.cpp
index 98201f8..64192b0 100644
--- a/lld/lib/Core/YamlReader.cpp
+++ b/lld/lib/Core/YamlReader.cpp
@@ -764,13 +764,10 @@
}
void YAMLAtomState::setAlign2(const char *s) {
- llvm::StringRef str(s);
- uint32_t res;
- str.getAsInteger(10, res);
- _alignment.powerOf2 = static_cast<uint16_t>(res);
+ if (llvm::StringRef(s).getAsInteger(10, _alignment.powerOf2))
+ _alignment.powerOf2 = 1;
}
-
void YAMLAtomState::setFixupKind(const char *s) {
_ref._kind = _platform.kindFromString(llvm::StringRef(s));
}
@@ -915,7 +912,7 @@
}
else if (strcmp(entry->key, KeyValues::sizeKeyword) == 0) {
llvm::StringRef val = entry->value;
- if ( val.getAsInteger(0, atomState._size) )
+ if (val.getAsInteger(0, atomState._size))
return make_error_code(yaml_reader_error::illegal_value);
haveAtom = true;
}
@@ -956,9 +953,9 @@
haveFixup = true;
}
else if (strcmp(entry->key, KeyValues::fixupsOffsetKeyword) == 0) {
- llvm::APInt Val;
- llvm::StringRef(entry->value).getAsInteger(0, Val);
- atomState._ref._offsetInAtom = Val.getZExtValue();
+ if (llvm::StringRef(entry->value).getAsInteger(0,
+ atomState._ref._offsetInAtom))
+ return make_error_code(yaml_reader_error::illegal_value);
haveFixup = true;
}
else if (strcmp(entry->key, KeyValues::fixupsTargetKeyword) == 0) {
@@ -966,19 +963,9 @@
haveFixup = true;
}
else if (strcmp(entry->key, KeyValues::fixupsAddendKeyword) == 0) {
- llvm::APInt Val;
- // HACK: getAsInteger for APInt doesn't handle negative values
- // the same as other getAsInteger functions. And getAsInteger
- // doesn't work on all platforms for {,u}int64_t. So manually
- // handle this until getAsInteger is fixed.
- bool IsNeg = false;
llvm::StringRef Addend(entry->value);
- if (Addend.find('-') == 0) {
- IsNeg = true;
- Addend = Addend.substr(1);
- }
- Addend.getAsInteger(0, Val);
- atomState._ref._addend = Val.getSExtValue() * (IsNeg ? -1 : 1);
+ if (Addend.getAsInteger(0, atomState._ref._addend))
+ return make_error_code(yaml_reader_error::illegal_value);
haveFixup = true;
}
}