FIX: prevents errors on /tags when a tag `constructor` exists (#10449)

FIX: prevents errors on /tags when a tag constructor exists (#10449)

This is due to js objects having a constructor property:

const obj = {};
obj['constructor'] // return [native code] and not undefined
diff --git a/app/assets/javascripts/discourse/app/models/store.js b/app/assets/javascripts/discourse/app/models/store.js
index 4cf0994..2070af7 100644
--- a/app/assets/javascripts/discourse/app/models/store.js
+++ b/app/assets/javascripts/discourse/app/models/store.js
@@ -25,21 +25,21 @@ function storeMap(type, id, obj) {
 
 function fromMap(type, id) {
   const byType = _identityMap[type];
-  if (byType) {
+  if (byType && byType.hasOwnProperty(id)) {
     return byType[id];
   }
 }
 
 function removeMap(type, id) {
   const byType = _identityMap[type];
-  if (byType) {
+  if (byType && byType.hasOwnProperty(id)) {
     delete byType[id];
   }
 }
 
 function findAndRemoveMap(type, id) {
   const byType = _identityMap[type];
-  if (byType) {
+  if (byType && byType.hasOwnProperty(id)) {
     const result = byType[id];
     delete byType[id];
     return result;
diff --git a/app/models/tag.rb b/app/models/tag.rb
index 3a005e7..9f6ade2 100644
--- a/app/models/tag.rb
+++ b/app/models/tag.rb
@@ -5,7 +5,8 @@ class Tag < ActiveRecord::Base
   include HasDestroyedWebHook
 
   RESERVED_TAGS = [
-    'none'
+    'none',
+    'constructor' # prevents issues with javascript's constructor of objects
   ]
 
   validates :name,

GitHub sha: 6d0eb717

1 Like

This commit appears in #10449 which was approved by eviltrout. It was merged by jjaffeux.