提交 1119d4e7 编写于 作者: R Richard Levitte

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: NPaul Dale <paul.dale@oracle.com>
(Merged from https://github.com/openssl/openssl/pull/7701)

(cherry picked from commit 9f15e5b911ba6053e09578f190354568e01c07d7)
上级 6aca8d1a
...@@ -19,6 +19,7 @@ ...@@ -19,6 +19,7 @@
#include <openssl/bio.h> #include <openssl/bio.h>
#include <openssl/opensslconf.h> #include <openssl/opensslconf.h>
#include "internal/thread_once.h" #include "internal/thread_once.h"
#include "internal/ctype.h"
static int err_load_strings(const ERR_STRING_DATA *str); static int err_load_strings(const ERR_STRING_DATA *str);
...@@ -217,13 +218,24 @@ static void build_SYS_str_reasons(void) ...@@ -217,13 +218,24 @@ static void build_SYS_str_reasons(void)
str->error = ERR_PACK(ERR_LIB_SYS, 0, i); str->error = ERR_PACK(ERR_LIB_SYS, 0, i);
if (str->string == NULL) { if (str->string == NULL) {
if (openssl_strerror_r(i, cur, sizeof(strerror_pool) - cnt)) { if (openssl_strerror_r(i, cur, sizeof(strerror_pool) - cnt)) {
size_t l = strlen(cur) + 1; size_t l = strlen(cur);
str->string = cur; str->string = cur;
cnt += l; cnt += l;
if (cnt > sizeof(strerror_pool)) if (cnt > sizeof(strerror_pool))
cnt = sizeof(strerror_pool); cnt = sizeof(strerror_pool);
cur += l; 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) if (str->string == NULL)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册