summaryrefslogtreecommitdiffstats
path: root/generator
diff options
context:
space:
mode:
authorRichard W.M. Jones <rjones@redhat.com>2010-10-23 10:45:06 +0100
committerRichard W.M. Jones <rjones@redhat.com>2010-10-23 10:45:06 +0100
commitb7133b270922df2bc96a35c5316616b18c20c525 (patch)
tree36641391712af4698d1269d0b18530703fbc47f9 /generator
parent6ecaa6371a340d30c2f818500b377963cf5afdee (diff)
downloadlibguestfs-b7133b270922df2bc96a35c5316616b18c20c525.tar.gz
libguestfs-b7133b270922df2bc96a35c5316616b18c20c525.tar.xz
libguestfs-b7133b270922df2bc96a35c5316616b18c20c525.zip
fish: Reject unknown opt args (RHBZ#642934,CVE-2010-3851).
This updates commit 0c1d3c02a8147617ee0646e37d011235abdd2c22.
Diffstat (limited to 'generator')
-rw-r--r--generator/generator_fish.ml11
1 files changed, 10 insertions, 1 deletions
diff --git a/generator/generator_fish.ml b/generator/generator_fish.ml
index fdb4eff3..c5f2afab 100644
--- a/generator/generator_fish.ml
+++ b/generator/generator_fish.ml
@@ -424,12 +424,14 @@ Guestfish will prompt for these separately."
pr " for (; i < argc; ++i) {\n";
pr " uint64_t this_mask;\n";
pr " const char *this_arg;\n";
+ pr "\n";
+ pr " ";
List.iter (
fun argt ->
let n = name_of_argt argt in
let uc_n = String.uppercase n in
let len = String.length n in
- pr " if (STRPREFIX (argv[i], \"%s:\")) {\n" n;
+ pr "if (STRPREFIX (argv[i], \"%s:\")) {\n" n;
(match argt with
| Bool n ->
pr " optargs_s.%s = is_true (&argv[i][%d]) ? 1 : 0;\n"
@@ -453,8 +455,15 @@ Guestfish will prompt for these separately."
pr " this_mask = GUESTFS_%s_%s_BITMASK;\n" uc_name uc_n;
pr " this_arg = \"%s\";\n" n;
pr " }\n";
+ pr " else ";
) optargs;
+ pr "{\n";
+ pr " fprintf (stderr, _(\"%%s: unknown optional argument \\\"%%s\\\"\\n\"),\n";
+ pr " cmd, argv[i]);\n";
+ pr " return -1;\n";
+ pr " }\n";
+ pr "\n";
pr " if (optargs_s.bitmask & this_mask) {\n";
pr " fprintf (stderr, _(\"%%s: optional argument %%s given twice\\n\"),\n";
pr " cmd, this_arg);\n";