net: Remove an untranslatable string from the resources.

Francois Gouget fgouget at codeweavers.com
Mon Aug 29 13:30:46 CDT 2011


Add some output_xxx() functions so we can print strings that don't come from resources.
Also protect against buffer overflows in output_vprintf() and constify the output_xxx() functions.
---
 programs/net/net.c       |   33 +++++++++++++++++++++++++++------
 programs/net/net.rc      |    1 -
 programs/net/resources.h |    1 -
 3 files changed, 27 insertions(+), 8 deletions(-)

diff --git a/programs/net/net.c b/programs/net/net.c
index ed26b43..de83ccd 100644
--- a/programs/net/net.c
+++ b/programs/net/net.c
@@ -28,7 +28,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(net);
 #define NET_START 0001
 #define NET_STOP  0002
 
-static int output_write(WCHAR* str, int len)
+static int output_write(const WCHAR* str, int len)
 {
     DWORD ret, count;
     ret = WriteConsoleW(GetStdHandle(STD_OUTPUT_HANDLE), str, len, &count, NULL);
@@ -55,17 +55,37 @@ static int output_write(WCHAR* str, int len)
     return count;
 }
 
-static int output_string(int msg, ...)
+static int output_vprintf(const WCHAR* fmt, va_list va_args)
 {
-    WCHAR fmt[8192];
     WCHAR str[8192];
     int len;
+
+    len = vsnprintfW(str, sizeof(str)/sizeof(*str), fmt, va_args);
+    if (len < 0)
+        WINE_FIXME("String too long.\n");
+    else
+        output_write(str, len);
+    return 0;
+}
+
+static int output_printf(const WCHAR* fmt, ...)
+{
+    va_list arguments;
+
+    va_start(arguments, fmt);
+    output_vprintf(fmt, arguments);
+    va_end(arguments);
+    return 0;
+}
+
+static int output_string(int msg, ...)
+{
+    WCHAR fmt[8192];
     va_list arguments;
 
     LoadStringW(GetModuleHandleW(NULL), msg, fmt, sizeof(fmt)/sizeof(fmt[0]));
     va_start(arguments, msg);
-    len = vsprintfW(str, fmt, arguments);
-    output_write(str, len);
+    output_vprintf(fmt, arguments);
     va_end(arguments);
     return 0;
 }
@@ -136,6 +156,7 @@ static BOOL net_use(int argc, const WCHAR* argv[])
 
 static BOOL net_enum_services(void)
 {
+    static const WCHAR runningW[]={' ',' ',' ',' ','%','s','\n',0};
     SC_HANDLE SCManager;
     LPENUM_SERVICE_STATUS_PROCESSW services;
     DWORD size, i, count, resume;
@@ -164,7 +185,7 @@ static BOOL net_enum_services(void)
     output_string(STRING_RUNNING_HEADER);
     for(i = 0; i < count; i++)
     {
-        output_string(STRING_RUNNING, services[i].lpDisplayName);
+        output_printf(runningW, services[i].lpDisplayName);
         WINE_TRACE("service=%s state=%d controls=%x\n",
                    wine_dbgstr_w(services[i].lpServiceName),
                    services[i].ServiceStatusProcess.dwCurrentState,
diff --git a/programs/net/net.rc b/programs/net/net.rc
index 10bb678..baadbfb 100644
--- a/programs/net/net.rc
+++ b/programs/net/net.rc
@@ -38,7 +38,6 @@ STRINGTABLE
     STRING_STOP_SVC_SUCCESS, "The %s service was stopped successfully.\n"
     STRING_STOP_SVC_FAIL, "The %s service failed to stop.\n"
     STRING_RUNNING_HEADER, "The following services are running:\n"
-    STRING_RUNNING, "    %s\n"
     STRING_NO_ENTRIES, "There are no entries in the list.\n"
     STRING_USE_HEADER, "\nStatus  Local   Remote\n---------------------------------------------------------------\n"
     STRING_USE_ENTRY,  "%s      %s      %s      Open resources: %lu\n"
diff --git a/programs/net/resources.h b/programs/net/resources.h
index 35aebe3..ad72142 100644
--- a/programs/net/resources.h
+++ b/programs/net/resources.h
@@ -41,4 +41,3 @@
 #define STRING_CONN		  122
 #define STRING_RECONN		  123
 #define STRING_RUNNING_HEADER	  124
-#define STRING_RUNNING		  125
-- 
1.7.5.4



More information about the wine-patches mailing list