[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openjdk-2d-dev
Subject:    Re: RFR: 8301254: UNIX sun/font coding does not detect SuSE in openSUSE Leap distribution [v2]
From:       Alexander Scherbatiy <alexsch () openjdk ! org>
Date:       2023-01-31 18:26:59
Message-ID: T3iBFglkkl-sKG_9BKGXb-Dus0esrT_wN-b6d-Neu9A=.83ea11f0-a71f-41b2-bf65-2c3ac2d9e611 () github ! com
[Download RAW message or body]

On Fri, 27 Jan 2023 17:00:48 GMT, Alexander Scherbatiy <alexsch@openjdk.org> wrote:

> > [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)
> 
> Alexander Scherbatiy has updated the pull request incrementally with one additional \
> commit since the last revision: 
> Revert back empty line removing

The proposal is to add one `os-mapping.properties` file which contains os mapping for \
all new platforms:

SuSE=SLES,opensuse-leap,opensuse-tumbleweed
Ubuntu=ubuntu
Fedora=fedora
RedHat=rhel

It can be put to the same directory where `fontconfig.OS.properties` files are \
placed.

JDK reads `/etc/os-release` file, gets ID property and finds corresponding mapping in \
`os-mapping.properties` file (SuSE for SLES and opensuse-leap, RedHat for rhel, and \
etc). What user needs for new OS name is to add one more mapping into  \
`os-mapping.properties` property file. It allows to use only one \
`fontconfig.OS.properties` file for different OSes from the same family and reuse the \
old ones.

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

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


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic