X-Git-Url: http://git.vpit.fr/?a=blobdiff_plain;f=Upper.xs;h=75c50934fa9abb290200ffc25dd5a496dde41346;hb=2e454ab26afd2f0a976249346cc96399c94257f3;hp=ba8b7b4a53cf5599d9fb561482f42039d60e4514;hpb=2315578c2990170a7aad20f8a15f715e4b2be5ef;p=perl%2Fmodules%2FScope-Upper.git diff --git a/Upper.xs b/Upper.xs index ba8b7b4..75c5093 100644 --- a/Upper.xs +++ b/Upper.xs @@ -380,6 +380,9 @@ STATIC void su_ud_localize_init(pTHX_ su_ud_localize *ud, SV *sv, SV *val, SV *e t = SvTYPE(SvRV(val)); deref = 1; } + } else if (SvROK(sv)) { + croak("Invalid %s reference as the localization target", + sv_reftype(SvRV(sv), 0)); } else { STRLEN len, l; const char *p = SvPV_const(sv, len), *s; @@ -1031,11 +1034,17 @@ PREINIT: I32 cxix; su_ud_localize *ud; CODE: + if (SvTYPE(sv) >= SVt_PVGV) + croak("Can't infer the element localization type from a glob and the value"); SU_GET_CONTEXT(3, 3); Newx(ud, 1, su_ud_localize); SU_UD_ORIGIN(ud) = NULL; SU_UD_HANDLER(ud) = su_localize; su_ud_localize_init(ud, sv, val, elem); + if (ud->type != SVt_PVAV && ud->type != SVt_PVHV) { + Safefree(ud); + croak("Can't localize an element of something that isn't an array or a hash"); + } su_init(cxix, ud, 4); void