Author: tilman
Date: Wed Sep 2 18:01:42 2026
New Revision: 1937787
Log:
PDFBOX-2941: avoid exceptions
Modified:
pdfbox/branches/2.0/debugger/src/main/java/org/apache/pdfbox/debugger/flagbitspane/PanoseFlag.java
Modified:
pdfbox/branches/2.0/debugger/src/main/java/org/apache/pdfbox/debugger/flagbitspane/PanoseFlag.java
==============================================================================
---
pdfbox/branches/2.0/debugger/src/main/java/org/apache/pdfbox/debugger/flagbitspane/PanoseFlag.java
Wed Sep 2 17:57:33 2026 (r1937786)
+++
pdfbox/branches/2.0/debugger/src/main/java/org/apache/pdfbox/debugger/flagbitspane/PanoseFlag.java
Wed Sep 2 18:01:42 2026 (r1937787)
@@ -17,11 +17,18 @@
package org.apache.pdfbox.debugger.flagbitspane;
+import java.util.Arrays;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import org.apache.pdfbox.cos.COSBase;
import org.apache.pdfbox.cos.COSDictionary;
import org.apache.pdfbox.cos.COSName;
import org.apache.pdfbox.cos.COSString;
import org.apache.pdfbox.pdmodel.font.PDPanose;
import org.apache.pdfbox.pdmodel.font.PDPanoseClassification;
+import org.apache.pdfbox.util.Hex;
/**
* @author Khyrul Bashar
@@ -29,9 +36,9 @@ import org.apache.pdfbox.pdmodel.font.PD
*/
class PanoseFlag extends Flag
{
+ private static final Log LOG = LogFactory.getLog(PanoseFlag.class);
private final byte[] bytes;
- private final COSString byteValue;
/**
* Constructor.
@@ -39,8 +46,21 @@ class PanoseFlag extends Flag
*/
PanoseFlag(COSDictionary dictionary)
{
- byteValue = (COSString) dictionary.getDictionaryObject(COSName.PANOSE);
- bytes = byteValue.getBytes();
+ COSBase base = dictionary.getDictionaryObject(COSName.PANOSE);
+ if (base instanceof COSString)
+ {
+ byte[] tmp = ((COSString) base).getBytes();
+ if (tmp.length != PDPanose.LENGTH)
+ {
+ LOG.warn("Panose string length adjusted");
+ }
+ bytes = Arrays.copyOf(tmp, PDPanose.LENGTH);
+ }
+ else
+ {
+ LOG.error("Panose string missing");
+ bytes = new byte[PDPanose.LENGTH];
+ }
}
@Override
@@ -52,7 +72,7 @@ class PanoseFlag extends Flag
@Override
String getFlagValue()
{
- return "Panose byte :" + byteValue.toHexString();
+ return "Panose byte: " + Hex.getString(bytes);
}
@Override
@@ -93,29 +113,34 @@ class PanoseFlag extends Flag
private String getSerifStyleValue(int index)
{
- return new String[]{
- "Any",
- "No Fit",
- "Cove",
- "Obtuse Cove",
- "Square Cove",
- "Obtuse Square Cove",
- "Square",
- "Thin",
- "Oval",
- "Exaggerated",
- "Triangle",
- "Normal Sans",
- "Obtuse Sans",
- "Perpendicular Sans",
- "Flared",
- "Rounded"
- }[index];
+ String[] values = new String[]{
+ "Any",
+ "No Fit",
+ "Cove",
+ "Obtuse Cove",
+ "Square Cove",
+ "Obtuse Square Cove",
+ "Square",
+ "Thin",
+ "Oval",
+ "Exaggerated",
+ "Triangle",
+ "Normal Sans",
+ "Obtuse Sans",
+ "Perpendicular Sans",
+ "Flared",
+ "Rounded"
+ };
+ if (index >= values.length)
+ {
+ return "invalid value";
+ }
+ return values[index];
}
private String getWeightValue(int index)
{
- return new String[]{
+ String[] values = new String[]{
"Any",
"No Fit",
"Very Light",
@@ -128,12 +153,17 @@ class PanoseFlag extends Flag
"Heavy",
"Black",
"Extra Black"
- }[index];
+ };
+ if (index >= values.length)
+ {
+ return "invalid value";
+ }
+ return values[index];
}
private String getProportionValue(int index)
{
- return new String[]{
+ String[] values = new String[]{
"Any",
"No fit",
"Old Style",
@@ -144,12 +174,17 @@ class PanoseFlag extends Flag
"Very Extended",
"Very Condensed",
"Monospaced"
- }[index];
+ };
+ if (index >= values.length)
+ {
+ return "invalid value";
+ }
+ return values[index];
}
private String getContrastValue(int index)
{
- return new String[]{
+ String[] values = new String[]{
"Any",
"No Fit",
"None",
@@ -160,12 +195,17 @@ class PanoseFlag extends Flag
"Medium High",
"High",
"Very High"
- }[index];
+ };
+ if (index >= values.length)
+ {
+ return "invalid value";
+ }
+ return values[index];
}
private String getStrokeVariationValue(int index)
{
- return new String[]{
+ String[] values = new String[]{
"Any",
"No Fit",
"No Variation",
@@ -177,12 +217,17 @@ class PanoseFlag extends Flag
"Rapid/Horizontal",
"Instant/Vertical",
"Instant/Horizontal",
- }[index];
+ };
+ if (index >= values.length)
+ {
+ return "invalid value";
+ }
+ return values[index];
}
private String getArmStyleValue(int index)
{
- return new String[]{
+ String[] values = new String[]{
"Any",
"No Fit",
"Straight Arms/Horizontal",
@@ -195,12 +240,17 @@ class PanoseFlag extends Flag
"Non-Straight/Vertical",
"Non-Straight/Single Serif",
"Non-Straight/Double Serif",
- }[index];
+ };
+ if (index >= values.length)
+ {
+ return "invalid value";
+ }
+ return values[index];
}
private String getLetterformValue(int index)
{
- return new String[]{
+ String[] values = new String[]{
"Any",
"No Fit",
"Normal/Contact",
@@ -217,12 +267,17 @@ class PanoseFlag extends Flag
"Oblique/Rounded",
"Oblique/Off Center",
"Oblique/Square",
- }[index];
+ };
+ if (index >= values.length)
+ {
+ return "invalid value";
+ }
+ return values[index];
}
private String getMidlineValue(int index)
{
- return new String[]{
+ String[] values = new String[]{
"Any",
"No Fit",
"Standard/Trimmed",
@@ -237,12 +292,17 @@ class PanoseFlag extends Flag
"Low/Trimmed",
"Low/Pointed",
"Low/Serifed"
- }[index];
+ };
+ if (index >= values.length)
+ {
+ return "invalid value";
+ }
+ return values[index];
}
private String getXHeightValue(int index)
{
- return new String[]{
+ String[] values = new String[]{
"Any",
"No Fit",
"Constant/Small",
@@ -251,6 +311,11 @@ class PanoseFlag extends Flag
"Ducking/Small",
"Ducking/Standard",
"Ducking/Large",
- }[index];
+ };
+ if (index >= values.length)
+ {
+ return "invalid value";
+ }
+ return values[index];
}
}