summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDr. David von Oheimb <David.von.Oheimb@siemens.com>2019-09-19 15:02:50 +0200
committerRichard Levitte <levitte@openssl.org>2019-09-30 10:29:01 +0200
commitdf0822688fc3432cf800cdc07c7f9016ea201170 (patch)
tree78955bb3d433055a3406bd744965901c112b8b7d
parentFix a return value bug in apps/speed.c (diff)
downloadopenssl-df0822688fc3432cf800cdc07c7f9016ea201170.tar.xz
openssl-df0822688fc3432cf800cdc07c7f9016ea201170.zip
Make default values by ERR_get_error_all() and friends more consistent
Unset data defaults to the empty string ("") or 0. Reviewed-by: Tomas Mraz <tmraz@fedoraproject.org> Reviewed-by: Richard Levitte <levitte@openssl.org> (Merged from https://github.com/openssl/openssl/pull/9948)
-rw-r--r--crypto/err/err.c27
-rw-r--r--doc/man3/ERR_get_error.pod29
2 files changed, 29 insertions, 27 deletions
diff --git a/crypto/err/err.c b/crypto/err/err.c
index eca0f6d33e..f46f3bef30 100644
--- a/crypto/err/err.c
+++ b/crypto/err/err.c
@@ -533,35 +533,30 @@ static unsigned long get_error_values(ERR_GET_ACTION g,
es->err_buffer[i] = 0;
}
- if (file != NULL && line != NULL) {
- if (es->err_file[i] == NULL) {
- *file = "NA";
- *line = 0;
- } else {
- *file = es->err_file[i];
- *line = es->err_line[i];
- }
+ if (file != NULL) {
+ *file = es->err_file[i];
+ if (*file == NULL)
+ *file = "";
}
-
+ if (line != NULL)
+ *line = es->err_line[i];
if (func != NULL) {
*func = es->err_func[i];
if (*func == NULL)
- *func = "N/A";
+ *func = "";
}
-
+ if (flags != NULL)
+ *flags = es->err_data_flags[i];
if (data == NULL) {
if (g == EV_POP) {
err_clear_data(es, i, 0);
}
} else {
- if (es->err_data[i] == NULL) {
+ *data = es->err_data[i];
+ if (*data == NULL) {
*data = "";
if (flags != NULL)
*flags = 0;
- } else {
- *data = es->err_data[i];
- if (flags != NULL)
- *flags = es->err_data_flags[i];
}
}
return ret;
diff --git a/doc/man3/ERR_get_error.pod b/doc/man3/ERR_get_error.pod
index 045ef210a2..136b70db46 100644
--- a/doc/man3/ERR_get_error.pod
+++ b/doc/man3/ERR_get_error.pod
@@ -61,28 +61,35 @@ error queue without modifying it.
ERR_peek_last_error() returns the latest error code from the thread's
error queue without modifying it.
-See L<ERR_GET_LIB(3)> for obtaining information about
-location and reason of the error, and
-L<ERR_error_string(3)> for human-readable error
-messages.
+See L<ERR_GET_LIB(3)> for obtaining further specific information
+such as the reason of the error,
+and L<ERR_error_string(3)> for human-readable error messages.
ERR_get_error_line(), ERR_peek_error_line() and
ERR_peek_last_error_line() are the same as ERR_get_error(),
-ERR_peek_error() and ERR_peek_last_error(), but they
+ERR_peek_error() and ERR_peek_last_error(), but on success they
additionally store the file name and line number where
-the error occurred in *B<file> and *B<line>, unless these are B<NULL>.
+the error occurred in *B<file> and *B<line>, as far as they are not B<NULL>.
+An unset file name is indicated as B<"">, i.e., an empty string.
+An unset line number is indicated as B<0>.
+
+A pointer returned this way by these functions and the ones below
+is valid until the respective entry is removed from the error queue.
ERR_get_error_func(), ERR_peek_error_func() and
ERR_peek_last_error_func() are the same as ERR_get_error(),
-ERR_peek_error() and ERR_peek_last_error(), but they
-additionally store the name of the function where the error in *B<func>,
-unless it is B<NULL>.
+ERR_peek_error() and ERR_peek_last_error(), but on success they
+additionally store the name of the function where the error occurred
+in *B<func>, unless it is B<NULL>.
+An unset function name is indicated as B<"">.
ERR_get_error_data(), ERR_peek_error_data() and
ERR_peek_last_error_data() are the same as ERR_get_error(),
-ERR_peek_error() and ERR_peek_last_error(), but they
+ERR_peek_error() and ERR_peek_last_error(), but on success they
additionally store additional data and flags associated with the error
-code in *B<data> and *B<flags>, unless these are B<NULL>.
+code in *B<data> and *B<flags>, as far as they are not B<NULL>.
+Unset data is indicated as B<"">.
+In this case the value given for the flag is irrelevant (and equals B<0>).
*B<data> contains a string if *B<flags>&B<ERR_TXT_STRING> is true.
ERR_get_error_all(), ERR_peek_error_all() and