if (dtype < SVt_RV)
sv_upgrade(dstr, SVt_RV);
else if (dtype == SVt_PVGV &&
- SvTYPE(SvRV(sstr)) == SVt_PVGV) {
+ SvROK(sstr) && SvTYPE(SvRV(sstr)) == SVt_PVGV) {
sstr = SvRV(sstr);
if (sstr == dstr) {
if (GvIMPORTED(dstr) != GVf_IMPORTED
sv_vcatpvfn(sv, pat, patlen, args, svargs, svmax, maybe_tainted);
}
-/* strnchr(): private function for use in sv_vcatpvfn()
- *
- * Like strchr(), but allows to use strings that are not null-terminated.
- * The string length must be given instead and it _must_ be correct, as
- * the function does not stop searching when a '\0' is discovered.
- * This would also allow to explicitly search for '\0' characters.
- */
-
-static const char *
-strnchr(const char* s, int c, size_t n)
-{
- if (s)
- for (; n > 0; n--, s++)
- if ((int)*s == c)
- return s;
- return NULL;
-}
-
/* private function for use in sv_vcatpvfn via the EXPECT_NUMBER macro */
STATIC I32
p = SvEND(sv);
*p = '\0';
}
- /* Don't use strchr() here, because eptr does not necessarily point */
- /* to a null-terminated string. E.g. with the format "%-10c", eptr */
- /* points to c (a single char on the stack), which makes strchr() */
- /* run amok over the stack until it eventually hits '\n' or '\0'. */
- if (left && ckWARN(WARN_PRINTF) && strnchr(eptr, '\n', elen) &&
+ /* Use memchr() instead of strchr(), as eptr is not guaranteed */
+ /* to point to a null-terminated string. */
+ if (left && ckWARN(WARN_PRINTF) && memchr(eptr, '\n', elen) &&
(PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF))
Perl_warner(aTHX_ packWARN(WARN_PRINTF),
"Newline in left-justified string for %sprintf",
PL_markstack = 0;
PL_scopestack = 0;
PL_savestack = 0;
+ PL_savestack_ix = 0;
+ PL_savestack_max = -1;
PL_retstack = 0;
PL_sig_pending = 0;
Zero(&PL_debug_pad, 1, struct perl_debug_pad);
PL_markstack = 0;
PL_scopestack = 0;
PL_savestack = 0;
+ PL_savestack_ix = 0;
+ PL_savestack_max = -1;
PL_retstack = 0;
PL_sig_pending = 0;
Zero(&PL_debug_pad, 1, struct perl_debug_pad);