Skip to content

Commit 863b181

Browse files
committed
metadata readers need some try/catches
1 parent 379ef39 commit 863b181

1 file changed

Lines changed: 43 additions & 28 deletions

File tree

src/wwwroot/js/genpage/helpers/metadatahelpers.js

Lines changed: 43 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -128,16 +128,21 @@ function interpretMetadata(metadata) {
128128
}
129129

130130
function canvasReadBinaryAlpha(canvas, ctx, length) {
131-
let data = '';
132-
for (let x = 0; x < canvas.width; x++) {
133-
for (let y = 0; y < canvas.height; y++) {
134-
let pixel = ctx.getImageData(x, y, 1, 1).data;
135-
data += (pixel[3] & 0x01) == 0 ? '0' : '1';
136-
if (data.length >= length * 8) {
137-
return data;
131+
try {
132+
let data = '';
133+
for (let x = 0; x < canvas.width; x++) {
134+
for (let y = 0; y < canvas.height; y++) {
135+
let pixel = ctx.getImageData(x, y, 1, 1).data;
136+
data += (pixel[3] & 0x01) == 0 ? '0' : '1';
137+
if (data.length >= length * 8) {
138+
return data;
139+
}
138140
}
139141
}
140142
}
143+
catch (e) {
144+
console.error(`Error reading binary alpha: ${e}`);
145+
}
141146
return null;
142147
}
143148

@@ -161,33 +166,42 @@ function parseMetadata(data, callback) {
161166
let img = new Image();
162167
img.src = data;
163168
img.onload = () => {
164-
let canvas = document.createElement('canvas');
165-
canvas.width = img.width;
166-
canvas.height = img.height;
167-
let ctx = canvas.getContext('2d');
168-
ctx.drawImage(img, 0, 0);
169-
let alphaData = canvasReadBinaryAlpha(canvas, ctx, "stealth_pnginfo".length + 4);
170-
let headerBytes = binaryStringToBytes(alphaData);
171-
let headerType = new TextDecoder().decode(new Uint8Array(headerBytes.slice(0, "stealth_pnginfo".length)));
172-
if (headerType == "stealth_pnginfo" || headerType == "stealth_pngcomp") {
173-
let dataLengthBytes = headerBytes.slice("stealth_pnginfo".length);
174-
let dataLength = bytesToInt32(dataLengthBytes) / 8;
175-
let alphaContent = canvasReadBinaryAlpha(canvas, ctx, dataLength + "stealth_pnginfo".length + 4);
176-
let metadataBytes = new Uint8Array(binaryStringToBytes(alphaContent).slice("stealth_pnginfo".length + 4));
177-
if (headerType == "stealth_pngcomp") {
178-
ungzip(metadataBytes).then(decompressed => {
179-
let metadata = new TextDecoder().decode(decompressed);
169+
try {
170+
let canvas = document.createElement('canvas');
171+
canvas.width = img.width;
172+
canvas.height = img.height;
173+
let ctx = canvas.getContext('2d');
174+
ctx.drawImage(img, 0, 0);
175+
let alphaData = canvasReadBinaryAlpha(canvas, ctx, "stealth_pnginfo".length + 4);
176+
let headerBytes = binaryStringToBytes(alphaData);
177+
let headerType = new TextDecoder().decode(new Uint8Array(headerBytes.slice(0, "stealth_pnginfo".length)));
178+
if (headerType == "stealth_pnginfo" || headerType == "stealth_pngcomp") {
179+
let dataLengthBytes = headerBytes.slice("stealth_pnginfo".length);
180+
let dataLength = bytesToInt32(dataLengthBytes) / 8;
181+
let alphaContent = canvasReadBinaryAlpha(canvas, ctx, dataLength + "stealth_pnginfo".length + 4);
182+
let metadataBytes = new Uint8Array(binaryStringToBytes(alphaContent).slice("stealth_pnginfo".length + 4));
183+
if (headerType == "stealth_pngcomp") {
184+
ungzip(metadataBytes).then(decompressed => {
185+
let metadata = new TextDecoder().decode(decompressed);
186+
metadata = interpretMetadata(metadata);
187+
callback(data, metadata);
188+
}).catch(err => {
189+
console.error(`Error unzipping metadata (stealth): ${err}`);
190+
callback(data, null);
191+
});
192+
}
193+
else {
194+
let metadata = new TextDecoder().decode(metadataBytes);
180195
metadata = interpretMetadata(metadata);
181196
callback(data, metadata);
182-
});
197+
}
183198
}
184199
else {
185-
let metadata = new TextDecoder().decode(metadataBytes);
186-
metadata = interpretMetadata(metadata);
187-
callback(data, metadata);
200+
callback(data, null);
188201
}
189202
}
190-
else {
203+
catch (e) {
204+
console.error(`Error parsing metadata (stealth): ${e}`);
191205
callback(data, null);
192206
}
193207
};
@@ -210,6 +224,7 @@ function parseMetadata(data, callback) {
210224
metadata = interpretMetadata(metadata);
211225
callback(data, metadata);
212226
}).catch(err => {
227+
console.error(`Error parsing metadata (exif): ${err}`);
213228
backupPlan();
214229
});
215230
}

0 commit comments

Comments
 (0)