Module: wine Branch: master Commit: a342c75a37e4f83c706c9e9f9a9a5106f99e42e7 URL: https://gitlab.winehq.org/wine/wine/-/commit/a342c75a37e4f83c706c9e9f9a9a510...
Author: Henri Verbeet hverbeet@codeweavers.com Date: Tue Apr 11 17:44:39 2023 +0200
d3dcompiler: Check for minimum bytecode size in d3dcompiler_get_blob_part().
---
dlls/d3dcompiler_43/blob.c | 2 +- dlls/d3dcompiler_43/d3dcompiler_private.h | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/dlls/d3dcompiler_43/blob.c b/dlls/d3dcompiler_43/blob.c index c8c198fb520..7a76fa0adce 100644 --- a/dlls/d3dcompiler_43/blob.c +++ b/dlls/d3dcompiler_43/blob.c @@ -220,7 +220,7 @@ static HRESULT d3dcompiler_get_blob_part(const void *data, SIZE_T data_size, D3D HRESULT hr; unsigned int i, count;
- if (!data || !data_size || flags || !blob) + if (!data || data_size < DXBC_HEADER_SIZE || flags || !blob) { WARN("Invalid arguments: data %p, data_size %Iu, flags %#x, blob %p.\n", data, data_size, flags, blob); return D3DERR_INVALIDCALL; diff --git a/dlls/d3dcompiler_43/d3dcompiler_private.h b/dlls/d3dcompiler_43/d3dcompiler_private.h index 6dea5a08a85..5f9f6c87647 100644 --- a/dlls/d3dcompiler_43/d3dcompiler_private.h +++ b/dlls/d3dcompiler_43/d3dcompiler_private.h @@ -532,6 +532,8 @@ struct bwriter_shader *SlAssembleShader(const char *text, char **messages) DECLS HRESULT shader_write_bytecode(const struct bwriter_shader *shader, uint32_t **result, uint32_t *size) DECLSPEC_HIDDEN; void SlDeleteShader(struct bwriter_shader *shader) DECLSPEC_HIDDEN;
+#define DXBC_HEADER_SIZE (8 * sizeof(uint32_t)) + #define MAKE_TAG(ch0, ch1, ch2, ch3) \ ((DWORD)(ch0) | ((DWORD)(ch1) << 8) | \ ((DWORD)(ch2) << 16) | ((DWORD)(ch3) << 24 ))