Skip to content

Commit 729347a

Browse files
committed
ignore STX characters
1 parent e4ef7d9 commit 729347a

File tree

3 files changed

+7
-15
lines changed

3 files changed

+7
-15
lines changed

src/attr.c

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -164,16 +164,8 @@ ic_private attr_t attr_from_sgr( const char* s, ssize_t len) {
164164
}
165165

166166
ic_private attr_t attr_from_esc_sgr( const char* s, ssize_t len) {
167-
if (len <= 2 || s[0] != '\x1B' || s[1] != '[') {
168-
return attr_none();
169-
}
170-
else if (s[len-1] == 'm') {
171-
return attr_from_sgr(s+2, len-2);
172-
}
173-
else if (s[len-2] == 'm' && s[len-1] == '\x02') { // allow STX ending as well
174-
return attr_from_sgr(s+2, len-3);
175-
}
176-
else return attr_none();
167+
if (len <= 2 || s[0] != '\x1B' || s[1] != '[' || s[len-1] != 'm') return attr_none();
168+
return attr_from_sgr(s+2, len-2);
177169
}
178170

179171

src/stringbuf.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,6 @@ ic_private bool skip_esc( const char* s, ssize_t len, ssize_t* esclen ) {
171171
(!finalCSI && c == '\x07') || // bell
172172
(c == '\x02')) // STX terminates as well
173173
{
174-
if (finalCSI && len > n && s[n] == '\x02') { n++; } // include extra STX terminator that some programs insert after CSI
175174
if (esclen != NULL) *esclen = n;
176175
return true;
177176
}

src/term.c

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -478,7 +478,7 @@ static void term_append_buf( term_t* term, const char* s, ssize_t len ) {
478478
ssize_t ascii = 0;
479479
ssize_t next;
480480
while ((next = str_next_ofs(s, len, pos+ascii, NULL)) > 0 &&
481-
s[pos + ascii] != '\x1B' && (uint8_t)s[pos + ascii] <= 0x7F )
481+
(uint8_t)s[pos + ascii] > '\x1B' && (uint8_t)s[pos + ascii] <= 0x7F )
482482
{
483483
if (s[pos+ascii] == '\n') { newline = true; }
484484
ascii += next;
@@ -497,6 +497,9 @@ static void term_append_buf( term_t* term, const char* s, ssize_t len ) {
497497
else if (next > 1 && s[pos] == '\x1B') {
498498
term_append_esc(term, s+pos, next);
499499
}
500+
else if (s[pos] == '\x02') {
501+
// ignore STX
502+
}
500503
else {
501504
sbuf_append_n(term->buf, s+pos, next);
502505
}
@@ -726,9 +729,7 @@ static void term_write_esc( term_t* term, const char* s, ssize_t len ) {
726729
ssize_t col;
727730

728731
if (s[1] == '[') {
729-
char last = s[len-1];
730-
if (last == '\x02'){ last = s[len-2]; }
731-
switch (last) {
732+
switch (s[len-1]) {
732733
case 'A':
733734
term_move_cursor(term, -1, 0, esc_param(s+2, 1));
734735
break;

0 commit comments

Comments
 (0)