diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/font.c | 20 |
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 | ||