From c30d52099bb8b005d6a27ea145f34824f4cd8aec Mon Sep 17 00:00:00 2001 From: Pluto Date: Sat, 21 Feb 2026 02:40:23 +0530 Subject: [PATCH] fix: guard against re-entrant event emissions --- src/extensions/default/Git/src/EventEmitter.js | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/extensions/default/Git/src/EventEmitter.js b/src/extensions/default/Git/src/EventEmitter.js index a6253b4f7e..78fa7ffd82 100644 --- a/src/extensions/default/Git/src/EventEmitter.js +++ b/src/extensions/default/Git/src/EventEmitter.js @@ -17,8 +17,24 @@ define(function (require, exports, module) { }; } + // Guard against re-entrant event emissions. If a handler for event X synchronously + // emits event X again (directly or via a chain), it causes infinite recursion and a + // "Maximum call stack size exceeded" crash. This set tracks which events are currently + // being dispatched so we can block re-entrant calls. + const _activeEvents = new Set(); + function emit() { - emInstance.trigger(...arguments); + const eventName = arguments[0]; + if (_activeEvents.has(eventName)) { + console.warn("EventEmitter: Blocked re-entrant emit for event: " + eventName); + return; + } + _activeEvents.add(eventName); + try { + emInstance.trigger(...arguments); + } finally { + _activeEvents.delete(eventName); + } } function on(eventName, callback) {