Commit e1a4ff76 authored by Richard Levitte's avatar Richard Levitte
Browse files

Add ERR_clear_last_mark()



This allows callers to set a mark, and then clear it without removing
the errors.  Useful in case an error is encountered that should be
returned up the call stack.

Reviewed-by: default avatarAndy Polyakov <appro@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/4094)
parent 9237173e
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -9,6 +9,10 @@
 Changes between 1.1.0f and 1.1.1 [xx XXX xxxx]
  *) Add ERR_clear_last_mark(), to allow callers to clear the last mark
     without clearing the errors.
     [Richard Levitte]
  *) Add "atfork" functions.  If building on a system that without
     pthreads, see doc/man3/OPENSSL_fork_prepare.pod for application
     requirements.  The RAND facility now uses/requires this.
+23 −0
Original line number Diff line number Diff line
@@ -812,3 +812,26 @@ int ERR_pop_to_mark(void)
    es->err_flags[es->top] &= ~ERR_FLAG_MARK;
    return 1;
}

int ERR_clear_last_mark(void)
{
    ERR_STATE *es;
    int top;

    es = ERR_get_state();
    if (es == NULL)
        return 0;

    top = es->top;
    while (es->bottom != top
           && (es->err_flags[top] & ERR_FLAG_MARK) == 0) {
        top -= 1;
        if (top == -1)
            top = ERR_NUM_ERRORS - 1;
    }

    if (es->bottom == top)
        return 0;
    es->err_flags[top] &= ~ERR_FLAG_MARK;
    return 1;
}
+1 −0
Original line number Diff line number Diff line
@@ -262,6 +262,7 @@ int ERR_get_next_error_library(void);

int ERR_set_mark(void);
int ERR_pop_to_mark(void);
int ERR_clear_last_mark(void);

#ifdef  __cplusplus
}
+1 −0
Original line number Diff line number Diff line
@@ -4381,3 +4381,4 @@ ASN1_TIME_cmp_time_t 4324 1_1_1 EXIST::FUNCTION:
ASN1_TIME_compare                       4325	1_1_1	EXIST::FUNCTION:
EVP_PKEY_CTX_ctrl_uint64                4326	1_1_1	EXIST::FUNCTION:
EVP_DigestFinalXOF                      4327	1_1_1	EXIST::FUNCTION:
ERR_clear_last_mark                     4328	1_1_1	EXIST::FUNCTION: