From 3536b7f3a6bf572509042ac882742a12d76b1a91 Mon Sep 17 00:00:00 2001 From: Seungha Yang Date: Mon, 9 Oct 2023 19:09:15 +0900 Subject: [PATCH] decklink: Fix broken COM string conversion WideCharToMultiByte return is the string length without null terminate character if passed "cchWideChar" does not include the null terminate character size. Instead of passing the exact string length, pass -1 so that the API can understand the input string is null terminated already and returned value from the API includes the character. Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3023 Part-of: --- subprojects/gst-plugins-bad/sys/decklink/gstdecklink.h | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/subprojects/gst-plugins-bad/sys/decklink/gstdecklink.h b/subprojects/gst-plugins-bad/sys/decklink/gstdecklink.h index 7c811e0665..5c663518cd 100644 --- a/subprojects/gst-plugins-bad/sys/decklink/gstdecklink.h +++ b/subprojects/gst-plugins-bad/sys/decklink/gstdecklink.h @@ -37,19 +37,17 @@ #define COMSTR_T BSTR #define CONVERT_COM_STRING(s) G_STMT_START { \ BSTR _s = (BSTR)s; \ - int _s_length = ::SysStringLen(_s); \ - int _length = ::WideCharToMultiByte(CP_ACP, 0, (wchar_t*)_s, _s_length, NULL, 0, NULL, NULL); \ + int _length = ::WideCharToMultiByte(CP_ACP, 0, (wchar_t*)_s, -1, NULL, 0, NULL, NULL); \ s = (char *) malloc(_length); \ - ::WideCharToMultiByte(CP_ACP, 0, (wchar_t*)_s, _s_length, s, _length, NULL, NULL); \ + ::WideCharToMultiByte(CP_ACP, 0, (wchar_t*)_s, -1, s, _length, NULL, NULL); \ ::SysFreeString(_s); \ } G_STMT_END #define FREE_COM_STRING(s) free(s); #define CONVERT_TO_COM_STRING(s) G_STMT_START { \ char * _s = (char *)s; \ - int _s_length = strlen((char*)_s); \ - int _length = ::MultiByteToWideChar(CP_ACP, 0, (char*)_s, _s_length, NULL, 0); \ + int _length = ::MultiByteToWideChar(CP_ACP, 0, (char*)_s, -1, NULL, 0); \ s = ::SysAllocStringLen(NULL, _length); \ - ::MultiByteToWideChar(CP_ACP, 0, (char*)_s, _s_length, s, _length); \ + ::MultiByteToWideChar(CP_ACP, 0, (char*)_s, -1, s, _length); \ g_free(_s); \ } G_STMT_END #elif defined(__APPLE__)