<div dir="ltr">anyone can unsubscribe or ban me ? spam</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Le mar. 31 janv. 2023 à 10:21, Alexander Scherbatiy <<a href="mailto:alexsch@openjdk.org">alexsch@openjdk.org</a>> a écrit :<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On Fri, 27 Jan 2023 17:00:48 GMT, Alexander Scherbatiy <<a href="mailto:alexsch@openjdk.org" target="_blank">alexsch@openjdk.org</a>> wrote:<br>
<br>
>> [JDK-8278549](<a href="https://bugs.openjdk.org/browse/JDK-8278549)" rel="noreferrer" target="_blank">https://bugs.openjdk.org/browse/JDK-8278549)`</a> UNIX sun/font coding misses SUSE distro detection on recent distro SUSE 15` adds SuSE detection by checking SLES os name property in `/etc/os-release` file.<br>
>> <br>
>> `opensuse/leap:15.4` docker defines os name property as `"openSUSE Leap"` in `/etc/os-release` file which is not recognized as SuSE.<br>
>> <br>
>> The issue is reproduced with Oracle jdk-19.0.2 with custom fontconfig.SuSE.properties file copied to jdk-19.0.2/lib directory.<br>
>> <br>
>> The fix checks if os name property from  `/etc/os-release` contains `SUSE`  substring.<br>
>> <br>
>> Steps to reproduce.<br>
>> - Download Oracle jdk-19.0.2<br>
>> - Copy custom [fontconfig.SuSE.properties](<a href="https://bugs.openjdk.org/secure/attachment/102435/fontconfig.SuSE.properties" rel="noreferrer" target="_blank">https://bugs.openjdk.org/secure/attachment/102435/fontconfig.SuSE.properties</a>) file to jdk-19.0.2/lib directory.<br>
>> - Run the `opensuse/leap:15.4` docker and install freetype and dejavu fonts (do not install fontconfig)<br>
>> <br>
>> docker run --rm --security-opt seccomp=unconfined -it opensuse/leap:15.4 bash<br>
>> zypper install -y dejavu-fonts<br>
>> zypper install -y freetype2<br>
>> <br>
>> - Run HelloImage java sample in the docker<br>
>> <br>
>> import javax.imageio.ImageIO;<br>
>> import java.awt.*;<br>
>> import java.awt.image.BufferedImage;<br>
>> import java.io.File;<br>
>> <br>
>> public class HelloImage {<br>
>> <br>
>>     public static void main(String[] args) throws Exception {<br>
>> <br>
>>         BufferedImage buff = new BufferedImage(300, 200, BufferedImage.TYPE_INT_RGB);<br>
>>         Graphics2D g = buff.createGraphics();<br>
>>         g.setColor(Color.WHITE);<br>
>>         g.fillRect(0, 0, buff.getWidth(), buff.getHeight());<br>
>> <br>
>>         g.setColor(Color.BLUE);<br>
>>         g.setFont(g.getFont().deriveFont(32f));<br>
>>         g.drawString("Hello, Image!", 50, 50);<br>
>>         g.dispose();<br>
>> <br>
>>         File file = new File("hello-image.png");<br>
>>         ImageIO.write(buff, "png", file);<br>
>>     }<br>
>> }<br>
>> <br>
>> <br>
>> <br>
>> ./jdk-19.0.2/bin/javac HelloImage.java<br>
>> ./jdk-19.0.2/bin/java HelloImage<br>
>> Exception in thread "main" java.lang.NullPointerException: Cannot load from short array because "sun.awt.FontConfiguration.head" is null<br>
>>      at java.desktop/sun.awt.FontConfiguration.getVersion(FontConfiguration.java:1261)<br>
>>      at java.desktop/sun.awt.FontConfiguration.readFontConfigFile(FontConfiguration.java:221)<br>
>>      at java.desktop/sun.awt.FontConfiguration.init(FontConfiguration.java:105)<br>
>>      at java.desktop/sun.awt.X11FontManager.createFontConfiguration(X11FontManager.java:706)<br>
>>      at java.desktop/sun.font.SunFontManager$2.run(SunFontManager.java:352)<br>
>>      at java.desktop/sun.font.SunFontManager$2.run(SunFontManager.java:309)<br>
>>      at java.base/java.security.AccessController.doPrivileged(AccessController.java:318)<br>
>>      at java.desktop/sun.font.SunFontManager.<init>(SunFontManager.java:309)<br>
>>      at java.desktop/sun.awt.FcFontManager.<init>(FcFontManager.java:35)<br>
>>      at java.desktop/sun.awt.X11FontManager.<init>(X11FontManager.java:56)<br>
>>      at java.desktop/sun.font.PlatformFontInfo.createFontManager(PlatformFontInfo.java:37)<br>
>>      at java.desktop/sun.font.FontManagerFactory.getInstance(FontManagerFactory.java:51)<br>
>>      at java.desktop/java.awt.Font.getFont2D(Font.java:526)<br>
>>      at java.desktop/java.awt.Font$FontAccessImpl.getFont2D(Font.java:265)<br>
>>      at java.desktop/sun.font.FontUtilities.getFont2D(FontUtilities.java:151)<br>
>>      at java.desktop/sun.java2d.SunGraphics2D.checkFontInfo(SunGraphics2D.java:671)<br>
>>      at java.desktop/sun.java2d.SunGraphics2D.getFontInfo(SunGraphics2D.java:837)<br>
>>      at java.desktop/sun.java2d.pipe.GlyphListPipe.drawString(GlyphListPipe.java:46)<br>
>>      at java.desktop/sun.java2d.SunGraphics2D.drawString(SunGraphics2D.java:2931)<br>
>>      at HelloImage.main(HelloImage.java:17)<br>
><br>
> Alexander Scherbatiy has updated the pull request incrementally with one additional commit since the last revision:<br>
> <br>
>   Revert back empty line removing<br>
<br>
May be it has sense to add  a property file which maps OS name used in fontconfig files to OS  names from 'os-release` file.<br>
Something like this:<br>
<br>
SuSE=SLES,opensuse-leap,opensuse-tumbleweed<br>
<br>
-------------<br>
<br>
PR: <a href="https://git.openjdk.org/jdk/pull/12260" rel="noreferrer" target="_blank">https://git.openjdk.org/jdk/pull/12260</a><br>
</blockquote></div>