]> git.feebdaed.xyz Git - 0xmirror/radare2.git/commitdiff
Dont depend on global cons instance for win_is_vtcompat ##crash
authorpancake <pancake@nopcode.org>
Sun, 21 Dec 2025 10:25:33 +0000 (11:25 +0100)
committerpancake <pancake@nopcode.org>
Sun, 21 Dec 2025 10:25:33 +0000 (11:25 +0100)
libr/cons/cons.c
libr/cons/line.c
libr/cons/winutils.c
libr/include/r_cons.h

index b77546a20e810fa56bd25a6a8097dfdf9df673f2..26b6712d42edf46bb3e371ab44c852ed65f8f212 100644 (file)
@@ -256,7 +256,7 @@ R_API RCons *r_cons_new2(void) {
        cons->timeout_warned = false;
 #if R2__WINDOWS__
        cons->old_cp = GetConsoleOutputCP ();
-       cons->vtmode = win_is_vtcompat ();
+       cons->vtmode = win_is_vtcompat (cons);
 #else
        cons->vtmode = 2;
 #endif
index 2b4603d148ffe2a4d414b8c706ef4d44a94ec4ec..0b2e002e6787548362d23497ec220881e19b11e7 100644 (file)
@@ -17,7 +17,7 @@ R_API RLine *r_line_new(RCons *cons) {
        line->kill_ring = r_list_newf (free);
        line->kill_ring_ptr = -1;
 #if R2__WINDOWS__
-       line->vtmode = win_is_vtcompat ();
+       line->vtmode = win_is_vtcompat (cons);
 #else
        line->vtmode = 2;
 #endif
index 8a125403faae044c2c23d82c7ca30996398e2631..dc033c018127e1846c376330c268a7baac550936 100644 (file)
@@ -453,7 +453,7 @@ R_IPI int r_cons_win_eprintf(RCons *cons, bool vmode, const char *fmt, ...) {
        return ret;
 }
 
-R_IPI int win_is_vtcompat(void) {
+R_IPI int win_is_vtcompat(RCons *cons) {
        DWORD major;
        DWORD minor;
        DWORD release = 0;
@@ -476,11 +476,15 @@ R_IPI int win_is_vtcompat(void) {
        char *term = r_sys_getenv ("TERM");
        if (term) {
                if (strstr (term, "xterm")) {
-                       I->term_xterm = true;
+                       if (cons) {
+                               cons->term_xterm = true;
+                       }
                        free (term);
                        return 2;
                }
-               I->term_xterm = false;
+               if (cons) {
+                       cons->term_xterm = false;
+               }
                free (term);
        }
        char *ansicon = r_sys_getenv ("ANSICON");
index 9076ad67b15805a9116428d73c4f4e9088c79088..4d67d8ebf637df5045211a9fd48e566994ed9782 100644 (file)
@@ -877,7 +877,7 @@ R_API void r_cons_sleep_end(RCons *cons, void *user);
 R_API void r_cons_clear_buffer(RCons *cons);
 #if R2__WINDOWS__
 // TODO all the w32 apis must be ipi
-R_IPI int win_is_vtcompat(void);
+R_IPI int win_is_vtcompat(RCons *cons);
 R_API void r_cons_clear(RCons *cons);
 R_API void r_cons_win_gotoxy(RCons *cons, int fd, int x, int y);
 R_API int r_cons_win_print(RCons *cons, const char *ptr, int len, bool vmode);