For some reason, getting the topmost error was done the same way as getting the bottommost one. I hope I understood correctly how this should be done. It seems to work when running evp_test in an environment where it can't find openssl.cnf.
diff --git a/crypto/err/err.c b/crypto/err/err.c index 3163163..04773d6 100644 --- a/crypto/err/err.c +++ b/crypto/err/err.c
@@ -720,7 +720,7 @@ if (es->bottom == es->top) return 0; if (top) - i=(es->bottom+1)%ERR_NUM_ERRORS; /* last error */ + i=es->top; /* last error */ else i=(es->bottom+1)%ERR_NUM_ERRORS; /* first error */