Test which direction ERR_get_error reads from the error queue. ERR_get_error returns the least recent error, not the most recent error. Nothing in err_test was actually asserting on that. Change-Id: Ia49e29c231de4bbec77d037860ad1ffa8cce4779 Reviewed-on: https://boringssl-review.googlesource.com/2750 Reviewed-by: Adam Langley <agl@google.com>
diff --git a/crypto/err/err_test.c b/crypto/err/err_test.c index 214f4f2..09dc1f6 100644 --- a/crypto/err/err_test.c +++ b/crypto/err/err_test.c
@@ -23,11 +23,15 @@ unsigned i; for (i = 0; i < ERR_NUM_ERRORS*2; i++) { - ERR_put_error(1, 2, 3, "test", 1); + ERR_put_error(1, 2, i+1, "test", 1); } for (i = 0; i < ERR_NUM_ERRORS - 1; i++) { - if (ERR_get_error() == 0) { + uint32_t err = ERR_get_error(); + /* Errors are returned in order they were pushed, with the least recent ones + * removed, up to |ERR_NUM_ERRORS - 1| errors. So the errors returned are + * |ERR_NUM_ERRORS + 2| through |ERR_NUM_ERRORS * 2|, inclusive. */ + if (err == 0 || ERR_GET_REASON(err) != i + ERR_NUM_ERRORS + 2) { fprintf(stderr, "ERR_get_error failed at %u\n", i); return 0; }