decklink: Calculate string size before malloc
authorMaksym Khomenko <maksym.khomenko@skelia.partners>
Wed, 31 May 2023 20:44:42 +0000 (23:44 +0300)
committerGStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Wed, 7 Jun 2023 05:46:12 +0000 (05:46 +0000)
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4786>

subprojects/gst-plugins-bad/sys/decklink/gstdecklink.h

index dd50e78..1c8881b 100644 (file)
 #include "osx/DeckLinkAPI.h"
 
 #define COMSTR_T CFStringRef
-#define CONVERT_COM_STRING(s) G_STMT_START { CFStringRef _s = (CFStringRef)s; s = (char*) malloc(100); CFStringGetCString(_s, s, 100, kCFStringEncodingUTF8); CFRelease(_s); } G_STMT_END
+#define CONVERT_COM_STRING(s) G_STMT_START { \
+        CFStringRef _s = (CFStringRef)s; \
+        CFIndex _length; \
+        CFStringGetBytes(_s, CFRangeMake(0, CFStringGetLength(_s)), kCFStringEncodingUTF8, 0, FALSE, NULL, 0, &_length); \
+        _length += 1; \
+        s = (char *) malloc(_length); \
+        CFStringGetCString(_s, s, _length, kCFStringEncodingUTF8); \
+        CFRelease(_s); \
+    } G_STMT_END
 #define FREE_COM_STRING(s) free(s);
 #define CONVERT_TO_COM_STRING(s) G_STMT_START { char * _s = (char *)s; s = CFStringCreateWithCString(kCFAllocatorDefault, _s, kCFStringEncodingUTF8); g_free(_s); } G_STMT_END
 #define WINAPI