From: Paul Eggert Date: Mon, 20 Jun 2011 05:51:47 +0000 (-0700) Subject: * font.c (font_intern_prop): Don't assume string length fits in int. X-Git-Tag: emacs-pretest-24.0.90~104^2~473^2~24 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=ccd6111c2415fc357944464cdf51ab496364241c;p=emacs.git * font.c (font_intern_prop): Don't assume string length fits in int. Don't assume integer property fits in fixnum. * font.h (font_intern_prop): 2nd arg is now ptrdiff_t, not int. --- diff --git a/src/ChangeLog b/src/ChangeLog index 32756b4427f..cb6ea8ff9eb 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -3,6 +3,9 @@ * font.c: Don't assume string length fits in int. (font_parse_xlfd, font_parse_fcname, font_unparse_fcname): Use ptrdiff_t, not int. + (font_intern_prop): Don't assume string length fits in int. + Don't assume integer property fits in fixnum. + * font.h (font_intern_prop): 2nd arg is now ptrdiff_t, not int. * filelock.c: Fix some buffer overrun and integer overflow issues. (get_boot_time): Don't assume that gzip command string fits in 100 bytes. diff --git a/src/font.c b/src/font.c index b9cdde376a5..cc57af12141 100644 --- a/src/font.c +++ b/src/font.c @@ -232,9 +232,9 @@ static int num_font_drivers; STR. */ Lisp_Object -font_intern_prop (const char *str, int len, int force_symbol) +font_intern_prop (const char *str, ptrdiff_t len, int force_symbol) { - int i; + ptrdiff_t i; Lisp_Object tem; Lisp_Object obarray; EMACS_INT nbytes, nchars; @@ -247,7 +247,12 @@ font_intern_prop (const char *str, int len, int force_symbol) if (! isdigit (str[i])) break; if (i == len) - return make_number (atoi (str)); + { + Lisp_Object num = string_to_number (str, 10, 0); + if (! INTEGERP (num)) + xsignal1 (Qoverflow_error, num); + return num; + } } /* The following code is copied from the function intern (in diff --git a/src/font.h b/src/font.h index 0ca9e8baec4..e50eaff9a1f 100644 --- a/src/font.h +++ b/src/font.h @@ -777,7 +777,8 @@ extern void font_done_for_face (FRAME_PTR f, struct face *face); extern Lisp_Object font_open_by_spec (FRAME_PTR f, Lisp_Object spec); extern Lisp_Object font_open_by_name (FRAME_PTR f, const char *name); -extern Lisp_Object font_intern_prop (const char *str, int len, int force_symbol); +extern Lisp_Object font_intern_prop (const char *str, ptrdiff_t len, + int force_symbol); extern void font_update_sort_order (int *order); extern void font_parse_family_registry (Lisp_Object family,