Module: wine Branch: master Commit: 215e2d7fed58ccd7c5e55ad536fb311608b51d26 URL: http://source.winehq.org/git/wine.git/?a=commit;h=215e2d7fed58ccd7c5e55ad536...
Author: Paul Gofman gofmanp@gmail.com Date: Thu Feb 25 17:34:04 2016 +0300
d3dx9: D3DXQuaternionToAxisAngle should not crash on NULLs in output parameters.
Signed-off-by: Paul Gofman gofmanp@gmail.com Signed-off-by: Matteo Bruni mbruni@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/d3dx9_36/math.c | 12 ++++++++---- dlls/d3dx9_36/tests/math.c | 11 ++++++++--- 2 files changed, 16 insertions(+), 7 deletions(-)
diff --git a/dlls/d3dx9_36/math.c b/dlls/d3dx9_36/math.c index 5e8d51a..123bd2f 100644 --- a/dlls/d3dx9_36/math.c +++ b/dlls/d3dx9_36/math.c @@ -1652,10 +1652,14 @@ void WINAPI D3DXQuaternionToAxisAngle(const D3DXQUATERNION *pq, D3DXVECTOR3 *pax { TRACE("pq %p, paxis %p, pangle %p\n", pq, paxis, pangle);
- paxis->x = pq->x; - paxis->y = pq->y; - paxis->z = pq->z; - *pangle = 2.0f * acosf(pq->w); + if (paxis) + { + paxis->x = pq->x; + paxis->y = pq->y; + paxis->z = pq->z; + } + if (pangle) + *pangle = 2.0f * acosf(pq->w); }
/*_________________D3DXVec2_____________________*/ diff --git a/dlls/d3dx9_36/tests/math.c b/dlls/d3dx9_36/tests/math.c index ac4475d..cbe94b5 100644 --- a/dlls/d3dx9_36/tests/math.c +++ b/dlls/d3dx9_36/tests/math.c @@ -1019,9 +1019,14 @@ static void D3DXQuaternionTest(void) /* Test the null quaternion */ expectedvec.x = 0.0f; expectedvec.y = 0.0f; expectedvec.z = 0.0f; expected = 3.141593f; - D3DXQuaternionToAxisAngle(&nul,&axis,&angle); - expect_vec3(expectedvec,axis); - ok(relative_error(angle, expected ) < admitted_error, "Expected: %f, Got: %f\n", expected, angle); + D3DXQuaternionToAxisAngle(&nul, &axis, &angle); + expect_vec3(expectedvec, axis); + ok(relative_error(angle, expected) < admitted_error, "Expected: %f, Got: %f\n", expected, angle); + + D3DXQuaternionToAxisAngle(&nul, &axis, NULL); + D3DXQuaternionToAxisAngle(&nul, NULL, &angle); + expect_vec3(expectedvec, axis); + ok(relative_error(angle, expected) < admitted_error, "Expected: %f, Got: %f\n", expected, angle); }
static void D3DXVector2Test(void)