On Tue, 31 Jan 2023 10:30:22 GMT, Jose Pereda <jper...@openjdk.org> wrote:

> This PR simply applies the patch from 
> [JDK-8218914](https://bugs.openjdk.org/browse/JDK-8218914) that solved the 
> same issue for the JDK.
> 
> I've tested it on Windows 11 (Version 22H2 Build 22621.1105). 
> 
> I have the Roboto font installed under 
> C:\Users%user\AppData\Local\Microsoft\Windows\Fonts
> and with this PR, -Dprism.debugfonts shows:
> 
> 
> ...
> font=segoe ui historic file=seguihis.ttf
> font=roboto 
> file=C:\Users%user\AppData\Local\Microsoft\Windows\Fonts\Roboto-Regular.ttf
> font=yu mincho file=yumin.ttf
> ...
> 
> 
> Also, I can see that the font is picked in a simple JavaFX application.
> Without this PR, the font is not used, and defaults to a system one. 
> 
> I don't think I can add this as a system/manual test to the PR, though.

modules/javafx.graphics/src/main/native-font/fontpath.c line 572:

> 570:     if (ret != ERROR_SUCCESS ||
> 571:         dwMaxValueNameLen >= MAX_BUFFER ||
> 572:         dwMaxValueDataLen >= MAX_BUFFER) {

This implementation instantly fails if _any_ value or data exceeds 
`MAX_BUFFER`. Wouldn't it be better to only skip the values that are too large, 
instead of ignoring all values entirely?

Instead of using `RegQueryInfoKeyW`, the 
[documentation](https://learn.microsoft.com/en-us/windows/win32/api/winreg/nf-winreg-regenumvaluew)
 suggests the following approach:

> To enumerate values, an application should initially call the RegEnumValue 
> function with the dwIndex parameter set to zero. The application should then 
> increment dwIndex and call the RegEnumValue function until there are no more 
> values (until the function returns ERROR_NO_MORE_ITEMS).

-------------

PR: https://git.openjdk.org/jfx/pull/1017

Reply via email to