diff options
author | Rafael Garcia-Suarez <rgs@consttype.org> | 2010-01-18 07:29:50 +0100 |
---|---|---|
committer | Rafael Garcia-Suarez <rgs@consttype.org> | 2010-01-18 07:52:41 +0100 |
commit | 54fcd2cd405902c42b2f46e5110b540f83c77028 (patch) | |
tree | 9807b1e7e2fd09c76ec2e03d6a9ea0767106cb51 | |
parent | c25e53bef71ab0f21ff2b53e7adf829f605eadad (diff) | |
download | perl-54fcd2cd405902c42b2f46e5110b540f83c77028.tar.gz |
Revert "[perl #62646] Maximum string length with substr"
This reverts commit b6d1426f94a845fb8fece8b6ad0b7d9f35f2d62e.
Conflicts:
pp.c
-rw-r--r-- | pp.c | 17 | ||||
-rw-r--r-- | t/re/substr.t | 17 |
2 files changed, 8 insertions, 26 deletions
@@ -3079,12 +3079,12 @@ PP(pp_substr) { dVAR; dSP; dTARGET; SV *sv; - IV len = 0; + I32 len = 0; STRLEN curlen; STRLEN utf8_curlen; - IV pos; - IV rem; - IV fail; + I32 pos; + I32 rem; + I32 fail; const I32 lvalue = PL_op->op_flags & OPf_MOD || LVRET; const char *tmps; const I32 arybase = CopARYBASE_get(PL_curcop); @@ -3147,7 +3147,7 @@ PP(pp_substr) rem = curlen; else if (len >= 0) { rem = pos+len; - if (rem > (IV)curlen) + if (rem > (I32)curlen) rem = curlen; } else { @@ -3167,11 +3167,8 @@ PP(pp_substr) RETPUSHUNDEF; } else { - const IV upos = pos; - const IV urem = rem; - /* FIXME -- if an IV is longer than an I32, we're truncating here, - * but a 64-bit version of sv_pos_u2b is not (yet) available. - */ + const I32 upos = pos; + const I32 urem = rem; if (utf8_curlen) sv_pos_u2b(sv, (I32 *)&pos, (I32 *)&rem); tmps += pos; diff --git a/t/re/substr.t b/t/re/substr.t index 49fd97bea7..c3fa6e10e7 100644 --- a/t/re/substr.t +++ b/t/re/substr.t @@ -24,7 +24,7 @@ $SIG{__WARN__} = sub { require './test.pl'; -plan(338); +plan(334); run_tests() unless caller; @@ -682,19 +682,4 @@ is($x, "\x{100}\x{200}\xFFb"); is(substr($a,1,1), 'b'); } -# [perl #62646] offsets exceeding 32 bits on 64-bit system -SKIP: { - skip("32-bit system", 4) unless ~0 > 0xffffffff; - my $a = "abc"; - my $r; - $w = 0; - $r = substr($a, 0xffffffff, 1); - is($r, undef); - is($w, 1); - $w = 0; - $r = substr($a, 0xffffffff+1, 1); - is($r, undef); - is($w, 1); -} - } |