diff options
| author | Paul Eggert | 2017-03-30 11:08:23 -0700 |
|---|---|---|
| committer | Paul Eggert | 2017-03-30 11:08:42 -0700 |
| commit | 6ff870218dd4bc015cc4115ceb2febd8d807e57c (patch) | |
| tree | 67eaa089c0754194e75eea898e24c4a6bcfbe91a /src/lisp.h | |
| parent | 1be3330b31f9c0d0d0f7d25641e8b81c807ca616 (diff) | |
| download | emacs-6ff870218dd4bc015cc4115ceb2febd8d807e57c.tar.gz emacs-6ff870218dd4bc015cc4115ceb2febd8d807e57c.zip | |
Some inotify cleanup
This catches some problems with integer overflow and races
that I noticed in inotify.c after reviewing the changes
installed to fix Bug#26126.
* src/fns.c, src/lisp.h (equal_no_quit): Now extern.
* src/inotify.c (aspect_to_inotifymask):
Check for cycles and for improper lists.
(make_lispy_mask, lispy_mask_match_p): Remove.
All callers changed to use INTEGER_TO_CONS and CONS_TO_INTEGER.
(inotifyevent_to_event, add_watch):
Don’t assume watch descriptors and cookies fit in fixnums.
(add_watch): Use assoc_no_quit, not Fassoc.
Avoid integer overflow in (very!) long-running processes where
the Emacs watch ID could overflow. Avoid some duplicate code.
(find_descriptor): New function.
(remove_descriptor): First arg is now the returned value from
find_descriptor, rather than the descriptor. This way, the
value can be removed without calling Fdelete, which might quit.
Wait until the end (when watch_list is consistent) before signaling
any errors.
(remove_watch, inotify_callback):
Use find_descriptor to avoid the need for Fdelete.
(inotify_callback): Use simpler tests for ioctl failure.
Free temporary buffer if signaled, and put it on the stack if small.
Use ssize_t to index through read results, to avoid a cast.
(valid_watch_descriptor): New function, with a tighter check.
(Finotify_rm_watch, Finotify_valid_p): Use it.
(Finotify_valid_p): Use assoc_no_quit and ass_no_quit instead
of Fassoc. Do not assume the first assoc succeeds.
* test/src/inotify-tests.el (inotify-valid-p-simple):
Add inotify-valid-p tests, some of which dump core without
the fixes noted above.
Diffstat (limited to 'src/lisp.h')
| -rw-r--r-- | src/lisp.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/src/lisp.h b/src/lisp.h index 4b9cd3c4702..3125bd2a5dd 100644 --- a/src/lisp.h +++ b/src/lisp.h | |||
| @@ -3376,6 +3376,7 @@ extern Lisp_Object merge (Lisp_Object, Lisp_Object, Lisp_Object); | |||
| 3376 | extern Lisp_Object do_yes_or_no_p (Lisp_Object); | 3376 | extern Lisp_Object do_yes_or_no_p (Lisp_Object); |
| 3377 | extern Lisp_Object concat2 (Lisp_Object, Lisp_Object); | 3377 | extern Lisp_Object concat2 (Lisp_Object, Lisp_Object); |
| 3378 | extern Lisp_Object concat3 (Lisp_Object, Lisp_Object, Lisp_Object); | 3378 | extern Lisp_Object concat3 (Lisp_Object, Lisp_Object, Lisp_Object); |
| 3379 | extern bool equal_no_quit (Lisp_Object, Lisp_Object); | ||
| 3379 | extern Lisp_Object nconc2 (Lisp_Object, Lisp_Object); | 3380 | extern Lisp_Object nconc2 (Lisp_Object, Lisp_Object); |
| 3380 | extern Lisp_Object assq_no_quit (Lisp_Object, Lisp_Object); | 3381 | extern Lisp_Object assq_no_quit (Lisp_Object, Lisp_Object); |
| 3381 | extern Lisp_Object assoc_no_quit (Lisp_Object, Lisp_Object); | 3382 | extern Lisp_Object assoc_no_quit (Lisp_Object, Lisp_Object); |