aboutsummaryrefslogtreecommitdiffstats
path: root/src/lisp.h
diff options
context:
space:
mode:
authorPaul Eggert2017-03-30 11:08:23 -0700
committerPaul Eggert2017-03-30 11:08:42 -0700
commit6ff870218dd4bc015cc4115ceb2febd8d807e57c (patch)
tree67eaa089c0754194e75eea898e24c4a6bcfbe91a /src/lisp.h
parent1be3330b31f9c0d0d0f7d25641e8b81c807ca616 (diff)
downloademacs-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.h1
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);
3376extern Lisp_Object do_yes_or_no_p (Lisp_Object); 3376extern Lisp_Object do_yes_or_no_p (Lisp_Object);
3377extern Lisp_Object concat2 (Lisp_Object, Lisp_Object); 3377extern Lisp_Object concat2 (Lisp_Object, Lisp_Object);
3378extern Lisp_Object concat3 (Lisp_Object, Lisp_Object, Lisp_Object); 3378extern Lisp_Object concat3 (Lisp_Object, Lisp_Object, Lisp_Object);
3379extern bool equal_no_quit (Lisp_Object, Lisp_Object);
3379extern Lisp_Object nconc2 (Lisp_Object, Lisp_Object); 3380extern Lisp_Object nconc2 (Lisp_Object, Lisp_Object);
3380extern Lisp_Object assq_no_quit (Lisp_Object, Lisp_Object); 3381extern Lisp_Object assq_no_quit (Lisp_Object, Lisp_Object);
3381extern Lisp_Object assoc_no_quit (Lisp_Object, Lisp_Object); 3382extern Lisp_Object assoc_no_quit (Lisp_Object, Lisp_Object);