summaryrefslogtreecommitdiff
path: root/src/misc.c
diff options
context:
space:
mode:
authorXi Wang <xi.wang@gmail.com>2012-08-14 18:54:40 -0400
committerWerner Koch <wk@gnupg.org>2012-08-16 10:48:03 +0200
commit2c54c4da19d3a79e9f749740828026dd41f0521a (patch)
treeacd346d2c038018c59db3697cc07e8fb0d36e073 /src/misc.c
parent2196728e2252917849c1be94417258076767021b (diff)
downloadlibgcrypt-2c54c4da19d3a79e9f749740828026dd41f0521a.tar.gz
Replace deliberate division by zero with _gcry_divide_by_zero.
* mpi/mpi-pow.c: Replace 1 / msize. * mpi/mpih-div.c: Replace 1 / dsize. * src/misc.c: Add _gcry_divide_by_zero. -- 1) Division by zero doesn't "provoke a signal" on architectures like PowerPC. 2) C compilers like clang will optimize away these divisions, even though the code tries "to make the compiler not remove" them. This patch redirects these cases to _gcry_divide_by_zero.
Diffstat (limited to 'src/misc.c')
-rw-r--r--src/misc.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/misc.c b/src/misc.c
index 17bd5467..ed72ed63 100644
--- a/src/misc.c
+++ b/src/misc.c
@@ -19,6 +19,7 @@
*/
#include <config.h>
+#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -296,3 +297,10 @@ _gcry_burn_stack (int bytes)
if (bytes > 0)
_gcry_burn_stack (bytes);
}
+
+void
+_gcry_divide_by_zero (void)
+{
+ gpg_err_set_errno (EDOM);
+ _gcry_fatal_error (gpg_err_code_from_errno (errno), "divide by zero");
+}