From 2cd985b3a23d3e14854a6bab2cf69f8380be75f5 Mon Sep 17 00:00:00 2001
From: Evan Hemsley <[EMAIL REDACTED]>
Date: Fri, 6 Jun 2025 14:06:51 -0700
Subject: [PATCH] Add NULL parameter checks (#147)
---
src/SDL_shadercross.c | 75 +++++++++++++++++++++++++++++++++++++++++++
1 file changed, 75 insertions(+)
diff --git a/src/SDL_shadercross.c b/src/SDL_shadercross.c
index eff5366..06549b6 100644
--- a/src/SDL_shadercross.c
+++ b/src/SDL_shadercross.c
@@ -564,6 +564,11 @@ void *SDL_ShaderCross_CompileDXILFromHLSL(
const SDL_ShaderCross_HLSL_Info *info,
size_t *size)
{
+ if (info == NULL) {
+ SDL_InvalidParamError("info");
+ return NULL;
+ }
+
#if SDL_PLATFORM_GDK
return SDL_ShaderCross_INTERNAL_CompileUsingDXC(info, false, size);
#else
@@ -609,6 +614,11 @@ void *SDL_ShaderCross_CompileSPIRVFromHLSL(
const SDL_ShaderCross_HLSL_Info *info,
size_t *size)
{
+ if (info == NULL) {
+ SDL_InvalidParamError("info");
+ return NULL;
+ }
+
return SDL_ShaderCross_INTERNAL_CompileUsingDXC(
info,
true,
@@ -804,6 +814,11 @@ void *SDL_ShaderCross_CompileDXBCFromHLSL(
const SDL_ShaderCross_HLSL_Info *info,
size_t *size) // filled in with number of bytes of returned buffer
{
+ if (info == NULL) {
+ SDL_InvalidParamError("info");
+ return NULL;
+ }
+
return SDL_ShaderCross_INTERNAL_CompileDXBCFromHLSL(
info,
true,
@@ -1696,6 +1711,11 @@ SDL_ShaderCross_GraphicsShaderMetadata * SDL_ShaderCross_ReflectGraphicsSPIRV(
size_t num_separate_images = 0; // HLSL edge case
(void) metadataProps;
+ if (code == NULL) {
+ SDL_InvalidParamError("code");
+ return NULL;
+ }
+
/* Create the SPIRV-Cross context */
result = spvc_context_create(&context);
if (result < 0) {
@@ -1911,6 +1931,11 @@ SDL_ShaderCross_ComputePipelineMetadata * SDL_ShaderCross_ReflectComputeSPIRV(
(void) metadataProps;
+ if (bytecode == NULL) {
+ SDL_InvalidParamError("bytecode");
+ return NULL;
+ }
+
/* Create the SPIRV-Cross context */
result = spvc_context_create(&context);
if (result < 0) {
@@ -2266,6 +2291,11 @@ static void *SDL_ShaderCross_INTERNAL_CompileFromSPIRV(
void *SDL_ShaderCross_TranspileMSLFromSPIRV(
const SDL_ShaderCross_SPIRV_Info *info)
{
+ if (info == NULL) {
+ SDL_InvalidParamError("info");
+ return NULL;
+ }
+
SPIRVTranspileContext *context = SDL_ShaderCross_INTERNAL_TranspileFromSPIRV(
SPVC_BACKEND_MSL,
0,
@@ -2291,6 +2321,11 @@ void *SDL_ShaderCross_TranspileMSLFromSPIRV(
void *SDL_ShaderCross_TranspileHLSLFromSPIRV(
const SDL_ShaderCross_SPIRV_Info *info)
{
+ if (info == NULL) {
+ SDL_InvalidParamError("info");
+ return NULL;
+ }
+
SPIRVTranspileContext *context = SDL_ShaderCross_INTERNAL_TranspileFromSPIRV(
SPVC_BACKEND_HLSL,
SDL_GetBooleanProperty(info->props, SDL_SHADERCROSS_PROP_SPIRV_PSSL_COMPATIBILITY, false) ? 50 : 60,
@@ -2317,6 +2352,11 @@ void *SDL_ShaderCross_CompileDXBCFromSPIRV(
const SDL_ShaderCross_SPIRV_Info *info,
size_t *size)
{
+ if (info == NULL) {
+ SDL_InvalidParamError("info");
+ return NULL;
+ }
+
SPIRVTranspileContext *context = SDL_ShaderCross_INTERNAL_TranspileFromSPIRV(
SPVC_BACKEND_HLSL,
51,
@@ -2358,6 +2398,11 @@ void *SDL_ShaderCross_CompileDXILFromSPIRV(
return NULL;
#endif
+ if (info == NULL) {
+ SDL_InvalidParamError("info");
+ return NULL;
+ }
+
SPIRVTranspileContext *context = SDL_ShaderCross_INTERNAL_TranspileFromSPIRV(
SPVC_BACKEND_HLSL,
60,
@@ -2490,6 +2535,21 @@ SDL_GPUShader *SDL_ShaderCross_CompileGraphicsShaderFromSPIRV(
const SDL_ShaderCross_GraphicsShaderMetadata *metadata,
SDL_PropertiesID props)
{
+ if (device == NULL) {
+ SDL_InvalidParamError("device");
+ return NULL;
+ }
+
+ if (info == NULL) {
+ SDL_InvalidParamError("info");
+ return NULL;
+ }
+
+ if (metadata == NULL) {
+ SDL_InvalidParamError("metadata");
+ return NULL;
+ }
+
return (SDL_GPUShader *)SDL_ShaderCross_INTERNAL_CreateShaderFromSPIRV(
device,
info,
@@ -2503,6 +2563,21 @@ SDL_GPUComputePipeline *SDL_ShaderCross_CompileComputePipelineFromSPIRV(
const SDL_ShaderCross_ComputePipelineMetadata *metadata,
SDL_PropertiesID props)
{
+ if (device == NULL) {
+ SDL_InvalidParamError("device");
+ return NULL;
+ }
+
+ if (info == NULL) {
+ SDL_InvalidParamError("info");
+ return NULL;
+ }
+
+ if (metadata == NULL) {
+ SDL_InvalidParamError("metadata");
+ return NULL;
+ }
+
return (SDL_GPUComputePipeline *)SDL_ShaderCross_INTERNAL_CreateShaderFromSPIRV(
device,
info,