From 1284789371e4223818b1cb3a998203b266210b5f Mon Sep 17 00:00:00 2001 From: Deokjin Kim Date: Fri, 9 Dec 2022 15:07:20 +0900 Subject: [PATCH] lib: check number of arguments in `EventTarget`'s function For now, addEventListener() only checks number of arguments. removeEventListener() and dispatchEvent() also need checking number of arguments. PR-URL: https://github.com/nodejs/node/pull/45668 Reviewed-By: Antoine du Hamel Reviewed-By: Daeyeon Jeong --- lib/internal/event_target.js | 4 ++++ test/parallel/test-eventtarget.js | 29 +++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/lib/internal/event_target.js b/lib/internal/event_target.js index 2be1b9cf0b9f39..6c4841dd5104f0 100644 --- a/lib/internal/event_target.js +++ b/lib/internal/event_target.js @@ -633,6 +633,8 @@ class EventTarget { removeEventListener(type, listener, options = kEmptyObject) { if (!isEventTarget(this)) throw new ERR_INVALID_THIS('EventTarget'); + if (arguments.length < 2) + throw new ERR_MISSING_ARGS('type', 'listener'); if (!validateEventListener(listener)) return; @@ -663,6 +665,8 @@ class EventTarget { dispatchEvent(event) { if (!isEventTarget(this)) throw new ERR_INVALID_THIS('EventTarget'); + if (arguments.length < 1) + throw new ERR_MISSING_ARGS('event'); if (!(event instanceof Event)) throw new ERR_INVALID_ARG_TYPE('event', 'Event', event); diff --git a/test/parallel/test-eventtarget.js b/test/parallel/test-eventtarget.js index d9802faa1f97bf..0ed9ced8c2b819 100644 --- a/test/parallel/test-eventtarget.js +++ b/test/parallel/test-eventtarget.js @@ -676,3 +676,32 @@ let asyncTest = Promise.resolve(); et.dispatchEvent(new Event('foo')); }); } + +{ + const et = new EventTarget(); + + throws(() => et.addEventListener(), { + code: 'ERR_MISSING_ARGS', + name: 'TypeError', + }); + + throws(() => et.addEventListener('foo'), { + code: 'ERR_MISSING_ARGS', + name: 'TypeError', + }); + + throws(() => et.removeEventListener(), { + code: 'ERR_MISSING_ARGS', + name: 'TypeError', + }); + + throws(() => et.removeEventListener('foo'), { + code: 'ERR_MISSING_ARGS', + name: 'TypeError', + }); + + throws(() => et.dispatchEvent(), { + code: 'ERR_MISSING_ARGS', + name: 'TypeError', + }); +}