@@ -439,7 +439,11 @@ export class EscapeSequenceParser extends Disposable implements IEscapeSequenceP
439439 }
440440
441441 // normal transition & action lookup
442- transition = ( code < 0xa0 ) ? ( table [ currentState << 8 | code ] ) : DEFAULT_TRANSITION ;
442+ transition = ( code < 0xa0
443+ ? ( table [ currentState << 8 | code ] )
444+ : currentState === ParserState . OSC_STRING
445+ ? ( ParserAction . OSC_PUT << 4 ) | ParserState . OSC_STRING
446+ : DEFAULT_TRANSITION ) ;
443447 switch ( transition >> 4 ) {
444448 case ParserAction . PRINT :
445449 print = ( ~ print ) ? print : i ;
@@ -471,10 +475,6 @@ export class EscapeSequenceParser extends Disposable implements IEscapeSequenceP
471475 case ParserState . GROUND :
472476 print = ( ~ print ) ? print : i ;
473477 break ;
474- case ParserState . OSC_STRING :
475- osc += String . fromCharCode ( code ) ;
476- transition |= ParserState . OSC_STRING ;
477- break ;
478478 case ParserState . CSI_IGNORE :
479479 transition |= ParserState . CSI_IGNORE ;
480480 break ;
@@ -570,7 +570,16 @@ export class EscapeSequenceParser extends Disposable implements IEscapeSequenceP
570570 osc = '' ;
571571 break ;
572572 case ParserAction . OSC_PUT :
573- osc += data . charAt ( i ) ;
573+ for ( let j = i + 1 ; ; j ++ ) {
574+ if ( j >= l
575+ || ( ( code = data . charCodeAt ( j ) ) <= 0x9f
576+ && ( table [ ParserState . OSC_STRING << 8 | code ] >> 4
577+ !== ParserAction . OSC_PUT ) ) ) {
578+ osc += data . substring ( i , j ) ;
579+ i = j - 1 ;
580+ break ;
581+ }
582+ }
574583 break ;
575584 case ParserAction . OSC_END :
576585 if ( osc && code !== 0x18 && code !== 0x1a ) {
0 commit comments