Have mkerr.pl treat already existing multiline string defs properly
authorRichard Levitte <levitte@openssl.org>
Wed, 8 Apr 2015 17:26:11 +0000 (19:26 +0200)
committerRichard Levitte <levitte@openssl.org>
Sat, 23 May 2015 11:17:58 +0000 (13:17 +0200)
Since source reformat, we ended up with some error reason string
definitions that spanned two lines.  That in itself is fine, but we
sometimes edited them to provide better strings than what could be
automatically determined from the reason macro, for example:

    {ERR_REASON(SSL_R_NO_GOST_CERTIFICATE_SENT_BY_PEER),
     "Peer haven't sent GOST certificate, required for selected ciphersuite"},

However, mkerr.pl didn't treat those two-line definitions right, and
they ended up being retranslated to whatever the macro name would
indicate, for example:

    {ERR_REASON(SSL_R_NO_GOST_CERTIFICATE_SENT_BY_PEER),
     "No gost certificate sent by peer"},

Clearly not what we wanted.  This change fixes this problem.

Reviewed-by: Matt Caswell <matt@openssl.org>
(cherry picked from commit 2cfdfe0918f03f8323c9523a2beb2b363ae86ca7)

util/mkerr.pl

index 8d2fdbc7e88be665cac92461e231f6597cca3fd9..d87c4fd22cd26c2e9196cd34fa5a55dc0fe79140 100644 (file)
@@ -534,14 +534,21 @@ EOF
        # First, read any existing reason string definitions:
        my %err_reason_strings;
        if (open(IN,"<$cfile")) {
+               my $line = "";
                while (<IN>) {
-                       if (/\b(${lib}_R_\w*)\b.*\"(.*)\"/) {
-                               $err_reason_strings{$1} = $2;
-                       }
-                       if (/\b${lib}_F_(\w*)\b.*\"(.*)\"/) {
-                               if (!exists $ftrans{$1} && ($1 ne $2)) {
-                                       print STDERR "WARNING: Mismatched function string $2\n";
-                                       $ftrans{$1} = $2;
+                       chomp;
+                       $_ = $line . $_;
+                       $line = "";
+                       if (/{ERR_(FUNC|REASON)\(/) {
+                               if (/\b(${lib}_R_\w*)\b.*\"(.*)\"/) {
+                                       $err_reason_strings{$1} = $2;
+                               } elsif (/\b${lib}_F_(\w*)\b.*\"(.*)\"/) {
+                                       if (!exists $ftrans{$1} && ($1 ne $2)) {
+                                               print STDERR "WARNING: Mismatched function string $2\n";
+                                               $ftrans{$1} = $2;
+                                       }
+                               } else {
+                                       $line = $_;
                                }
                        }
                }