Re: [PATCH] wined3d: Split comments in separate line to avoid buffer overflow when traces are enabled (try 2)
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)
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.