>From 76101698a770d389f22b547c331ec78473040c47 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Mon, 13 Aug 2018 15:45:17 -0700 Subject: [PATCH 1/2] Fix check for unsafe watch descriptor * src/lisp.h (make_pointer_integer_unsafe): New function. (make_pointer_integer): Use it. * src/gfilenotify.c (dir_monitor_callback): Omit redundant eassert. (Fgfile_add_watch): Signal an error instead of failing an assertion if the pointer does not work. --- src/gfilenotify.c | 7 +++---- src/lisp.h | 8 +++++++- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/gfilenotify.c b/src/gfilenotify.c index 7eea2cfac1..798f308b31 100644 --- a/src/gfilenotify.c +++ b/src/gfilenotify.c @@ -77,7 +77,6 @@ dir_monitor_callback (GFileMonitor *monitor, /* Determine callback function. */ monitor_object = make_pointer_integer (monitor); - eassert (FIXNUMP (monitor_object)); watch_object = assq_no_quit (monitor_object, watch_list); if (CONSP (watch_object)) @@ -203,10 +202,10 @@ will be reported only in case of the `moved' event. */) if (! monitor) xsignal2 (Qfile_notify_error, build_string ("Cannot watch file"), file); - Lisp_Object watch_descriptor = make_pointer_integer (monitor); + Lisp_Object watch_descriptor = make_pointer_integer_unsafe (monitor); - /* Check the dicey assumption that make_pointer_integer is safe. */ - if (! FIXNUMP (watch_descriptor)) + if (! (FIXNUMP (watch_descriptor) + && XFIXNUMPTR (watch_descriptor) == monitor)) { g_object_unref (monitor); xsignal2 (Qfile_notify_error, build_string ("Unsupported file watcher"), diff --git a/src/lisp.h b/src/lisp.h index b7ef8dc63a..18d53537cc 100644 --- a/src/lisp.h +++ b/src/lisp.h @@ -1188,10 +1188,16 @@ XFIXNUMPTR (Lisp_Object a) return XUNTAG (a, Lisp_Int0, char); } +INLINE Lisp_Object +make_pointer_integer_unsafe (void *p) +{ + return TAG_PTR (Lisp_Int0, p); +} + INLINE Lisp_Object make_pointer_integer (void *p) { - Lisp_Object a = TAG_PTR (Lisp_Int0, p); + Lisp_Object a = make_pointer_integer_unsafe (p); eassert (FIXNUMP (a) && XFIXNUMPTR (a) == p); return a; } -- 2.17.1