summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRafael Garcia-Suarez <rgarciasuarez@gmail.com>2004-01-05 23:29:55 +0000
committerRafael Garcia-Suarez <rgarciasuarez@gmail.com>2004-01-05 23:29:55 +0000
commit028c96ebc8db5bddc2fee91a32f93bb4050b53cf (patch)
tree9ee6ae76f73a419204161c427b1c1ed1e3b26420
parent3511154c18a0900e8873e8e72a4b74931525e718 (diff)
downloadperl-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.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/pp.c b/pp.c
index 5ebc7440f1..7ebc7b807f 100644
--- a/pp.c
+++ b/pp.c
@@ -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);