]> granicus.if.org Git - curl/commitdiff
curl_multibyte: fix a malloc overcalculation
authorJay Satiro <raysatiro@yahoo.com>
Thu, 1 Nov 2018 06:53:22 +0000 (02:53 -0400)
committerJay Satiro <raysatiro@yahoo.com>
Tue, 6 Nov 2018 08:11:05 +0000 (03:11 -0500)
Prior to this change twice as many bytes as necessary were malloc'd when
converting wchar to UTF8. To allay confusion in the future I also
changed the variable name for the amount of bytes from len to bytes.

Closes https://github.com/curl/curl/pull/3209

lib/curl_multibyte.c

index e78bb5002e5e57e3914cee07b597067685a2ad8c..e48334faff4ae8feb77b8fcaf9be3f6aec403ae0 100644 (file)
@@ -64,13 +64,13 @@ char *Curl_convert_wchar_to_UTF8(const wchar_t *str_w)
   char *str_utf8 = NULL;
 
   if(str_w) {
-    int str_utf8_len = WideCharToMultiByte(CP_UTF8, 0, str_w, -1, NULL,
-                                           0, NULL, NULL);
-    if(str_utf8_len > 0) {
-      str_utf8 = malloc(str_utf8_len * sizeof(wchar_t));
+    int bytes = WideCharToMultiByte(CP_UTF8, 0, str_w, -1,
+                                    NULL, 0, NULL, NULL);
+    if(bytes > 0) {
+      str_utf8 = malloc(bytes);
       if(str_utf8) {
-        if(WideCharToMultiByte(CP_UTF8, 0, str_w, -1, str_utf8, str_utf8_len,
-                               NULL, FALSE) == 0) {
+        if(WideCharToMultiByte(CP_UTF8, 0, str_w, -1, str_utf8, bytes,
+                               NULL, NULL) == 0) {
           free(str_utf8);
           return NULL;
         }