From 1119d4e7f4b1f9eeb0e50063081c516708e3ca72 Mon Sep 17 00:00:00 2001 From: Richard Levitte Date: Sat, 24 Nov 2018 13:08:56 +0100 Subject: [PATCH] VMS: fix collected error strings 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 (Merged from https://github.com/openssl/openssl/pull/7701) (cherry picked from commit 9f15e5b911ba6053e09578f190354568e01c07d7) --- crypto/err/err.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/crypto/err/err.c b/crypto/err/err.c index ffdc140da2..34061bc662 100644 --- a/crypto/err/err.c +++ b/crypto/err/err.c @@ -19,6 +19,7 @@ #include #include #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) -- 2.25.1