From f4d7b719843a0ae215914bf6532e875062c1df10 Mon Sep 17 00:00:00 2001 From: Nick O'Leary Date: Tue, 4 Oct 2022 15:20:06 +0100 Subject: [PATCH 1/3] Ensure errors in preDeliver callback are handled Fixes #3848 --- .../@node-red/runtime/lib/flows/Flow.js | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/packages/node_modules/@node-red/runtime/lib/flows/Flow.js b/packages/node_modules/@node-red/runtime/lib/flows/Flow.js index b5685d3ec..6da07f495 100644 --- a/packages/node_modules/@node-red/runtime/lib/flows/Flow.js +++ b/packages/node_modules/@node-red/runtime/lib/flows/Flow.js @@ -818,6 +818,17 @@ function handlePreRoute(flow, sendEvent, reportError) { }) } +function deliverMessageToDestination(sendEvent) { + if (sendEvent.destination.node) { + try { + sendEvent.destination.node.receive(sendEvent.msg); + } catch(err) { + const info = `${sendEvent.destination.node?.id}` + Log.error(`Error delivering message to node:${sendEvent.destination.node._path} [${sendEvent.destination.node.type}]`) + Log.error(err.stack) + } + } +} function handlePreDeliver(flow,sendEvent, reportError) { // preDeliver - the local router has identified the node it is going to send to. At this point, the message has been cloned if needed. hooks.trigger("preDeliver",sendEvent,(err) => { @@ -827,15 +838,10 @@ function handlePreDeliver(flow,sendEvent, reportError) { } else if (err !== false) { if (asyncMessageDelivery) { setImmediate(function() { - if (sendEvent.destination.node) { - sendEvent.destination.node.receive(sendEvent.msg); - } + deliverMessageToDestination(sendEvent) }) } else { - if (sendEvent.destination.node) { - sendEvent.destination.node.receive(sendEvent.msg); - - } + deliverMessageToDestination(sendEvent) } // postDeliver - the message has been dispatched to be delivered asynchronously (unless the sync delivery flag is set, in which case it would be continue as synchronous delivery) hooks.trigger("postDeliver", sendEvent, function(err) { From 79db4f8aa127554585aedab4e8f2018dd1f8f833 Mon Sep 17 00:00:00 2001 From: Nick O'Leary Date: Wed, 30 Nov 2022 22:22:44 +0000 Subject: [PATCH 2/3] Update packages/node_modules/@node-red/runtime/lib/flows/Flow.js Co-authored-by: Stephen McLaughlin <44235289+Steve-Mcl@users.noreply.github.com> --- packages/node_modules/@node-red/runtime/lib/flows/Flow.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/node_modules/@node-red/runtime/lib/flows/Flow.js b/packages/node_modules/@node-red/runtime/lib/flows/Flow.js index 6da07f495..c99259f1a 100644 --- a/packages/node_modules/@node-red/runtime/lib/flows/Flow.js +++ b/packages/node_modules/@node-red/runtime/lib/flows/Flow.js @@ -819,7 +819,7 @@ function handlePreRoute(flow, sendEvent, reportError) { } function deliverMessageToDestination(sendEvent) { - if (sendEvent.destination.node) { + if (sendEvent?.destination?.node) { try { sendEvent.destination.node.receive(sendEvent.msg); } catch(err) { From 742f05f59d31543fb5d8e1aac98eb4c9b7804f22 Mon Sep 17 00:00:00 2001 From: Nick O'Leary Date: Wed, 30 Nov 2022 22:23:04 +0000 Subject: [PATCH 3/3] Update packages/node_modules/@node-red/runtime/lib/flows/Flow.js --- packages/node_modules/@node-red/runtime/lib/flows/Flow.js | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/node_modules/@node-red/runtime/lib/flows/Flow.js b/packages/node_modules/@node-red/runtime/lib/flows/Flow.js index c99259f1a..b5bedb2d6 100644 --- a/packages/node_modules/@node-red/runtime/lib/flows/Flow.js +++ b/packages/node_modules/@node-red/runtime/lib/flows/Flow.js @@ -823,7 +823,6 @@ function deliverMessageToDestination(sendEvent) { try { sendEvent.destination.node.receive(sendEvent.msg); } catch(err) { - const info = `${sendEvent.destination.node?.id}` Log.error(`Error delivering message to node:${sendEvent.destination.node._path} [${sendEvent.destination.node.type}]`) Log.error(err.stack) }