summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Eggert <eggert@cs.ucla.edu>2013-10-09 15:39:57 -0700
committerPaul Eggert <eggert@cs.ucla.edu>2013-10-09 15:39:57 -0700
commite20bb24948dd53afe77a5987c5408c715d1f388f (patch)
tree97f95731023324d83dbf629120aa73d1cbf45849
parent9f6a18d27ebab2f41edb60cc5c45af0222f8210f (diff)
downloademacs-e20bb24948dd53afe77a5987c5408c715d1f388f.tar.gz
* fns.c (sxhash_bool_vector): Fix buffer read overrun.
-rw-r--r--src/ChangeLog4
-rw-r--r--src/fns.c4
2 files changed, 7 insertions, 1 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index 0597c5d9f21..f46733d1ebe 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,7 @@
+2013-10-09 Paul Eggert <eggert@cs.ucla.edu>
+
+ * fns.c (sxhash_bool_vector): Fix buffer read overrun.
+
2013-10-09 Eli Zaretskii <eliz@gnu.org>
* term.c (tty_menu_activate): Flush the output stream after
diff --git a/src/fns.c b/src/fns.c
index e991711b871..1ee0a758fc2 100644
--- a/src/fns.c
+++ b/src/fns.c
@@ -4191,7 +4191,9 @@ sxhash_bool_vector (Lisp_Object vec)
EMACS_UINT hash = XBOOL_VECTOR (vec)->size;
int i, n;
- n = min (SXHASH_MAX_LEN, XBOOL_VECTOR (vec)->header.size);
+ n = min (SXHASH_MAX_LEN,
+ ((XBOOL_VECTOR (vec)->size + BOOL_VECTOR_BITS_PER_CHAR - 1)
+ / BOOL_VECTOR_BITS_PER_CHAR));
for (i = 0; i < n; ++i)
hash = sxhash_combine (hash, XBOOL_VECTOR (vec)->data[i]);