summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/err/err.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/err/err.c')
-rw-r--r--src/lib/libcrypto/err/err.c21
1 files changed, 17 insertions, 4 deletions
diff --git a/src/lib/libcrypto/err/err.c b/src/lib/libcrypto/err/err.c
index 292805433d..dcf725fd64 100644
--- a/src/lib/libcrypto/err/err.c
+++ b/src/lib/libcrypto/err/err.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: err.c,v 1.42 2017/01/29 17:49:23 beck Exp $ */ 1/* $OpenBSD: err.c,v 1.43 2017/02/07 03:11:11 beck Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
@@ -862,8 +862,9 @@ void
862ERR_error_string_n(unsigned long e, char *buf, size_t len) 862ERR_error_string_n(unsigned long e, char *buf, size_t len)
863{ 863{
864 char lsbuf[30], fsbuf[30], rsbuf[30]; 864 char lsbuf[30], fsbuf[30], rsbuf[30];
865 const char *ls, *fs, *rs; 865 const char *ls, *fs, *rs, *file, *data;
866 int l, f, r, ret; 866 int l, f, r, ret, line, flags;
867
867 868
868 l = ERR_GET_LIB(e); 869 l = ERR_GET_LIB(e);
869 f = ERR_GET_FUNC(e); 870 f = ERR_GET_FUNC(e);
@@ -886,7 +887,19 @@ ERR_error_string_n(unsigned long e, char *buf, size_t len)
886 rs = rsbuf; 887 rs = rsbuf;
887 } 888 }
888 889
889 ret = snprintf(buf, len, "error:%08lX:%s:%s:%s", e, ls, fs, rs); 890 if (ERR_get_error_line_data(&file, &line, &data, &flags) != 0) {
891 const char *filename;
892
893 if ((filename = strrchr(file, '/')) != NULL)
894 filename++;
895 else
896 filename = file;
897
898 ret = snprintf(buf, len, "error:%08lX:%s:%s:%s:%s:%d", e, ls,
899 fs, rs, filename, line);
900 } else
901 ret = snprintf(buf, len, "error:%08lX:%s:%s:%s", e, ls, fs, rs);
902
890 if (ret == -1) 903 if (ret == -1)
891 return; /* can't happen, and can't do better if it does */ 904 return; /* can't happen, and can't do better if it does */
892 if (ret >= len) { 905 if (ret >= len) {