diff options
author | Xi Wang <xi.wang@gmail.com> | 2012-08-14 18:54:40 -0400 |
---|---|---|
committer | Werner Koch <wk@gnupg.org> | 2012-08-16 10:48:03 +0200 |
commit | 2c54c4da19d3a79e9f749740828026dd41f0521a (patch) | |
tree | acd346d2c038018c59db3697cc07e8fb0d36e073 /src/misc.c | |
parent | 2196728e2252917849c1be94417258076767021b (diff) | |
download | libgcrypt-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.c | 8 |
1 files changed, 8 insertions, 0 deletions
@@ -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"); +} |