Add tagging for fxjs per-isolate data.

Help identify a mismatch with Gin isolate data should both
occur in the same isolate.

-- save some wide char 0-bytes while at it.

Change-Id: I1c756f93c4f97bc61e6b5bfb149b1cd22626316f
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/77350
Reviewed-by: Daniel Hosseinian <dhoss@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/fxjs/cfxjs_engine.cpp b/fxjs/cfxjs_engine.cpp
index 95a03dc..a4eb93e 100644
--- a/fxjs/cfxjs_engine.cpp
+++ b/fxjs/cfxjs_engine.cpp
@@ -13,6 +13,7 @@
 #include "fxjs/cjs_object.h"
 #include "fxjs/fxv8.h"
 #include "fxjs/xfa/cfxjse_runtimedata.h"
+#include "third_party/base/check.h"
 #include "third_party/base/stl_util.h"
 #include "v8/include/v8-util.h"
 
@@ -25,7 +26,11 @@
 size_t g_isolate_ref_count = 0;
 CFX_V8ArrayBufferAllocator* g_arrayBufferAllocator = nullptr;
 v8::Global<v8::ObjectTemplate>* g_DefaultGlobalObjectTemplate = nullptr;
-const wchar_t kPerObjectDataTag[] = L"CFXJS_PerObjectData";
+
+// Only the address matters, values are for humans debugging. ASLR should
+// ensure that these values are unlikely to arise otherwise.
+const char kPerObjectDataTag[] = "CFXJS_PerObjectData";
+const char kPerIsolateDataTag[] = "FXJS_PerIsolateData";
 
 void* GetAlignedPointerForPerObjectDataTag() {
   return const_cast<void*>(static_cast<const void*>(kPerObjectDataTag));
@@ -307,8 +312,6 @@
   return g_isolate_ref_count;
 }
 
-FXJS_PerIsolateData::~FXJS_PerIsolateData() = default;
-
 // static
 void FXJS_PerIsolateData::SetUp(v8::Isolate* pIsolate) {
   if (!pIsolate->GetData(g_embedderDataSlot))
@@ -317,17 +320,22 @@
 
 // static
 FXJS_PerIsolateData* FXJS_PerIsolateData::Get(v8::Isolate* pIsolate) {
-  return static_cast<FXJS_PerIsolateData*>(
-      pIsolate->GetData(g_embedderDataSlot));
+  auto* result =
+      static_cast<FXJS_PerIsolateData*>(pIsolate->GetData(g_embedderDataSlot));
+  CHECK(result->m_Tag == kPerIsolateDataTag);
+  return result;
 }
 
+FXJS_PerIsolateData::FXJS_PerIsolateData(v8::Isolate* pIsolate)
+    : m_Tag(kPerIsolateDataTag),
+      m_pDynamicObjsMap(std::make_unique<V8TemplateMap>(pIsolate)) {}
+
+FXJS_PerIsolateData::~FXJS_PerIsolateData() = default;
+
 uint32_t FXJS_PerIsolateData::CurrentMaxObjDefinitionID() const {
   return pdfium::CollectionSize<uint32_t>(m_ObjectDefnArray);
 }
 
-FXJS_PerIsolateData::FXJS_PerIsolateData(v8::Isolate* pIsolate)
-    : m_pDynamicObjsMap(std::make_unique<V8TemplateMap>(pIsolate)) {}
-
 CFXJS_ObjDefinition* FXJS_PerIsolateData::ObjDefinitionForID(
     uint32_t id) const {
   return id > 0 && id <= CurrentMaxObjDefinitionID()
diff --git a/fxjs/cfxjs_engine.h b/fxjs/cfxjs_engine.h
index d4781b2..dca17a1 100644
--- a/fxjs/cfxjs_engine.h
+++ b/fxjs/cfxjs_engine.h
@@ -55,6 +55,7 @@
   CFXJS_ObjDefinition* ObjDefinitionForID(uint32_t id) const;
   uint32_t AssignIDForObjDefinition(std::unique_ptr<CFXJS_ObjDefinition> pDefn);
 
+  const char* const m_Tag;
   std::vector<std::unique_ptr<CFXJS_ObjDefinition>> m_ObjectDefnArray;
   std::unique_ptr<V8TemplateMap> m_pDynamicObjsMap;
   std::unique_ptr<ExtensionIface> m_pFXJSERuntimeData;