This look ok to everyone?

ChangeLog entry:
*dlls/ntdll/debugtools.c:
Chris Morgan <[EMAIL PROTECTED]>
Prevent buffer overflows in wine_dbg_vprintf.

Index: dlls/ntdll/debugtools.c
===================================================================
RCS file: /home/wine/wine/dlls/ntdll/debugtools.c,v
retrieving revision 1.4
diff -u -r1.4 debugtools.c
--- dlls/ntdll/debugtools.c	2000/12/20 18:43:42	1.4
+++ dlls/ntdll/debugtools.c	2001/01/27 19:18:20
@@ -198,9 +198,19 @@
 int wine_dbg_vprintf( const char *format, va_list args )
 {
     struct debug_info *info = get_info();
+    char *p;
 
-    int ret = vsprintf( info->out_pos, format, args );
-    char *p = strrchr( info->out_pos, '\n' );
+    int ret = vsnprintf( info->out_pos, sizeof(info->output) -
+	(info->out_pos - info->output), format, args);
+
+    while((ret == -1) || (ret > (sizeof(info->output) - (info->out_pos -
+	info->output) - 1))) {
+      write(2, info->output, info->out_pos - info->output);
+      info->out_pos = info->output;
+      ret = vsnprintf(info->out_pos, sizeof(info->output), format, args);
+    }
+
+    p = strrchr( info->out_pos, '\n' );
     if (!p) info->out_pos += ret;
     else
     {

Reply via email to