[ros-dev] [ros-diffs] [hbelusca] 73895: [NTGDI]: Few fixes & hacks for NtGdiGetGlyphIndicesW, see CORE-12825: - (Fix) Check for integer count overflow (per Thomas suggestion), - (Hack#1) Signal the particular calling ca...
Thomas Faber
thomas.faber at reactos.org
Fri Feb 24 13:42:01 UTC 2017
On 2017-02-24 02:52, hbelusca at 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);
>
>
More information about the Ros-dev
mailing list