fix bypass event payload truncation at newlines
The shell command in bypass requests contains embedded newlines. Escape them as \n in the event payload, unescape in GUI.
This commit is contained in:
parent
ceec28c2b9
commit
59d07d3b4a
|
|
@ -260,8 +260,9 @@ func (s *Session) SetBypassPending(req *protocol.BypassRequest, dialFn func() *t
|
|||
s.bypassSignalCh = make(chan struct{})
|
||||
s.bypassMu.Unlock()
|
||||
|
||||
// Publish event for GUI listeners
|
||||
PublishEvent("session."+s.ID+".bypass.request", req.ID+"\t"+req.Cmd+"\t"+req.Cwd)
|
||||
// Publish event for GUI listeners (escape newlines in cmd for single-line event format)
|
||||
cmd := strings.ReplaceAll(req.Cmd, "\n", "\\n")
|
||||
PublishEvent("session."+s.ID+".bypass.request", req.ID+"\t"+cmd+"\t"+req.Cwd)
|
||||
}
|
||||
|
||||
// BypassPending returns the current pending bypass request, or nil if none.
|
||||
|
|
|
|||
|
|
@ -239,7 +239,7 @@ void Ollie9pClient::handleEvent(const QString &eventLine)
|
|||
rest == QLatin1String("rename")) {
|
||||
refreshSessions();
|
||||
} else if (rest.startsWith(QLatin1String("bypass."))) {
|
||||
// Bypass event: payload is "id\tcmd\tcwd"
|
||||
// Bypass event: payload is "id\tcmd\tcwd" (cmd has \n escaped as \\n)
|
||||
if (payload.isEmpty()) return;
|
||||
const int tab1 = payload.indexOf(QLatin1Char('\t'));
|
||||
if (tab1 < 0) return;
|
||||
|
|
@ -247,7 +247,8 @@ void Ollie9pClient::handleEvent(const QString &eventLine)
|
|||
if (tab2 < 0) return;
|
||||
|
||||
const QString id = payload.left(tab1).toString();
|
||||
const QString cmd = payload.mid(tab1 + 1, tab2 - tab1 - 1).toString();
|
||||
QString cmd = payload.mid(tab1 + 1, tab2 - tab1 - 1).toString();
|
||||
cmd.replace(QLatin1String("\\n"), QLatin1String("\n")); // unescape newlines
|
||||
const QString cwd = payload.mid(tab2 + 1).toString();
|
||||
emit bypassRequested(sessionId.toString(), id, cmd, cwd);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue