@@ -4214,11 +4214,20 @@ Maybe<bool> Object::SetPropertyInternal(LookupIterator* it,
42144214 return JSProxy::SetProperty(it->GetHolder<JSProxy>(), it->GetName(),
42154215 value, it->GetReceiver(), language_mode);
42164216
4217- case LookupIterator::INTERCEPTOR:
4217+ case LookupIterator::INTERCEPTOR: {
4218+ Handle<Map> store_target_map;
4219+ if (it->GetReceiver()->IsJSObject()) {
4220+ store_target_map = handle(it->GetStoreTarget()->map(), it->isolate());
4221+ }
42184222 if (it->HolderIsReceiverOrHiddenPrototype()) {
42194223 Maybe<bool> result =
42204224 JSObject::SetPropertyWithInterceptor(it, should_throw, value);
42214225 if (result.IsNothing() || result.FromJust()) return result;
4226+ Utils::ApiCheck(store_target_map.is_null() ||
4227+ *store_target_map == it->GetStoreTarget()->map(),
4228+ it->IsElement() ? "v8::IndexedPropertySetterCallback"
4229+ : "v8::NamedPropertySetterCallback",
4230+ "Interceptor silently changed store target.");
42224231 } else {
42234232 Maybe<PropertyAttributes> maybe_attributes =
42244233 JSObject::GetPropertyAttributesWithInterceptor(it);
@@ -4227,10 +4236,16 @@ Maybe<bool> Object::SetPropertyInternal(LookupIterator* it,
42274236 if ((maybe_attributes.FromJust() & READ_ONLY) != 0) {
42284237 return WriteToReadOnlyProperty(it, value, should_throw);
42294238 }
4239+ Utils::ApiCheck(store_target_map.is_null() ||
4240+ *store_target_map == it->GetStoreTarget()->map(),
4241+ it->IsElement() ? "v8::IndexedPropertySetterCallback"
4242+ : "v8::NamedPropertySetterCallback",
4243+ "Interceptor silently changed store target.");
42304244 *found = false;
42314245 return Nothing<bool>();
42324246 }
42334247 break;
4248+ }
42344249
42354250 case LookupIterator::ACCESSOR: {
42364251 if (it->IsReadOnly()) {
0 commit comments