… | |
… | |
2354 | wchar_t ecb_hot |
2354 | wchar_t ecb_hot |
2355 | rxvt_term::next_char () NOTHROW |
2355 | rxvt_term::next_char () NOTHROW |
2356 | { |
2356 | { |
2357 | while (cmdbuf_ptr < cmdbuf_endp) |
2357 | while (cmdbuf_ptr < cmdbuf_endp) |
2358 | { |
2358 | { |
2359 | // assume 7-bit to be ascii ALWAYS |
2359 | // assume 7-bit to be ascii ALWAYS (always true in POSIX) |
2360 | if (ecb_likely ((unsigned char)*cmdbuf_ptr <= 0x7f && *cmdbuf_ptr != 0x1b)) |
2360 | if (ecb_likely ((unsigned char)*cmdbuf_ptr <= 0x7f)) |
2361 | return *cmdbuf_ptr++; |
2361 | return *cmdbuf_ptr++; |
2362 | |
2362 | |
2363 | wchar_t wc; |
2363 | wchar_t wc; |
2364 | size_t len = mbrtowc (&wc, cmdbuf_ptr, cmdbuf_endp - cmdbuf_ptr, mbstate); |
2364 | size_t len = mbrtowc (&wc, cmdbuf_ptr, cmdbuf_endp - cmdbuf_ptr, mbstate); |
2365 | |
2365 | |
… | |
… | |
2690 | wchar_t nlcr[] = { C0_LF, C0_CR }; |
2690 | wchar_t nlcr[] = { C0_LF, C0_CR }; |
2691 | scr_add_lines (nlcr, ecb_array_length (nlcr), 1); |
2691 | scr_add_lines (nlcr, ecb_array_length (nlcr), 1); |
2692 | } |
2692 | } |
2693 | break; |
2693 | break; |
2694 | |
2694 | |
|
|
2695 | #if 0 // disabled because embedded newlines can make exploits easier |
2695 | /* kidnapped escape sequence: Should be 8.3.48 */ |
2696 | /* kidnapped escape sequence: Should be 8.3.48 */ |
2696 | case C1_ESA: /* ESC G */ |
2697 | case C1_ESA: /* ESC G */ |
2697 | // used by original rxvt for rob nations own graphics mode |
2698 | // used by original rxvt for rob nations own graphics mode |
2698 | if (cmd_getc () == 'Q') |
2699 | if (cmd_getc () == 'Q' && option (Opt_insecure)) |
2699 | tt_printf ("\033G0\012"); /* query graphics - no graphics */ |
2700 | tt_printf ("\033G0\012"); /* query graphics - no graphics */ |
2700 | break; |
2701 | break; |
|
|
2702 | #endif |
2701 | |
2703 | |
2702 | /* 8.3.63: CHARACTER TABULATION SET */ |
2704 | /* 8.3.63: CHARACTER TABULATION SET */ |
2703 | case C1_HTS: /* ESC H */ |
2705 | case C1_HTS: /* ESC H */ |
2704 | scr_set_tab (1); |
2706 | scr_set_tab (1); |
2705 | break; |
2707 | break; |
… | |
… | |
2912 | case CSI_VPR: /* 8.3.161: (1) LINE POSITION FORWARD */ |
2914 | case CSI_VPR: /* 8.3.161: (1) LINE POSITION FORWARD */ |
2913 | scr_gotorc (arg[0], 0, RELATIVE); |
2915 | scr_gotorc (arg[0], 0, RELATIVE); |
2914 | break; |
2916 | break; |
2915 | |
2917 | |
2916 | case CSI_CUB: /* 8.3.18: (1) CURSOR LEFT */ |
2918 | case CSI_CUB: /* 8.3.18: (1) CURSOR LEFT */ |
2917 | case CSI_HPB: /* 8.3.59: (1) CHARACTER POSITION BACKWARD */ |
2919 | case CSI_HPB: /* 8.3.59: (1) CHARACTER POSITION BACKWARD */ |
2918 | #ifdef ISO6429 |
2920 | #ifdef ISO6429 |
2919 | arg[0] = -arg[0]; |
2921 | arg[0] = -arg[0]; |
2920 | #else /* emulate common DEC VTs */ |
2922 | #else /* emulate common DEC VTs */ |
2921 | arg[0] = arg[0] ? -arg[0] : -1; |
2923 | arg[0] = arg[0] ? -arg[0] : -1; |
2922 | #endif |
2924 | #endif |