diff mbox

check NULL opts in qemu_opt_get functions

Message ID 1403059646-4161-1-git-send-email-cyliu@suse.com
State New
Headers show

Commit Message

Chunyan Liu June 18, 2014, 2:47 a.m. UTC
Some places will call bdrv_create_file(filename, NULL, &local_err), where
opts is NULL. Check NULL in qemu_opt_get and qemu_opt_get_*_del functions,
to avoid extra effort of checking opts before calling them every time.

Signed-off-by: Chunyan Liu <cyliu@suse.com>
---
Fix reported bugs:
 http://lists.gnu.org/archive/html/qemu-devel/2014-06/msg03866.html

---
 util/qemu-option.c | 28 ++++++++++++++++++++++++----
 1 file changed, 24 insertions(+), 4 deletions(-)

Comments

Eric Blake June 18, 2014, 4:04 a.m. UTC | #1
On 06/17/2014 08:47 PM, Chunyan Liu wrote:
> Some places will call bdrv_create_file(filename, NULL, &local_err), where
> opts is NULL. Check NULL in qemu_opt_get and qemu_opt_get_*_del functions,
> to avoid extra effort of checking opts before calling them every time.
> 
> Signed-off-by: Chunyan Liu <cyliu@suse.com>
> ---
> Fix reported bugs:
>  http://lists.gnu.org/archive/html/qemu-devel/2014-06/msg03866.html
> 
> ---
>  util/qemu-option.c | 28 ++++++++++++++++++++++++----
>  1 file changed, 24 insertions(+), 4 deletions(-)

Reviewed-by: Eric Blake <eblake@redhat.com>
Stefan Hajnoczi June 19, 2014, 3:34 a.m. UTC | #2
On Wed, Jun 18, 2014 at 10:47:26AM +0800, Chunyan Liu wrote:
> Some places will call bdrv_create_file(filename, NULL, &local_err), where
> opts is NULL. Check NULL in qemu_opt_get and qemu_opt_get_*_del functions,
> to avoid extra effort of checking opts before calling them every time.
> 
> Signed-off-by: Chunyan Liu <cyliu@suse.com>
> ---
> Fix reported bugs:
>  http://lists.gnu.org/archive/html/qemu-devel/2014-06/msg03866.html
> 
> ---
>  util/qemu-option.c | 28 ++++++++++++++++++++++++----
>  1 file changed, 24 insertions(+), 4 deletions(-)

A subset of QemuOpts functions access NULL opts while others do not, but
that was already the case before this patch.  So this patch looks good
to me.

Thanks, applied to my block tree:
https://github.com/stefanha/qemu/commits/block

Stefan
diff mbox

Patch

diff --git a/util/qemu-option.c b/util/qemu-option.c
index 836055a..43de3ad 100644
--- a/util/qemu-option.c
+++ b/util/qemu-option.c
@@ -310,8 +310,13 @@  static void qemu_opt_del_all(QemuOpts *opts, const char *name)
 
 const char *qemu_opt_get(QemuOpts *opts, const char *name)
 {
-    QemuOpt *opt = qemu_opt_find(opts, name);
+    QemuOpt *opt;
 
+    if (opts == NULL) {
+        return NULL;
+    }
+
+    opt = qemu_opt_find(opts, name);
     if (!opt) {
         const QemuOptDesc *desc = find_desc_by_name(opts->list->desc, name);
         if (desc && desc->def_value_str) {
@@ -364,9 +369,14 @@  bool qemu_opt_has_help_opt(QemuOpts *opts)
 static bool qemu_opt_get_bool_helper(QemuOpts *opts, const char *name,
                                      bool defval, bool del)
 {
-    QemuOpt *opt = qemu_opt_find(opts, name);
+    QemuOpt *opt;
     bool ret = defval;
 
+    if (opts == NULL) {
+        return ret;
+    }
+
+    opt = qemu_opt_find(opts, name);
     if (opt == NULL) {
         const QemuOptDesc *desc = find_desc_by_name(opts->list->desc, name);
         if (desc && desc->def_value_str) {
@@ -395,9 +405,14 @@  bool qemu_opt_get_bool_del(QemuOpts *opts, const char *name, bool defval)
 static uint64_t qemu_opt_get_number_helper(QemuOpts *opts, const char *name,
                                            uint64_t defval, bool del)
 {
-    QemuOpt *opt = qemu_opt_find(opts, name);
+    QemuOpt *opt;
     uint64_t ret = defval;
 
+    if (opts == NULL) {
+        return ret;
+    }
+
+    opt = qemu_opt_find(opts, name);
     if (opt == NULL) {
         const QemuOptDesc *desc = find_desc_by_name(opts->list->desc, name);
         if (desc && desc->def_value_str) {
@@ -427,9 +442,14 @@  uint64_t qemu_opt_get_number_del(QemuOpts *opts, const char *name,
 static uint64_t qemu_opt_get_size_helper(QemuOpts *opts, const char *name,
                                          uint64_t defval, bool del)
 {
-    QemuOpt *opt = qemu_opt_find(opts, name);
+    QemuOpt *opt;
     uint64_t ret = defval;
 
+    if (opts == NULL) {
+        return ret;
+    }
+
+    opt = qemu_opt_find(opts, name);
     if (opt == NULL) {
         const QemuOptDesc *desc = find_desc_by_name(opts->list->desc, name);
         if (desc && desc->def_value_str) {