SDL_shadercross: Add NULL parameter checks (#147)

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,