Commit 3ac3a5dc authored by Alexander Dorofeyev's avatar Alexander Dorofeyev Committed by Alexandre Julliard

gdi32: Fix unchecked NULL ptr in BIDI_Reorder.

parent 5edd2cfa
......@@ -831,7 +831,7 @@ static void resolveImplicit(const WORD * pcls, WORD *plevel, int cch)
occurs after the character in pszInput[n]. Breaks before the first
character are not allowed.
------------------------------------------------------------------------*/
static int resolveLines(WCHAR * pszInput, BOOL * pbrk, int cch)
static int resolveLines(LPCWSTR pszInput, BOOL * pbrk, int cch)
{
/* skip characters not of type LS */
int ich = 0;
......@@ -1012,7 +1012,8 @@ static void mirror(LPWSTR pszInput, const WORD* plevel, int cch)
Array of levels
------------------------------------------------------------------------*/
static void BidiLines(int baselevel, WCHAR * pszLine, WORD * pclsLine, WORD * plevelLine, int cchPara, int fMirror, BOOL * pbrk)
static void BidiLines(int baselevel, LPWSTR pszOutLine, LPCWSTR pszLine, WORD * pclsLine,
WORD * plevelLine, int cchPara, int fMirror, BOOL * pbrk)
{
int cchLine = 0;
......@@ -1024,11 +1025,14 @@ static void BidiLines(int baselevel, WCHAR * pszLine, WORD * pclsLine, WORD * pl
/* resolve whitespace */
resolveWhitespace(baselevel, pclsLine, plevelLine, cchLine);
if (pszOutLine)
{
if (fMirror)
mirror(pszLine, plevelLine, cchLine);
mirror(pszOutLine, plevelLine, cchLine);
/* reorder each line in place */
reorder(baselevel, pszLine, plevelLine, cchLine);
reorder(baselevel, pszOutLine, plevelLine, cchLine);
}
pszLine += cchLine;
plevelLine += cchLine;
......@@ -1079,6 +1083,7 @@ BOOL BIDI_Reorder(
return FALSE;
}
if (lpOutString)
memcpy(lpOutString, lpString, uCount * sizeof(WCHAR));
if (WINE_GCPW_FORCE_RTL == (dwWineGCP_Flags&WINE_GCPW_DIR_MASK))
......@@ -1088,7 +1093,7 @@ BOOL BIDI_Reorder(
while (done < uCount)
{
unsigned j;
classify(lpOutString + done, chartype, uCount - done);
classify(lpString + done, chartype, uCount - done);
/* limit text to first block */
i = resolveParagraphs(chartype, uCount - done);
for (j = 0; j < i; ++j)
......@@ -1134,9 +1139,10 @@ BOOL BIDI_Reorder(
resolveImplicit(chartype, levels, i);
/* assign directional types again, but for WS, S this time */
classify(lpOutString + done, chartype, i);
classify(lpString + done, chartype, i);
BidiLines(baselevel, lpOutString + done, chartype, levels, i, !(dwFlags & GCP_SYMSWAPOFF), 0);
BidiLines(baselevel, lpOutString ? lpOutString + done : NULL, lpString + done,
chartype, levels, i, !(dwFlags & GCP_SYMSWAPOFF), 0);
if (lpOrder)
{
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment