On Thu, Nov 20, 2025 at 09:32:53AM +0100, Michal Privoznik via Devel wrote:
From: Michal Privoznik <mprivozn@redhat.com>
The esxParseVMXFileName() function parses path to a disk image trying to replace some "known" patterns (e.g. datastore paths). A simple filename is treated as a path relative to .vmx file. But disk images (and thus filenames) can be in a subdirectory, relative to the .vmx file. For instance:
subfolder/disk.vmdk
Adapt our parser to this fact.
Resolves: https://issues.redhat.com/browse/RHEL-122751 Signed-off-by: Michal Privoznik <mprivozn@redhat.com> --- src/esx/esx_driver.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-)
diff --git a/src/esx/esx_driver.c b/src/esx/esx_driver.c index 6452a33b7c..9f965811b1 100644 --- a/src/esx/esx_driver.c +++ b/src/esx/esx_driver.c @@ -138,7 +141,7 @@ esxParseVMXFileName(const char *fileName,
*out = NULL;
- if (!strchr(fileName, '/') && !strchr(fileName, '\\')) { + if (*fileName != '/' && !strchr(fileName, '\\')) { /* Plain file name, use same directory as for the .vmx file */ *out = g_strdup_printf("%s/%s", data->datastorePathWithoutFileName, fileName);
Now when I'm thinking about it, there probably should be some check that it's not referring to too many parent directories? Although once we get it from the VMX it means it's already there... And we probably leave the checking to the server in the other (xml2vmx) case since we happily forward any subdir/../../../../filename.vmdk there. So I guess it's fine. Reviewed-by: Martin Kletzander <mkletzan@redhat.com>