mirror of https://github.com/proxmox/mirror_qemu
vmdk: Allow space in file name
The previous scanf() format string stopped parsing the file name on the first white white space, which seems to be allowed at least by VMware Workstation. Change the format string to collect everything between the first and second quote as the file name, disallowing line breaks. Signed-off-by: Philipp Hahn <hahn@univention.de> Reviewed-by: Markus Armbruster <armbru@redhat.com> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>master
parent
46536235d8
commit
cd92347575
10
block/vmdk.c
10
block/vmdk.c
|
@ -641,7 +641,7 @@ static int vmdk_parse_extents(const char *desc, BlockDriverState *bs,
|
||||||
* RW [size in sectors] SPARSE "file-name.vmdk"
|
* RW [size in sectors] SPARSE "file-name.vmdk"
|
||||||
*/
|
*/
|
||||||
flat_offset = -1;
|
flat_offset = -1;
|
||||||
ret = sscanf(p, "%10s %" SCNd64 " %10s %511s %" SCNd64,
|
ret = sscanf(p, "%10s %" SCNd64 " %10s \"%511[^\n\r\"]\" %" SCNd64,
|
||||||
access, §ors, type, fname, &flat_offset);
|
access, §ors, type, fname, &flat_offset);
|
||||||
if (ret < 4 || strcmp(access, "RW")) {
|
if (ret < 4 || strcmp(access, "RW")) {
|
||||||
goto next_line;
|
goto next_line;
|
||||||
|
@ -653,14 +653,6 @@ static int vmdk_parse_extents(const char *desc, BlockDriverState *bs,
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* trim the quotation marks around */
|
|
||||||
if (fname[0] == '"') {
|
|
||||||
memmove(fname, fname + 1, strlen(fname));
|
|
||||||
if (strlen(fname) <= 1 || fname[strlen(fname) - 1] != '"') {
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
fname[strlen(fname) - 1] = '\0';
|
|
||||||
}
|
|
||||||
if (sectors <= 0 ||
|
if (sectors <= 0 ||
|
||||||
(strcmp(type, "FLAT") && strcmp(type, "SPARSE")) ||
|
(strcmp(type, "FLAT") && strcmp(type, "SPARSE")) ||
|
||||||
(strcmp(access, "RW"))) {
|
(strcmp(access, "RW"))) {
|
||||||
|
|
Loading…
Reference in New Issue