[Mesa-dev] [PATCH] mesa: fix segfault in glUniformSubroutinesuiv()

Dave Airlie airlied at gmail.com
Sun Jan 17 00:18:48 PST 2016


On 17 January 2016 at 15:15, Timothy Arceri
<timothy.arceri at collabora.com> wrote:
> From Section 7.9 (SUBROUTINE UNIFORM VARIABLES) of the OpenGL
> 4.5 Core spec:
>
>    "The command
>
>        void UniformSubroutinesuiv(enum shadertype, sizei count,
>                                   const uint *indices);
>
>    will load all active subroutine uniforms for shader stage
>    shadertype with subroutine indices from indices, storing
>    indices[i] into the uniform at location i. The indices for
>    any locations between zero and the value of
>    ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS minus one which are not
>    used will be ignored."

Looks good, but will this not generate warnings on pre-C99?

(not sure we care).

Otherwise:
Reviewed-by: Dave Airlie <airlied at redhat.com>

Dave.
>
> Cc: "11.0 11.1" mesa-stable at lists.freedesktop.org
> https://bugs.freedesktop.org/show_bug.cgi?id=93731
> ---
>  src/mesa/main/shaderapi.c | 14 ++++++++++++++
>  1 file changed, 14 insertions(+)
>
> diff --git a/src/mesa/main/shaderapi.c b/src/mesa/main/shaderapi.c
> index cdc85f3..918c5f9 100644
> --- a/src/mesa/main/shaderapi.c
> +++ b/src/mesa/main/shaderapi.c
> @@ -2530,6 +2530,13 @@ _mesa_UniformSubroutinesuiv(GLenum shadertype, GLsizei count,
>     i = 0;
>     do {
>        struct gl_uniform_storage *uni = sh->SubroutineUniformRemapTable[i];
> +      if (uni == NULL) {
> +         if (++i < count)
> +            continue;
> +         else
> +            break;
> +      }
> +
>        int uni_count = uni->array_elements ? uni->array_elements : 1;
>        int j, k;
>
> @@ -2557,6 +2564,13 @@ _mesa_UniformSubroutinesuiv(GLenum shadertype, GLsizei count,
>     i = 0;
>     do {
>        struct gl_uniform_storage *uni = sh->SubroutineUniformRemapTable[i];
> +      if (uni == NULL) {
> +         if (++i < count)
> +            continue;
> +         else
> +            break;
> +      }
> +
>        int uni_count = uni->array_elements ? uni->array_elements : 1;
>
>        memcpy(&uni->storage[0], &indices[i],
> --
> 2.4.3
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list