diff options
author | Paul Eggert <eggert@cs.ucla.edu> | 2011-06-19 22:51:47 -0700 |
---|---|---|
committer | Paul Eggert <eggert@cs.ucla.edu> | 2011-06-19 22:51:47 -0700 |
commit | ccd6111c2415fc357944464cdf51ab496364241c (patch) | |
tree | 0f98d8b17e39b90a09bb005a539464fe00f165f3 /src | |
parent | b5b8c9e5d3c14ad3510af9edb2d693f312eecf53 (diff) | |
download | emacs-ccd6111c2415fc357944464cdf51ab496364241c.tar.gz |
* 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.
Diffstat (limited to 'src')
-rw-r--r-- | src/ChangeLog | 3 | ||||
-rw-r--r-- | src/font.c | 11 | ||||
-rw-r--r-- | src/font.h | 3 |
3 files changed, 13 insertions, 4 deletions
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, |