Ver Fonte

don't decode resources that are larger than the maximum size

Gildas há 7 anos atrás
pai
commit
061d0332bb
1 ficheiros alterados com 18 adições e 23 exclusões
  1. 18 23
      lib/single-file/single-file-browser.js

+ 18 - 23
lib/single-file/single-file-browser.js

@@ -90,19 +90,19 @@ this.SingleFile = this.SingleFile || (() => {
 			}
 			if (options && options.asDataURI) {
 				try {
-					const buffer = await resourceContent.arrayBuffer();
 					if (DEBUG) {
 						log("  // ENDED   download url =", resourceURL, "delay =", Date.now() - startTime);
 					}
-					const reader = new FileReader();
-					reader.readAsDataURL(new Blob([buffer], { type: contentType }));
-					const dataURI = await new Promise((resolve, reject) => {
-						reader.addEventListener("load", () => resolve(reader.result), false);
-						reader.addEventListener("error", reject, false);
-					});
+					const buffer = await resourceContent.arrayBuffer();
 					if (options.maxResourceSizeEnabled && buffer.byteLength > options.maxResourceSize * ONE_MB) {
 						return "data:base64,";
 					} else {
+						const reader = new FileReader();
+						reader.readAsDataURL(new Blob([buffer], { type: contentType }));
+						const dataURI = await new Promise((resolve, reject) => {
+							reader.addEventListener("load", () => resolve(reader.result), false);
+							reader.addEventListener("error", reject, false);
+						});
 						return dataURI;
 					}
 				} catch (error) {
@@ -121,37 +121,32 @@ this.SingleFile = this.SingleFile || (() => {
 				if (!charSet) {
 					charSet = "utf-8";
 				}
-				let arrayBuffer;
+				let buffer;
 				try {
-					arrayBuffer = await resourceContent.arrayBuffer();
+					buffer = await resourceContent.arrayBuffer();
 				} catch (error) {
 					return "";
 				}
 				if (DEBUG) {
 					log("  // ENDED   download url =", resourceURL, "delay =", Date.now() - startTime);
 				}
-				try {
-					return getTextContent(charSet, arrayBuffer, options);
-				} catch (error) {
+				if (options.maxResourceSizeEnabled && buffer.byteLength > options.maxResourceSize * ONE_MB) {
+					return "";
+				} else {
 					try {
-						return getTextContent("utf-8", arrayBuffer, options);
+						return new TextDecoder(charSet).decode(buffer);
 					} catch (error) {
-						return "";
+						try {
+							return new TextDecoder("utf-8").decode(buffer);
+						} catch (error) {
+							return "";
+						}
 					}
 				}
 			}
 		}
 	}
 
-	function getTextContent(charSet, arrayBuffer, options) {
-		const textContent = (new TextDecoder(charSet)).decode(arrayBuffer);
-		if (options.maxResourceSizeEnabled && textContent.length > options.maxResourceSize * ONE_MB) {
-			return "";
-		} else {
-			return textContent;
-		}
-	}
-
 	// https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/digest
 	function hex(buffer) {
 		var hexCodes = [];