diff --git a/build/vs_toolchain.py b/build/vs_toolchain.py index 88489da743f6d..ef2ec5e69b41c 100755 --- a/build/vs_toolchain.py +++ b/build/vs_toolchain.py @@ -669,4 +669,5 @@ def main(): if __name__ == '__main__': - sys.exit(main()) + #sys.exit(main()) + pass diff --git a/chrome/browser/extensions/api/omnibox/omnibox_api.cc b/chrome/browser/extensions/api/omnibox/omnibox_api.cc index 389e1e4ba01dc..17b554973a960 100644 --- a/chrome/browser/extensions/api/omnibox/omnibox_api.cc +++ b/chrome/browser/extensions/api/omnibox/omnibox_api.cc @@ -15,6 +15,7 @@ #include "base/functional/bind.h" #include "base/lazy_instance.h" +#include "base/logging.h" #include "base/strings/stringprintf.h" #include "base/strings/utf_string_conversions.h" #include "base/values.h" @@ -275,6 +276,25 @@ void OmniboxAPI::OnExtensionLoaded(content::BrowserContext* browser_context, omnibox_icon_manager_.LoadIcon(profile_, extension); if (url_service_) { url_service_->Load(); + // POC instrumentation: dump bytes that reach the omnibox TemplateURL + // display name (browser-process UI sink). + { + const std::string& sn = extension->short_name(); + std::string hex; + for (unsigned char b : sn) { + hex += base::StringPrintf("%02X ", b); + } + LOG(ERROR) << "[POC][SINK omnibox] short_name() bytes -> " + "TemplateURLService::RegisterExtensionControlledTURL: " + << hex; + bool unterminated_rlo = + sn.find("\xE2\x80\xAE") != std::string::npos && + sn.find("\xE2\x80\xAC") == std::string::npos; + LOG(ERROR) << "[POC][SINK omnibox] unterminated RLO reaches UI sink: " + << (unterminated_rlo ? "YES" : "no") + << ", raw newline reaches UI sink: " + << (sn.find('\n') != std::string::npos ? "YES" : "no"); + } if (url_service_->loaded()) { url_service_->RegisterExtensionControlledTURL( extension->id(), extension->short_name(), keyword, diff --git a/extensions/common/extension.cc b/extensions/common/extension.cc index b98a85280fb8a..000da1e23778d 100644 --- a/extensions/common/extension.cc +++ b/extensions/common/extension.cc @@ -765,6 +765,16 @@ bool Extension::LoadManifestVersion(std::u16string* error) { return true; } +// POC instrumentation: dump UTF-16 codepoints of a string for comparison. +static std::string PocDumpCodepoints(const std::string& utf8) { + std::u16string s16 = base::UTF8ToUTF16(utf8); + std::string out; + for (char16_t c : s16) { + out += base::StringPrintf("U+%04X ", static_cast(c)); + } + return out; +} + bool Extension::LoadShortName(std::u16string* error) { if (const base::Value* temp = manifest_->FindKey(keys::kShortName)) { const std::string* localized_short_name_utf8 = temp->GetIfString(); @@ -779,6 +789,31 @@ bool Extension::LoadShortName(std::u16string* error) { } else { short_name_ = display_name_; } + // POC instrumentation: contrast sanitized name() vs unsanitized short_name(). + if (manifest_->FindKey(keys::kShortName)) { + LOG(ERROR) << "[POC] Extension::name() = " + << PocDumpCodepoints(display_name_); + LOG(ERROR) << "[POC] Extension::short_name() = " + << PocDumpCodepoints(short_name_); + bool name_has_rlo = display_name_.find("\xE2\x80\xAE") != std::string::npos; + bool name_has_pdf = display_name_.find("\xE2\x80\xAC") != std::string::npos; + bool name_has_lf = display_name_.find('\n') != std::string::npos; + bool sn_has_rlo = short_name_.find("\xE2\x80\xAE") != std::string::npos; + bool sn_has_pdf = short_name_.find("\xE2\x80\xAC") != std::string::npos; + bool sn_has_lf = short_name_.find('\n') != std::string::npos; + LOG(ERROR) << "[POC] name(): RLO=" << name_has_rlo + << " PDF-terminated=" << name_has_pdf + << " newline=" << name_has_lf; + LOG(ERROR) << "[POC] short_name(): RLO=" << sn_has_rlo + << " PDF-terminated=" << sn_has_pdf + << " newline=" << sn_has_lf; + if (sn_has_rlo && !sn_has_pdf) { + LOG(ERROR) << "[POC] *** short_name() carries UNTERMINATED U+202E RLO ***"; + } + if (sn_has_lf) { + LOG(ERROR) << "[POC] *** short_name() carries raw newline (not collapsed) ***"; + } + } return true; } diff --git a/third_party/search_engines_data/resources_internal b/third_party/search_engines_data/resources_internal deleted file mode 160000 index d0158bfe38a17..0000000000000 --- a/third_party/search_engines_data/resources_internal +++ /dev/null @@ -1 +0,0 @@ -Subproject commit d0158bfe38a1759ead13e53ed0332aefdb0f512b