aboutsummaryrefslogtreecommitdiffstats
path: root/src/buffer.c
diff options
context:
space:
mode:
authorEli Zaretskii2013-01-19 22:04:33 +0200
committerEli Zaretskii2013-01-19 22:04:33 +0200
commit59ac2d1316937bb013ef437885dcdc0225c71de9 (patch)
treee2272769f60a36aeb74f8f01b479b597455f0065 /src/buffer.c
parent3a955a1f8617ae65709772863a4cb8bb9ec73de7 (diff)
downloademacs-59ac2d1316937bb013ef437885dcdc0225c71de9.tar.gz
emacs-59ac2d1316937bb013ef437885dcdc0225c71de9.zip
Fix crashes with lots of overlays.
src/editfns.c (get_pos_property): Use SAFE_ALLOCA_LISP, to avoid segfault when there are lots of overlays. src/buffer.c (sort_overlays): Use SAFE_NALLOCA, to avoid segfault when there are lots of overlays. See http://lists.gnu.org/archive/html/emacs-devel/2013-01/msg00421.html for the details and a way to reproduce.
Diffstat (limited to 'src/buffer.c')
-rw-r--r--src/buffer.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/buffer.c b/src/buffer.c
index 66581cb7828..aa3fcf8c234 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -3151,7 +3151,10 @@ ptrdiff_t
3151sort_overlays (Lisp_Object *overlay_vec, ptrdiff_t noverlays, struct window *w) 3151sort_overlays (Lisp_Object *overlay_vec, ptrdiff_t noverlays, struct window *w)
3152{ 3152{
3153 ptrdiff_t i, j; 3153 ptrdiff_t i, j;
3154 struct sortvec *sortvec = alloca (noverlays * sizeof *sortvec); 3154 USE_SAFE_ALLOCA;
3155 struct sortvec *sortvec;
3156
3157 SAFE_NALLOCA (sortvec, 1, noverlays);
3155 3158
3156 /* Put the valid and relevant overlays into sortvec. */ 3159 /* Put the valid and relevant overlays into sortvec. */
3157 3160
@@ -3197,6 +3200,8 @@ sort_overlays (Lisp_Object *overlay_vec, ptrdiff_t noverlays, struct window *w)
3197 3200
3198 for (i = 0; i < noverlays; i++) 3201 for (i = 0; i < noverlays; i++)
3199 overlay_vec[i] = sortvec[i].overlay; 3202 overlay_vec[i] = sortvec[i].overlay;
3203
3204 SAFE_FREE ();
3200 return (noverlays); 3205 return (noverlays);
3201} 3206}
3202 3207