|
@@ -20,6 +20,7 @@
|
|
|
#include <openssl/opensslconf.h>
|
|
|
#include "internal/thread_once.h"
|
|
|
#include "internal/ctype.h"
|
|
|
+#include "internal/constant_time_locl.h"
|
|
|
|
|
|
static int err_load_strings(const ERR_STRING_DATA *str);
|
|
|
|
|
@@ -878,3 +879,23 @@ int ERR_clear_last_mark(void)
|
|
|
es->err_flags[top] &= ~ERR_FLAG_MARK;
|
|
|
return 1;
|
|
|
}
|
|
|
+
|
|
|
+void err_clear_last_constant_time(int clear)
|
|
|
+{
|
|
|
+ ERR_STATE *es;
|
|
|
+ int top;
|
|
|
+
|
|
|
+ es = ERR_get_state();
|
|
|
+ if (es == NULL)
|
|
|
+ return;
|
|
|
+
|
|
|
+ top = es->top;
|
|
|
+
|
|
|
+ es->err_flags[top] &= ~(0 - clear);
|
|
|
+ es->err_buffer[top] &= ~(0UL - clear);
|
|
|
+ es->err_file[top] = (const char *)((uintptr_t)es->err_file[top] &
|
|
|
+ ~((uintptr_t)0 - clear));
|
|
|
+ es->err_line[top] |= 0 - clear;
|
|
|
+
|
|
|
+ es->top = (top + ERR_NUM_ERRORS - clear) % ERR_NUM_ERRORS;
|
|
|
+}
|