Skip to content

Commit 776acaa

Browse files
committed
terminal: strict state check when injecting lf
avoid accidentally returning Lf as remaining string when the given line is already terminated
1 parent 356fcc6 commit 776acaa

File tree

1 file changed

+18
-6
lines changed

1 file changed

+18
-6
lines changed

code/espurna/terminal_parsing.cpp

+18-6
Original file line numberDiff line numberDiff line change
@@ -494,14 +494,26 @@ Result Parser::operator()(StringView line, bool inject_newline) {
494494
}
495495

496496
out:
497-
if (inject_newline && it == line.end()) {
498-
inject_newline = false;
499-
it = Lf.begin();
500-
end = Lf.end();
501-
goto loop;
497+
switch (state) {
498+
case State::CarriageReturn:
499+
case State::CarriageReturnAfterText:
500+
case State::Text:
501+
case State::Initial:
502+
case State::SkipUntilNewLine:
503+
case State::AfterQuote:
504+
if (inject_newline) {
505+
inject_newline = false;
506+
it = Lf.begin();
507+
end = Lf.end();
508+
goto loop;
509+
}
510+
break;
511+
512+
default:
513+
break;
502514
}
503515

504-
if (it != end) {
516+
if ((it >= line.begin()) && (it <= line.end())) {
505517
result = StringView(it, end);
506518
}
507519

0 commit comments

Comments
 (0)