GP-6934: Implement OS/shell-dependent escaping.

This commit is contained in:
Dan
2026-06-23 13:30:09 +00:00
parent 2ad4bdcae5
commit 1541f3a78b
5 changed files with 271 additions and 20 deletions

View File

@@ -22,7 +22,7 @@ import com.sun.jdi.connect.AttachingConnector;
import com.sun.jdi.connect.Connector;
import com.sun.jdi.connect.Connector.Argument;
import ghidra.pty.ShellUtils;
import ghidra.pty.ShellUtils.Shell;
public class JdiArguments {
enum Mode {
@@ -101,7 +101,7 @@ public class JdiArguments {
}
String cp = env.get("OPT_TARGET_CLASSPATH");
if (!cp.isBlank()) {
args.get("options").setValue("-cp " + ShellUtils.generateArgument(cp));
args.get("options").setValue("-cp " + Shell.LOCAL.generateArgument(cp));
}
}
}

View File

@@ -50,6 +50,7 @@ import ghidra.program.model.address.Address;
import ghidra.program.model.listing.Program;
import ghidra.program.util.ProgramLocation;
import ghidra.pty.*;
import ghidra.pty.ShellUtils.Shell;
import ghidra.trace.model.Trace;
import ghidra.trace.model.TraceLocation;
import ghidra.util.*;
@@ -475,7 +476,7 @@ public abstract class AbstractTraceRmiLaunchOffer implements TraceRmiLaunchOffer
parent.getInputStream(), parent.getOutputStream());
List<String> withoutPath = ShellUtils.removePath(commandLine);
terminal.setSubTitle(ShellUtils.generateLine(withoutPath));
terminal.setSubTitle(ShellUtils.generateLine(withoutPath, Shell.DISPLAY));
TerminalListener resizeListener = new TerminalListener() {
@Override
public void resized(short cols, short rows) {
@@ -490,8 +491,19 @@ public abstract class AbstractTraceRmiLaunchOffer implements TraceRmiLaunchOffer
terminal.addTerminalListener(resizeListener);
env.put("TERM", "xterm-256color");
PtySession session =
pty.getChild().session(commandLine.toArray(String[]::new), env, workingDirectory);
PtySession session;
try {
session =
pty.getChild().session(commandLine.toArray(String[]::new), env, workingDirectory);
}
catch (Throwable t) {
terminal.terminated(-1);
pty.close();
for (TerminalSession ss : subordinates) {
ss.terminate();
}
throw t;
}
Thread waiter = new Thread(() -> {
try {
@@ -718,6 +730,7 @@ public abstract class AbstractTraceRmiLaunchOffer implements TraceRmiLaunchOffer
* terminates early
*/
monitor.setMessage("Waiting for connection");
monitor.addCancelledListener(acceptor::cancel);
connection = acceptOrSessionEnds(acceptor, backEnd);
connection.registerTerminals(sessions.values());
monitor.increment();