The branch master has been updated via 2d905f6715453034d1f942a0237b0d2b9d57326c (commit) from ba4341316ce762f917f973bb4ac604062fb11724 (commit)
- Log ----------------------------------------------------------------- commit 2d905f6715453034d1f942a0237b0d2b9d57326c Author: Pauli <paul.d...@oracle.com> Date: Thu Jun 20 11:24:17 2019 +1000 Print thread IDs nicely. Remove the union that effectively cast thread IDs to long integers before display and instead print a hex dump of the entire object. Refer #9191 Reviewed-by: Richard Levitte <levi...@openssl.org> (Merged from https://github.com/openssl/openssl/pull/9194) ----------------------------------------------------------------------- Summary of changes: apps/openssl.c | 19 ++++++++----------- crypto/err/err_prn.c | 22 +++++++--------------- crypto/mem_dbg.c | 36 ++++++++++++------------------------ test/testutil/init.c | 19 ++++++++----------- 4 files changed, 35 insertions(+), 61 deletions(-) diff --git a/apps/openssl.c b/apps/openssl.c index 7a490cc..d6820a1 100644 --- a/apps/openssl.c +++ b/apps/openssl.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -130,11 +130,8 @@ static size_t internal_trace_cb(const char *buf, size_t cnt, { int ret = 0; tracedata *trace_data = vdata; - union { - CRYPTO_THREAD_ID tid; - unsigned long ltid; - } tid; - char buffer[256]; + char buffer[256], *hex; + CRYPTO_THREAD_ID tid; switch (cmd) { case OSSL_TRACE_CTRL_BEGIN: @@ -142,11 +139,11 @@ static size_t internal_trace_cb(const char *buf, size_t cnt, return 0; trace_data->ingroup = 1; - tid.ltid = 0; - tid.tid = CRYPTO_THREAD_get_current_id(); - - BIO_snprintf(buffer, sizeof(buffer), "TRACE[%lx]:%s: ", tid.ltid, - OSSL_trace_get_category_name(category)); + tid = CRYPTO_THREAD_get_current_id(); + hex = OPENSSL_buf2hexstr((const unsigned char *)&tid, sizeof(tid)); + BIO_snprintf(buffer, sizeof(buffer), "TRACE[%s]:%s: ", + hex, OSSL_trace_get_category_name(category)); + OPENSSL_free(hex); BIO_ctrl(trace_data->bio, PREFIX_CTRL_SET_PREFIX, strlen(buffer), buffer); break; diff --git a/crypto/err/err_prn.c b/crypto/err/err_prn.c index ba9a7c5..b43367f 100644 --- a/crypto/err/err_prn.c +++ b/crypto/err/err_prn.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2017 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -16,27 +16,19 @@ void ERR_print_errors_cb(int (*cb) (const char *str, size_t len, void *u), void *u) { + CRYPTO_THREAD_ID tid = CRYPTO_THREAD_get_current_id(); unsigned long l; char buf[256]; - char buf2[4096]; + char buf2[4096], *hex; const char *file, *data; int line, flags; - /* - * We don't know what kind of thing CRYPTO_THREAD_ID is. Here is our best - * attempt to convert it into something we can print. - */ - union { - CRYPTO_THREAD_ID tid; - unsigned long ltid; - } tid; - - tid.ltid = 0; - tid.tid = CRYPTO_THREAD_get_current_id(); while ((l = ERR_get_error_line_data(&file, &line, &data, &flags)) != 0) { ERR_error_string_n(l, buf, sizeof(buf)); - BIO_snprintf(buf2, sizeof(buf2), "%lu:%s:%s:%d:%s\n", tid.ltid, buf, - file, line, (flags & ERR_TXT_STRING) ? data : ""); + hex = OPENSSL_buf2hexstr((const unsigned char *)&tid, sizeof(tid)); + BIO_snprintf(buf2, sizeof(buf2), "%s:%s:%s:%d:%s\n", hex, buf, file, + line, (flags & ERR_TXT_STRING) ? data : ""); + OPENSSL_free(hex); if (cb(buf2, strlen(buf2), u) <= 0) break; /* abort outputting the error report */ } diff --git a/crypto/mem_dbg.c b/crypto/mem_dbg.c index 703cc30..8fcdbec 100644 --- a/crypto/mem_dbg.c +++ b/crypto/mem_dbg.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -455,20 +455,11 @@ typedef struct mem_leak_st { static void print_leak(const MEM *m, MEM_LEAK *l) { char buf[1024]; - char *bufp = buf; + char *bufp = buf, *hex; size_t len = sizeof(buf), ami_cnt; APP_INFO *amip; int n; struct tm *lcl = NULL; - /* - * Convert between CRYPTO_THREAD_ID (which could be anything at all) and - * a long. This may not be meaningful depending on what CRYPTO_THREAD_ID is - * but hopefully should give something sensible on most platforms - */ - union { - CRYPTO_THREAD_ID tid; - unsigned long ltid; - } tid; CRYPTO_THREAD_ID ti; lcl = localtime(&m->time); @@ -488,15 +479,11 @@ static void print_leak(const MEM *m, MEM_LEAK *l) bufp += n; len -= n; - tid.ltid = 0; - tid.tid = m->threadid; - n = BIO_snprintf(bufp, len, "thread=%lu, ", tid.ltid); - if (n <= 0) - return; - bufp += n; - len -= n; - - n = BIO_snprintf(bufp, len, "number=%d, address=%p\n", m->num, m->addr); + hex = OPENSSL_buf2hexstr((const unsigned char *)&m->threadid, + sizeof(m->threadid)); + n = BIO_snprintf(bufp, len, "thread=%s, number=%d, address=%p\n", hex, + m->num, m->addr); + OPENSSL_free(hex); if (n <= 0) return; bufp += n; @@ -522,11 +509,12 @@ static void print_leak(const MEM *m, MEM_LEAK *l) break; memset(buf, '>', ami_cnt); buf[ami_cnt] = '\0'; - tid.ltid = 0; - tid.tid = amip->threadid; + hex = OPENSSL_buf2hexstr((const unsigned char *)&amip->threadid, + sizeof(amip->threadid)); n = BIO_snprintf(buf + ami_cnt, sizeof(buf) - ami_cnt, - " thread=%lu, file=%s, line=%d, info=\"", - tid.ltid, amip->file, amip->line); + "thread=%s, file=%s, line=%d, info=\"", + hex, amip->file, amip->line); + OPENSSL_free(hex); if (n <= 0) break; buf_len = ami_cnt + n; diff --git a/test/testutil/init.c b/test/testutil/init.c index 429c1a0..7c6041a 100644 --- a/test/testutil/init.c +++ b/test/testutil/init.c @@ -1,5 +1,5 @@ /* - * Copyright 2017 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2017-2019 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -24,21 +24,18 @@ static size_t internal_trace_cb(const char *buf, size_t cnt, { int ret = 0; tracedata *trace_data = vdata; - union { - CRYPTO_THREAD_ID tid; - unsigned long ltid; - } tid; - char buffer[256]; + char buffer[256], *hex; + CRYPTO_THREAD_ID tid; switch (cmd) { case OSSL_TRACE_CTRL_BEGIN: trace_data->ingroup = 1; - tid.ltid = 0; - tid.tid = CRYPTO_THREAD_get_current_id(); - - BIO_snprintf(buffer, sizeof(buffer), "TRACE[%lx]:%s: ", tid.ltid, - OSSL_trace_get_category_name(category)); + tid = CRYPTO_THREAD_get_current_id(); + hex = OPENSSL_buf2hexstr((const unsigned char *)&tid, sizeof(tid)); + BIO_snprintf(buffer, sizeof(buffer), "TRACE[%s]:%s: ", + hex, OSSL_trace_get_category_name(category)); + OPENSSL_free(hex); BIO_ctrl(trace_data->bio, PREFIX_CTRL_SET_PREFIX, strlen(buffer), buffer); break;