[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#14272: 24.3.50; crash on loading theme
From: |
Handa Kenichi |
Subject: |
bug#14272: 24.3.50; crash on loading theme |
Date: |
Sat, 27 Apr 2013 22:42:07 +0900 |
In article <83vc79u3uc.fsf@gnu.org>, Eli Zaretskii <eliz@gnu.org>
writes:
> The crash is caused by division by zero, here:
> int font_wid = FRAME_COLUMN_WIDTH (f);
> int cols = (left_wid + right_wid + font_wid-1) / font_wid;
> <<<<<<<<
> most probably because font->average_width is zero, because
> FRAME_COLUMN_WIDTH gets its value for font's average_width.
I've just installed the attached fix to the trunk. Please
try the lastest code.
---
Kenichi Handa
handa@gnu.org
2013-04-27 Kenichi Handa <handa@gnu.org>
* font.c (font_open_entity): Always open a font of
manageable
size.
=== modified file 'src/font.c'
--- src/font.c 2013-04-07 04:41:19 +0000
+++ src/font.c 2013-04-27 13:28:56 +0000
@@ -2819,7 +2819,7 @@
struct font_driver_list *driver_list;
Lisp_Object objlist, size, val, font_object;
struct font *font;
- int min_width, height;
+ int min_width, height, psize;
eassert (FONT_ENTITY_P (entity));
size = AREF (entity, FONT_SIZE_INDEX);
@@ -2846,12 +2846,19 @@
}
}
- font_object = driver_list->driver->open (f, entity, pixel_size);
- if (!NILP (font_object))
- ASET (font_object, FONT_SIZE_INDEX, make_number (pixel_size));
+ /* We always open a font of manageable size; i.e non-zero average
+ width and height. */
+ for (psize = pixel_size; ; psize++)
+ {
+ font_object = driver_list->driver->open (f, entity, psize);
+ if (NILP (font_object))
+ return Qnil;
+ font = XFONT_OBJECT (font_object);
+ if (font->average_width > 0 && font->height > 0)
+ break;
+ }
+ ASET (font_object, FONT_SIZE_INDEX, make_number (pixel_size));
FONT_ADD_LOG ("open", entity, font_object);
- if (NILP (font_object))
- return Qnil;
ASET (entity, FONT_OBJLIST_INDEX,
Fcons (font_object, AREF (entity, FONT_OBJLIST_INDEX)));
@@ -3118,6 +3125,8 @@
double pt = XINT (attrs[LFACE_HEIGHT_INDEX]);
pixel_size = POINT_TO_PIXEL (pt / 10, FRAME_RES_Y (f));
+ if (pixel_size < 1)
+ pixel_size = 1;
}
ASET (work, FONT_SIZE_INDEX, Qnil);
foundry[0] = AREF (work, FONT_FOUNDRY_INDEX);
- bug#14272: 24.3.50; crash on loading theme, (continued)
- bug#14272: 24.3.50; crash on loading theme, Eli Zaretskii, 2013/04/26
- bug#14272: 24.3.50; crash on loading theme, Yagnesh Raghava Yakkala, 2013/04/26
- bug#14272: 24.3.50; crash on loading theme, Eli Zaretskii, 2013/04/26
- bug#14272: 24.3.50; crash on loading theme, Yagnesh Raghava Yakkala, 2013/04/26
- bug#14272: 24.3.50; crash on loading theme, Eli Zaretskii, 2013/04/26
- bug#14272: 24.3.50; crash on loading theme, Yagnesh Raghava Yakkala, 2013/04/26
- bug#14272: 24.3.50; crash on loading theme, Eli Zaretskii, 2013/04/26
- bug#14272: 24.3.50; crash on loading theme, Yagnesh Raghava Yakkala, 2013/04/26
- bug#14272: 24.3.50; crash on loading theme, Glenn Morris, 2013/04/26
- bug#14272: 24.3.50; crash on loading theme, Yagnesh Raghava Yakkala, 2013/04/26
- bug#14272: 24.3.50; crash on loading theme,
Handa Kenichi <=
- bug#14272: 24.3.50; crash on loading theme, Yagnesh Raghava Yakkala, 2013/04/27
bug#14272: 24.3.50; crash on loading theme, Glenn Morris, 2013/04/26