Sebastian Lackner : services: Preparation to allow arbitrary data in service RPC messages.

Alexandre Julliard julliard at winehq.org
Wed Aug 10 11:05:57 CDT 2016


Module: wine
Branch: master
Commit: 5f2b96b859d1087557949d855d6fd0e68b128a9d
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=5f2b96b859d1087557949d855d6fd0e68b128a9d

Author: Sebastian Lackner <sebastian at fds-team.de>
Date:   Wed Aug 10 08:30:29 2016 +0200

services: Preparation to allow arbitrary data in service RPC messages.

Signed-off-by: Sebastian Lackner <sebastian at fds-team.de>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 include/wine/svcctl.idl      | 2 +-
 programs/services/rpc.c      | 4 ++--
 programs/services/services.c | 6 +++---
 3 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/include/wine/svcctl.idl b/include/wine/svcctl.idl
index cadc5fd..98412d6 100644
--- a/include/wine/svcctl.idl
+++ b/include/wine/svcctl.idl
@@ -46,7 +46,7 @@ typedef struct service_start_info_t
     DWORD                     total_size; /* total request size */
     DWORD                     name_size;  /* size of name in data buffer */
     DWORD                     control;    /* control code */
-    WCHAR                     data[1];
+    BYTE                      data[1];
 } service_start_info;
 
 [
diff --git a/programs/services/rpc.c b/programs/services/rpc.c
index 3ebf378..54947c6 100644
--- a/programs/services/rpc.c
+++ b/programs/services/rpc.c
@@ -1046,14 +1046,14 @@ static BOOL process_send_control(struct process_entry *process, const WCHAR *nam
     BOOL r;
 
     /* calculate how much space we need to send the startup info */
-    len = strlenW(name) + 1;
+    len = (strlenW(name) + 1) * sizeof(WCHAR);
 
     ssi = HeapAlloc(GetProcessHeap(),0,FIELD_OFFSET(service_start_info, data[len]));
     ssi->cmd = WINESERV_SENDCONTROL;
     ssi->control = dwControl;
     ssi->total_size = FIELD_OFFSET(service_start_info, data[len]);
     ssi->name_size = strlenW(name) + 1;
-    strcpyW(ssi->data, name);
+    strcpyW((WCHAR *)ssi->data, name);
 
     r = process_send_command(process, ssi, ssi->total_size, result);
     HeapFree( GetProcessHeap(), 0, ssi );
diff --git a/programs/services/services.c b/programs/services/services.c
index ae5da2b..8e49906 100644
--- a/programs/services/services.c
+++ b/programs/services/services.c
@@ -861,17 +861,17 @@ static BOOL process_send_start_message(struct process_entry *process, const WCHA
     len = strlenW(name) + 1;
     for (i=0; i<argc; i++)
         len += strlenW(argv[i])+1;
-    len++;
+    len = (len + 1) * sizeof(WCHAR);
 
     ssi = HeapAlloc(GetProcessHeap(),0,FIELD_OFFSET(service_start_info, data[len]));
     ssi->cmd = WINESERV_STARTINFO;
     ssi->control = 0;
     ssi->total_size = FIELD_OFFSET(service_start_info, data[len]);
     ssi->name_size = strlenW(name) + 1;
-    strcpyW(ssi->data, name);
+    strcpyW((WCHAR *)ssi->data, name);
 
     /* copy service args into a single buffer*/
-    p = &ssi->data[ssi->name_size];
+    p = (WCHAR *)&ssi->data[ssi->name_size * sizeof(WCHAR)];
     for (i=0; i<argc; i++)
     {
         strcpyW(p, argv[i]);




More information about the wine-cvs mailing list