From 73bec11865270731f9d896fd5f1fda2d2e2c16b7 Mon Sep 17 00:00:00 2001 From: Aric Stewart Date: Tue, 24 Apr 2007 13:03:22 -0500 Subject: [PATCH] usp10: Do not crash in ScriptPlace if pABC is null. --- dlls/usp10/usp10.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/dlls/usp10/usp10.c b/dlls/usp10/usp10.c index b2b4b3f191c..3e1258dc2f1 100644 --- a/dlls/usp10/usp10.c +++ b/dlls/usp10/usp10.c @@ -1309,8 +1309,8 @@ HRESULT WINAPI ScriptPlace(HDC hdc, SCRIPT_CACHE *psc, const WORD *pwGlyphs, * to get the correct ABC widths. */ if (!(lpABC = usp_zero_alloc(sizeof(ABC) * cGlyphs))) return E_OUTOFMEMORY; - - memset(pABC, 0, sizeof(ABC)); + if (pABC) + memset(pABC, 0, sizeof(ABC)); /* FIXME: set pGoffset to more reasonable values */ if (!GetCharABCWidthsI(get_cache_hdc(psc), 0, cGlyphs, (WORD *) pwGlyphs, lpABC )) @@ -1330,15 +1330,19 @@ HRESULT WINAPI ScriptPlace(HDC hdc, SCRIPT_CACHE *psc, const WORD *pwGlyphs, lpABC[wcnt].abcA, lpABC[wcnt].abcB, lpABC[wcnt].abcC, wcnt); - pABC->abcA += lpABC[wcnt].abcA; - pABC->abcB += lpABC[wcnt].abcB; - pABC->abcC += lpABC[wcnt].abcC; + if (pABC) + { + pABC->abcA += lpABC[wcnt].abcA; + pABC->abcB += lpABC[wcnt].abcB; + pABC->abcC += lpABC[wcnt].abcC; + } piAdvance[wcnt] = lpABC[wcnt].abcA + lpABC[wcnt].abcB + lpABC[wcnt].abcC; pGoffset[wcnt].du = 0; pGoffset[wcnt].dv = 0; } } - TRACE("Total for run: abcA=%d, abcB=%d, abcC=%d\n", pABC->abcA, pABC->abcB, pABC->abcC); + if (pABC) + TRACE("Total for run: abcA=%d, abcB=%d, abcC=%d\n", pABC->abcA, pABC->abcB, pABC->abcC); usp_free(lpABC); return S_OK;