Patchwork [for,1.3,v2] block: Fix regression for MinGW (assertion caused by short string)

login
register
mail settings
Submitter Stefan Weil
Date Nov. 22, 2012, 6:25 a.m.
Message ID <1353565548-10010-1-git-send-email-sw@weilnetz.de>
Download mbox | patch
Permalink /patch/201021/
State Accepted
Headers show

Comments

Stefan Weil - Nov. 22, 2012, 6:25 a.m.
The local string tmp_filename is passed to function get_tmp_filename
which expects a string with minimum size MAX_PATH for w32 hosts.

MAX_PATH is 260 and PATH_MAX is 259, so tmp_filename was too short.

Commit eba25057b9a5e19d10ace2bc7716667a31297169 introduced this
regression.

Signed-off-by: Stefan Weil <sw@weilnetz.de>
---

v2: Added TODO comment as suggested by Stefan Hajnoczi.

Hi Anthony, hi Blue,

this fix is needed for 1.3 to avoid a fatal assertion on Windows.
As discussed on qemu-devel, it is a minimal solution and can be
replaced by a better one after 1.3.

Please commit it to git master.

Regards
Stefan


 block.c |    3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
Stefan Hajnoczi - Nov. 22, 2012, 10:19 a.m.
On Thu, Nov 22, 2012 at 07:25:48AM +0100, Stefan Weil wrote:
> The local string tmp_filename is passed to function get_tmp_filename
> which expects a string with minimum size MAX_PATH for w32 hosts.
> 
> MAX_PATH is 260 and PATH_MAX is 259, so tmp_filename was too short.
> 
> Commit eba25057b9a5e19d10ace2bc7716667a31297169 introduced this
> regression.
> 
> Signed-off-by: Stefan Weil <sw@weilnetz.de>
> ---
> 
> v2: Added TODO comment as suggested by Stefan Hajnoczi.
> 
> Hi Anthony, hi Blue,
> 
> this fix is needed for 1.3 to avoid a fatal assertion on Windows.
> As discussed on qemu-devel, it is a minimal solution and can be
> replaced by a better one after 1.3.
> 
> Please commit it to git master.
> 
> Regards
> Stefan
> 
> 
>  block.c |    3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)

Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Blue Swirl - Nov. 24, 2012, 9:01 p.m.
Thanks, applied.

On Thu, Nov 22, 2012 at 6:25 AM, Stefan Weil <sw@weilnetz.de> wrote:
> The local string tmp_filename is passed to function get_tmp_filename
> which expects a string with minimum size MAX_PATH for w32 hosts.
>
> MAX_PATH is 260 and PATH_MAX is 259, so tmp_filename was too short.
>
> Commit eba25057b9a5e19d10ace2bc7716667a31297169 introduced this
> regression.
>
> Signed-off-by: Stefan Weil <sw@weilnetz.de>
> ---
>
> v2: Added TODO comment as suggested by Stefan Hajnoczi.
>
> Hi Anthony, hi Blue,
>
> this fix is needed for 1.3 to avoid a fatal assertion on Windows.
> As discussed on qemu-devel, it is a minimal solution and can be
> replaced by a better one after 1.3.
>
> Please commit it to git master.
>
> Regards
> Stefan
>
>
>  block.c |    3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/block.c b/block.c
> index 854ebd6..c05875f 100644
> --- a/block.c
> +++ b/block.c
> @@ -787,7 +787,8 @@ int bdrv_open(BlockDriverState *bs, const char *filename, int flags,
>                BlockDriver *drv)
>  {
>      int ret;
> -    char tmp_filename[PATH_MAX];
> +    /* TODO: extra byte is a hack to ensure MAX_PATH space on Windows. */
> +    char tmp_filename[PATH_MAX + 1];
>
>      if (flags & BDRV_O_SNAPSHOT) {
>          BlockDriverState *bs1;
> --
> 1.7.10.4
>

Patch

diff --git a/block.c b/block.c
index 854ebd6..c05875f 100644
--- a/block.c
+++ b/block.c
@@ -787,7 +787,8 @@  int bdrv_open(BlockDriverState *bs, const char *filename, int flags,
               BlockDriver *drv)
 {
     int ret;
-    char tmp_filename[PATH_MAX];
+    /* TODO: extra byte is a hack to ensure MAX_PATH space on Windows. */
+    char tmp_filename[PATH_MAX + 1];
 
     if (flags & BDRV_O_SNAPSHOT) {
         BlockDriverState *bs1;