gdi32: Fix unchecked NULL ptr in BIDI_Reorder.
This commit is contained in:
parent
5edd2cfaa7
commit
3ac3a5dcb5
|
@ -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 (fMirror)
|
||||
mirror(pszLine, plevelLine, cchLine);
|
||||
if (pszOutLine)
|
||||
{
|
||||
if (fMirror)
|
||||
mirror(pszOutLine, plevelLine, cchLine);
|
||||
|
||||
/* reorder each line in place */
|
||||
reorder(baselevel, pszLine, plevelLine, cchLine);
|
||||
/* reorder each line in place */
|
||||
reorder(baselevel, pszOutLine, plevelLine, cchLine);
|
||||
}
|
||||
|
||||
pszLine += cchLine;
|
||||
plevelLine += cchLine;
|
||||
|
@ -1079,7 +1083,8 @@ BOOL BIDI_Reorder(
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
memcpy(lpOutString, lpString, uCount * sizeof(WCHAR));
|
||||
if (lpOutString)
|
||||
memcpy(lpOutString, lpString, uCount * sizeof(WCHAR));
|
||||
|
||||
if (WINE_GCPW_FORCE_RTL == (dwWineGCP_Flags&WINE_GCPW_DIR_MASK))
|
||||
baselevel = 1;
|
||||
|
@ -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)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue