tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

commit ee5ad51b568bb4eb4ad269dad0f8c0deb04c5da4
parent f3b8ffc6a414b27bfb7380fa5cd9be2191a6b63a
Author: Eitan Isaacson <eitan@monotonous.org>
Date:   Fri, 17 Oct 2025 05:30:06 +0000

Bug 1994835 - Make leakcheck happy with static string in AccessibleWrap::ReturnString. r=Jamie

Differential Revision: https://phabricator.services.mozilla.com/D268939

Diffstat:
Maccessible/atk/AccessibleWrap.cpp | 13+++++++++++++
Maccessible/atk/AccessibleWrap.h | 11++++++-----
2 files changed, 19 insertions(+), 5 deletions(-)

diff --git a/accessible/atk/AccessibleWrap.cpp b/accessible/atk/AccessibleWrap.cpp @@ -1151,6 +1151,19 @@ void a11y::PlatformSelectionEvent(Accessible*, Accessible* aWidget, uint32_t) { g_signal_emit_by_name(obj, "selection_changed"); } +mozilla::StaticAutoPtr<nsCString> sReturnedString; + +// static +const char* AccessibleWrap::ReturnString(nsAString& aString) { + if (!sReturnedString) { + sReturnedString = new nsCString(); + ClearOnShutdown(&sReturnedString); + } + + CopyUTF16toUTF8(aString, *sReturnedString); + return sReturnedString->get(); +} + // static void AccessibleWrap::GetKeyBinding(Accessible* aAccessible, nsAString& aResult) { diff --git a/accessible/atk/AccessibleWrap.h b/accessible/atk/AccessibleWrap.h @@ -64,11 +64,12 @@ class AccessibleWrap : public LocalAccessible { bool IsValidObject(); - static const char* ReturnString(nsAString& aString) { - static nsCString returnedString; - CopyUTF16toUTF8(aString, returnedString); - return returnedString.get(); - } + /** + * ATK has a bunch of getters that expect a borrowed reference to raw char* + * pointers. To simulate this, we have a method that uses a static nsCString + * return a temporary buffer that gets wiped on the next call. + */ + static const char* ReturnString(nsAString& aString); static void GetKeyBinding(Accessible* aAccessible, nsAString& aResult);