summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2011-09-05 20:17:03 -0500
committerJesse Luehrs <doy@tozt.net>2011-09-05 20:17:03 -0500
commit1ff84a326d0d713e63382bbe164adbb6b4902a1b (patch)
tree38b2e5f592ce2dff65fb5687d5506a4f454b8b71
parent1aa4d5a886cb9a54d4bba8cc4c585df36777cf18 (diff)
downloadpackage-stash-xs-1ff84a326d0d713e63382bbe164adbb6b4902a1b.tar.gz
package-stash-xs-1ff84a326d0d713e63382bbe164adbb6b4902a1b.zip
don't allow variable names that contain ::
-rw-r--r--XS.xs7
-rw-r--r--typemap1
2 files changed, 8 insertions, 0 deletions
diff --git a/XS.xs b/XS.xs
index 8c84081..60775b7 100644
--- a/XS.xs
+++ b/XS.xs
@@ -235,6 +235,13 @@ static void _deconstruct_variable_hash(HV *variable, varspec_t *varspec)
varspec->type = string_to_vartype(SvPV_nolen(HeVAL(val)));
}
+static void _check_varspec_is_valid(varspec_t *varspec)
+{
+ if (strstr(SvPV_nolen(varspec->name), "::")) {
+ croak("Variable names may not contain ::");
+ }
+}
+
static int _valid_for_type(SV *value, vartype_t type)
{
svtype sv_type = SvROK(value) ? SvTYPE(SvRV(value)) : SVt_NULL;
diff --git a/typemap b/typemap
index 8fd59c8..fc3c031 100644
--- a/typemap
+++ b/typemap
@@ -10,6 +10,7 @@ T_VARSPEC
_deconstruct_variable_hash((HV*)SvRV($arg), &$var);
else
croak(\"varspec must be a string or a hashref\");
+ _check_varspec_is_valid(&$var);
T_VARTYPE
if (!SvPOK($arg))