[PATCH:xwininfo] When matching window names, ensure name lengths match too
Alan Coopersmith
alan.coopersmith at oracle.com
Tue Jun 7 23:13:46 PDT 2011
Prevents strncmp returning on partial matches when one is shorter.
https://bugs.freedesktop.org/show_bug.cgi?id=37710
Signed-off-by: Alan Coopersmith <alan.coopersmith at oracle.com>
---
dsimple.c | 16 ++++++++++------
1 files changed, 10 insertions(+), 6 deletions(-)
diff --git a/dsimple.c b/dsimple.c
index a9b8678..150f9db 100644
--- a/dsimple.c
+++ b/dsimple.c
@@ -253,7 +253,8 @@ recursive_Window_With_Name (
xcb_connection_t *dpy,
xcb_window_t window,
struct wininfo_cookies *cookies,
- const char *name)
+ const char *name,
+ size_t namelen)
{
xcb_window_t *children;
unsigned int nchildren;
@@ -273,7 +274,8 @@ recursive_Window_With_Name (
int prop_name_len = xcb_get_property_value_length (prop);
/* can't use strcmp, since prop.name is not null terminated */
- if (strncmp (prop_name, name, prop_name_len) == 0) {
+ if ((namelen == prop_name_len) &&
+ memcmp (prop_name, name, namelen) == 0) {
w = window;
}
}
@@ -294,7 +296,8 @@ recursive_Window_With_Name (
if (xcb_get_wm_name_reply (dpy, cookies->get_wm_name,
&nameprop, &err)) {
/* can't use strcmp, since nameprop.name is not null terminated */
- if (strncmp (nameprop.name, name, nameprop.name_len) == 0) {
+ if ((namelen == nameprop.name_len) &&
+ memcmp (nameprop.name, name, namelen) == 0) {
w = window;
}
@@ -309,7 +312,8 @@ recursive_Window_With_Name (
int prop_name_len = xcb_get_property_value_length (prop);
/* can't use strcmp, since prop.name is not null terminated */
- if (strncmp (prop_name, name, prop_name_len) == 0) {
+ if ((namelen == prop_name_len) &&
+ memcmp (prop_name, name, namelen) == 0) {
w = window;
}
}
@@ -354,7 +358,7 @@ recursive_Window_With_Name (
for (i = 0; i < nchildren; i++) {
w = recursive_Window_With_Name (dpy, children[i],
- &child_cookies[i], name);
+ &child_cookies[i], name, namelen);
if (w)
break;
}
@@ -392,7 +396,7 @@ Window_With_Name (
cookies.get_wm_name = xcb_get_wm_name (dpy, top);
cookies.query_tree = xcb_query_tree (dpy, top);
xcb_flush (dpy);
- return recursive_Window_With_Name(dpy, top, &cookies, name);
+ return recursive_Window_With_Name(dpy, top, &cookies, name, strlen(name));
}
--
1.7.3.2
More information about the xorg-devel
mailing list