Data::Dumper: Change strcpy to strlcpy
authorKarl Williamson <khw@cpan.org>
Mon, 27 Mar 2017 20:24:41 +0000 (14:24 -0600)
committerKarl Williamson <khw@cpan.org>
Thu, 14 Dec 2017 03:07:31 +0000 (20:07 -0700)
strlcpy is safer.  This reverts to using strcpy if no version of strlcpy
is available (but one has been available in Perl since 5.9.4)

dist/Data-Dumper/Dumper.xs

index 895838a..26634ec 100644 (file)
 #  define DD_USE_OLD_ID_FORMAT
 #endif
 
+#ifndef strlcpy
+#  ifdef my_strlcpy
+#    define strlcpy(d,s,l) my_strlcpy(d,s,l)
+#  else
+#    define strlcpy(d,s,l) strlcpy(d,s)
+#  endif
+#endif
+
 /* These definitions are ASCII only.  But the pure-perl .pm avoids
  * calling this .xs file for releases where they aren't defined */
 
@@ -856,7 +864,7 @@ DD_dump(pTHX_ SV *val, const char *name, STRLEN namelen, SV *retval, HV *seenhv,
            SV * const ixsv = newSViv(0);
            /* allowing for a 24 char wide array index */
            New(0, iname, namelen+28, char);
-           (void)strcpy(iname, name);
+           (void) strlcpy(iname, name, namelen+28);
            inamelen = namelen;
            if (name[0] == '@') {
                sv_catpvs(retval, "(");
@@ -1319,7 +1327,7 @@ DD_dump(pTHX_ SV *val, const char *name, STRLEN namelen, SV *retval, HV *seenhv,
            else {
                sv_grow(retval, SvCUR(retval)+i+2);
                r = SvPVX(retval)+SvCUR(retval);
-               r[0] = '*'; strcpy(r+1, c);
+               r[0] = '*'; strlcpy(r+1, c, SvLEN(retval));
                i++;
            }
            SvCUR_set(retval, SvCUR(retval)+i);