diff mbox series

[1/1] qga-win: network-get-interfaces command name field bug fix

Message ID 20190819131620.1302-2-bishara@daynix.com
State New
Headers show
Series BZ#1733165: network-get-interfaces Chinese NIC name | expand

Commit Message

Bishara AbuHattoum Aug. 19, 2019, 1:16 p.m. UTC
Network interface name is fetched as an encoded WCHAR array, (wide
character), then it is decoded using the guest's CP_ACP Windows code
page, which is the default code page as configure in the guest's
Windows, then it is returned as a byte array, (char array).

As stated in the BZ#1733165, when renaming a network interface to a
Chinese name and invoking this command, the returned name field has
the (\ufffd) value for each Chinese character the name had, this
value is an indication that the code page does not have the decoding
information for the given character.

This bug is a result of using the CP_ACP code page for decoding which
is an interchangeable code page, instead CP_UTF8 code page should be
used for decoding the network interface's name.

https://bugzilla.redhat.com/show_bug.cgi?id=1733165

Signed-off-by: Bishara AbuHattoum <bishara@daynix.com>
---
 qga/commands-win32.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

Comments

Bishara AbuHattoum Sept. 3, 2019, 8:42 a.m. UTC | #1
PING

On Mon, Aug 19, 2019 at 4:28 PM Bishara AbuHattoum <bishara@daynix.com>
wrote:

> Network interface name is fetched as an encoded WCHAR array, (wide
> character), then it is decoded using the guest's CP_ACP Windows code
> page, which is the default code page as configure in the guest's
> Windows, then it is returned as a byte array, (char array).
>
> As stated in the BZ#1733165, when renaming a network interface to a
> Chinese name and invoking this command, the returned name field has
> the (\ufffd) value for each Chinese character the name had, this
> value is an indication that the code page does not have the decoding
> information for the given character.
>
> This bug is a result of using the CP_ACP code page for decoding which
> is an interchangeable code page, instead CP_UTF8 code page should be
> used for decoding the network interface's name.
>
> https://bugzilla.redhat.com/show_bug.cgi?id=1733165
>
> Signed-off-by: Bishara AbuHattoum <bishara@daynix.com>
> ---
>  qga/commands-win32.c | 10 +++++-----
>  1 file changed, 5 insertions(+), 5 deletions(-)
>
> diff --git a/qga/commands-win32.c b/qga/commands-win32.c
> index 6b67f16faf..64b1c754b0 100644
> --- a/qga/commands-win32.c
> +++ b/qga/commands-win32.c
> @@ -1387,12 +1387,12 @@ static IP_ADAPTER_ADDRESSES
> *guest_get_adapters_addresses(Error **errp)
>  static char *guest_wctomb_dup(WCHAR *wstr)
>  {
>      char *str;
> -    size_t i;
> +    size_t str_size;
>
> -    i = wcslen(wstr) + 1;
> -    str = g_malloc(i);
> -    WideCharToMultiByte(CP_ACP, WC_COMPOSITECHECK,
> -                        wstr, -1, str, i, NULL, NULL);
> +    str_size = WideCharToMultiByte(CP_UTF8, 0, wstr, -1, NULL, 0, NULL,
> NULL);
> +    /* add 1 to str_size for NULL terminator */
> +    str = g_malloc(str_size + 1);
> +    WideCharToMultiByte(CP_UTF8, 0, wstr, -1, str, str_size, NULL, NULL);
>      return str;
>  }
>
> --
> 2.17.2
>
>
>
Michael Roth Sept. 12, 2019, 11:35 p.m. UTC | #2
Quoting Bishara AbuHattoum (2019-08-19 08:16:20)
> Network interface name is fetched as an encoded WCHAR array, (wide
> character), then it is decoded using the guest's CP_ACP Windows code
> page, which is the default code page as configure in the guest's
> Windows, then it is returned as a byte array, (char array).
> 
> As stated in the BZ#1733165, when renaming a network interface to a
> Chinese name and invoking this command, the returned name field has
> the (\ufffd) value for each Chinese character the name had, this
> value is an indication that the code page does not have the decoding
> information for the given character.
> 
> This bug is a result of using the CP_ACP code page for decoding which
> is an interchangeable code page, instead CP_UTF8 code page should be
> used for decoding the network interface's name.
> 
> https://bugzilla.redhat.com/show_bug.cgi?id=1733165
> 
> Signed-off-by: Bishara AbuHattoum <bishara@daynix.com>

Thanks, applied to qga tree:
  https://github.com/mdroth/qemu/commits/qga

> ---
>  qga/commands-win32.c | 10 +++++-----
>  1 file changed, 5 insertions(+), 5 deletions(-)
> 
> diff --git a/qga/commands-win32.c b/qga/commands-win32.c
> index 6b67f16faf..64b1c754b0 100644
> --- a/qga/commands-win32.c
> +++ b/qga/commands-win32.c
> @@ -1387,12 +1387,12 @@ static IP_ADAPTER_ADDRESSES *guest_get_adapters_addresses(Error **errp)
>  static char *guest_wctomb_dup(WCHAR *wstr)
>  {
>      char *str;
> -    size_t i;
> +    size_t str_size;
> 
> -    i = wcslen(wstr) + 1;
> -    str = g_malloc(i);
> -    WideCharToMultiByte(CP_ACP, WC_COMPOSITECHECK,
> -                        wstr, -1, str, i, NULL, NULL);
> +    str_size = WideCharToMultiByte(CP_UTF8, 0, wstr, -1, NULL, 0, NULL, NULL);
> +    /* add 1 to str_size for NULL terminator */
> +    str = g_malloc(str_size + 1);
> +    WideCharToMultiByte(CP_UTF8, 0, wstr, -1, str, str_size, NULL, NULL);
>      return str;
>  }
> 
> -- 
> 2.17.2
>
diff mbox series

Patch

diff --git a/qga/commands-win32.c b/qga/commands-win32.c
index 6b67f16faf..64b1c754b0 100644
--- a/qga/commands-win32.c
+++ b/qga/commands-win32.c
@@ -1387,12 +1387,12 @@  static IP_ADAPTER_ADDRESSES *guest_get_adapters_addresses(Error **errp)
 static char *guest_wctomb_dup(WCHAR *wstr)
 {
     char *str;
-    size_t i;
+    size_t str_size;
 
-    i = wcslen(wstr) + 1;
-    str = g_malloc(i);
-    WideCharToMultiByte(CP_ACP, WC_COMPOSITECHECK,
-                        wstr, -1, str, i, NULL, NULL);
+    str_size = WideCharToMultiByte(CP_UTF8, 0, wstr, -1, NULL, 0, NULL, NULL);
+    /* add 1 to str_size for NULL terminator */
+    str = g_malloc(str_size + 1);
+    WideCharToMultiByte(CP_UTF8, 0, wstr, -1, str, str_size, NULL, NULL);
     return str;
 }