aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Eggert2020-06-18 14:01:56 -0700
committerPaul Eggert2020-06-18 14:02:42 -0700
commitfbf40c1d903d18286ecd7d2c1d7b117c88a1d5dd (patch)
treefb9f54fe04fc6dedb6a95cee4ea77c03c76f19e4
parentb6c7780bb02465e3af2ccec332fc2d8b79fe7a2a (diff)
downloademacs-fbf40c1d903d18286ecd7d2c1d7b117c88a1d5dd.tar.gz
emacs-fbf40c1d903d18286ecd7d2c1d7b117c88a1d5dd.zip
Check AREF and aref_addr subscripts
* src/lisp.h (gc_asize): Move before first use. (AREF, aref_addr): Check subscripts. Co-authored-by: Tino Calancha <tino.calancha@gmail.com>
-rw-r--r--src/lisp.h16
1 files changed, 9 insertions, 7 deletions
diff --git a/src/lisp.h b/src/lisp.h
index 34426990882..7b4f484b9b7 100644
--- a/src/lisp.h
+++ b/src/lisp.h
@@ -1672,6 +1672,13 @@ ASIZE (Lisp_Object array)
1672} 1672}
1673 1673
1674INLINE ptrdiff_t 1674INLINE ptrdiff_t
1675gc_asize (Lisp_Object array)
1676{
1677 /* Like ASIZE, but also can be used in the garbage collector. */
1678 return XVECTOR (array)->header.size & ~ARRAY_MARK_FLAG;
1679}
1680
1681INLINE ptrdiff_t
1675PVSIZE (Lisp_Object pv) 1682PVSIZE (Lisp_Object pv)
1676{ 1683{
1677 return ASIZE (pv) & PSEUDOVECTOR_SIZE_MASK; 1684 return ASIZE (pv) & PSEUDOVECTOR_SIZE_MASK;
@@ -1853,22 +1860,17 @@ bool_vector_set (Lisp_Object a, EMACS_INT i, bool b)
1853INLINE Lisp_Object 1860INLINE Lisp_Object
1854AREF (Lisp_Object array, ptrdiff_t idx) 1861AREF (Lisp_Object array, ptrdiff_t idx)
1855{ 1862{
1863 eassert (0 <= idx && idx < gc_asize (array));
1856 return XVECTOR (array)->contents[idx]; 1864 return XVECTOR (array)->contents[idx];
1857} 1865}
1858 1866
1859INLINE Lisp_Object * 1867INLINE Lisp_Object *
1860aref_addr (Lisp_Object array, ptrdiff_t idx) 1868aref_addr (Lisp_Object array, ptrdiff_t idx)
1861{ 1869{
1870 eassert (0 <= idx && idx <= gc_asize (array));
1862 return & XVECTOR (array)->contents[idx]; 1871 return & XVECTOR (array)->contents[idx];
1863} 1872}
1864 1873
1865INLINE ptrdiff_t
1866gc_asize (Lisp_Object array)
1867{
1868 /* Like ASIZE, but also can be used in the garbage collector. */
1869 return XVECTOR (array)->header.size & ~ARRAY_MARK_FLAG;
1870}
1871
1872INLINE void 1874INLINE void
1873ASET (Lisp_Object array, ptrdiff_t idx, Lisp_Object val) 1875ASET (Lisp_Object array, ptrdiff_t idx, Lisp_Object val)
1874{ 1876{