mirror of
https://github.com/RPCS3/llvm.git
synced 2024-11-25 04:39:51 +00:00
Fix input validation issues in llvm-as/llvm-dis
Summary: 1. llvm-as/llvm-dis tools do not check for input filename length. 2. llvm-dis does not verify the `Streamer` variable against `nullptr` properly, so the `M` variable could be uninitialized (e.g. if the input file does not exist) leading to null dref. Patch by Lenar Safin! Reviewers: samsonov Reviewed By: samsonov Subscribers: samsonov, llvm-commits Differential Revision: http://reviews.llvm.org/D9584 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@237051 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
051ef86497
commit
4e5be5af59
@ -62,14 +62,8 @@ static void WriteOutputFile(const Module *M) {
|
||||
if (InputFilename == "-") {
|
||||
OutputFilename = "-";
|
||||
} else {
|
||||
std::string IFN = InputFilename;
|
||||
int Len = IFN.length();
|
||||
if (IFN[Len-3] == '.' && IFN[Len-2] == 'l' && IFN[Len-1] == 'l') {
|
||||
// Source ends in .ll
|
||||
OutputFilename = std::string(IFN.begin(), IFN.end()-3);
|
||||
} else {
|
||||
OutputFilename = IFN; // Append a .bc to it
|
||||
}
|
||||
StringRef IFN = InputFilename;
|
||||
OutputFilename = (IFN.endswith(".ll") ? IFN.drop_back(3) : IFN).str();
|
||||
OutputFilename += ".bc";
|
||||
}
|
||||
}
|
||||
|
@ -80,7 +80,8 @@ public:
|
||||
if (!V.getType()->isVoidTy()) {
|
||||
OS.PadToColumn(50);
|
||||
Padded = true;
|
||||
OS << "; [#uses=" << V.getNumUses() << " type=" << *V.getType() << "]"; // Output # uses and type
|
||||
// Output # uses and type
|
||||
OS << "; [#uses=" << V.getNumUses() << " type=" << *V.getType() << "]";
|
||||
}
|
||||
if (const Instruction *I = dyn_cast<Instruction>(&V)) {
|
||||
if (const DebugLoc &DL = I->getDebugLoc()) {
|
||||
@ -158,6 +159,9 @@ int main(int argc, char **argv) {
|
||||
getStreamedBitcodeModule(DisplayFilename, Streamer, Context);
|
||||
M = std::move(*MOrErr);
|
||||
M->materializeAllPermanently();
|
||||
} else {
|
||||
errs() << argv[0] << ": " << ErrorMessage << '\n';
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Just use stdout. We won't actually print anything on it.
|
||||
@ -168,13 +172,9 @@ int main(int argc, char **argv) {
|
||||
if (InputFilename == "-") {
|
||||
OutputFilename = "-";
|
||||
} else {
|
||||
const std::string &IFN = InputFilename;
|
||||
int Len = IFN.length();
|
||||
// If the source ends in .bc, strip it off.
|
||||
if (IFN[Len-3] == '.' && IFN[Len-2] == 'b' && IFN[Len-1] == 'c')
|
||||
OutputFilename = std::string(IFN.begin(), IFN.end()-3)+".ll";
|
||||
else
|
||||
OutputFilename = IFN+".ll";
|
||||
StringRef IFN = InputFilename;
|
||||
OutputFilename = (IFN.endswith(".bc") ? IFN.drop_back(3) : IFN).str();
|
||||
OutputFilename += ".ll";
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user