From af5d5160227ab955c5fbc4eb8976604d88f4cfed Mon Sep 17 00:00:00 2001 From: Matteo Stura Date: Thu, 2 Dec 2021 14:33:21 +0100 Subject: [PATCH] fixed json parse induced crashes --- server/about/router.js | 16 ++++++++++------ server/compare/lib/compare.js | 8 +++++++- server/compare/router.js | 9 ++++++--- server/lib/business-criteria-map.js | 19 ++++++++++++------- server/lib/filterDeprecated.js | 11 ++++++++--- server/lib/glob.js | 10 ++++++++-- server/lib/readFile.js | 12 ++++++++++-- server/lib/ruleDetailsStruct.js | 13 +++++++++---- server/lib/standardNotApplicable.js | 19 ++++++++++++------- server/lib/standards-map.js | 3 ++- 10 files changed, 84 insertions(+), 36 deletions(-) diff --git a/server/about/router.js b/server/about/router.js index 18d1e16375..d1577cafc6 100644 --- a/server/about/router.js +++ b/server/about/router.js @@ -20,12 +20,16 @@ aboutRouter.get(main, (req,res)=>{ errLogger.error( err ); res.status(500).send({error: 'a problem occured'}); } - const changeLog = JSON.parse(data); - res.json({ - licence: fileContents, - version: jsonData.version, - news: changeLog[jsonData.version] || [] - }); + try { + const changeLog = JSON.parse(data); + res.json({ + licence: fileContents, + version: jsonData.version, + news: changeLog[jsonData.version] || [] + }); + } catch (error) { + res.sendStatus(502); + } }); }, undefined, (e) => { errLogger.error( e ); diff --git a/server/compare/lib/compare.js b/server/compare/lib/compare.js index 7a89a092cb..40b7d385fc 100644 --- a/server/compare/lib/compare.js +++ b/server/compare/lib/compare.js @@ -23,7 +23,13 @@ function compareOnId( arr1, arr2, arr1Name, arr2Name, middleware ){ } function compareOnJSON( arr1, arr2, arr1Name, arr2Name, middleware ){ - const compareValueConverter = ( item ) => JSON.stringify(item), + const compareValueConverter = ( item ) => { + try { + return JSON.stringify(item); + } catch (error) { + return; + } + }, data = compareArrays( arr1, arr2, arr1Name, arr2Name, compareValueConverter ); return middleware ? middleware(data) : data ; diff --git a/server/compare/router.js b/server/compare/router.js index 847628ab2b..4770b568fc 100644 --- a/server/compare/router.js +++ b/server/compare/router.js @@ -31,9 +31,12 @@ compareRouter.get('/extensions/:extID/:ver1/:ver2', (req, res) => { } logger.info(params); - - if( params.isValid ) res.json(compareOnId( JSON.parse(fs.readFileSync(verPath(params.version1))), JSON.parse(fs.readFileSync(verPath(params.version2))), params.version1, params.version2, sortAndRemoveDeprecated )); - else res.sendStatus(404); + try { + if( params.isValid ) res.json(compareOnId( JSON.parse(fs.readFileSync(verPath(params.version1))), JSON.parse(fs.readFileSync(verPath(params.version2))), params.version1, params.version2, sortAndRemoveDeprecated )); + else res.sendStatus(404); + } catch (error) { + res.sendStatus(404); + } } else { const AIPPath = ( version ) => root.resolve(`rest/AIP/versions/${version}/quality-rules.json`); res.json(compareOnId( JSON.parse(fs.readFileSync(AIPPath(params.version1))), JSON.parse(fs.readFileSync(AIPPath(params.version2))), params.version1, params.version2, sortAndRemoveDeprecated )); diff --git a/server/lib/business-criteria-map.js b/server/lib/business-criteria-map.js index 24136a2149..9dacc89cef 100644 --- a/server/lib/business-criteria-map.js +++ b/server/lib/business-criteria-map.js @@ -17,14 +17,19 @@ function getQualityStandardsMap ( response, sync = false, echo ){ if (err) { console.log(err); } - const ret = JSON.parse(data).map( e => { - return Object.assign( {}, e, { - standard: 'CAST', - icon: 'img/' + e.name.toLowerCase().replace(/\s/, '') + '.svg' - } ); - }); - response.json(ret); + try { + const ret = JSON.parse(data).map( e => { + return Object.assign( {}, e, { + standard: 'CAST', + icon: 'img/' + e.name.toLowerCase().replace(/\s/, '') + '.svg' + } ); + }); + + response.json(ret); + } catch (error) { + response.sendStatus(404); + } }); } diff --git a/server/lib/filterDeprecated.js b/server/lib/filterDeprecated.js index beb4bdd5a3..27863272b7 100644 --- a/server/lib/filterDeprecated.js +++ b/server/lib/filterDeprecated.js @@ -7,9 +7,14 @@ const filterDeprecated = ( req, res, errorHandler, echo ) => { if (err) { return errorHandler(err, res); } - const json = JSON.parse(data), - clean = json.filter( e => e.status !== 'deprecated'); - res.send(clean); + + try { + const json = JSON.parse(data), + clean = json.filter( e => e.status !== 'deprecated'); + res.send(clean); + } catch (error) { + res.sendStatus(502); + } }); }; diff --git a/server/lib/glob.js b/server/lib/glob.js index 0452412ee4..6dfa837d26 100644 --- a/server/lib/glob.js +++ b/server/lib/glob.js @@ -15,8 +15,14 @@ function Glob( dirName, onFileContent, onError, onComplete ){ onError( err ); return; } - onFileContent( fileName, JSON.parse(fileContents), index, PATH.toString() ); - if ( index === len -1 && onComplete) onComplete(); + try { + + onFileContent( fileName, JSON.parse(fileContents), index, PATH.toString() ); + if ( index === len -1 && onComplete) onComplete(); + } catch (error) { + console.log(error.stack); + onComplete(); + } }); }); }); diff --git a/server/lib/readFile.js b/server/lib/readFile.js index 7fa14cac92..a8236d1b92 100644 --- a/server/lib/readFile.js +++ b/server/lib/readFile.js @@ -4,10 +4,18 @@ const path = require('path'); function readJsonFile( filePath, onFileContent, onComplete, onError ){ fs.readFile( path.resolve(filePath), 'utf8', ( err, fileContents ) => { if ( err ) { - onError( err ); + try { + onError( err ); + } catch (error) { + console.log(error.stack); + } return; } - onFileContent( filePath, JSON.parse(fileContents), onComplete ); + try { + onFileContent( filePath, JSON.parse(fileContents), onComplete ); + } catch (error) { + console.log(error.stack); + } }); } diff --git a/server/lib/ruleDetailsStruct.js b/server/lib/ruleDetailsStruct.js index 0a6b7d8bb6..8bb01229d3 100644 --- a/server/lib/ruleDetailsStruct.js +++ b/server/lib/ruleDetailsStruct.js @@ -90,10 +90,15 @@ const ProcessRuleDetailsRequest = ( req, res, errorHandler ) => { const getRulesDetailsFromFile = ( filePath ) => { if(!fs.existsSync(filePath)) return {}; - const fileData = fs.readFileSync(filePath), - data = JSON.parse(fileData); - - return QualityRuleObject(data); + try { + const fileData = fs.readFileSync(filePath), + data = JSON.parse(fileData); + + return QualityRuleObject(data); + + } catch (error) { + console.log(error.stack); + } }; module.exports = { diff --git a/server/lib/standardNotApplicable.js b/server/lib/standardNotApplicable.js index b06557dd46..a4445ab4e5 100644 --- a/server/lib/standardNotApplicable.js +++ b/server/lib/standardNotApplicable.js @@ -7,13 +7,18 @@ const Item = new Struct('id', 'name', 'href', 'count', 'notapplicable'); function isApplicable( list ){ - const validationData = fs.readFileSync(path.resolve(__dirname,'validation', 'standards-validation.json')); - const v_data = JSON.parse(validationData); - return list.map( e => { - const idFound = v_data.find( a => a === e.id ); - - return new Item(e.id, e.name, e.href, e.count, idFound ? true : false); - }); + try { + const validationData = fs.readFileSync(path.resolve(__dirname,'validation', 'standards-validation.json')); + const v_data = JSON.parse(validationData); + return list.map( e => { + const idFound = v_data.find( a => a === e.id ); + + return new Item(e.id, e.name, e.href, e.count, idFound ? true : false); + }); + + } catch (error) { + console.log(error.stack); + } } function handler( req, res, errorHandler ){ diff --git a/server/lib/standards-map.js b/server/lib/standards-map.js index bc4ed1ce50..61e23fcd2d 100644 --- a/server/lib/standards-map.js +++ b/server/lib/standards-map.js @@ -8,9 +8,10 @@ function inArray( val, arr ){ } function getQualityStandardsMap ( response, echo ){ - fs.readFile(root.resolve('rest/'+ (echo ? 'Carl' :'AIP') +'/quality-standards.json'), ( err, data ) => { + fs.readFile(root.resolve('rest/'+ (echo ? 'Carl' :'AIP') +'/quality-standards.json'), ( err, data ) => { if (err) { console.log(err); + return response.sendStatus(404); } // const businessCriteria = { // name: 'CAST',