From eb6d107b8db0b3af3f0987655b3f22e971916fb0 Mon Sep 17 00:00:00 2001 From: Zaid Abdulla Date: Fri, 23 Dec 2016 17:29:36 -0800 Subject: [PATCH] Fix possible maximum call stack error --- lib/session.coffee | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/lib/session.coffee b/lib/session.coffee index 4943856..110332e 100644 --- a/lib/session.coffee +++ b/lib/session.coffee @@ -639,6 +639,20 @@ rpcRequest = (sessionData, _declarations, callback) -> return rpcRequest(sessionData, null, callback) ) + if not sessionData.declarations[0].length + return callback() + + if sessionData.rpcCount >= 255 or + sessionData.revisions.length >= 8 or + sessionData.iteration >= 128 + + fault = { + code: 'endless_cycle' + message: 'The provision seems to be repeating indefinitely' + timestmap: sessionData.timestamp + } + return callback(null, fault) + if (sessionData.syncState?.virtualParameterDeclarations?.length or 0) < sessionData.declarations.length inception = sessionData.syncState?.virtualParameterDeclarations?.length or 0 vpd = runDeclarations(sessionData, sessionData.declarations[inception]) @@ -672,17 +686,6 @@ rpcRequest = (sessionData, _declarations, callback) -> if not sessionData.syncState? return callback() - if sessionData.rpcCount >= 255 or - sessionData.revisions.length >= 8 or - sessionData.iteration >= 64 - - fault = { - code: 'endless_cycle' - message: 'The provision seems to be repeating indefinitely' - timestmap: sessionData.timestamp - } - return callback(null, fault) - inception = sessionData.declarations.length - 1 provisions = generateGetVirtualParameterProvisions(sessionData, sessionData.syncState.virtualParameterDeclarations[inception])