Bugfix: Use memcmp() instead of strcmp(), use new_len * 2 to check all bytes

This commit is contained in:
Michael Stapelberg 2009-03-09 07:02:47 +01:00
parent 2cf3a9dd96
commit cc78664f9d
1 changed files with 7 additions and 2 deletions

View File

@ -502,8 +502,13 @@ int handle_windowname_change(void *data, xcb_connection_t *conn, uint8_t state,
char *ucs2_name = convert_utf8_to_ucs2(new_name, &new_len); char *ucs2_name = convert_utf8_to_ucs2(new_name, &new_len);
free(new_name); free(new_name);
/* Check if they are the same and dont update if so */ /* Check if they are the same and dont update if so.
if (new_len == client->name_len && client->name != NULL && strcmp(client->name, new_name) == 0) { Note the use of new_len * 2 to check all bytes as each glyph takes 2 bytes.
Also note the use of memcmp() instead of strncmp() because the latter stops on nullbytes,
but UCS-2 uses nullbytes to fill up glyphs which only use one byte. */
if ((new_len == client->name_len) &&
(client->name != NULL) &&
(memcmp(client->name, ucs2_name, new_len * 2) == 0)) {
LOG("Name did not change, not updating\n"); LOG("Name did not change, not updating\n");
free(ucs2_name); free(ucs2_name);
return; return;