Skip to content

Commit 66f95dd

Browse files
Generalize reading of bytes for woff format conversion
DEVSIX-1148
1 parent 3873717 commit 66f95dd

File tree

1 file changed

+16
-1
lines changed

1 file changed

+16
-1
lines changed

io/src/main/java/com/itextpdf/io/font/FontProgramFactory.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,13 @@ This file is part of the iText (R) project.
4444
package com.itextpdf.io.font;
4545

4646
import com.itextpdf.io.IOException;
47+
import com.itextpdf.io.source.IRandomAccessSource;
48+
import com.itextpdf.io.source.RandomAccessFileOrArray;
49+
import com.itextpdf.io.source.RandomAccessSourceFactory;
4750
import com.itextpdf.io.util.StreamUtil;
4851

4952
import java.io.FileInputStream;
53+
import java.text.MessageFormat;
5054
import java.util.Set;
5155

5256
/**
@@ -199,7 +203,7 @@ public static FontProgram createFont(String name, byte[] fontProgram, boolean ca
199203
} else if (".ttf".equals(fontFileExtension) || ".otf".equals(fontFileExtension) || ".woff".equals(fontFileExtension)) {
200204
if (".woff".equals(fontFileExtension)) {
201205
if (fontProgram == null) {
202-
fontProgram = StreamUtil.inputStreamToArray(new FileInputStream(name));
206+
fontProgram = readBytesFromPath(name);
203207
}
204208
try {
205209
fontProgram = WoffConverter.convert(fontProgram);
@@ -485,4 +489,15 @@ private static FontCacheKey createFontCacheKey(String name, byte[] fontProgram)
485489
public static void clearRegisteredFonts() { fontRegisterProvider.clearRegisteredFonts(); }
486490

487491
public static void clearRegisteredFontFamilies() { fontRegisterProvider.clearRegisteredFontFamilies(); }
492+
493+
private static byte[] readBytesFromPath(String path) throws java.io.IOException {
494+
RandomAccessFileOrArray raf = new RandomAccessFileOrArray(new RandomAccessSourceFactory().createBestSource(path));
495+
int bufLen = (int) raf.length();
496+
if (bufLen < raf.length()) {
497+
throw new IOException(MessageFormat.format("Source data from \"{0}\" is bigger than byte array can hold.", path));
498+
}
499+
byte[] buf = new byte[bufLen];
500+
raf.readFully(buf);
501+
return buf;
502+
}
488503
}

0 commit comments

Comments
 (0)