On Tue, 31 Jan 2023 16:47:01 GMT, Michael Strauß <mstra...@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). Please note that this is just a refactoring of the existing code, extracting a method so that it can be called twice, and it is also what the JDK is doing. If the affected code needs changes, maybe that is for a follow up. ------------- PR: https://git.openjdk.org/jfx/pull/1017