diff --git a/lib/XMLHttpRequest.js b/lib/XMLHttpRequest.js index f37edf0..b747fc5 100644 --- a/lib/XMLHttpRequest.js +++ b/lib/XMLHttpRequest.js @@ -14,6 +14,7 @@ var fs = require('fs'); var os = require('os'); var path = require('path'); +var fileURLToPath = require('url').fileURLToPath; var spawn = require('child_process').spawn; /** * Constants @@ -675,7 +676,7 @@ function XMLHttpRequest(opts) { } if (settings.async) { - fs.readFile(unescape(url.pathname), function(error, data) { + fs.readFile(fileURLToPath(url), function(error, data) { if (error) { handleError(error, error.errno || -1); } else { @@ -689,7 +690,7 @@ function XMLHttpRequest(opts) { } else { try { dataMap.status = 200; - const syncData = fs.readFileSync(unescape(url.pathname)); + const syncData = fs.readFileSync(fileURLToPath(url)); // Use self.responseType to create the correct self.responseType, self.response. dataMap.responseURL = settings.url; createResponse(syncData, ""); @@ -931,8 +932,8 @@ function XMLHttpRequest(opts) { + " response.destroy();" + " ++redirects_count;" + " if (redirects_count > maxRedirects) {" - + " fs.writeFileSync('" + contentFile + "', 'NODE-XMLHTTPREQUEST-ERROR-REDIRECT: Too many redirects', 'utf8');" - + " fs.unlinkSync('" + syncFile + "');" + + " fs.writeFileSync(" + JSON.stringify(contentFile) + ", 'NODE-XMLHTTPREQUEST-ERROR-REDIRECT: Too many redirects', 'utf8');" + + " fs.unlinkSync(" + JSON.stringify(syncFile) + ");" + " return;" + " }" + " try {" @@ -940,8 +941,8 @@ function XMLHttpRequest(opts) { + " if (url.protocol !== 'https:' && url.protocol !== 'http:') throw 'bad protocol';" + " }" + " catch (e) {" - + " fs.writeFileSync('" + contentFile + "', 'NODE-XMLHTTPREQUEST-ERROR-REDIRECT: Unsafe redirect', 'utf8');" - + " fs.unlinkSync('" + syncFile + "');" + + " fs.writeFileSync(" + JSON.stringify(contentFile) + ", 'NODE-XMLHTTPREQUEST-ERROR-REDIRECT: Unsafe redirect', 'utf8');" + + " fs.unlinkSync(" + JSON.stringify(syncFile) + ");" + " return;" + " };" + " isSsl = url.protocol === 'https:';" @@ -964,17 +965,17 @@ function XMLHttpRequest(opts) { + " });" + " response.on('end', function() {" + " responseData = concat(buffers);" - + " fs.writeFileSync('" + contentFile + "', JSON.stringify({err: null, data: { url: url.href, statusCode: response.statusCode, statusText: response.statusMessage, headers: response.headers }}), 'utf8');" - + " fs.writeFileSync('" + contentFile + ".bin', responseData);" - + " fs.unlinkSync('" + syncFile + "');" + + " fs.writeFileSync(" + JSON.stringify(contentFile) + ", JSON.stringify({err: null, data: { url: url.href, statusCode: response.statusCode, statusText: response.statusMessage, headers: response.headers }}), 'utf8');" + + " fs.writeFileSync(" + JSON.stringify(contentFile + '.bin') + ", responseData);" + + " fs.unlinkSync(" + JSON.stringify(syncFile) + ");" + " });" + " response.on('error', function(error) {" - + " fs.writeFileSync('" + contentFile + "', 'NODE-XMLHTTPREQUEST-ERROR:' + JSON.stringify(error), 'utf8');" - + " fs.unlinkSync('" + syncFile + "');" + + " fs.writeFileSync(" + JSON.stringify(contentFile) + ", 'NODE-XMLHTTPREQUEST-ERROR:' + JSON.stringify(error), 'utf8');" + + " fs.unlinkSync(" + JSON.stringify(syncFile) + ");" + " });" + " }).on('error', function(error) {" - + " fs.writeFileSync('" + contentFile + "', 'NODE-XMLHTTPREQUEST-ERROR:' + JSON.stringify(error), 'utf8');" - + " fs.unlinkSync('" + syncFile + "');" + + " fs.writeFileSync(" + JSON.stringify(contentFile) + ", 'NODE-XMLHTTPREQUEST-ERROR:' + JSON.stringify(error), 'utf8');" + + " fs.unlinkSync(" + JSON.stringify(syncFile) + ");" + " });" + " " + (data ? "req.write('" + JSON.stringify(data).slice(1,-1).replace(/'/g, "\\'") + "');":"") + " req.end();" diff --git a/tests/test-disallow-fs-resources.js b/tests/test-disallow-fs-resources.js index a244849..44fd270 100644 --- a/tests/test-disallow-fs-resources.js +++ b/tests/test-disallow-fs-resources.js @@ -1,4 +1,5 @@ var assert = require("assert") + , path = require("path") , XMLHttpRequest = require("../lib/XMLHttpRequest").XMLHttpRequest , xhr; @@ -19,7 +20,11 @@ xhr.onreadystatechange = function() { }; // Async -var url = "file://" + __dirname + "/testdata.txt"; +var p = (__dirname + "/testdata.txt").replaceAll(path.sep, path.posix.sep); +if (!p.startsWith('/')) { + p = "/" + p; +} +var url = "file://" + p; xhr.open("GET", url); xhr.send(); diff --git a/tests/test-max-redirects.js b/tests/test-max-redirects.js index 1afd3ec..82251ee 100644 --- a/tests/test-max-redirects.js +++ b/tests/test-max-redirects.js @@ -10,11 +10,11 @@ var runTest = function () { let xhr = new XMLHttpRequest({ maxRedirects: 10 }); xhr.open("GET", "http://localhost:8888/redirectingResource/10", false); xhr.onreadystatechange = function() { - if (xhr.readyState === 4) { - // assert.equal(xhr.getRequestHeader('Location'), ''); - assert.equal(xhr.responseText, "Hello World"); - console.log("safe redirects count: done"); - } + if (xhr.readyState === 4) { + // assert.equal(xhr.getRequestHeader('Location'), ''); + assert.equal(xhr.responseText, "Hello World"); + console.log("safe redirects count: done"); + } }; xhr.send(); } catch(e) { diff --git a/tests/test-request-protocols-binary-data.js b/tests/test-request-protocols-binary-data.js index 1a10344..657ef12 100644 --- a/tests/test-request-protocols-binary-data.js +++ b/tests/test-request-protocols-binary-data.js @@ -3,7 +3,7 @@ * Use xhr.responseType = "arraybuffer". */ 'use strict'; -var XMLHttpRequest = require("../lib/XMLHttpRequest").XMLHttpRequest +var XMLHttpRequest = require("../lib/XMLHttpRequest").XMLHttpRequest; const supressConsoleOutput = true; function log (_) {