GP-5010: GhidraScript.askFile() no longer throws an

IllegalArgumentException in headless mode when passing in a valid path
argument to a file that does not yet exist (Closes #7025)
This commit is contained in:
Ryan Kurtz 2024-10-11 07:53:29 -04:00
parent 1929645373
commit 7d5a514f25

View File

@ -1866,21 +1866,6 @@ public abstract class GhidraScript extends FlatProgramAPI {
return Arrays.asList(s); return Arrays.asList(s);
} }
/**
* Parses a file from a string.
*
* @param s The string to parse.
* @return The file that was parsed from the string.
* @throws IllegalArgumentException if the parsed value is not a valid file.
*/
public File parseFile(String s) {
File f = new File(s);
if (!f.isFile()) {
throw new IllegalArgumentException("Invalid file: " + f);
}
return f;
}
/** /**
* Attempts to locate a value from script arguments * Attempts to locate a value from script arguments
* or a script properties file using * or a script properties file using
@ -1929,7 +1914,7 @@ public abstract class GhidraScript extends FlatProgramAPI {
if (isHeadless && !hasDefault) { // require either a props file or a default value if (isHeadless && !hasDefault) { // require either a props file or a default value
throw new IllegalArgumentException("Error processing variable '" + propertyKey + throw new IllegalArgumentException("Error processing variable '" + propertyKey +
"' in headless mode -- it was not found in a .properties file."); "' in headless mode -- it was not found in script arguments or a .properties file.");
} }
return defaultValue; // may be null return defaultValue; // may be null
} }
@ -1939,7 +1924,7 @@ public abstract class GhidraScript extends FlatProgramAPI {
if (isHeadless && !hasDefault) { // require either a props file or a default value if (isHeadless && !hasDefault) { // require either a props file or a default value
throw new IllegalArgumentException("Error processing variable '" + propertyKey + throw new IllegalArgumentException("Error processing variable '" + propertyKey +
"' in headless mode -- it was not found in a .properties file."); "' in headless mode -- it was not found in script arguments or a .properties file.");
} }
return defaultValue; return defaultValue;
} }
@ -2026,8 +2011,8 @@ public abstract class GhidraScript extends FlatProgramAPI {
* exists). * exists).
* </li> * </li>
* <li>In the headless environment, this method returns a File object representing the * <li>In the headless environment, this method returns a File object representing the
* .properties String value (if it exists), or throws an Exception if there is an * .properties String value, or throws an Exception if there is an invalid or missing
* invalid or missing .properties value. * .properties value.
* </li> * </li>
* </ol> * </ol>
* *
@ -2045,7 +2030,7 @@ public abstract class GhidraScript extends FlatProgramAPI {
throws CancelledException { throws CancelledException {
String key = join(title, approveButtonText); String key = join(title, approveButtonText);
File existingValue = loadAskValue(this::parseFile, key); File existingValue = loadAskValue(File::new, key);
if (isRunningHeadless()) { if (isRunningHeadless()) {
return existingValue; return existingValue;
} }