[OpenJDK 2D-Dev] FontConfig fails when optional system library is missing

Phil Race philip.race at oracle.com
Tue Jul 19 18:05:34 UTC 2011


PPS  SFAIK all JDK7 supported configs have libfontconfig so
I've in fact contemplated for JDk 8 making libfontconfig a compile time 
dependency.
Would that be a major problem ?
We really are that dependent on it now,  and its such an integral part 
of the
way Gnome and KDE desktops work we should be able to assume its
there just like libX11.so ..

Anyway I filed
7068471: NPE in sun.font.FontConfigManager.getFontConfigFont() when 
libfontconfig.so is not installed

-phil.

On 7/19/2011 9:29 AM, Phil Race wrote:
> PS .. are you running a pure openjdk build or are you running a build 
> which
> includes the proprietary Lucida fonts.
> Do you have a  fontconfig.properties which is customised for AIX ?
>
> If you eliminate both of those, as would be the typical Linux OpenJDK 
> case,
> I think it quite likely that without libfontconfig you'll see JDK fall 
> flat on
> its face due to not being able to locate any fonts at all.
>
> -phil.
>
> On 7/18/2011 5:06 PM, Phil Race wrote:
>> On 7/18/11 4:13 PM, Steve Poole wrote:
>>> On 18/07/11 23:14, Phil Race wrote:
>>>> Ah you said it was AIX, not Linux. Still,  it should have that 
>>>> library installed
>>>> even if the de-ref is fixed.
>>>>
>>> Not on AIX - its completely optional - and as far we can tell (other 
>>> than this particular problem) nothing else bad happens.
>> If that's optional I assume a lot more is optional that needs to be 
>> installed
>> for a GUI app. But JDK on all unix flavours is very reliant on 
>> fontconfig to find
>> font files. I suggest to make fontconfig a pre-requisite for Java on 
>> AIX. Even server
>> apps use fonts more often than you'd expect.
>>
>> I didn't mean to just "cc" 2d, but to disconnect the discussion from 
>> core-libs
>> since its not related to core-libs in way at all.
>> Yes, its 2d because its font, I'm actually surprised that is a 
>> surprise ...
>>
>> -phil.
>>
>>>   Having said that I would expect customers to install the package - 
>>> this fix is simply a belt and braces change.
>>> I don't know why the attachment is missing  - here it is inline:
>>> ---
>>> diff --git a/src/solaris/classes/sun/font/FontConfigManager.java 
>>> b/src/solaris/classes/sun/font/FontConfigManager.java
>>> --- a/src/solaris/classes/sun/font/FontConfigManager.java
>>> +++ b/src/solaris/classes/sun/font/FontConfigManager.java
>>> @@ -348,6 +348,8 @@
>>>
>>>          initFontConfigFonts(false);
>>>
>>> +    if(fontConfigFonts==null) return null; // init failed
>>> +
>>>          FcCompFont fcInfo = null;
>>>          for (int i=0; i<fontConfigFonts.length; i++) {
>>>              if (name.equals(fontConfigFonts[i].fcFamily) &&
>>> ---
>>>
>>> By the way - why is this 2d?  because it's font?    Anyway I've cc'd 
>>> 2d-dev as you suggest.  Thanks for the quick response.
>>>
>>>
>>>> -phil.
>>>>
>>>> On 7/18/2011 3:12 PM, Phil Race wrote:
>>>>> Steve,
>>>>>
>>>>> There's no attachment .. and this should be discussed on 2d-dev, 
>>>>> not core-libs.
>>>>>
>>>>> I do see in the code where the null de-ref can happen. This is 
>>>>> some new JDK 7 code.
>>>>> Although a system where the library is missing is basically DOA 
>>>>> for client use.
>>>>> I'd suspect you are running 32 bit JDK on a 64 bit Linux which 
>>>>> hasn't had
>>>>> the 32 bit libs installed. If so, likely you'll run into other 
>>>>> problems too.
>>>>>
>>>>> -phil.
>>>>>
>>>>>
>>>>> On 7/18/2011 2:37 PM, Steve Poole wrote:
>>>>>>
>>>>>> Hi all, a problem was discovered on JDK7 when using the Nimbus 
>>>>>> L&F on a system where libfontconfig.so was not installed (On AIX 
>>>>>> actually but in theory on any unix system)
>>>>>>
>>>>>> Under the covers Nimbus uses the sun.font.FontConfigManager to 
>>>>>> retrieve fonts. sun.font.FontConfigManager in turn is intended to 
>>>>>> use (for a unix system) the libfontconfig.so system library if 
>>>>>> present.
>>>>>>
>>>>>> The code is intended to cope with the library being missing but 
>>>>>> it unfortunately doesn't. A array is referenced without checking 
>>>>>> if it is null. On systems where the system library is present 
>>>>>> this array is never null but in this specific case the array is 
>>>>>> null and the reference fails as follows.
>>>>>>
>>>>>>>>>>>> Exception in thread "main" java.lang.NullPointerException
>>>>>> at 
>>>>>> sun.font.FontConfigManager.getFontConfigFont(FontConfigManager.java:352) 
>>>>>>
>>>>>> at sun.awt.X11FontManager.getFontConfigFUIR(X11FontManager.java:817)
>>>>>> at sun.font.FontUtilities.getFontConfigFUIR(FontUtilities.java:472)
>>>>>> at 
>>>>>> javax.swing.plaf.nimbus.NimbusDefaults.<init>(NimbusDefaults.java:138)
>>>>>> at 
>>>>>> javax.swing.plaf.nimbus.NimbusLookAndFeel.<init>(NimbusLookAndFeel.java:100)
>>>>>> at Nimbus.main(Nimbus.java:6)
>>>>>>>>>>>>
>>>>>> The fix is trivial (see attached) and probably just tactical.
>>>>>>
>>>>>>
>>>>>> Cheers,
>>>>>>
>>>>>> Steve
>>>>>>
>>>>>
>>>>
>>>
>>
>




More information about the 2d-dev mailing list