From patchwork Tue Jan 29 21:50:31 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: vmdk: Allow space in file name Date: Tue, 29 Jan 2013 11:50:31 -0000 From: Philipp Hahn X-Patchwork-Id: 216776 Message-Id: <25564d1eb38c6305f7cb1d1a37cec154acc1a51e.1359526037.git.hahn@univention.de> To: qemu-devel@nongnu.org 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 Wokrstation. 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 Reviewed-by: Markus Armbruster --- block/vmdk.c | 10 +--------- 1 files changed, 1 insertions(+), 9 deletions(-) [V2] Also remove " striping code. Add \n\r to stop character set. diff --git a/block/vmdk.c b/block/vmdk.c index 19298c2..20ad646 100644 --- a/block/vmdk.c +++ b/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" */ 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); if (ret < 4 || strcmp(access, "RW")) { goto next_line; @@ -653,14 +653,6 @@ static int vmdk_parse_extents(const char *desc, BlockDriverState *bs, 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 || (strcmp(type, "FLAT") && strcmp(type, "SPARSE")) || (strcmp(access, "RW"))) {