1
0
Fork 0
mirror of https://github.com/mozilla/pdf.js.git synced 2025-04-19 14:48:08 +02:00

Merge pull request #19333 from Snuffleupagus/src-core-fetchBinaryData

Handle JPX wasm fetch-response errors correctly (PR 19329 follow-up)
This commit is contained in:
Jonas Jenwald 2025-01-17 11:29:12 +01:00 committed by GitHub
commit 851a52faf3
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 24 additions and 17 deletions

View file

@ -103,6 +103,16 @@ function arrayBuffersToBytes(arr) {
return data;
}
async function fetchBinaryData(url) {
const response = await fetch(url);
if (!response.ok) {
throw new Error(
`Failed to fetch file "${url}" with "${response.statusText}".`
);
}
return new Uint8Array(await response.arrayBuffer());
}
/**
* Get the value of an inheritable property.
*
@ -701,6 +711,7 @@ export {
encodeToXmlString,
escapePDFName,
escapeString,
fetchBinaryData,
getInheritableProperty,
getLookupTableFactory,
getNewAnnotationsMap,

View file

@ -32,6 +32,12 @@ import {
import { CMapFactory, IdentityCMap } from "./cmap.js";
import { Cmd, Dict, EOF, isName, Name, Ref, RefSet } from "./primitives.js";
import { ErrorFont, Font } from "./fonts.js";
import {
fetchBinaryData,
isNumberArray,
lookupMatrix,
lookupNormalRect,
} from "./core_utils.js";
import {
getEncoding,
MacRomanEncoding,
@ -51,7 +57,6 @@ import {
import { getTilingPatternIR, Pattern } from "./pattern.js";
import { getXfaFontDict, getXfaFontName } from "./xfa_fonts.js";
import { IdentityToUnicodeMap, ToUnicodeMap } from "./to_unicode_map.js";
import { isNumberArray, lookupMatrix, lookupNormalRect } from "./core_utils.js";
import { isPDFFunction, PDFFunctionFactory } from "./function.js";
import { Lexer, Parser } from "./parser.js";
import {
@ -382,16 +387,6 @@ class PartialEvaluator {
return false;
}
async #fetchData(url) {
const response = await fetch(url);
if (!response.ok) {
throw new Error(
`Failed to fetch file "${url}" with "${response.statusText}".`
);
}
return new Uint8Array(await response.arrayBuffer());
}
async fetchBuiltInCMap(name) {
const cachedData = this.builtInCMapCache.get(name);
if (cachedData) {
@ -401,7 +396,7 @@ class PartialEvaluator {
if (this.options.cMapUrl !== null) {
// Only compressed CMaps are (currently) supported here.
const cMapData = await this.#fetchData(
const cMapData = await fetchBinaryData(
`${this.options.cMapUrl}${name}.bcmap`
);
data = { cMapData, isCompressed: true };
@ -437,7 +432,7 @@ class PartialEvaluator {
try {
if (this.options.standardFontDataUrl !== null) {
data = await this.#fetchData(
data = await fetchBinaryData(
`${this.options.standardFontDataUrl}${filename}`
);
} else {

View file

@ -14,6 +14,7 @@
*/
import { BaseException, warn } from "../shared/util.js";
import { fetchBinaryData } from "./core_utils.js";
import OpenJPEG from "../../external/openjpeg/openjpeg.js";
import { Stream } from "./stream.js";
@ -44,14 +45,14 @@ class JpxImage {
}
static async #instantiateWasm(imports, successCallback) {
const filename = "openjpeg.wasm";
try {
if (!this.#buffer) {
if (this.#wasmUrl !== null) {
const response = await fetch(`${this.#wasmUrl}openjpeg.wasm`);
this.#buffer = await response.arrayBuffer();
this.#buffer = await fetchBinaryData(`${this.#wasmUrl}${filename}`);
} else {
this.#buffer = await this.#handler.sendWithPromise("FetchWasm", {
filename: "openjpeg.wasm",
filename,
});
}
}
@ -59,7 +60,7 @@ class JpxImage {
return successCallback(results.instance);
} catch (e) {
this.#instantiationFailed = true;
warn(`Cannot load openjpeg.wasm: "${e}".`);
warn(`Cannot load ${filename}: "${e}".`);
return false;
} finally {
this.#handler = null;