From cc4dae5c0f418d304a44bb10c87c624b478b6441 Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Sun, 7 Oct 2018 20:26:33 +0000 Subject: Streamline: Tcl_WinTCharToUtf/Tcl_WinUtfToTChar(): Always initialize DString, and let it return NULL when imput is NULL. That's what seem to assume the callers. --- generic/tclStubInit.c | 14 ++++++++++---- win/tclWin32Dll.c | 14 ++++++++++---- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/generic/tclStubInit.c b/generic/tclStubInit.c index 50bb4a2..cbf4084 100644 --- a/generic/tclStubInit.c +++ b/generic/tclStubInit.c @@ -189,6 +189,9 @@ Tcl_WinUtfToTChar( Tcl_DString *dsPtr) { Tcl_DStringInit(dsPtr); + if (!string) { + return NULL; + } return (char *)Tcl_UtfToUniCharDString(string, len, dsPtr); } @@ -198,12 +201,15 @@ Tcl_WinTCharToUtf( int len, Tcl_DString *dsPtr) { - if (len > 0) { - len /= 2; - } else if (len == -1) { + Tcl_DStringInit(dsPtr); + if (!string) { + return NULL; + } + if (len < 0) { len = wcslen((wchar_t *)string); + } else { + len /= 2; } - Tcl_DStringInit(dsPtr); return Tcl_UniCharToUtfDString((Tcl_UniChar *)string, len, dsPtr); } diff --git a/win/tclWin32Dll.c b/win/tclWin32Dll.c index ca1c856..6fc2401 100644 --- a/win/tclWin32Dll.c +++ b/win/tclWin32Dll.c @@ -548,6 +548,9 @@ Tcl_WinUtfToTChar( * converted string is stored. */ { Tcl_DStringInit(dsPtr); + if (!string) { + return NULL; + } return Tcl_UtfToUniCharDString(string, len, dsPtr); } @@ -559,12 +562,15 @@ Tcl_WinTCharToUtf( Tcl_DString *dsPtr) /* Uninitialized or free DString in which the * converted string is stored. */ { - if (len > 0) { - len /= 2; - } else if (len < 0) { + Tcl_DStringInit(dsPtr); + if (!string) { + return NULL; + } + if (len < 0) { len = wcslen(string); + } else { + len /= 2; } - Tcl_DStringInit(dsPtr); return Tcl_UniCharToUtfDString(string, len, dsPtr); } -- cgit v0.12