Skip to content

Commit c30d520

Browse files
committed
fix: guard against re-entrant event emissions
1 parent a1e1d4f commit c30d520

File tree

1 file changed

+17
-1
lines changed

1 file changed

+17
-1
lines changed

src/extensions/default/Git/src/EventEmitter.js

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,24 @@ define(function (require, exports, module) {
1717
};
1818
}
1919

20+
// Guard against re-entrant event emissions. If a handler for event X synchronously
21+
// emits event X again (directly or via a chain), it causes infinite recursion and a
22+
// "Maximum call stack size exceeded" crash. This set tracks which events are currently
23+
// being dispatched so we can block re-entrant calls.
24+
const _activeEvents = new Set();
25+
2026
function emit() {
21-
emInstance.trigger(...arguments);
27+
const eventName = arguments[0];
28+
if (_activeEvents.has(eventName)) {
29+
console.warn("EventEmitter: Blocked re-entrant emit for event: " + eventName);
30+
return;
31+
}
32+
_activeEvents.add(eventName);
33+
try {
34+
emInstance.trigger(...arguments);
35+
} finally {
36+
_activeEvents.delete(eventName);
37+
}
2238
}
2339

2440
function on(eventName, callback) {

0 commit comments

Comments
 (0)