From 2b0816148b8639915de0ff79ba8f90b3377b0b9f Mon Sep 17 00:00:00 2001 From: npt-1707 Date: Tue, 15 Apr 2025 22:28:27 +0800 Subject: [PATCH] winansi: check result and Buffer before using Name --- src/main/native/jansi_isatty.c | 35 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/src/main/native/jansi_isatty.c b/src/main/native/jansi_isatty.c index 807cbe65..a42db073 100644 --- a/src/main/native/jansi_isatty.c +++ b/src/main/native/jansi_isatty.c @@ -81,28 +81,27 @@ JNIEXPORT jint JNICALL CLibrary_NATIVE(isatty) else if (NtQueryObject(h, ObjectNameInformation, buffer, sizeof(buffer) - 2, &result) != 0) { rc = 0; } + else if (result < sizeof(*nameinfo) || !nameinfo->Name.Buffer || !nameinfo->Name.Length) { + rc = 0; + } else { name = nameinfo->Name.Buffer; - if (name == NULL) { - rc = 0; + name[nameinfo->Name.Length / 2] = 0; + + //fprintf( stderr, "Standard stream %d: pipe name: %S\n", arg0, name); + + /* + * Check if this could be a MSYS2 pty pipe ('msys-XXXX-ptyN-XX') + * or a cygwin pty pipe ('cygwin-XXXX-ptyN-XX') + */ + if ((wcsstr(name, L"msys-") || wcsstr(name, L"cygwin-")) && wcsstr(name, L"-pty")) { + rc = 1; + } else { + // This is definitely not a tty + rc = 0; } - else { - name[nameinfo->Name.Length / 2] = 0; - - //fprintf( stderr, "Standard stream %d: pipe name: %S\n", arg0, name); - - /* - * Check if this could be a MSYS2 pty pipe ('msys-XXXX-ptyN-XX') - * or a cygwin pty pipe ('cygwin-XXXX-ptyN-XX') - */ - if ((wcsstr(name, L"msys-") || wcsstr(name, L"cygwin-")) && wcsstr(name, L"-pty")) { - rc = 1; - } else { - // This is definitely not a tty - rc = 0; - } - } + } } }