aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichał Gołębiowski-Owczarek <m.goleb@gmail.com>2024-11-05 22:54:34 +0100
committerGitHub <noreply@github.com>2024-11-05 22:54:34 +0100
commitd5ebb464debab6ac39fe065e93c8a7ae1de8547e (patch)
treeae6831aeb0f5071a900b4e341bca93be493b1b2d
parent329661fd538a07993a2fcfa2a75fdd7f5667f86c (diff)
downloadjquery-d5ebb464debab6ac39fe065e93c8a7ae1de8547e.tar.gz
jquery-d5ebb464debab6ac39fe065e93c8a7ae1de8547e.zip
Build: Make middleware-mockserver not crash on reading nonexistent files
`fs.readFileSync` crashes when a non-existing file is passed to it. Some APIs of `middleware-mockserver` read a file the path of which depends on query parameters, making it possible to crash it by providing such a parameter. The old PHP server doesn't have these issues. To fix this, wrap all `fs.readFileSync` occurrences with a function that falls back to the string `"ERROR"`. Closes gh-5579
-rw-r--r--test/middleware-mockserver.cjs34
1 files changed, 25 insertions, 9 deletions
diff --git a/test/middleware-mockserver.cjs b/test/middleware-mockserver.cjs
index 73aaa5656..a07cb4798 100644
--- a/test/middleware-mockserver.cjs
+++ b/test/middleware-mockserver.cjs
@@ -8,6 +8,19 @@ const multiparty = require( "multiparty" );
let cspLog = "";
/**
+ * Like `readFileSync`, but on error returns "ERROR"
+ * without crashing.
+ * @param path
+ */
+function readFileSync( path ) {
+ try {
+ return fs.readFileSync( path );
+ } catch ( e ) {
+ return "ERROR";
+ }
+}
+
+/**
* Keep in sync with /test/mock.php
*/
function cleanCallback( callback ) {
@@ -143,7 +156,7 @@ const mocks = {
},
xmlOverJsonp: function( req, resp ) {
const callback = req.query.callback;
- const body = fs.readFileSync( `${ __dirname }/data/with_fries.xml` ).toString();
+ const body = readFileSync( `${ __dirname }/data/with_fries.xml` ).toString();
resp.writeHead( 200 );
resp.end( `${ cleanCallback( callback ) }(${ JSON.stringify( body ) })\n` );
},
@@ -238,8 +251,9 @@ const mocks = {
},
testHTML: function( req, resp ) {
resp.writeHead( 200, { "Content-Type": "text/html" } );
- const body = fs
- .readFileSync( `${ __dirname }/data/test.include.html` )
+ const body = readFileSync(
+ `${ __dirname }/data/test.include.html`
+ )
.toString()
.replace( /{{baseURL}}/g, req.query.baseURL );
resp.end( body );
@@ -250,17 +264,19 @@ const mocks = {
"Content-Security-Policy": "default-src 'self'; require-trusted-types-for 'script'; " +
"report-uri /test/data/mock.php?action=cspLog"
} );
- const body = fs.readFileSync( `${ __dirname }/data/csp.include.html` ).toString();
+ const body = readFileSync( `${ __dirname }/data/csp.include.html` ).toString();
resp.end( body );
},
cspNonce: function( req, resp ) {
- const testParam = req.query.test ? `-${ req.query.test }` : "";
+ const testParam = req.query.test ?
+ `-${ req.query.test.replace( /[^a-z0-9]/gi, "" ) }` :
+ "";
resp.writeHead( 200, {
"Content-Type": "text/html",
"Content-Security-Policy": "script-src 'nonce-jquery+hardcoded+nonce'; " +
"report-uri /test/data/mock.php?action=cspLog"
} );
- const body = fs.readFileSync(
+ const body = readFileSync(
`${ __dirname }/data/csp-nonce${ testParam }.html` ).toString();
resp.end( body );
},
@@ -270,7 +286,7 @@ const mocks = {
"Content-Security-Policy": "script-src 'self'; " +
"report-uri /test/data/mock.php?action=cspLog"
} );
- const body = fs.readFileSync(
+ const body = readFileSync(
`${ __dirname }/data/csp-ajax-script.html` ).toString();
resp.end( body );
},
@@ -290,7 +306,7 @@ const mocks = {
"Content-Security-Policy": "require-trusted-types-for 'script'; " +
"report-uri /test/data/mock.php?action=cspLog"
} );
- const body = fs.readFileSync( `${ __dirname }/data/trusted-html.html` ).toString();
+ const body = readFileSync( `${ __dirname }/data/trusted-html.html` ).toString();
resp.end( body );
},
trustedTypesAttributes: function( _req, resp ) {
@@ -299,7 +315,7 @@ const mocks = {
"Content-Security-Policy": "require-trusted-types-for 'script'; " +
"report-uri /test/data/mock.php?action=cspLog"
} );
- const body = fs.readFileSync(
+ const body = readFileSync(
`${ __dirname }/data/trusted-types-attributes.html` ).toString();
resp.end( body );
},