Re: [hackers] [dwm][patch] ISO 8859-1-only window name bugfix

From: Hiltjo Posthuma <hiltjo_AT_codemadness.org>
Date: Wed, 12 Jul 2023 22:28:18 +0200

On Wed, Jul 12, 2023 at 06:48:45PM +0200, Страхиња Радић wrote:
> Hi, recently André Desgualdo Pereira reported a bug in dwm when window names
> consist only of characters in ISO 8859-1. In short, windows with such names
> had their names broken at the place of ISO 8859-1-specific characters which are
> not in ASCII, for example áâãéíóôúç. When the window name has other Unicode
> characters, for example Cyrillic characters etc., the window name is shown
> correctly, because it is encoded in UTF-8 and its WM_NAME's type as reported by
> xprop is COMPOUND_TEXT (encoding field is set to 385). In the other case, it is
> set to STRING and encoding field is set to 31.
>
> I have determined that the window name is encoded in ISO 8859-1 and passed to
> drw_text in drw.c as-is, when that function assumes the argument is encoded in
> UTF-8. Commenting out the first part of the relevant if-test results in such
> titles being shown correctly due to conversion by
> XmbTextPropertyToTextList.
>
> However, doing so results in other strings passed to gettextprop, which are
> encoded in UTF-8 but with encoding field set to 31 (XA_STRING), to also be
> passed to that function and converted according to current locale, resulting in
> garbage being output instead of the intended text. This happens for root window
> name set by slstatus, for example.
>
> In this patch, I have commented out the existing first if-branch in
> gettextprop, and introduced another which tests if the window is a root window.
> This is probably not ideal, but the alternative would be some form of UTF-8
> autodetection, the passed data being mislabeled as it is.

> From c5b399e138f6873e2eb9a292d55c5382e654f074 Mon Sep 17 00:00:00 2001
> From: =?UTF-8?q?=D0=A1=D1=82=D1=80=D0=B0=D1=85=D0=B8=D1=9A=D0=B0=20=D0=A0?=
> =?UTF-8?q?=D0=B0=D0=B4=D0=B8=D1=9B?= <contact_AT_strahinja.org>
> Date: Mon, 10 Jul 2023 09:25:30 +0200
> Subject: [PATCH] dwm.c: Always convert title to UTF-8, except for root window
> MIME-Version: 1.0
> Content-Type: text/plain; charset=UTF-8
> Content-Transfer-Encoding: 8bit
>
> Window names containing only ISO 8859-1 were broken on the location of
> non-ASCII ISO 8859-1 character, for example áâãéíóôúç, because they were
> treated as UTF-8. When commenting out the if-branch testing for XA_STRING, root
> window title, usually set by status programs such as slstatus to UTF-8 text,
> was not shown correctly, so this patch adds an exception for root window
> instead, skipping conversion in that case.
>
> Reported by Dr. André Desgualdo Pereira.
>
> Signed-off-by: Страхиња Радић <contact_AT_strahinja.org>
> ---
> dwm.c | 5 ++++-
> 1 file changed, 4 insertions(+), 1 deletion(-)
>
> diff --git a/dwm.c b/dwm.c
> index f1d86b2..c896325 100644
> --- a/dwm.c
> +++ b/dwm.c
> _AT_@ -917,7 +917,10 @@ gettextprop(Window w, Atom atom, char *text, unsigned int size)
> text[0] = '\0';
> if (!XGetTextProperty(dpy, w, &name, atom) || !name.nitems)
> return 0;
> - if (name.encoding == XA_STRING) {
> + /*if (name.encoding == XA_STRING) {
> + strncpy(text, (char *)name.value, size - 1);
> + } else */
> + if (w == DefaultRootWindow(dpy)) {
> strncpy(text, (char *)name.value, size - 1);
> } else if (XmbTextPropertyToTextList(dpy, &name, &list, &n) >= Success && n > 0 && *list) {
> strncpy(text, *list, size - 1);
> --
> 2.38.5
>

Hi,

Unless I'm missing something. It seems like an application or environment
issue.

For dwm it is assumed the environment is utf-8 and application should use it.

I think it makes sense if the application uses utf-8 or the same encoding as
the environment. It shouldn't pick some encoding an expect the window manager
to autodetect and handle all of them.

-- 
Kind regards,
Hiltjo
Received on Wed Jul 12 2023 - 22:28:18 CEST

This archive was generated by hypermail 2.3.0 : Wed Jul 12 2023 - 22:36:37 CEST