----- Original Message ----- > On Sun, Jul 29, 2012 at 6:54 PM, Vinson Lee <v...@freedesktop.org> > wrote: > > Fixes Coverity wrong sizeof argument defect. > > > > Signed-off-by: Vinson Lee <v...@freedesktop.org> > > --- > > src/mesa/math/m_matrix.c | 2 +- > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > diff --git a/src/mesa/math/m_matrix.c b/src/mesa/math/m_matrix.c > > index 40f9229..7c4e9fd 100644 > > --- a/src/mesa/math/m_matrix.c > > +++ b/src/mesa/math/m_matrix.c > > @@ -1437,7 +1437,7 @@ void > > _math_matrix_copy( GLmatrix *to, const GLmatrix *from ) > > { > > memcpy( to->m, from->m, sizeof(Identity) ); > > - memcpy(to->inv, from->inv, sizeof(from->inv)); > > + memcpy(to->inv, from->inv, sizeof(*from->inv)); > > to->flags = from->flags; > > to->type = from->type; > > } > > It would probably be good to update the preceding line as well. It's > kind of weird to use sizeof(X) when X isn't the source or dest to the > memcpy().
Now you mention it, there is a reason for it. This is the definition of GLmatrix: typedef struct { GLfloat *m; /**< 16 matrix elements (16-byte aligned) */ GLfloat *inv; /**< optional 16-element inverse (16-byte aligned) */ GLuint flags; /**< possible values determined by (of \link * MatFlags MAT_FLAG_* flags\endlink) */ enum GLmatrixtype type; } GLmatrix; Therefore memcpy(to->inv, from->inv, sizeof(from->inv)); or memcpy(to->inv, from->inv, sizeof(*from->inv)); are busted, as none properly copies the full 16 elements. Therefore, this memcpy(to->inv, from->inv, sizeof(Identity); is how the memcpy should be done. Jose _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev