diff options
author | Robert Ellison <papillo@vmware.com> | 2009-04-27 12:08:34 -0600 |
---|---|---|
committer | Robert Ellison <papillo@vmware.com> | 2009-04-27 12:11:24 -0600 |
commit | 359a58230e0644a39c1904a74bc25803dc6cab6f (patch) | |
tree | 062690203e99103d1ccfa5486590624ff992f651 | |
parent | 76b9da9e98bad4bf22fe6610394236203b620bd9 (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.
-rw-r--r-- | src/mesa/shader/slang/slang_compile.c | 6 |
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 ba2fc4f85c..d7ad879e97 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; |