mirror of
https://github.com/zebrajr/node.git
synced 2026-01-15 12:15:26 +00:00
worker: add brand checks for detached MessageEvent accessors
Signed-off-by: James M Snell <jasnell@gmail.com> PR-URL: https://github.com/nodejs/node/pull/39773 Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
This commit is contained in:
@@ -107,6 +107,10 @@ function validateMessagePort(port, name) {
|
||||
throw new ERR_INVALID_ARG_TYPE(name, 'MessagePort', port);
|
||||
}
|
||||
|
||||
function isMessageEvent(value) {
|
||||
return value != null && kData in value;
|
||||
}
|
||||
|
||||
class MessageEvent extends Event {
|
||||
constructor(type, {
|
||||
data = null,
|
||||
@@ -131,19 +135,49 @@ class MessageEvent extends Event {
|
||||
|
||||
ObjectDefineProperties(MessageEvent.prototype, {
|
||||
data: {
|
||||
get() { return this[kData]; }, enumerable: true, configurable: true
|
||||
get() {
|
||||
if (!isMessageEvent(this))
|
||||
throw new ERR_INVALID_THIS('MessageEvent');
|
||||
return this[kData];
|
||||
},
|
||||
enumerable: true,
|
||||
configurable: true,
|
||||
},
|
||||
origin: {
|
||||
get() { return this[kOrigin]; }, enumerable: true, configurable: true
|
||||
get() {
|
||||
if (!isMessageEvent(this))
|
||||
throw new ERR_INVALID_THIS('MessageEvent');
|
||||
return this[kOrigin];
|
||||
},
|
||||
enumerable: true,
|
||||
configurable: true,
|
||||
},
|
||||
lastEventId: {
|
||||
get() { return this[kLastEventId]; }, enumerable: true, configurable: true
|
||||
get() {
|
||||
if (!isMessageEvent(this))
|
||||
throw new ERR_INVALID_THIS('MessageEvent');
|
||||
return this[kLastEventId];
|
||||
},
|
||||
enumerable: true,
|
||||
configurable: true,
|
||||
},
|
||||
source: {
|
||||
get() { return this[kSource]; }, enumerable: true, configurable: true
|
||||
get() {
|
||||
if (!isMessageEvent(this))
|
||||
throw new ERR_INVALID_THIS('MessageEvent');
|
||||
return this[kSource];
|
||||
},
|
||||
enumerable: true,
|
||||
configurable: true,
|
||||
},
|
||||
ports: {
|
||||
get() { return this[kPorts]; }, enumerable: true, configurable: true
|
||||
get() {
|
||||
if (!isMessageEvent(this))
|
||||
throw new ERR_INVALID_THIS('MessageEvent');
|
||||
return this[kPorts];
|
||||
},
|
||||
enumerable: true,
|
||||
configurable: true,
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
21
test/parallel/test-messageevent-brandcheck.js
Normal file
21
test/parallel/test-messageevent-brandcheck.js
Normal file
@@ -0,0 +1,21 @@
|
||||
// Flags: --expose-internals
|
||||
'use strict';
|
||||
|
||||
require('../common');
|
||||
const assert = require('assert');
|
||||
|
||||
const {
|
||||
MessageEvent,
|
||||
} = require('internal/worker/io');
|
||||
|
||||
[
|
||||
'data',
|
||||
'origin',
|
||||
'lastEventId',
|
||||
'source',
|
||||
'ports',
|
||||
].forEach((i) => {
|
||||
assert.throws(() => Reflect.get(MessageEvent.prototype, i, {}), {
|
||||
code: 'ERR_INVALID_THIS',
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user