Browse Source

LoaderUtils: Catch URIError error in .decodeText()

Mugen87 6 years ago
parent
commit
c0615ecec4
2 changed files with 14 additions and 2 deletions
  1. 11 2
      src/loaders/LoaderUtils.js
  2. 3 0
      test/unit/src/loaders/LoaderUtils.tests.js

+ 11 - 2
src/loaders/LoaderUtils.js

@@ -24,8 +24,17 @@ var LoaderUtils = {
 
 		}
 
-		// Merges multi-byte utf-8 characters.
-		return decodeURIComponent( escape( s ) );
+		try {
+
+			// merges multi-byte utf-8 characters.
+
+			return decodeURIComponent( escape( s ) );
+
+		} catch ( e ) { // see #16358
+
+			return s;
+
+		}
 
 	},
 

+ 3 - 0
test/unit/src/loaders/LoaderUtils.tests.js

@@ -18,6 +18,9 @@ export default QUnit.module( 'Loaders', () => {
 			var multibyteArray = new Uint8Array( [ 230, 151, 165, 230, 156, 172, 229, 155, 189 ] );
 			assert.equal( '日本国', LoaderUtils.decodeText( multibyteArray ) );
 
+			var uriError = new Uint8Array( [ 219 ] );
+			assert.equal( 'Û', LoaderUtils.decodeText( uriError ) );
+
 		} );
 
 		QUnit.test( 'extractUrlBase', ( assert ) => {