summaryrefslogtreecommitdiff
path: root/pp.c
diff options
context:
space:
mode:
authorGurusamy Sarathy <gsar@cpan.org>1999-12-06 23:42:55 +0000
committerGurusamy Sarathy <gsar@cpan.org>1999-12-06 23:42:55 +0000
commit014822e4c0d7b7cfffc319235fe7ea64ec87ecae (patch)
treed0b90cc5c733c9ad7777fb5547d661ce1afefa91 /pp.c
parent8d9e1a19ce98858053635b6720101121924f56b9 (diff)
downloadperl-014822e4c0d7b7cfffc319235fe7ea64ec87ecae.tar.gz
tweaks for building with -DUSE_ITHREADS on !WIN32 platforms;
fix bug where lc($readonly) could result in bogus errors p4raw-id: //depot/perl@4660
Diffstat (limited to 'pp.c')
-rw-r--r--pp.c18
1 files changed, 11 insertions, 7 deletions
diff --git a/pp.c b/pp.c
index f404883308..c14a05ce7a 100644
--- a/pp.c
+++ b/pp.c
@@ -2261,7 +2261,7 @@ PP(pp_ucfirst)
tend = uv_to_utf8(tmpbuf, uv);
- if (!SvPADTMP(sv) || tend - tmpbuf != ulen) {
+ if (!SvPADTMP(sv) || tend - tmpbuf != ulen || SvREADONLY(sv)) {
dTARGET;
sv_setpvn(TARG, (char*)tmpbuf, tend - tmpbuf);
sv_catpvn(TARG, (char*)(s + ulen), slen - ulen);
@@ -2273,7 +2273,7 @@ PP(pp_ucfirst)
}
}
else {
- if (!SvPADTMP(sv)) {
+ if (!SvPADTMP(sv) || SvREADONLY(sv)) {
dTARGET;
sv_setsv(TARG, sv);
sv = TARG;
@@ -2318,7 +2318,7 @@ PP(pp_lcfirst)
tend = uv_to_utf8(tmpbuf, uv);
- if (!SvPADTMP(sv) || tend - tmpbuf != ulen) {
+ if (!SvPADTMP(sv) || tend - tmpbuf != ulen || SvREADONLY(sv)) {
dTARGET;
sv_setpvn(TARG, (char*)tmpbuf, tend - tmpbuf);
sv_catpvn(TARG, (char*)(s + ulen), slen - ulen);
@@ -2330,7 +2330,7 @@ PP(pp_lcfirst)
}
}
else {
- if (!SvPADTMP(sv)) {
+ if (!SvPADTMP(sv) || SvREADONLY(sv)) {
dTARGET;
sv_setsv(TARG, sv);
sv = TARG;
@@ -2397,7 +2397,7 @@ PP(pp_uc)
}
}
else {
- if (!SvPADTMP(sv)) {
+ if (!SvPADTMP(sv) || SvREADONLY(sv)) {
dTARGET;
sv_setsv(TARG, sv);
sv = TARG;
@@ -2468,7 +2468,7 @@ PP(pp_lc)
}
}
else {
- if (!SvPADTMP(sv)) {
+ if (!SvPADTMP(sv) || SvREADONLY(sv)) {
dTARGET;
sv_setsv(TARG, sv);
sv = TARG;
@@ -4852,9 +4852,13 @@ PP(pp_pack)
* of pack() (and all copies of the result) are
* gone.
*/
- if (ckWARN(WARN_UNSAFE) && (SvTEMP(fromstr) || SvPADTMP(fromstr)))
+ if (ckWARN(WARN_UNSAFE) && (SvTEMP(fromstr)
+ || (SvPADTMP(fromstr)
+ && !SvREADONLY(fromstr))))
+ {
Perl_warner(aTHX_ WARN_UNSAFE,
"Attempt to pack pointer to temporary value");
+ }
if (SvPOK(fromstr) || SvNIOK(fromstr))
aptr = SvPV(fromstr,n_a);
else