mirror of
https://github.com/laurent22/joplin.git
synced 2024-12-24 10:27:10 +02:00
Fixed crash when calling fetch() with invalid URL in RN app
This commit is contained in:
parent
5cb5ccc781
commit
2805ae2acf
@ -4,6 +4,7 @@ const { PoorManIntervals } = require('lib/poor-man-intervals.js');
|
||||
const RNFetchBlob = require('react-native-fetch-blob').default;
|
||||
const { generateSecureRandom } = require('react-native-securerandom');
|
||||
const FsDriverRN = require('lib/fs-driver-rn.js').FsDriverRN;
|
||||
const urlValidator = require('valid-url');
|
||||
|
||||
function shimInit() {
|
||||
shim.Geolocation = GeolocationReact;
|
||||
@ -27,20 +28,15 @@ function shimInit() {
|
||||
}
|
||||
|
||||
shim.fetch = async function(url, options = null) {
|
||||
// The native fetch() throws an uncatable error that crashes the app if calling it with an
|
||||
// invalid URL such as '//.resource' or "http://ocloud. de" so detect if the URL is valid beforehand
|
||||
// and throw a catchable error.
|
||||
// Bug: https://github.com/facebook/react-native/issues/7436
|
||||
const validatedUrl = urlValidator.isUri(url);
|
||||
if (!validatedUrl) throw new Error('Not a valid URL: ' + url);
|
||||
|
||||
return shim.fetchWithRetry(() => {
|
||||
// The native fetch() throws an uncatable error if calling it with an invalid URL
|
||||
// such as '//.resource' so detect if the URL is valid beforehand and throw
|
||||
// a catchable error.
|
||||
|
||||
if (typeof url !== 'string') {
|
||||
console.info('NOT A STRING: ', url);
|
||||
throw new Error('shim.fetch: URL is not a string');
|
||||
}
|
||||
|
||||
const lcUrl = url.toLowerCase();
|
||||
if (lcUrl.indexOf('http:') !== 0 && lcUrl.indexOf('https:') !== 0) throw new Error('shim.fetch: Invalid URL: ' + lcUrl);
|
||||
|
||||
return shim.nativeFetch_(url, options);
|
||||
return fetch(validatedUrl, options);
|
||||
}, options);
|
||||
}
|
||||
|
||||
|
@ -104,7 +104,6 @@ shim.fetchWithRetry = async function(fetchFn, options = null) {
|
||||
}
|
||||
}
|
||||
|
||||
shim.nativeFetch_ = typeof fetch !== 'undefined' ? fetch : null;
|
||||
shim.fetch = () => { throw new Error('Not implemented'); }
|
||||
shim.FormData = typeof FormData !== 'undefined' ? FormData : null;
|
||||
shim.fsDriver = () => { throw new Error('Not implemented') }
|
||||
|
5
ReactNativeClient/package-lock.json
generated
5
ReactNativeClient/package-lock.json
generated
@ -6030,6 +6030,11 @@
|
||||
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz",
|
||||
"integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g=="
|
||||
},
|
||||
"valid-url": {
|
||||
"version": "1.0.9",
|
||||
"resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz",
|
||||
"integrity": "sha1-HBRHm0DxOXp1eC8RXkCGRHQzogA="
|
||||
},
|
||||
"validate-npm-package-license": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz",
|
||||
|
@ -45,6 +45,7 @@
|
||||
"timers": "^0.1.1",
|
||||
"url-parse": "^1.2.0",
|
||||
"uuid": "^3.0.1",
|
||||
"valid-url": "^1.0.9",
|
||||
"word-wrap": "^1.2.3",
|
||||
"xml2js": "^0.4.19"
|
||||
},
|
||||
|
Loading…
Reference in New Issue
Block a user