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 titan.co...@wanadoo.fr 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.




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 titan.co...@wanadoo.fr 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.