vkd3d-shader: Avoid reading past the end of the buffer in vkd3d_shader_trace() (Valgrind).

Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Zebediah Figura
2020-10-15 10:44:44 -05:00
committed by Alexandre Julliard
parent 5fb9bcdd14
commit 86cf5145dc

View File

@@ -1618,16 +1618,17 @@ enum vkd3d_result vkd3d_dxbc_binary_to_text(void *data, struct vkd3d_shader_code
void vkd3d_shader_trace(void *data) void vkd3d_shader_trace(void *data)
{ {
const char *p, *q; const char *p, *q, *end;
struct vkd3d_shader_code code; struct vkd3d_shader_code code;
if (vkd3d_dxbc_binary_to_text(data, &code) != VKD3D_OK) if (vkd3d_dxbc_binary_to_text(data, &code) != VKD3D_OK)
return; return;
for (p = code.code; *p; p = q) end = (const char *)code.code + code.size;
for (p = code.code; p < end; p = q)
{ {
if (!(q = strstr(p, "\n"))) if (!(q = memchr(p, '\n', end - p)))
q = p + strlen(p); q = end;
else else
++q; ++q;
TRACE(" %.*s", (int)(q - p), p); TRACE(" %.*s", (int)(q - p), p);