[Libguestfs] [PATCH 2/2] c: Allow NULL optargs to be passed to _argv calls

Matthew Booth mbooth at redhat.com
Tue Jan 17 13:48:48 UTC 2012


Previously, passing NULL optargs to an _argv call resulted in a segfault. This
change causes NULL optargs to be interpreted as no optargs, and to be correctly
handled accordingly.
---
 generator/generator_c.ml |   15 +++++++++++++++
 1 files changed, 15 insertions(+), 0 deletions(-)

diff --git a/generator/generator_c.ml b/generator/generator_c.ml
index 9cfb2b7..c6962f5 100644
--- a/generator/generator_c.ml
+++ b/generator/generator_c.ml
@@ -994,6 +994,16 @@ trace_send_line (guestfs_h *g)
       indent shortname (string_of_errcode errcode)
   in
 
+  let handle_null_optargs optargs shortname =
+    if optargs <> [] then (
+      pr "  struct guestfs_%s_argv optargs_null;\n" shortname;
+      pr "  if (!optargs) {\n";
+      pr "    optargs_null.bitmask = 0;\n";
+      pr "    optargs = &optargs_null;\n";
+      pr "  }\n\n";
+    )
+  in
+
   (* For non-daemon functions, generate a wrapper around each function. *)
   List.iter (
     fun (shortname, (ret, _, optargs as style), _, _, _, _, _) ->
@@ -1006,6 +1016,9 @@ trace_send_line (guestfs_h *g)
           ~handle:"g" ~prefix:"guestfs_" ~suffix:"_argv" ~optarg_proto:Argv
           shortname style;
       pr "{\n";
+
+      handle_null_optargs optargs shortname;
+
       pr "  int trace_flag = g->trace;\n";
       pr "  FILE *trace_fp;\n";
       (match ret with
@@ -1071,6 +1084,8 @@ trace_send_line (guestfs_h *g)
 
       pr "{\n";
 
+      handle_null_optargs optargs shortname;
+
       (match args with
        | [] -> ()
        | _ -> pr "  struct %s_args args;\n" name
-- 
1.7.7.5




More information about the Libguestfs mailing list