1
0
mirror of https://github.com/matt-fidd/stratos.git synced 2026-01-01 22:19:26 +00:00

Added database query parameter sanitisation to replace nullish values with null

This commit is contained in:
2022-02-13 21:58:30 +00:00
parent f059da2a09
commit 2de64cdf40

View File

@@ -38,7 +38,8 @@ class DatabaseConnectionPool {
* Sanitise and validate an sql query * Sanitise and validate an sql query
* *
* @param {string} sql The query to be executed * @param {string} sql The query to be executed
* @param {(Array<string|number>)} Values to replace prepared statement * @param {(Array<string|number|null|undefined>)} params
* Values to replace prepared statement
* *
* @return {string} Sanitised and validated sql query * @return {string} Sanitised and validated sql query
*/ */
@@ -57,9 +58,29 @@ class DatabaseConnectionPool {
} else if (prepared && params.length !== expectedParams) { } else if (prepared && params.length !== expectedParams) {
throw new Error('Number of params does not equal ' + throw new Error('Number of params does not equal ' +
'expected number'); 'expected number');
} else if (prepared) {
params = DatabaseConnectionPool.sanitiseParams(params);
} }
return sql; return [ sql, params ];
}
/**
* Sanitise the parameters for a prepared sql statement
*
* @param {(Array<string|number|null|undefined>)} params
* Values to replace prepared statement
*
* @return {(Array<string|number|null|undefined)} Sanitised params
*/
static sanitiseParams(params) {
const newParams = [];
params.forEach(param => {
newParams.push(param ?? null);
});
return newParams;
} }
/** /**
@@ -71,7 +92,8 @@ class DatabaseConnectionPool {
* @return {(Array<object>|object)} Data returned from the database * @return {(Array<object>|object)} Data returned from the database
*/ */
async runQuery(sql, params) { async runQuery(sql, params) {
sql = this.validateQuery(sql, params); [ sql, params ] =
DatabaseConnectionPool.validateQuery(sql, params);
const prepared = sql.includes('?'); const prepared = sql.includes('?');
let data; let data;