[JDK-8278549](https://bugs.openjdk.org/browse/JDK-8278549)` 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.

`opensuse/leap:15.4` docker defines os name property as `"openSUSE Leap"` in 
`/etc/os-release` file which is not recognized as SuSE.

The issue is reproduced with Oracle jdk-19.0.2 with custom 
fontconfig.SuSE.properties file copied to jdk-19.0.2/lib directory.

The fix checks if os name property from  `/etc/os-release` contains `SUSE`  
substring.

Steps to reproduce.
- Download Oracle jdk-19.0.2
- Copy custom 
[fontconfig.SuSE.properties](https://bugs.openjdk.org/secure/attachment/102435/fontconfig.SuSE.properties)
 file to jdk-19.0.2/lib directory.
- Run the `opensuse/leap:15.4` docker and install freetype and dejavu fonts (do 
not install fontconfig)

docker run --rm --security-opt seccomp=unconfined -it opensuse/leap:15.4 bash
zypper install -y dejavu-fonts
zypper install -y freetype2

- Run HelloImage java sample in the docker

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;

public class HelloImage {

    public static void main(String[] args) throws Exception {

        BufferedImage buff = new BufferedImage(300, 200, 
BufferedImage.TYPE_INT_RGB);
        Graphics2D g = buff.createGraphics();
        g.setColor(Color.WHITE);
        g.fillRect(0, 0, buff.getWidth(), buff.getHeight());

        g.setColor(Color.BLUE);
        g.setFont(g.getFont().deriveFont(32f));
        g.drawString("Hello, Image!", 50, 50);
        g.dispose();

        File file = new File("hello-image.png");
        ImageIO.write(buff, "png", file);
    }
}



./jdk-19.0.2/bin/javac HelloImage.java
./jdk-19.0.2/bin/java HelloImage
Exception in thread "main" java.lang.NullPointerException: Cannot load from 
short array because "sun.awt.FontConfiguration.head" is null
        at 
java.desktop/sun.awt.FontConfiguration.getVersion(FontConfiguration.java:1261)
        at 
java.desktop/sun.awt.FontConfiguration.readFontConfigFile(FontConfiguration.java:221)
        at 
java.desktop/sun.awt.FontConfiguration.init(FontConfiguration.java:105)
        at 
java.desktop/sun.awt.X11FontManager.createFontConfiguration(X11FontManager.java:706)
        at java.desktop/sun.font.SunFontManager$2.run(SunFontManager.java:352)
        at java.desktop/sun.font.SunFontManager$2.run(SunFontManager.java:309)
        at 
java.base/java.security.AccessController.doPrivileged(AccessController.java:318)
        at java.desktop/sun.font.SunFontManager.<init>(SunFontManager.java:309)
        at java.desktop/sun.awt.FcFontManager.<init>(FcFontManager.java:35)
        at java.desktop/sun.awt.X11FontManager.<init>(X11FontManager.java:56)
        at 
java.desktop/sun.font.PlatformFontInfo.createFontManager(PlatformFontInfo.java:37)
        at 
java.desktop/sun.font.FontManagerFactory.getInstance(FontManagerFactory.java:51)
        at java.desktop/java.awt.Font.getFont2D(Font.java:526)
        at java.desktop/java.awt.Font$FontAccessImpl.getFont2D(Font.java:265)
        at java.desktop/sun.font.FontUtilities.getFont2D(FontUtilities.java:151)
        at 
java.desktop/sun.java2d.SunGraphics2D.checkFontInfo(SunGraphics2D.java:671)
        at 
java.desktop/sun.java2d.SunGraphics2D.getFontInfo(SunGraphics2D.java:837)
        at 
java.desktop/sun.java2d.pipe.GlyphListPipe.drawString(GlyphListPipe.java:46)
        at 
java.desktop/sun.java2d.SunGraphics2D.drawString(SunGraphics2D.java:2931)
        at HelloImage.main(HelloImage.java:17)

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

Commit messages:
 - 8301254: UNIX sun/font coding does not detect SuSE in openSUSE Leap 
distributive

Changes: https://git.openjdk.org/jdk/pull/12260/files
 Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=12260&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8301254
  Stats: 7 lines in 2 files changed: 4 ins; 1 del; 2 mod
  Patch: https://git.openjdk.org/jdk/pull/12260.diff
  Fetch: git fetch https://git.openjdk.org/jdk pull/12260/head:pull/12260

PR: https://git.openjdk.org/jdk/pull/12260

Reply via email to