diff options
author | Rafael Garcia-Suarez <rgarciasuarez@gmail.com> | 2004-01-05 23:29:55 +0000 |
---|---|---|
committer | Rafael Garcia-Suarez <rgarciasuarez@gmail.com> | 2004-01-05 23:29:55 +0000 |
commit | 028c96ebc8db5bddc2fee91a32f93bb4050b53cf (patch) | |
tree | 9ee6ae76f73a419204161c427b1c1ed1e3b26420 | |
parent | 3511154c18a0900e8873e8e72a4b74931525e718 (diff) | |
download | perl-028c96ebc8db5bddc2fee91a32f93bb4050b53cf.tar.gz |
Some of the bitwise manipulation PP functions weren't checking
whether their arguments were magical before using them.
(bug [#24816]).
p4raw-id: //depot/perl@22074
-rw-r--r-- | pp.c | 8 |
1 files changed, 8 insertions, 0 deletions
@@ -2200,6 +2200,8 @@ PP(pp_bit_and) dSP; dATARGET; tryAMAGICbin(band,opASSIGN); { dPOPTOPssrl; + if (SvGMAGICAL(left)) mg_get(left); + if (SvGMAGICAL(right)) mg_get(right); if (SvNIOKp(left) || SvNIOKp(right)) { if (PL_op->op_private & HINT_INTEGER) { IV i = SvIV(left) & SvIV(right); @@ -2223,6 +2225,8 @@ PP(pp_bit_xor) dSP; dATARGET; tryAMAGICbin(bxor,opASSIGN); { dPOPTOPssrl; + if (SvGMAGICAL(left)) mg_get(left); + if (SvGMAGICAL(right)) mg_get(right); if (SvNIOKp(left) || SvNIOKp(right)) { if (PL_op->op_private & HINT_INTEGER) { IV i = (USE_LEFT(left) ? SvIV(left) : 0) ^ SvIV(right); @@ -2246,6 +2250,8 @@ PP(pp_bit_or) dSP; dATARGET; tryAMAGICbin(bor,opASSIGN); { dPOPTOPssrl; + if (SvGMAGICAL(left)) mg_get(left); + if (SvGMAGICAL(right)) mg_get(right); if (SvNIOKp(left) || SvNIOKp(right)) { if (PL_op->op_private & HINT_INTEGER) { IV i = (USE_LEFT(left) ? SvIV(left) : 0) | SvIV(right); @@ -2347,6 +2353,8 @@ PP(pp_complement) dSP; dTARGET; tryAMAGICun(compl); { dTOPss; + if (SvGMAGICAL(sv)) + mg_get(sv); if (SvNIOKp(sv)) { if (PL_op->op_private & HINT_INTEGER) { IV i = ~SvIV(sv); |