summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFather Chrysostomos <sprout@cpan.org>2011-11-22 22:22:08 -0800
committerFather Chrysostomos <sprout@cpan.org>2011-11-23 06:04:42 -0800
commit47a0660e68fc38d8d2ff11855d0d5fa5e2af0b82 (patch)
tree43a9f745c4034df65161286e482d1c11cb557770
parente628fd8c63a09bb2d42cbb37ed8ce144da3bb5ee (diff)
downloadperl-47a0660e68fc38d8d2ff11855d0d5fa5e2af0b82.tar.gz
printf "%vd", "version" should not SEGV
See perl #102586.
-rw-r--r--sv.c2
-rw-r--r--t/op/sprintf.t1
2 files changed, 2 insertions, 1 deletions
diff --git a/sv.c b/sv.c
index b33967f306..b8f0b100f5 100644
--- a/sv.c
+++ b/sv.c
@@ -10343,7 +10343,7 @@ Perl_sv_vcatpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
* back into v-string notation and then let the
* vectorize happen normally
*/
- if (sv_derived_from(vecsv, "version")) {
+ if (sv_derived_from(vecsv, "version") && SvROK(vecsv)) {
char *version = savesvpv(vecsv);
if ( hv_exists(MUTABLE_HV(SvRV(vecsv)), "alpha", 5 ) ) {
Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
diff --git a/t/op/sprintf.t b/t/op/sprintf.t
index 88c53a88cd..b8c8bced4c 100644
--- a/t/op/sprintf.t
+++ b/t/op/sprintf.t
@@ -710,3 +710,4 @@ __END__
>%v.*X< >[3, '012']< >030.031.032< >perl #83194: vector flag + dynamic precision<
>%*v.3X< >[':', '012']< >030:031:032< >perl #83194: vector flag + custom separator + static precision<
>%*v.*X< >[':', 3, '012']< >030:031:032< >perl #83194: vector flag + custom separator + dynamic precision<
+>%vd< >"version"< >118.101.114.115.105.111.110< >perl #102586: vector flag + "version"<