On Thu, Jan 08, 2026 at 09:23:23AM +0100, Michal Privoznik via Devel wrote:
> From: Michal Privoznik <[email protected]>
> 
> The aim of this helper function is to URI-encode given string
> twice. There's a bug (fixed in next commit) in which we're unable
> to fetch .vmx file for a domain if corresponding datastore
> contains some special characters (like +). Cole Robinson
> discovered that encoding datastore twice enables libvirt to work
> around the issue [2]. Well, this function does exactly that.
> It was tested with the following inputs and all worked
> flawlessly: "datastore", "datastore2", "datastore2+",
> "datastore3+-@", "data store2+".
> 
> 1: https://issues.redhat.com/browse/RHEL-134127
> 2: https://issues.redhat.com/browse/RHEL-133729#comment-28604072
> 
> Signed-off-by: Michal Privoznik <[email protected]>
> ---
>  src/esx/esx_util.c | 17 +++++++++++++++++
>  src/esx/esx_util.h |  3 +++
>  2 files changed, 20 insertions(+)
> 
> diff --git a/src/esx/esx_util.c b/src/esx/esx_util.c
> index 7ee0e5f7c0..e47ea36730 100644
> --- a/src/esx/esx_util.c
> +++ b/src/esx/esx_util.c
> @@ -448,3 +448,20 @@ esxUtil_EscapeForXml(const char *string)
>  
>      return virBufferContentAndReset(&buffer);
>  }
> +
> +
> +

3 blank lines between functions is OK??

> +/* esxUtil_EscapeInventoryObject:
> + * @buf: the buffer to append to
> + * @string: the string argument which will be URI-encoded
> + *
> + * URI-encode given @string TWICE and append the result to the @buf.
> + */
> +void
> +esxUtil_EscapeInventoryObject(virBuffer *buf, const char *string)

It's nit-picky but should we explain here why we are double-encoding
the string (ie. to workaround a VMware bug)?

But other than that, for the whole series:

Reviewed-by: Richard W.M. Jones <[email protected]>

Rich.

> +{
> +    g_autoptr(GString) escaped = g_string_new(NULL);
> +
> +    g_string_append_uri_escaped(escaped, string, NULL, false);
> +    virBufferURIEncodeString(buf, escaped->str);
> +}
> diff --git a/src/esx/esx_util.h b/src/esx/esx_util.h
> index 58bc44e744..29f01e0c15 100644
> --- a/src/esx/esx_util.h
> +++ b/src/esx/esx_util.h
> @@ -22,6 +22,7 @@
>  #pragma once
>  
>  #include "internal.h"
> +#include "virbuffer.h"
>  #include "viruri.h"
>  
>  #define ESX_VI_CHECK_ARG_LIST(val) \
> @@ -67,3 +68,5 @@ void esxUtil_ReplaceSpecialWindowsPathChars(char *string);
>  char *esxUtil_EscapeDatastoreItem(const char *string);
>  
>  char *esxUtil_EscapeForXml(const char *string);
> +
> +void esxUtil_EscapeInventoryObject(virBuffer *buf, const char *string);
> -- 
> 2.52.0

-- 
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
Fedora Windows cross-compiler. Compile Windows programs, test, and
build Windows installers. Over 100 libraries supported.
http://fedoraproject.org/wiki/MinGW

Reply via email to