1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-06-14 23:50:19 +02:00

Fix size measurement in bytevector_large_set

* libguile/bytevectors.c (bytevector_large_set): Fix computation of
  value size in words.
* test-suite/tests/bytevectors.test: Add test.

Thanks to Ben Rocer <fleabyte@mail.com> for the bug report and fix.
This commit is contained in:
Andy Wingo 2016-06-20 17:11:59 +02:00
parent 0a3ea0586d
commit b77642dff2
2 changed files with 9 additions and 4 deletions

View file

@ -857,10 +857,11 @@ bytevector_large_set (char *c_bv, size_t c_size, int signed_p,
memset (c_bv, 0, c_size);
else
{
size_t word_count, value_size;
size_t word_count, value_words;
value_size = (mpz_sizeinbase (c_mpz, 2) + (8 * c_size)) / (8 * c_size);
if (SCM_UNLIKELY (value_size > c_size))
value_words = ((mpz_sizeinbase (c_mpz, 2) + (8 * c_size) - 1) /
(8 * c_size));
if (SCM_UNLIKELY (value_words > 1))
{
err = -2;
goto finish;