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:
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);