Skip to content

Commit 5377f54

Browse files
authored
Merge pull request #666 from ryanbrandenburg/dev/rybrande/LargeJson
Handle large json failures
2 parents 75bdc0d + 163c0db commit 5377f54

2 files changed

Lines changed: 23 additions & 15 deletions

File tree

providers/process/scancode.js

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ class ScanCodeProcessor extends AbstractProcessor {
5454
maxBuffer: 5 * 1024 * 1024
5555
})
5656
} catch (error) {
57+
this.logger.error(error, request.meta)
5758
// TODO see if the new version of ScanCode has a better way of differentiating errors
5859
if (this._isRealError(error) || this._hasRealErrors(file.name)) {
5960
request.markDead('Error', error ? error.message : 'ScanCode run failed')
@@ -91,19 +92,26 @@ class ScanCodeProcessor extends AbstractProcessor {
9192
// Scan the results file for any errors that are not just timeouts or other known errors
9293
// TODO do we need to do this anymore
9394
_hasRealErrors(resultFile) {
94-
const results = JSON.parse(fs.readFileSync(resultFile))
95-
return results.files.some(
96-
file =>
97-
file.scan_errors &&
98-
file.scan_errors.some(error => {
99-
return !(
100-
error.includes('ERROR: Processing interrupted: timeout after') ||
101-
error.includes('ValueError:') ||
102-
error.includes('package.json') ||
103-
error.includes('UnicodeDecodeError')
104-
)
105-
})
106-
)
95+
try {
96+
const results = JSON.parse(fs.readFileSync(resultFile))
97+
return results.files.some(
98+
file =>
99+
file.scan_errors &&
100+
file.scan_errors.some(error => {
101+
return !(
102+
error.includes('ERROR: Processing interrupted: timeout after') ||
103+
error.includes('ValueError:') ||
104+
error.includes('package.json') ||
105+
error.includes('UnicodeDecodeError')
106+
)
107+
})
108+
)
109+
} catch (e) {
110+
// This might happen if the results file is >512mb, but regardless our error handling should not fail.
111+
this.logger.error(`Could not parse ScanCode results file ${resultFile}: ${e.message}`)
112+
// Assume it's broken if we could not parse it
113+
return true
114+
}
107115
}
108116

109117
_detectVersion() {

test/unit/providers/process/scancodeTests.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ describe('ScanCode misc', () => {
3939
const handlerFactory = proxyquire('../../../../providers/process/scancode', {
4040
fs: fsStub
4141
})
42-
Handler = handlerFactory({ logger: { log: () => {} } })
42+
Handler = handlerFactory({ logger: { log: () => {}, error: () => {} } })
4343
Handler._resultBox = resultBox
4444
})
4545

@@ -108,7 +108,7 @@ function setup(fixture, error, versionError) {
108108
timeout: 200,
109109
processes: 2,
110110
format: 'json',
111-
logger: { log: sinon.stub(), info: sinon.stub() }
111+
logger: { log: sinon.stub(), info: sinon.stub(), error: sinon.stub() }
112112
}
113113
const testRequest = new request('npm', 'cd:/npm/npmjs/-/test/1.1')
114114
testRequest.document = { _metadata: { links: {} }, location: '/test' }

0 commit comments

Comments
 (0)