mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-10-06 03:50:02 +02:00
GP-3054: Preventing relative file paths from ending up in an FSRL
This commit is contained in:
parent
6275b13b5c
commit
c5584599c0
3 changed files with 18 additions and 17 deletions
|
@ -212,10 +212,10 @@ public class AnalyzeHeadless implements GhidraLaunchable {
|
||||||
options.setPropertiesFileDirectories(args[++argi]);
|
options.setPropertiesFileDirectories(args[++argi]);
|
||||||
}
|
}
|
||||||
else if (checkArgument("-import", args, argi)) {
|
else if (checkArgument("-import", args, argi)) {
|
||||||
File inputFile = new File(args[++argi]);
|
File inputFile = new File(args[++argi]).getAbsoluteFile();
|
||||||
if (!inputFile.isDirectory() && !inputFile.isFile()) {
|
if (!inputFile.isDirectory() && !inputFile.isFile()) {
|
||||||
throw new InvalidInputException(
|
throw new InvalidInputException(
|
||||||
inputFile.getAbsolutePath() + " is not a valid directory or file.");
|
inputFile + " is not a valid directory or file.");
|
||||||
}
|
}
|
||||||
|
|
||||||
HeadlessAnalyzer.checkValidFilename(inputFile);
|
HeadlessAnalyzer.checkValidFilename(inputFile);
|
||||||
|
@ -234,10 +234,10 @@ public class AnalyzeHeadless implements GhidraLaunchable {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
File otherFile = new File(nextArg);
|
File otherFile = new File(nextArg).getAbsoluteFile();
|
||||||
if (!otherFile.isFile() && !otherFile.isDirectory()) {
|
if (!otherFile.isFile() && !otherFile.isDirectory()) {
|
||||||
throw new InvalidInputException(
|
throw new InvalidInputException(
|
||||||
otherFile.getAbsolutePath() + " is not a valid directory or file.");
|
otherFile + " is not a valid directory or file.");
|
||||||
}
|
}
|
||||||
|
|
||||||
HeadlessAnalyzer.checkValidFilename(otherFile);
|
HeadlessAnalyzer.checkValidFilename(otherFile);
|
||||||
|
|
|
@ -115,13 +115,17 @@ public class LocalFileSystem implements GFileSystem, GFileHashProvider {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Converts a {@link File} into a {@link FSRL}.
|
* Converts a {@link File} into a {@link FSRL}.
|
||||||
|
* <p>
|
||||||
|
* NOTE: The given {@link File}'s absolute path will be used.
|
||||||
*
|
*
|
||||||
* @param f {@link File}
|
* @param f The {@link File} to convert to an {@link FSRL}
|
||||||
* @return {@link FSRL}
|
* @return The {@link FSRL}
|
||||||
*/
|
*/
|
||||||
public FSRL getLocalFSRL(File f) {
|
public FSRL getLocalFSRL(File f) {
|
||||||
return fsFSRL
|
// We prepend a "/" to ensure that Windows-style paths (i.e. C:\) start with a "/". For
|
||||||
.withPath(FSUtilities.appendPath("/", FilenameUtils.separatorsToUnix(f.getPath())));
|
// unix-style paths, this redundant "/" will be dropped.
|
||||||
|
return fsFSRL.withPath(
|
||||||
|
FSUtilities.appendPath("/", FilenameUtils.separatorsToUnix(f.getAbsolutePath())));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -43,7 +43,6 @@ import ghidra.program.model.symbol.*;
|
||||||
import ghidra.program.model.util.CodeUnitInsertionException;
|
import ghidra.program.model.util.CodeUnitInsertionException;
|
||||||
import ghidra.program.util.AddressEvaluator;
|
import ghidra.program.util.AddressEvaluator;
|
||||||
import ghidra.program.util.string.*;
|
import ghidra.program.util.string.*;
|
||||||
import ghidra.util.Conv;
|
|
||||||
import ghidra.util.ascii.AsciiCharSetRecognizer;
|
import ghidra.util.ascii.AsciiCharSetRecognizer;
|
||||||
import ghidra.util.datastruct.Accumulator;
|
import ghidra.util.datastruct.Accumulator;
|
||||||
import ghidra.util.datastruct.ListAccumulator;
|
import ghidra.util.datastruct.ListAccumulator;
|
||||||
|
@ -154,16 +153,14 @@ public class FlatProgramAPI {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the path to the program's executable file.
|
* Returns the {@link File} that the program was originally imported from. It does not
|
||||||
|
* necessarily still exist on the file system.
|
||||||
|
* <p>
|
||||||
* For example, <code>c:\temp\test.exe</code>.
|
* For example, <code>c:\temp\test.exe</code>.
|
||||||
* @return path to program's executable file
|
* @return the {@link File} that the program was originally imported from
|
||||||
*/
|
*/
|
||||||
public final File getProgramFile() {
|
public final File getProgramFile() {
|
||||||
File f = new File(currentProgram.getExecutablePath());
|
return new File(currentProgram.getExecutablePath());
|
||||||
if (f.exists()) {
|
|
||||||
return f;
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1915,7 +1912,7 @@ public class FlatProgramAPI {
|
||||||
* @return a new address with the specified offset in the default address space
|
* @return a new address with the specified offset in the default address space
|
||||||
*/
|
*/
|
||||||
public final Address toAddr(int offset) {
|
public final Address toAddr(int offset) {
|
||||||
return toAddr(offset & Conv.INT_MASK);
|
return toAddr(Integer.toUnsignedLong(offset));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue