On 2017-02-24 02:52, hbelusca(a)svn.reactos.org wrote:
  @@ -4419,12 +4422,31 @@
      LPCWSTR UnSafepwc = pwc;
      LPWORD UnSafepgi = pgi;
 -    if ((!UnSafepwc) && (!UnSafepgi)) return cwc;
 -
 -    if ((UnSafepwc == NULL) || (UnSafepgi == NULL))
 +    /* Check for integer overflow */
 +    if (cwc & 0x80000000) // (INT_MAX + 1) == INT_MIN
 +        return GDI_ERROR;
 +
 +    if (!UnSafepwc && !UnSafepgi)
 +        return cwc;
 +
 +    if (!UnSafepwc || !UnSafepgi)
      {
          DPRINT1("UnSafepwc == %p, UnSafepgi = %p\n", UnSafepwc, UnSafepgi);
 -        return -1;
 +        return GDI_ERROR;
 +    }
 +
 +    // TODO: Special undocumented case!
 +    if (!pwc && !pgi && (cwc == 0)) 
Why the sudden switch away from using the Unsafe version?
  +    {
 +        DPRINT1("ERR: NtGdiGetGlyphIndicesW with (!pwc && !pgi &&
(cwc == 0)) is UNIMPLEMENTED!\n");
 +        return 0;
 +    }
 +
 +    // FIXME: This is a hack!! (triggered by e.g. Word 2010). See CORE-12825
 +    if (cwc == 0)
 +    {
 +        DPRINT1("ERR: NtGdiGetGlyphIndicesW with (cwc == 0) is
UNIMPLEMENTED!\n");
 +        return GDI_ERROR;
      }
      dc = DC_LockDc(hdc);