]> git.ipfire.org Git - thirdparty/openvpn.git/commitdiff
Use appropriate buffer size for WideCharToMultiByte output in interactive.c
authorSelva Nair <selva.nair@gmail.com>
Sun, 6 Mar 2016 05:22:02 +0000 (00:22 -0500)
committerGert Doering <gert@greenie.muc.de>
Sun, 6 Mar 2016 09:24:50 +0000 (10:24 +0100)
A widechar can potentially take more than 2 bytes in UTF-8.

Signed-off-by: Selva Nair <selva.nair@gmail.com>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <1457241722-23433-1-git-send-email-selva.nair@gmail.com>
URL: http://article.gmane.org/gmane.network.openvpn.devel/11318
Signed-off-by: Gert Doering <gert@greenie.muc.de>
src/openvpnserv/interactive.c

index 39397d12a6f60df3437b708ccc7d88940b7739f1..6a7227b7ea4b4ff84a0b61b900d131b9d66c15b3 100644 (file)
@@ -1063,17 +1063,16 @@ RunOpenvpn (LPVOID p)
   CloseHandleEx (&stdin_read);
   CloseHandleEx (&svc_pipe);
 
-  DWORD input_size = wcslen (sud.std_input) * 2;
-  if (input_size)
+  DWORD input_size = WideCharToMultiByte (CP_UTF8, 0, sud.std_input, -1, NULL, 0, NULL, NULL);
+  LPSTR input = NULL;
+  if (input_size && (input = malloc (input_size)))
     {
       DWORD written;
-      LPSTR input = malloc (input_size);
       WideCharToMultiByte (CP_UTF8, 0, sud.std_input, -1, input, input_size, NULL, NULL);
       WriteFile (stdin_write, input, strlen (input), &written, NULL);
       free (input);
     }
 
-
   while (TRUE)
     {
       DWORD bytes = PeekNamedPipeAsync (ovpn_pipe, 1, &exit_event);