[Mesa-dev] [PATCH shader-db] run: don't use alloca to avoid random crashes in the GLSL compiler
Timothy Arceri
timothy.arceri at collabora.com
Sat Dec 10 01:07:18 UTC 2016
On Wed, 2016-12-07 at 18:33 +0100, Marek Olšák wrote:
> From: Marek Olšák <marek.olsak at amd.com>
>
> ---
> run.c | 6 +++++-
> 1 file changed, 5 insertions(+), 1 deletion(-)
>
> diff --git a/run.c b/run.c
> index 08fd543..ded224a 100644
> --- a/run.c
> +++ b/run.c
> @@ -656,28 +656,32 @@ main(int argc, char **argv)
>
> /* If there's only one GLSL shader, mark it separable so
> * inputs and outputs aren't eliminated.
> */
> if (num_shaders == 1 && type != TYPE_VP && type !=
> TYPE_FP)
> use_separate_shader_objects = true;
>
> if (use_separate_shader_objects) {
> for (unsigned i = 0; i < num_shaders; i++) {
> const char *const_text;
> - char *text = alloca(shader[i].length + 1);
> + unsigned size = shader[i].length + 1000;
I was hitting this crash also, shader[i].length + 1 worked for me.
Assuming that changing it to + 1 works for you.
Reviewed-by: Timothy Arceri <timothy.arceri at collabora.com>
> + /* Using alloca crashes in the GLSL
> compiler. */
> + char *text = malloc(size);
> + memset(text, 0, size);
>
> /* Make it zero-terminated. */
> memcpy(text, shader[i].text, shader[i].length);
> text[shader[i].length] = 0;
>
> const_text = text;
> glCreateShaderProgramv(shader[i].type, 1,
> &const_text);
> + free(text);
> }
> } else if (type == TYPE_CORE || type == TYPE_COMPAT) {
> GLuint prog = glCreateProgram();
>
> for (unsigned i = 0; i < num_shaders; i++) {
> GLuint s = glCreateShader(shader[i].type);
> glShaderSource(s, 1, &shader[i].text,
> &shader[i].length);
> glCompileShader(s);
>
> GLint param;
More information about the mesa-dev
mailing list