From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:36808) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QUJ54-0005es-G6 for qemu-devel@nongnu.org; Wed, 08 Jun 2011 09:45:59 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1QUJ51-00006q-Ly for qemu-devel@nongnu.org; Wed, 08 Jun 2011 09:45:58 -0400 Received: from mx1.redhat.com ([209.132.183.28]:9696) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QUJ51-00006L-5m for qemu-devel@nongnu.org; Wed, 08 Jun 2011 09:45:55 -0400 From: Kevin Wolf Date: Wed, 8 Jun 2011 15:48:29 +0200 Message-Id: <1307540910-12398-12-git-send-email-kwolf@redhat.com> In-Reply-To: <1307540910-12398-1-git-send-email-kwolf@redhat.com> References: <1307540910-12398-1-git-send-email-kwolf@redhat.com> Subject: [Qemu-devel] [PATCH 11/12] bdrv_img_create: Fix segfault List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: anthony@codemonkey.ws Cc: kwolf@redhat.com, qemu-devel@nongnu.org Block drivers that don't support creating images don't have a size option. Fail gracefully instead of segfaulting when trying to access the option's value. Signed-off-by: Kevin Wolf --- block.c | 5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-) diff --git a/block.c b/block.c index 3036a2d..24a25d5 100644 --- a/block.c +++ b/block.c @@ -2881,7 +2881,7 @@ int bdrv_img_create(const char *filename, const char *fmt, char *options, uint64_t img_size, int flags) { QEMUOptionParameter *param = NULL, *create_options = NULL; - QEMUOptionParameter *backing_fmt, *backing_file; + QEMUOptionParameter *backing_fmt, *backing_file, *size; BlockDriverState *bs = NULL; BlockDriver *drv, *proto_drv; BlockDriver *backing_drv = NULL; @@ -2964,7 +2964,8 @@ int bdrv_img_create(const char *filename, const char *fmt, // The size for the image must always be specified, with one exception: // If we are using a backing file, we can obtain the size from there - if (get_option_parameter(param, BLOCK_OPT_SIZE)->value.n == -1) { + size = get_option_parameter(param, BLOCK_OPT_SIZE); + if (size && size->value.n == -1) { if (backing_file && backing_file->value.s) { uint64_t size; char buf[32]; -- 1.7.5.2