summaryrefslogtreecommitdiff
path: root/atspi/atspi-misc.c
diff options
context:
space:
mode:
authorWilliam Jon McCann <jmccann@redhat.com>2012-09-14 13:17:35 -0400
committerWilliam Jon McCann <jmccann@redhat.com>2012-09-14 14:14:21 -0400
commit5587b154a1f01f43924e049c33caffbeea26de48 (patch)
tree9930303ff7a7ccad762c715706f44adb883d6787 /atspi/atspi-misc.c
parent82ad27095cea6fe43542c97ec7013951d15ed1b4 (diff)
downloadat-spi2-core-5587b154a1f01f43924e049c33caffbeea26de48.tar.gz
Don't leak the display string
https://bugzilla.gnome.org/show_bug.cgi?id=684033
Diffstat (limited to 'atspi/atspi-misc.c')
-rw-r--r--atspi/atspi-misc.c51
1 files changed, 28 insertions, 23 deletions
diff --git a/atspi/atspi-misc.c b/atspi/atspi-misc.c
index 7578cb33..0366fc45 100644
--- a/atspi/atspi-misc.c
+++ b/atspi/atspi-misc.c
@@ -778,35 +778,34 @@ static const char *signal_interfaces[] =
*
* TODO: Avoid having duplicate functions for this here and in at-spi2-atk
*/
-static const gchar *
+static gchar *
spi_display_name (void)
{
- static const char *canonical_display_name = NULL;
- if (!canonical_display_name)
+ char *canonical_display_name = NULL;
+ const gchar *display_env = g_getenv ("AT_SPI_DISPLAY");
+
+ if (!display_env)
{
- const gchar *display_env = g_getenv ("AT_SPI_DISPLAY");
- if (!display_env)
+ display_env = g_getenv ("DISPLAY");
+ if (!display_env || !display_env[0])
+ canonical_display_name = g_strdup (":0");
+ else
{
- display_env = g_getenv ("DISPLAY");
- if (!display_env || !display_env[0])
- canonical_display_name = ":0";
- else
+ gchar *display_p, *screen_p;
+ canonical_display_name = g_strdup (display_env);
+ display_p = g_utf8_strrchr (canonical_display_name, -1, ':');
+ screen_p = g_utf8_strrchr (canonical_display_name, -1, '.');
+ if (screen_p && display_p && (screen_p > display_p))
{
- gchar *display_p, *screen_p;
- canonical_display_name = g_strdup (display_env);
- display_p = g_utf8_strrchr (canonical_display_name, -1, ':');
- screen_p = g_utf8_strrchr (canonical_display_name, -1, '.');
- if (screen_p && display_p && (screen_p > display_p))
- {
- *screen_p = '\0';
- }
+ *screen_p = '\0';
}
}
- else
- {
- canonical_display_name = display_env;
- }
}
+ else
+ {
+ canonical_display_name = g_strdup (display_env);
+ }
+
return canonical_display_name;
}
@@ -1350,14 +1349,20 @@ get_accessibility_bus_address_x11 (void)
{
Atom AT_SPI_BUS;
Atom actual_type;
- Display *bridge_display;
+ Display *bridge_display = NULL;
int actual_format;
char *data;
unsigned char *data_x11 = NULL;
unsigned long nitems;
unsigned long leftover;
+ char *display_name;
- bridge_display = XOpenDisplay (spi_display_name ());
+ display_name = spi_display_name ();
+ if (display_name != NULL)
+ {
+ bridge_display = XOpenDisplay (display_name);
+ g_free (display_name);
+ }
if (!bridge_display)
{
g_warning ("Could not open X display");