[Mesa-dev] [PATCH] st/mesa: fix computing the lowest address for interleaved attribs

Brian Paul brianp at vmware.com
Wed Feb 23 10:13:42 PST 2011


On 02/22/2011 11:44 PM, Marek Olšák wrote:
> From: Wiktor Janas<wixorpeek at gmail.com>
>
> Ptr can be very well NULL, so when there are two arrays, with one having
> offset 0 (and thus NULL Ptr), and the other having a non-zero offset,
> the non-zero value is taken as minimum (because of !low_addr ? start ...).
> On 32-bit systems, this somehow works. On 64-bit systems, it leads to crashes.
> ---
>   src/mesa/state_tracker/st_draw.c |    9 ++++++---
>   1 files changed, 6 insertions(+), 3 deletions(-)
>
> diff --git a/src/mesa/state_tracker/st_draw.c b/src/mesa/state_tracker/st_draw.c
> index 11ebd06..6530a06 100644
> --- a/src/mesa/state_tracker/st_draw.c
> +++ b/src/mesa/state_tracker/st_draw.c
> @@ -315,10 +315,13 @@ setup_interleaved_attribs(struct gl_context *ctx,
>      const GLubyte *low_addr = NULL;
>
>      /* Find the lowest address. */
> -   for (attr = 0; attr<  vpv->num_inputs; attr++) {
> -      const GLubyte *start = arrays[vp->index_to_input[attr]]->Ptr;
> +   if(vpv->num_inputs) {
> +      low_addr = arrays[vp->index_to_input[0]]->Ptr;
>
> -      low_addr = !low_addr ? start : MIN2(low_addr, start);
> +      for (attr = 1; attr<  vpv->num_inputs; attr++) {
> +         const GLubyte *start = arrays[vp->index_to_input[attr]]->Ptr;
> +         low_addr = MIN2(low_addr, start);
> +      }
>      }
>
>      for (attr = 0; attr<  vpv->num_inputs; attr++) {

There should probably be a piglit to test this and some of the other 
bugs you've fixed in this area...

-Brian


More information about the mesa-dev mailing list