diff options
author | David Mitchell <davem@iabyn.com> | 2017-08-17 08:25:50 +0100 |
---|---|---|
committer | David Mitchell <davem@iabyn.com> | 2017-08-17 08:27:36 +0100 |
commit | f649c622bbf0c42d2c847fc7704db9c435527e3f (patch) | |
tree | e0004ee94067d9c9097c3dd322494cdfcd366403 /dump.c | |
parent | 36000cd1c47863d8412b285701db7232dd450239 (diff) | |
download | perl-f649c622bbf0c42d2c847fc7704db9c435527e3f.tar.gz |
S_opdump_indent(): avoid shift overflow
RT #131912
the (1 << i) is harmless for large i, but triggers an 'undefined-behavior'
errror in clang.
So work around it.
Diffstat (limited to 'dump.c')
-rw-r--r-- | dump.c | 5 |
1 files changed, 4 insertions, 1 deletions
@@ -578,7 +578,10 @@ S_opdump_indent(pTHX_ const OP *o, I32 level, UV bar, PerlIO *file, /* output preceding blank line */ PerlIO_puts(file, " "); for (i = level-1; i >= 0; i--) - PerlIO_puts(file, i == 0 || (bar & (1 << i)) ? "| " : " "); + PerlIO_puts(file, ( i == 0 + || (i < UVSIZE*8 && (bar & ((UV)1 << i))) + ) + ? "| " : " "); PerlIO_puts(file, "\n"); /* output sequence number */ |