Compilation fails for null input file name string
When compilation fails, the compilation result length is 0.
diff --git a/libshaderc/src/shaderc.cc b/libshaderc/src/shaderc.cc
index 4d83b45..303e769 100644
--- a/libshaderc/src/shaderc.cc
+++ b/libshaderc/src/shaderc.cc
@@ -349,6 +349,12 @@
if (!result) {
return nullptr;
}
+ if (!input_file_name) {
+ result->messages = "Input file name string was null.";
+ result->num_errors = 1;
+ result->compilation_status = shaderc_compilation_status_compilation_error;
+ return result;
+ }
result->compilation_status = shaderc_compilation_status_invalid_stage;
bool compilation_succeeded = false; // In case we exit early.
std::vector<uint32_t> compilation_output_data;
diff --git a/libshaderc/src/shaderc_private.h b/libshaderc/src/shaderc_private.h
index f15141d..491f8a4 100644
--- a/libshaderc/src/shaderc_private.h
+++ b/libshaderc/src/shaderc_private.h
@@ -30,7 +30,7 @@
// uint32_t element.
std::vector<uint32_t> output_data;
// The size of the output data in term of bytes.
- size_t output_data_size;
+ size_t output_data_size = 0;
// Compilation messages.
std::string messages;
// Number of errors.
diff --git a/libshaderc/src/shaderc_test.cc b/libshaderc/src/shaderc_test.cc
index 50afe8e..ba1f1b0 100644
--- a/libshaderc/src/shaderc_test.cc
+++ b/libshaderc/src/shaderc_test.cc
@@ -194,11 +194,13 @@
const std::string CompilationErrors(
const std::string& shader, shaderc_shader_kind kind,
const shaderc_compile_options_t options = nullptr,
- OutputType output_type = OutputType::SpirvBinary) {
+ OutputType output_type = OutputType::SpirvBinary,
+ const char* source_name = "shader") {
const Compilation comp(compiler_.get_compiler_handle(), shader, kind,
- "shader", options, output_type);
+ source_name, options, output_type);
EXPECT_FALSE(CompilationResultIsSuccess(comp.result())) << kind << '\n'
<< shader;
+ EXPECT_EQ(0u, shaderc_result_get_length(comp.result()));
return shaderc_result_get_error_message(comp.result());
};
@@ -1116,4 +1118,23 @@
ParseVersionProfileTestCase("", false),
}));
+TEST_F(CompileStringTest, NullSourceNameFailsCompilingToBinary) {
+ EXPECT_THAT(CompilationErrors(kEmpty310ESShader, shaderc_glsl_vertex_shader,
+ nullptr, OutputType::SpirvBinary, nullptr),
+ HasSubstr("Input file name string was null."));
+}
+
+TEST_F(CompileStringTest, NullSourceNameFailsCompilingToAssemblyText) {
+ EXPECT_THAT(
+ CompilationErrors(kEmpty310ESShader, shaderc_glsl_vertex_shader, nullptr,
+ OutputType::SpirvAssemblyText, nullptr),
+ HasSubstr("Input file name string was null."));
+}
+
+TEST_F(CompileStringTest, NullSourceNameFailsCompilingToPreprocessedText) {
+ EXPECT_THAT(CompilationErrors(kEmpty310ESShader, shaderc_glsl_vertex_shader,
+ nullptr, OutputType::PreprocessedText, nullptr),
+ HasSubstr("Input file name string was null."));
+}
+
} // anonymous namespace