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