]> git.vpit.fr Git - perl/modules/Variable-Magic.git/blobdiff - Magic.xs
Fix memory miswrite when passing data arguments to cast()
[perl/modules/Variable-Magic.git] / Magic.xs
index df86b33edfd7ee6dd994d48b6d87721fbac39800..537f1e2e24dd19cc5731f4301bff1e9a76c12cd2 100644 (file)
--- a/Magic.xs
+++ b/Magic.xs
@@ -536,6 +536,8 @@ STATIC const SV *vmg_wizard_validate(pTHX_ const SV *wiz) {
  }
 
  croak(vmg_invalid_wiz);
+ /* Not reached */
+ return NULL;
 }
 
 #define vmg_wizard_id(W)         SvIVX((const SV *) (W))
@@ -871,7 +873,7 @@ STATIC void vmg_op_info_init(pTHX_ unsigned int opinfo) {
    if (!MY_CXT.b__op_stashes[0]) {
     opclass c;
     require_pv("B.pm");
-    for (c = 0; c < OPc_MAX; ++c)
+    for (c = OPc_NULL; c < OPc_MAX; ++c)
      MY_CXT.b__op_stashes[c] = gv_stashpv(vmg_opclassnames[c], 1);
    }
    break;
@@ -1316,7 +1318,7 @@ PPCODE:
   ud.owner   = MY_CXT.owner;
   ptable_walk(MY_CXT.wizards, vmg_ptable_clone, &ud);
 
-  for (c = 0; c < OPc_MAX; ++c) {
+  for (c = OPc_NULL; c < OPc_MAX; ++c) {
    if (MY_CXT.b__op_stashes[c])
     had_b__op_stash |= (((U32) 1) << c);
   }
@@ -1325,7 +1327,7 @@ PPCODE:
   MY_CXT_CLONE;
   MY_CXT.wizards = t;
   MY_CXT.owner   = aTHX;
-  for (c = 0; c < OPc_MAX; ++c) {
+  for (c = OPc_NULL; c < OPc_MAX; ++c) {
    MY_CXT.b__op_stashes[c] = (had_b__op_stash & (((U32) 1) << c))
                               ? gv_stashpv(vmg_opclassnames[c], 1) : NULL;
   }
@@ -1412,15 +1414,12 @@ PROTOTYPE: \[$@%&*]$@
 PREINIT:
  SV **args = NULL;
  I32 i = 0;
- SV *ret;
 CODE:
  if (items > 2) {
   i = items - 2;
   args = &ST(2);
  }
- ret = newSVuv(vmg_cast(SvRV(sv), vmg_wizard_validate(wiz), args, i));
- SvREFCNT_dec(args);
- RETVAL = ret;
+ RETVAL = newSVuv(vmg_cast(SvRV(sv), vmg_wizard_validate(wiz), args, i));
 OUTPUT:
  RETVAL