gallium/util: Make u_prims_for_vertices() safe
authorEdward O'Callaghan <eocallaghan@alterapraxis.com>
Wed, 9 Dec 2015 09:07:57 +0000 (20:07 +1100)
committerMarek Olšák <marek.olsak@amd.com>
Wed, 9 Dec 2015 21:51:56 +0000 (22:51 +0100)
Let us avoid trapping in hardware from a SIGFPE and instead
assert on a zero divisor.

Hint: This can occur if a PIPE_PRIM_? is not handled in
      u_prim_vertex_count() that results in ' info ' not
      being initialized in the expected manner.

Further, we also fix a possibly NULL pointer dereference
from ' info ' being NULL from a u_prim_vertex_count() call.

Signed-off-by: Edward O'Callaghan <eocallaghan@alterapraxis.com>
Signed-off-by: Marek Olšák <marek.olsak@amd.com>
src/gallium/auxiliary/util/u_prim.h

index 366801545edcd35f1aa964107cc0096d6e1fe25c..a09c315cc0a14a1853830cec35e76996997b3004 100644 (file)
@@ -145,6 +145,9 @@ u_prims_for_vertices(unsigned prim, unsigned num)
 {
    const struct u_prim_vertex_count *info = u_prim_vertex_count(prim);
 
+   assert(info);
+   assert(info->incr != 0);
+
    if (num < info->min)
       return 0;