--- perl-5.8.8/mg.c.U27605 2006-01-27 15:23:21.000000000 -0500 +++ perl-5.8.8/mg.c 2006-06-01 19:37:17.000000000 -0400 @@ -2520,10 +2520,10 @@ #endif /* PL_origalen is set in perl_parse(). */ s = SvPV_force(sv,len); - if (len >= (STRLEN)PL_origalen) { - /* Longer than original, will be truncated. */ - Copy(s, PL_origargv[0], PL_origalen, char); - PL_origargv[0][PL_origalen - 1] = 0; + if (len >= (STRLEN)PL_origalen-1) { + /* Longer than original, will be truncated. We assume that + * PL_origalen bytes are available. */ + Copy(s, PL_origargv[0], PL_origalen-1, char); } else { /* Shorter than original, will be padded. */ @@ -2536,9 +2536,10 @@ * --jhi */ (int)' ', PL_origalen - len - 1); - for (i = 1; i < PL_origargc; i++) - PL_origargv[i] = 0; } + PL_origargv[0][PL_origalen-1] = 0; + for (i = 1; i < PL_origargc; i++) + PL_origargv[i] = 0; UNLOCK_DOLLARZERO_MUTEX; break; #endif --- perl-5.8.8/perl.c.U27605 2006-06-01 19:00:57.000000000 -0400 +++ perl-5.8.8/perl.c 2006-06-01 19:37:17.000000000 -0400 @@ -1561,7 +1561,7 @@ } } } - PL_origalen = s - PL_origargv[0]; + PL_origalen = s - PL_origargv[0] + 1; } if (PL_do_undump) {