Prevents strncmp returning on partial matches when one is shorter.
https://bugs.freedesktop.org/show_bug.cgi?id=37710

Signed-off-by: Alan Coopersmith <[email protected]>
---
 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

_______________________________________________
[email protected]: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to