aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPaul Eggert2011-06-20 23:47:52 -0700
committerPaul Eggert2011-06-20 23:47:52 -0700
commitda3f12b238fbbf4632bdf137b08446b1ee655faf (patch)
tree17fc2fecb6bcdb0cac59170be367288193ce79bf /src
parent3a5077c52bb88d1a354d4122ef4bf660d84651f6 (diff)
downloademacs-da3f12b238fbbf4632bdf137b08446b1ee655faf.tar.gz
emacs-da3f12b238fbbf4632bdf137b08446b1ee655faf.zip
* font.c (font_intern_prop): Don't use string_to_number, since the string isn't null-terminated.
Diffstat (limited to 'src')
-rw-r--r--src/font.c20
1 files changed, 14 insertions, 6 deletions
diff --git a/src/font.c b/src/font.c
index cc57af12141..dfc636e3313 100644
--- a/src/font.c
+++ b/src/font.c
@@ -241,17 +241,25 @@ font_intern_prop (const char *str, ptrdiff_t len, int force_symbol)
241 241
242 if (len == 1 && *str == '*') 242 if (len == 1 && *str == '*')
243 return Qnil; 243 return Qnil;
244 if (!force_symbol && len >=1 && isdigit (*str)) 244 if (!force_symbol && 0 < len && '0' <= *str && *str <= '9')
245 { 245 {
246 for (i = 1; i < len; i++) 246 for (i = 1; i < len; i++)
247 if (! isdigit (str[i])) 247 if (! ('0' <= str[i] && str[i] <= '9'))
248 break; 248 break;
249 if (i == len) 249 if (i == len)
250 { 250 {
251 Lisp_Object num = string_to_number (str, 10, 0); 251 EMACS_INT n;
252 if (! INTEGERP (num)) 252
253 xsignal1 (Qoverflow_error, num); 253 i = 0;
254 return num; 254 for (n = 0; (n += str[i++] - '0') <= MOST_POSITIVE_FIXNUM; n *= 10)
255 {
256 if (i == len)
257 return make_number (n);
258 if (MOST_POSITIVE_FIXNUM / 10 < n)
259 break;
260 }
261
262 xsignal1 (Qoverflow_error, make_string (str, len));
255 } 263 }
256 } 264 }
257 265