diff options
| author | Eli Zaretskii | 2013-01-19 22:04:33 +0200 |
|---|---|---|
| committer | Eli Zaretskii | 2013-01-19 22:04:33 +0200 |
| commit | 59ac2d1316937bb013ef437885dcdc0225c71de9 (patch) | |
| tree | e2272769f60a36aeb74f8f01b479b597455f0065 /src/buffer.c | |
| parent | 3a955a1f8617ae65709772863a4cb8bb9ec73de7 (diff) | |
| download | emacs-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.c | 7 |
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 | |||
| 3151 | sort_overlays (Lisp_Object *overlay_vec, ptrdiff_t noverlays, struct window *w) | 3151 | sort_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 | ||