]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix string-to-number C-level mishandling
authorPaul Eggert <eggert@cs.ucla.edu>
Fri, 9 Mar 2018 20:06:05 +0000 (12:06 -0800)
committerAndrew G Cohen <cohen@andy.bu.edu>
Tue, 11 Dec 2018 06:15:02 +0000 (14:15 +0800)
* src/sysdep.c (list_system_processes):
* src/xfaces.c (Finternal_set_lisp_face_attribute_from_resource):
Defend against Fstring_to_number returning a float or a nonsense
integer.

src/sysdep.c
src/xfaces.c

index c59034ce5c30373f3049aa11700496680cccd832..1eaf648ea78de693582272adb6062fb3b9af763a 100644 (file)
@@ -3006,7 +3006,11 @@ list_system_processes (void)
   for (tail = proclist; CONSP (tail); tail = next)
     {
       next = XCDR (tail);
-      XSETCAR (tail, Fstring_to_number (XCAR (tail), Qnil));
+      Lisp_Object pidstring = XCAR (tail);
+      Lisp_Object pid = Fstring_to_number (pidstring, Qnil);
+      if (!INTEGERP (pid) || XINT (pid) <= 0)
+       xsignal1 (Qoverflow_error, pidstring);
+      XSETCAR (tail, pid);
     }
 
   /* directory_files_internal returns the files in reverse order; undo
index 77afee4587d0bd727e46ccd2c8c17ded05f81886..56df06574a793adf6eafe239cf9f088102af029d 100644 (file)
@@ -3393,7 +3393,7 @@ DEFUN ("internal-set-lisp-face-attribute-from-resource",
   else if (EQ (attr, QCheight))
     {
       value = Fstring_to_number (value, make_number (10));
-      if (XINT (value) <= 0)
+      if (!INTEGERP (value) || XINT (value) <= 0)
        signal_error ("Invalid face height from X resource", value);
     }
   else if (EQ (attr, QCbold) || EQ (attr, QCitalic))