VMS: fix collected error strings
authorRichard Levitte <levitte@openssl.org>
Sat, 24 Nov 2018 12:08:56 +0000 (13:08 +0100)
committerRichard Levitte <levitte@openssl.org>
Sat, 24 Nov 2018 12:08:56 +0000 (13:08 +0100)
It turns out that on VMS, strerror() returns messages with added
spaces at the end.

We wouldn't had noticed if it wasn't for perl trimming those spaces
off for its own sake and thereby having test/recipes/02-test_errstr.t
fail on VMS.

The safe fix is to do the same trimming ourselves.

Reviewed-by: Paul Dale <paul.dale@oracle.com>
(Merged from https://github.com/openssl/openssl/pull/7701)

crypto/err/err.c

index ffdc140da296c6488686bad1852c096c46bb796e..34061bc662fc661337bbc965eeb4da8939098e47 100644 (file)
@@ -19,6 +19,7 @@
 #include <openssl/bio.h>
 #include <openssl/opensslconf.h>
 #include "internal/thread_once.h"
+#include "internal/ctype.h"
 
 static int err_load_strings(const ERR_STRING_DATA *str);
 
@@ -217,13 +218,24 @@ static void build_SYS_str_reasons(void)
         str->error = ERR_PACK(ERR_LIB_SYS, 0, i);
         if (str->string == NULL) {
             if (openssl_strerror_r(i, cur, sizeof(strerror_pool) - cnt)) {
-                size_t l = strlen(cur) + 1;
+                size_t l = strlen(cur);
 
                 str->string = cur;
                 cnt += l;
                 if (cnt > sizeof(strerror_pool))
                     cnt = sizeof(strerror_pool);
                 cur += l;
+
+                /*
+                 * VMS has an unusual quirk of adding spaces at the end of
+                 * some (most? all?) messages.  Lets trim them off.
+                 */
+                while (ossl_isspace(cur[-1])) {
+                    cur--;
+                    cnt--;
+                }
+                *cur++ = '\0';
+                cnt++;
             }
         }
         if (str->string == NULL)