[PATCH vkd3d 5/5] vkd3d-shader: Add compiler messages for invalid DXBC chunk offsets and sizes.

Henri Verbeet hverbeet at codeweavers.com
Thu Jul 23 04:11:29 CDT 2020


Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
---
 libs/vkd3d-shader/dxbc.c                 | 5 +++++
 libs/vkd3d-shader/vkd3d_shader_private.h | 2 ++
 2 files changed, 7 insertions(+)

diff --git a/libs/vkd3d-shader/dxbc.c b/libs/vkd3d-shader/dxbc.c
index 8e5c49c..f738abe 100644
--- a/libs/vkd3d-shader/dxbc.c
+++ b/libs/vkd3d-shader/dxbc.c
@@ -2015,6 +2015,8 @@ static int parse_dxbc(const char *data, size_t data_size, struct vkd3d_shader_me
         if (chunk_offset >= data_size || !require_space(chunk_offset, 2, sizeof(DWORD), data_size))
         {
             WARN("Invalid chunk offset %#x (data size %zu).\n", chunk_offset, data_size);
+            vkd3d_shader_error(message_context, VKD3D_SHADER_ERROR_DXBC_INVALID_CHUNK_OFFSET,
+                    "DXBC chunk %u has invalid offset %#x (data size %#zx).", i, chunk_offset, data_size);
             return VKD3D_ERROR_INVALID_ARGUMENT;
         }
 
@@ -2027,6 +2029,9 @@ static int parse_dxbc(const char *data, size_t data_size, struct vkd3d_shader_me
         {
             WARN("Invalid chunk size %#x (data size %zu, chunk offset %#x).\n",
                     chunk_size, data_size, chunk_offset);
+            vkd3d_shader_error(message_context, VKD3D_SHADER_ERROR_DXBC_INVALID_CHUNK_SIZE,
+                    "DXBC chunk %u has invalid size %#x (data size %#zx, chunk offset %#x).",
+                    i, chunk_offset, data_size, chunk_offset);
             return VKD3D_ERROR_INVALID_ARGUMENT;
         }
 
diff --git a/libs/vkd3d-shader/vkd3d_shader_private.h b/libs/vkd3d-shader/vkd3d_shader_private.h
index f9bd6ab..c6796bb 100644
--- a/libs/vkd3d-shader/vkd3d_shader_private.h
+++ b/libs/vkd3d-shader/vkd3d_shader_private.h
@@ -65,6 +65,8 @@ enum vkd3d_shader_error
     VKD3D_SHADER_ERROR_DXBC_INVALID_MAGIC        = 2,
     VKD3D_SHADER_ERROR_DXBC_INVALID_CHECKSUM     = 3,
     VKD3D_SHADER_ERROR_DXBC_INVALID_VERSION      = 4,
+    VKD3D_SHADER_ERROR_DXBC_INVALID_CHUNK_OFFSET = 5,
+    VKD3D_SHADER_ERROR_DXBC_INVALID_CHUNK_SIZE   = 6,
 };
 
 enum VKD3D_SHADER_INSTRUCTION_HANDLER
-- 
2.11.0




More information about the wine-devel mailing list