diff --git a/jdk/src/java.desktop/share/classes/sun/font/CompositeFont.java b/jdk/src/java.desktop/share/classes/sun/font/CompositeFont.java index f2defd79771..7b19bb362cb 100644 --- a/jdk/src/java.desktop/share/classes/sun/font/CompositeFont.java +++ b/jdk/src/java.desktop/share/classes/sun/font/CompositeFont.java @@ -71,6 +71,13 @@ public final class CompositeFont extends Font2D { } else { numSlots = componentNames.length; } + /* We will limit the number of slots to 254. + * We store the slot for a glyph id in a byte and we may use one slot + * for an EUDC font, and we may also create a composite + * using this composite as a backup for a physical font. + * So we want to leave space for the two additional slots. + */ + numSlots = (numSlots <= 254) ? numSlots : 254; /* Only the first "numMetricsSlots" slots are used for font metrics. * the rest are considered "fallback" slots". diff --git a/jdk/src/java.desktop/share/classes/sun/font/FileFontStrike.java b/jdk/src/java.desktop/share/classes/sun/font/FileFontStrike.java index 7fb9f65c7ab..f5c478fb517 100644 --- a/jdk/src/java.desktop/share/classes/sun/font/FileFontStrike.java +++ b/jdk/src/java.desktop/share/classes/sun/font/FileFontStrike.java @@ -420,14 +420,13 @@ public class FileFontStrike extends PhysicalStrike { /* The following method is called from CompositeStrike as a special case. */ - private static final int SLOTZEROMAX = 0xffffff; int getSlot0GlyphImagePtrs(int[] glyphCodes, long[] images, int len) { int convertedCnt = 0; for (int i=0; i= SLOTZEROMAX) { + if (glyphCode >>> 24 != 0) { return convertedCnt; } else { convertedCnt++; diff --git a/jdk/src/java.desktop/unix/native/common/awt/fontpath.c b/jdk/src/java.desktop/unix/native/common/awt/fontpath.c index cc317cdb10e..674931b4410 100644 --- a/jdk/src/java.desktop/unix/native/common/awt/fontpath.c +++ b/jdk/src/java.desktop/unix/native/common/awt/fontpath.c @@ -1219,10 +1219,11 @@ Java_sun_font_FontConfigManager_getFontConfig minGlyphs = val; } } + FcCharSet *unionCharset = NULL; for (j=0; jfonts[j]; FcChar8 *fontformat; - FcCharSet *unionCharset = NULL, *charset; + FcCharSet *charset = NULL; fontformat = NULL; (*FcPatternGetString)(fontPattern, FC_FONTFORMAT, 0, &fontformat); @@ -1280,6 +1281,9 @@ Java_sun_font_FontConfigManager_getFontConfig if (!includeFallbacks) { break; } + if (fontCount == 254) { + break; // CompositeFont will only use up to 254 slots from here. + } } /* Once we get here 'fontCount' is the number of returned fonts