Re: [PATCH] wined3d: Split comments in separate line to avoid buffer overflow when traces are enabled (try 2)

2010-02-18 Thread Christian Costa

Henri Verbeet a écrit :

On 17 February 2010 17:54, Christian Costa  wrote:
  

+if (TRACE_ON(d3d_shader))
+{
+int size = strlen(comment) + 1;
+char* str = (char*)HeapAlloc(GetProcessHeap(), 0, size);
+int i = 0;
+char* line = str;
+memcpy(str, comment, size);
+DPRINTF("//");
+while (i < size)
+{
+/* Find end of line */
+while ((str[i] != 0) && (str[i] != 0x0a))
+i++;
+/* Terminate line and remove preceding 0x0d if any */
+if (i && (str[i-1] == 0x0d))
+str[i-1] = 0;
+else
+str[i] = 0;
+/* Display line and prepare next line */
+DPRINTF("%s\n", debugstr_an(line, strlen(line)));
+i++;
+line = str + i;
+}
+}


This code has several obvious issues.




  
Right. HeapFree call and HeapAlloc failure handling are missing. I could 
also do something with the leading // in

the case of an empty string (if this could ever happen).
If there are other obvious issues I've forgotten. Please be more accurate.







Re: [PATCH] wined3d: Split comments in separate line to avoid buffer overflow when traces are enabled (try 2)

2010-02-18 Thread Henri Verbeet
On 17 February 2010 17:54, Christian Costa  wrote:
> +if (TRACE_ON(d3d_shader))
> +{
> +int size = strlen(comment) + 1;
> +char* str = (char*)HeapAlloc(GetProcessHeap(), 0, size);
> +int i = 0;
> +char* line = str;
> +memcpy(str, comment, size);
> +DPRINTF("//");
> +while (i < size)
> +{
> +/* Find end of line */
> +while ((str[i] != 0) && (str[i] != 0x0a))
> +i++;
> +/* Terminate line and remove preceding 0x0d if any */
> +if (i && (str[i-1] == 0x0d))
> +str[i-1] = 0;
> +else
> +str[i] = 0;
> +/* Display line and prepare next line */
> +DPRINTF("%s\n", debugstr_an(line, strlen(line)));
> +i++;
> +line = str + i;
> +}
> +}
This code has several obvious issues.