Blob Blame History Raw
From 87b8584d6acc50751dffd81d8bb187d3ad73462c Mon Sep 17 00:00:00 2001
From: "Richard W.M. Jones" <rjones@redhat.com>
Date: Thu, 14 Nov 2013 15:45:23 +0000
Subject: [PATCH] perl: Give error instead of crashing if optarg is not an
 array reference.

  $g->add_drive ("", server => 1);

would segfault.  Now it gives a nice error instead:

  array reference expected for 'server' argument at [line]

(cherry picked from commit c032130226bdca539b8ac34ce622e5cd9a71c152)
---
 generator/perl.ml | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/generator/perl.ml b/generator/perl.ml
index 1acd782..9b7c25a 100644
--- a/generator/perl.ml
+++ b/generator/perl.ml
@@ -464,10 +464,13 @@ PREINIT:
              | OStringList _ ->
                pr "          size_t i, len;\n";
                pr "          char **r;\n";
+               pr "          SV *arg;\n";
                pr "          AV *av;\n";
                pr "          SV **svp;\n";
                pr "\n";
-               pr "          /* XXX More checking required here. */\n";
+               pr "          arg = ST (items_i+1);\n";
+               pr "          if (!SvROK (arg) || SvTYPE (SvRV (arg)) != SVt_PVAV)\n";
+               pr "            croak (\"array reference expected for '%%s' argument\", \"%s\");\n" n;
                pr "          av = (AV *) SvRV (ST (items_i+1));\n";
                pr "\n";
                pr "          /* Note av_len returns index of final element. */\n";
-- 
1.8.3.1