summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorRobert Ellison <[email protected]>2009-04-27 12:08:34 -0600
committerRobert Ellison <[email protected]>2009-04-27 12:11:24 -0600
commit359a58230e0644a39c1904a74bc25803dc6cab6f (patch)
tree062690203e99103d1ccfa5486590624ff992f651 /src
parent76b9da9e98bad4bf22fe6610394236203b620bd9 (diff)
Avoid a segfault in shader compilation
If a shader reaches an out-of-memory condition while adding a new function (reallocating the function list), a segfault will occur during cleanup (because the num_functions field is non-zero, but the functions pointer is NULL). This fixes that segfault by zeroing out the num_functions field if reallocation fails.
Diffstat (limited to 'src')
-rw-r--r--src/mesa/shader/slang/slang_compile.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/mesa/shader/slang/slang_compile.c b/src/mesa/shader/slang/slang_compile.c
index ba2fc4f85c9..d7ad879e97a 100644
--- a/src/mesa/shader/slang/slang_compile.c
+++ b/src/mesa/shader/slang/slang_compile.c
@@ -2161,6 +2161,12 @@ parse_function(slang_parse_ctx * C, slang_output_ctx * O, int definition,
(O->funs->num_functions + 1)
* sizeof(slang_function));
if (O->funs->functions == NULL) {
+ /* Make sure that there are no functions marked, as the
+ * allocation is currently NULL, in order to avoid
+ * a potental segfault as we clean up later.
+ */
+ O->funs->num_functions = 0;
+
slang_info_log_memory(C->L);
slang_function_destruct(&parsed_func);
return GL_FALSE;