Timing: fix set_alarm(0) on Unix/POSIX
The POSIX/Unix implementation of set_alarm did not set the
alarmed flag when called with 0, which was inconsistent
with what the documentation implied and with the Windows behavior.
diff --git a/ChangeLog b/ChangeLog
index 7903fc7..8b11c18 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -43,6 +43,7 @@
* Fix word size check in in pk.c to not depend on MBEDTLS_HAVE_INT64.
* Fix crash when calling mbedtls_ssl_cache_free() twice. Found by
MilenkoMitrovic, #1104
+ * Fix mbedtls_timing_alarm(0) on Unix.
Changes
* Extend cert_write example program by options to set the CRT version
diff --git a/library/timing.c b/library/timing.c
index 50410df..6e7f93f 100644
--- a/library/timing.c
+++ b/library/timing.c
@@ -318,6 +318,12 @@
alarmed = 0;
signal( SIGALRM, sighandler );
alarm( seconds );
+ if( seconds == 0 )
+ {
+ /* alarm(0) cancelled any previous pending alarm, but the
+ handler won't fire, so raise the flag straight away. */
+ alarmed = 1;
+ }
}
void m_sleep( int milliseconds )