This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
(perl #131878) don't call croak() with a potential format string
authorTony Cook <tony@develop-help.com>
Thu, 12 Oct 2017 03:51:23 +0000 (14:51 +1100)
committerTony Cook <tony@develop-help.com>
Wed, 17 Jan 2018 23:50:35 +0000 (10:50 +1100)
Since this has security implications, explain the change in
perldelta.

pod/perldelta.pod
pod/perlembed.pod

index f87dcae..ce35d73 100644 (file)
@@ -246,13 +246,25 @@ section.
 
 Additionally, the following selected changes have been made:
 
-=head3 L<XXX>
+=head3 L<perlembed>
 
 =over 4
 
 =item *
 
-XXX Description of the change here
+An example in L<perlembed> used the string value of C<ERRSV> as a
+format string when calling croak().  If that string contains format
+codes such as C<%s> this could crash the program.
+
+This has been changed to a call to croak_sv().
+
+An alternative could have been to supply a trivial format string:
+
+  croak("%s", SvPV_nolen(ERRSV));
+
+or as a special case for C<ERRSV> simply:
+
+  croak(NULL);
 
 =back
 
index eeffd93..adcaf95 100644 (file)
@@ -431,7 +431,7 @@ been wrapped here):
      PUTBACK;
 
      if (croak_on_error && SvTRUE(ERRSV))
-       croak(SvPVx_nolen(ERRSV));
+        croak_sv(ERRSV);
 
      return retval;
  }