After an evaluation, GNOME has moved from Bugzilla to GitLab. Learn more about GitLab.
No new issues can be reported in GNOME Bugzilla anymore.
To report an issue in a GNOME project, go to GNOME GitLab.
Do not go to GNOME Gitlab for: Bluefish, Doxygen, GnuCash, GStreamer, java-gnome, LDTP, NetworkManager, Tomboy.
Bug 593240 - (pangoosx) Crash / infinite loop with Mac OS X
(pangoosx)
Crash / infinite loop with Mac OS X
Status: RESOLVED FIXED
Product: pango
Classification: Platform
Component: general
unspecified
Other Mac OS
: Normal normal
: ---
Assigned To: pango-maint
pango-maint
: 596654 596674 596675 (view as bug list)
Depends on:
Blocks:
 
 
Reported: 2009-08-26 23:28 UTC by paul
Modified: 2012-08-25 20:34 UTC
See Also:
GNOME target: ---
GNOME version: ---


Attachments
30 second sample of xchat during this problem (8.99 KB, text/plain)
2009-09-28 23:19 UTC, Jeremy Huddleston
  Details
Fix for bug 593240 (430 bytes, patch)
2010-02-21 23:58 UTC, Matthias Scheler
none Details | Review
Fix for bug 593240 (430 bytes, patch)
2010-02-21 23:58 UTC, Matthias Scheler
none Details | Review
30s sample of pango-view with 1.26.2 + the pointer math fix (31.58 KB, text/plain)
2010-03-16 20:59 UTC, Jeremy Huddleston
  Details

Description paul 2009-08-26 23:28:07 UTC
this is the vaguest summary title i've ever used, and i am ashamed

Starting program: /opt/local/bin/rgbpaint 
Reading symbols for shared libraries ++++++++................................................................ done
Xlib:  extension "RANDR" missing on display ":0.0".
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done

Program received signal EXC_BAD_ACCESS, Could not access memory.
0x00cdf5e4 in _pango_ot_info_substitute (info=0x14e3e0, ruleset=0x36c708, buffer=0x3741e0) at /Source/pango/pango/pango/pango-ot-info.c:558
558             hb_ot_layout_substitute_lookup (info->hb_face,
(gdb) bt full
  • #0 _pango_ot_info_substitute
    at /Source/pango/pango/pango/pango-ot-info.c line 558
  • #1 pango_ot_ruleset_substitute
    at /Source/pango/pango/pango/pango-ot-ruleset.c line 488
  • #2 basic_engine_shape
    at /Source/pango/pango/modules/basic/basic-fc.c line 211
  • #3 _pango_engine_shape_shape
    at /Source/pango/pango/pango/pango-engine.c line 71
  • #4 pango_shape
    at /Source/pango/pango/pango/shape.c line 55
  • #5 shape_run
    at /Source/pango/pango/pango/pango-layout.c line 3133
  • #6 process_item
    at /Source/pango/pango/pango/pango-layout.c line 3244
  • #7 process_line
    at /Source/pango/pango/pango/pango-layout.c line 3539
  • #8 pango_layout_check_lines
    at /Source/pango/pango/pango/pango-layout.c line 3860
  • #9 pango_layout_get_unknown_glyphs_count
    at /Source/pango/pango/pango/pango-layout.c line 1212
  • #10 find_invisible_char
    at gtkentry.c line 2201
  • #11 gtk_entry_init
    at gtkentry.c line 2228
  • #12 g_type_create_instance
    at /Source/glib/glib/gobject/gtype.c line 1674
  • #13 g_object_constructor
    at /Source/glib/glib/gobject/gobject.c line 1338
  • #14 g_object_newv
    at /Source/glib/glib/gobject/gobject.c line 1215
  • #15 g_object_new_valist
    at /Source/glib/glib/gobject/gobject.c line 1278
  • #16 g_object_new
    at /Source/glib/glib/gobject/gobject.c line 1060
  • #17 gtk_entry_new
    at gtkentry.c line 6545
  • #18 gtk_combo_init
    at gtkcombo.c line 919
  • #19 g_type_create_instance
    at /Source/glib/glib/gobject/gtype.c line 1674
  • #20 g_object_constructor
    at /Source/glib/glib/gobject/gobject.c line 1338
  • #21 g_object_newv
    at /Source/glib/glib/gobject/gobject.c line 1215
  • #22 g_object_new_valist
    at /Source/glib/glib/gobject/gobject.c line 1278
  • #23 g_object_new
    at /Source/glib/glib/gobject/gobject.c line 1060
  • #24 gtk_combo_new
    at gtkcombo.c line 1032
  • #25 toolbar_add_zoom
    at toolbar.c line 92
  • #26 fill_toolbar
    at toolbar.c line 264
  • #27 toolbar_init
    at toolbar.c line 380
  • #28 main_init
    at mainwindow.c line 1683
  • #29 main
    at main.c line 292

Comment 1 Behdad Esfahbod 2009-08-27 00:33:34 UTC
Pango version and architecture?
Can you recompile with CPPFLAGS=-O0 please?
Comment 2 paul 2009-08-27 01:34:34 UTC
pango 1.25.5
arch powerpc
-O0'd 

Program received signal EXC_BAD_ACCESS, Could not access memory.
0x00cdf5e4 in _pango_ot_info_substitute (info=0x14e3e0, ruleset=0x36c708, buffer=0x3741e0) at /Source/pango/pango/pango/pango-ot-info.c:558
558             hb_ot_layout_substitute_lookup (info->hb_face,
(gdb) bt full
  • #0 _pango_ot_info_substitute
    at /Source/pango/pango/pango/pango-ot-info.c line 558
  • #1 pango_ot_ruleset_substitute
    at /Source/pango/pango/pango/pango-ot-ruleset.c line 488
  • #2 basic_engine_shape
    at /Source/pango/pango/modules/basic/basic-fc.c line 211
  • #3 _pango_engine_shape_shape
    at /Source/pango/pango/pango/pango-engine.c line 71
  • #4 pango_shape
    at /Source/pango/pango/pango/shape.c line 55
  • #5 shape_run
    at /Source/pango/pango/pango/pango-layout.c line 3133
  • #6 process_item
    at /Source/pango/pango/pango/pango-layout.c line 3244
  • #7 process_line
    at /Source/pango/pango/pango/pango-layout.c line 3539
  • #8 pango_layout_check_lines
    at /Source/pango/pango/pango/pango-layout.c line 3860
  • #9 pango_layout_get_unknown_glyphs_count
    at /Source/pango/pango/pango/pango-layout.c line 1212
  • #10 find_invisible_char
    at gtkentry.c line 2201
  • #11 gtk_entry_init
    at gtkentry.c line 2228
  • #12 g_type_create_instance
    at /Source/glib/glib/gobject/gtype.c line 1674
  • #13 g_object_constructor
    at /Source/glib/glib/gobject/gobject.c line 1338
  • #14 g_object_newv
    at /Source/glib/glib/gobject/gobject.c line 1215
  • #15 g_object_new_valist
    at /Source/glib/glib/gobject/gobject.c line 1278
  • #16 g_object_new
    at /Source/glib/glib/gobject/gobject.c line 1060
  • #17 gtk_entry_new
    at gtkentry.c line 6545
  • #18 gtk_combo_init
    at gtkcombo.c line 919
  • #19 g_type_create_instance
    at /Source/glib/glib/gobject/gtype.c line 1674
  • #20 g_object_constructor
    at /Source/glib/glib/gobject/gobject.c line 1338
  • #21 g_object_newv
    at /Source/glib/glib/gobject/gobject.c line 1215
  • #22 g_object_new_valist
    at /Source/glib/glib/gobject/gobject.c line 1278
  • #23 g_object_new
    at /Source/glib/glib/gobject/gobject.c line 1060
  • #24 gtk_combo_new
    at gtkcombo.c line 1032
  • #25 toolbar_add_zoom
    at toolbar.c line 92
  • #26 fill_toolbar
    at toolbar.c line 264
  • #27 toolbar_init
    at toolbar.c line 380
  • #28 main_init
    at mainwindow.c line 1683
  • #29 main
    at main.c line 292

Comment 3 Behdad Esfahbod 2009-08-27 01:40:14 UTC
Absolutely no idea.  Can you run pango/pango/opentype/main on a few fonts and see what it does?
Comment 4 paul 2009-08-27 02:14:47 UTC
ok
according to ktrace, the first and only font it accesses before anything crashes is bitstream vera, so here's that

% /tmp/pango/Build/pango/opentype/main /usr/X11R6/lib/X11/fonts/TTF/Vera.ttf
Opened font file /usr/X11R6/lib/X11/fonts/TTF/Vera.ttf: 65932 bytes long
OpenType font with TrueType outlines
1 font(s) found in file
Font 0 of 1:
  17 table(s) found in font
  Table  0 of 17: OS/2 (0x0000eb70+0x00000056)
  Table  1 of 17: PCLT (0x0000ebc8+0x00000036)
  Table  2 of 17: cmap (0x0000b16c+0x00000358)
  Table  3 of 17: cvt  (0x00001efc+0x000001fc)
  Table  4 of 17: fpgm (0x00002660+0x0000008b)
  Table  5 of 17: gasp (0x00010148+0x0000000c)
  Table  6 of 17: glyf (0x000026ec+0x00008a7e)
  Table  7 of 17: hdmx (0x0000ec00+0x00001548)
  Table  8 of 17: head (0x00010154+0x00000036)
  Table  9 of 17: hhea (0x0000eb4c+0x00000024)
  Table 10 of 17: hmtx (0x0000b4c4+0x00000430)
  Table 11 of 17: kern (0x0000bda0+0x00002d8a)
  Table 12 of 17: loca (0x0000bb84+0x0000021a)
  Table 13 of 17: maxp (0x0000eb2c+0x00000020)
  Table 14 of 17: name (0x0000011c+0x00001ddf)
  Table 15 of 17: post (0x0000b8f4+0x0000028e)
  Table 16 of 17: prep (0x000020f8+0x00000568)

% /tmp/pango/Build/pango/opentype/main /usr/X11R6/lib/X11/fonts/TTF/VeraSe.ttf 
Opened font file /usr/X11R6/lib/X11/fonts/TTF/VeraSe.ttf: 60280 bytes long
OpenType font with TrueType outlines
1 font(s) found in file
Font 0 of 1:
  17 table(s) found in font
  Table  0 of 17: OS/2 (0x0000d55c+0x00000056)
  Table  1 of 17: PCLT (0x0000d5b4+0x00000036)
  Table  2 of 17: cmap (0x0000b588+0x00000358)
  Table  3 of 17: cvt  (0x00001f04+0x00000194)
  Table  4 of 17: fpgm (0x000025f8+0x0000008b)
  Table  5 of 17: gasp (0x0000eb34+0x0000000c)
  Table  6 of 17: glyf (0x00002684+0x00008f02)
  Table  7 of 17: hdmx (0x0000d5ec+0x00001548)
  Table  8 of 17: head (0x0000eb40+0x00000036)
  Table  9 of 17: hhea (0x0000d538+0x00000024)
  Table 10 of 17: hmtx (0x0000b8e0+0x00000430)
  Table 11 of 17: kern (0x0000c1bc+0x0000135c)
  Table 12 of 17: loca (0x0000bfa0+0x0000021a)
  Table 13 of 17: maxp (0x0000d518+0x00000020)
  Table 14 of 17: name (0x0000011c+0x00001de5)
  Table 15 of 17: post (0x0000bd10+0x0000028e)
  Table 16 of 17: prep (0x00002098+0x0000055e)

% /tmp/pango/Build/pango/opentype/main /usr/X11R6/lib/X11/fonts/TTF/VeraMono.ttf 
Opened font file /usr/X11R6/lib/X11/fonts/TTF/VeraMono.ttf: 49224 bytes long
OpenType font with TrueType outlines
1 font(s) found in file
Font 0 of 1:
  16 table(s) found in font
  Table  0 of 16: OS/2 (0x0000aa2c+0x00000056)
  Table  1 of 16: PCLT (0x0000aa84+0x00000036)
  Table  2 of 16: cmap (0x00009da8+0x00000358)
  Table  3 of 16: cvt  (0x00001f08+0x00000230)
  Table  4 of 16: fpgm (0x00002854+0x0000008c)
  Table  5 of 16: gasp (0x0000c004+0x0000000c)
  Table  6 of 16: glyf (0x000028e0+0x000074c8)
  Table  7 of 16: hdmx (0x0000aabc+0x00001548)
  Table  8 of 16: head (0x0000c010+0x00000036)
  Table  9 of 16: hhea (0x0000aa08+0x00000024)
  Table 10 of 16: hmtx (0x0000a100+0x00000434)
  Table 11 of 16: loca (0x0000a7cc+0x0000021c)
  Table 12 of 16: maxp (0x0000a9e8+0x00000020)
  Table 13 of 16: name (0x0000010c+0x00001dfa)
  Table 14 of 16: post (0x0000a534+0x00000296)
  Table 15 of 16: prep (0x00002138+0x0000071b)

for fun, the lastresort font

% /tmp/pango/Build/pango/opentype/main /Library/Fonts/LastResort.ttf 
Opened font file /Library/Fonts/LastResort.ttf: 5395052 bytes long
OpenType font with TrueType outlines
1 font(s) found in file
Font 0 of 1:
  19 table(s) found in font
  Table  0 of 19: GDEF (0x005004e0+0x00000016)
    Has glyph classes
    Has no mark attachment types
    Has no attach points
    Has no lig carets
    Has no mark sets
  Table  1 of 19: GPOS (0x005004f8+0x00000120)
    17 script(s) found in table
    Script  0 of 17: arab
      0 language system(s) found in script
      Default Language System
        No required feature
        0 feature(s) found in language system
    Script  1 of 17: beng
      0 language system(s) found in script
      Default Language System
        No required feature
        0 feature(s) found in language system
    Script  2 of 17: deva
      0 language system(s) found in script
      Default Language System
        No required feature
        0 feature(s) found in language system
    Script  3 of 17: gujr
      0 language system(s) found in script
      Default Language System
        No required feature
        0 feature(s) found in language system
    Script  4 of 17: guru
      0 language system(s) found in script
      Default Language System
        No required feature
        0 feature(s) found in language system
    Script  5 of 17: khmr
      0 language system(s) found in script
      Default Language System
        No required feature
        0 feature(s) found in language system
    Script  6 of 17: knda
      0 language system(s) found in script
      Default Language System
        No required feature
        0 feature(s) found in language system
    Script  7 of 17: lao 
      0 language system(s) found in script
      Default Language System
        No required feature
        0 feature(s) found in language system
    Script  8 of 17: mlym
      0 language system(s) found in script
      Default Language System
        No required feature
        0 feature(s) found in language system
    Script  9 of 17: mong
      0 language system(s) found in script
      Default Language System
        No required feature
        0 feature(s) found in language system
    Script 10 of 17: orya
      0 language system(s) found in script
      Default Language System
        No required feature
        0 feature(s) found in language system
    Script 11 of 17: sinh
      0 language system(s) found in script
      Default Language System
        No required feature
        0 feature(s) found in language system
    Script 12 of 17: syrc
      0 language system(s) found in script
      Default Language System
        No required feature
        0 feature(s) found in language system
    Script 13 of 17: taml
      0 language system(s) found in script
      Default Language System
        No required feature
        0 feature(s) found in language system
    Script 14 of 17: telu
      0 language system(s) found in script
      Default Language System
        No required feature
        0 feature(s) found in language system
    Script 15 of 17: thaa
      0 language system(s) found in script
      Default Language System
        No required feature
        0 feature(s) found in language system
    Script 16 of 17: tibt
      0 language system(s) found in script
      Default Language System
        No required feature
        0 feature(s) found in language system
    0 feature(s) found in table
    0 lookup(s) found in table
  Table  2 of 19: GSUB (0x00500618+0x00001738)
    17 script(s) found in table
    Script  0 of 17: arab
      0 language system(s) found in script
      Default Language System
        No required feature
        4 feature(s) found in language system
        Feature index  0 of  4: 47
        Feature index  1 of  4: 63
        Feature index  2 of  4: 68
        Feature index  3 of  4: 99
    Script  1 of 17: beng
      0 language system(s) found in script
      Default Language System
        No required feature
        13 feature(s) found in language system
        Feature index  0 of 13: 1
        Feature index  1 of 13: 12
        Feature index  2 of 13: 22
        Feature index  3 of 13: 33
        Feature index  4 of 13: 49
        Feature index  5 of 13: 53
        Feature index  6 of 13: 64
        Feature index  7 of 13: 70
        Feature index  8 of 13: 77
        Feature index  9 of 13: 83
        Feature index 10 of 13: 88
        Feature index 11 of 13: 101
        Feature index 12 of 13: 109
    Script  2 of 17: deva
      0 language system(s) found in script
      Default Language System
        No required feature
        11 feature(s) found in language system
        Feature index  0 of 11: 2
        Feature index  1 of 11: 13
        Feature index  2 of 11: 24
        Feature index  3 of 11: 34
        Feature index  4 of 11: 50
        Feature index  5 of 11: 54
        Feature index  6 of 11: 71
        Feature index  7 of 11: 78
        Feature index  8 of 11: 89
        Feature index  9 of 11: 102
        Feature index 10 of 11: 110
    Script  3 of 17: gujr
      0 language system(s) found in script
      Default Language System
        No required feature
        11 feature(s) found in language system
        Feature index  0 of 11: 3
        Feature index  1 of 11: 14
        Feature index  2 of 11: 25
        Feature index  3 of 11: 35
        Feature index  4 of 11: 51
        Feature index  5 of 11: 55
        Feature index  6 of 11: 72
        Feature index  7 of 11: 79
        Feature index  8 of 11: 90
        Feature index  9 of 11: 103
        Feature index 10 of 11: 111
    Script  4 of 17: guru
      0 language system(s) found in script
      Default Language System
        No required feature
        9 feature(s) found in language system
        Feature index  0 of  9: 4
        Feature index  1 of  9: 26
        Feature index  2 of  9: 36
        Feature index  3 of  9: 56
        Feature index  4 of  9: 73
        Feature index  5 of  9: 80
        Feature index  6 of  9: 84
        Feature index  7 of  9: 91
        Feature index  8 of  9: 112
    Script  5 of 17: hang
      0 language system(s) found in script
      Default Language System
        No required feature
        3 feature(s) found in language system
        Feature index  0 of  3: 66
        Feature index  1 of  3: 108
        Feature index  2 of  3: 113
    Script  6 of 17: khmr
      0 language system(s) found in script
      Default Language System
        No required feature
        9 feature(s) found in language system
        Feature index  0 of  9: 0
        Feature index  1 of  9: 5
        Feature index  2 of  9: 27
        Feature index  3 of  9: 37
        Feature index  4 of  9: 44
        Feature index  5 of  9: 76
        Feature index  6 of  9: 81
        Feature index  7 of  9: 85
        Feature index  8 of  9: 92
    Script  7 of 17: knda
      0 language system(s) found in script
      Default Language System
        No required feature
        7 feature(s) found in language system
        Feature index  0 of  7: 6
        Feature index  1 of  7: 15
        Feature index  2 of  7: 28
        Feature index  3 of  7: 39
        Feature index  4 of  7: 58
        Feature index  5 of  7: 94
        Feature index  6 of  7: 105
    Script  8 of 17: mlym
      0 language system(s) found in script
      Default Language System
        No required feature
        1 feature(s) found in language system
        Feature index  0 of  1: 17
    Script  9 of 17: mong
      0 language system(s) found in script
      Default Language System
        No required feature
        1 feature(s) found in language system
        Feature index  0 of  1: 114
    Script 10 of 17: orya
      0 language system(s) found in script
      Default Language System
        No required feature
        9 feature(s) found in language system
        Feature index  0 of  9: 8
        Feature index  1 of  9: 18
        Feature index  2 of  9: 30
        Feature index  3 of  9: 40
        Feature index  4 of  9: 59
        Feature index  5 of  9: 74
        Feature index  6 of  9: 86
        Feature index  7 of  9: 95
        Feature index  8 of  9: 106
    Script 11 of 17: sinh
      0 language system(s) found in script
      Default Language System
        No required feature
        9 feature(s) found in language system
        Feature index  0 of  9: 9
        Feature index  1 of  9: 19
        Feature index  2 of  9: 31
        Feature index  3 of  9: 41
        Feature index  4 of  9: 60
        Feature index  5 of  9: 75
        Feature index  6 of  9: 87
        Feature index  7 of  9: 96
        Feature index  8 of  9: 107
    Script 12 of 17: syrc
      0 language system(s) found in script
      Default Language System
        No required feature
        7 feature(s) found in language system
        Feature index  0 of  7: 45
        Feature index  1 of  7: 46
        Feature index  2 of  7: 48
        Feature index  3 of  7: 65
        Feature index  4 of  7: 67
        Feature index  5 of  7: 69
        Feature index  6 of  7: 100
    Script 13 of 17: taml
      0 language system(s) found in script
      Default Language System
        No required feature
        7 feature(s) found in language system
        Feature index  0 of  7: 10
        Feature index  1 of  7: 20
        Feature index  2 of  7: 42
        Feature index  3 of  7: 52
        Feature index  4 of  7: 61
        Feature index  5 of  7: 82
        Feature index  6 of  7: 97
    Script 14 of 17: telu
      0 language system(s) found in script
      Default Language System
        No required feature
        6 feature(s) found in language system
        Feature index  0 of  6: 11
        Feature index  1 of  6: 21
        Feature index  2 of  6: 32
        Feature index  3 of  6: 43
        Feature index  4 of  6: 62
        Feature index  5 of  6: 98
    Script 15 of 17: thaa
      0 language system(s) found in script
      Default Language System
        No required feature
        1 feature(s) found in language system
        Feature index  0 of  1: 115
    Script 16 of 17: tibt
      0 language system(s) found in script
      Default Language System
        No required feature
        1 feature(s) found in language system
        Feature index  0 of  1: 116
    117 feature(s) found in table
    Feature  0 of 117: abvf; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 0
    Feature  1 of 117: abvs; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 1
    Feature  2 of 117: abvs; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 2
    Feature  3 of 117: abvs; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 3
    Feature  4 of 117: abvs; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 4
    Feature  5 of 117: abvs; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 5
    Feature  6 of 117: abvs; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 6
    Feature  7 of 117: abvs; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 7
    Feature  8 of 117: abvs; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 8
    Feature  9 of 117: abvs; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 9
    Feature 10 of 117: abvs; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 10
    Feature 11 of 117: abvs; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 11
    Feature 12 of 117: akhn; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 12
    Feature 13 of 117: akhn; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 13
    Feature 14 of 117: akhn; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 14
    Feature 15 of 117: akhn; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 15
    Feature 16 of 117: akhn; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 16
    Feature 17 of 117: akhn; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 17
    Feature 18 of 117: akhn; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 18
    Feature 19 of 117: akhn; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 19
    Feature 20 of 117: akhn; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 20
    Feature 21 of 117: akhn; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 21
    Feature 22 of 117: blwf; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 22
    Feature 23 of 117: blwf; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 23
    Feature 24 of 117: blwf; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 24
    Feature 25 of 117: blwf; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 25
    Feature 26 of 117: blwf; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 26
    Feature 27 of 117: blwf; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 27
    Feature 28 of 117: blwf; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 28
    Feature 29 of 117: blwf; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 29
    Feature 30 of 117: blwf; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 30
    Feature 31 of 117: blwf; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 31
    Feature 32 of 117: blwf; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 32
    Feature 33 of 117: blws; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 33
    Feature 34 of 117: blws; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 34
    Feature 35 of 117: blws; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 35
    Feature 36 of 117: blws; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 36
    Feature 37 of 117: blws; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 37
    Feature 38 of 117: blws; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 38
    Feature 39 of 117: blws; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 39
    Feature 40 of 117: blws; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 40
    Feature 41 of 117: blws; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 41
    Feature 42 of 117: blws; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 42
    Feature 43 of 117: blws; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 43
    Feature 44 of 117: clig; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 44
    Feature 45 of 117: fin2; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 45
    Feature 46 of 117: fin3; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 46
    Feature 47 of 117: fina; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 47
    Feature 48 of 117: fina; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 48
    Feature 49 of 117: half; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 49
    Feature 50 of 117: half; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 50
    Feature 51 of 117: half; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 51
    Feature 52 of 117: half; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 52
    Feature 53 of 117: haln; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 53
    Feature 54 of 117: haln; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 54
    Feature 55 of 117: haln; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 55
    Feature 56 of 117: haln; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 56
    Feature 57 of 117: haln; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 57
    Feature 58 of 117: haln; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 58
    Feature 59 of 117: haln; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 59
    Feature 60 of 117: haln; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 60
    Feature 61 of 117: haln; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 61
    Feature 62 of 117: haln; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 62
    Feature 63 of 117: init; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 63
    Feature 64 of 117: init; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 64
    Feature 65 of 117: init; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 65
    Feature 66 of 117: ljmo; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 66
    Feature 67 of 117: med2; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 67
    Feature 68 of 117: medi; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 68
    Feature 69 of 117: medi; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 69
    Feature 70 of 117: nukt; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 70
    Feature 71 of 117: nukt; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 71
    Feature 72 of 117: nukt; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 72
    Feature 73 of 117: nukt; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 73
    Feature 74 of 117: nukt; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 74
    Feature 75 of 117: nukt; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 75
    Feature 76 of 117: pref; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 76
    Feature 77 of 117: pres; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 77
    Feature 78 of 117: pres; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 78
    Feature 79 of 117: pres; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 79
    Feature 80 of 117: pres; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 80
    Feature 81 of 117: pres; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 81
    Feature 82 of 117: pres; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 82
    Feature 83 of 117: pstf; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 83
    Feature 84 of 117: pstf; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 84
    Feature 85 of 117: pstf; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 85
    Feature 86 of 117: pstf; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 86
    Feature 87 of 117: pstf; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 87
    Feature 88 of 117: psts; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 88
    Feature 89 of 117: psts; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 89
    Feature 90 of 117: psts; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 90
    Feature 91 of 117: psts; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 91
    Feature 92 of 117: psts; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 92
    Feature 93 of 117: psts; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 93
    Feature 94 of 117: psts; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 94
    Feature 95 of 117: psts; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 95
    Feature 96 of 117: psts; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 96
    Feature 97 of 117: psts; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 97
    Feature 98 of 117: psts; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 98
    Feature 99 of 117: rlig; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 99
    Feature 100 of 117: rlig; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 100
    Feature 101 of 117: rphf; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 101
    Feature 102 of 117: rphf; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 102
    Feature 103 of 117: rphf; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 103
    Feature 104 of 117: rphf; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 104
    Feature 105 of 117: rphf; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 105
    Feature 106 of 117: rphf; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 106
    Feature 107 of 117: rphf; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 107
    Feature 108 of 117: tjmo; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 108
    Feature 109 of 117: vatu; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 109
    Feature 110 of 117: vatu; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 110
    Feature 111 of 117: vatu; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 111
    Feature 112 of 117: vatu; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 112
    Feature 113 of 117: vjmo; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 113
    Feature 114 of 117: zz01; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 114
    Feature 115 of 117: zz01; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 115
    Feature 116 of 117: zz01; 1 lookup(s)
        1 lookup(s) found in feature
        Lookup index  0 of  1: 116
    117 lookup(s) found in table
    Lookup  0 of 117: type 4, flags 0x0000
    Lookup  1 of 117: type 4, flags 0x0000
    Lookup  2 of 117: type 4, flags 0x0000
    Lookup  3 of 117: type 4, flags 0x0000
    Lookup  4 of 117: type 4, flags 0x0000
    Lookup  5 of 117: type 4, flags 0x0000
    Lookup  6 of 117: type 4, flags 0x0000
    Lookup  7 of 117: type 4, flags 0x0000
    Lookup  8 of 117: type 4, flags 0x0000
    Lookup  9 of 117: type 4, flags 0x0000
    Lookup 10 of 117: type 4, flags 0x0000
    Lookup 11 of 117: type 4, flags 0x0000
    Lookup 12 of 117: type 4, flags 0x0000
    Lookup 13 of 117: type 4, flags 0x0000
    Lookup 14 of 117: type 4, flags 0x0000
    Lookup 15 of 117: type 4, flags 0x0000
    Lookup 16 of 117: type 4, flags 0x0000
    Lookup 17 of 117: type 4, flags 0x0000
    Lookup 18 of 117: type 4, flags 0x0000
    Lookup 19 of 117: type 4, flags 0x0000
    Lookup 20 of 117: type 4, flags 0x0000
    Lookup 21 of 117: type 4, flags 0x0000
    Lookup 22 of 117: type 4, flags 0x0000
    Lookup 23 of 117: type 4, flags 0x0000
    Lookup 24 of 117: type 4, flags 0x0000
    Lookup 25 of 117: type 4, flags 0x0000
    Lookup 26 of 117: type 4, flags 0x0000
    Lookup 27 of 117: type 4, flags 0x0000
    Lookup 28 of 117: type 4, flags 0x0000
    Lookup 29 of 117: type 4, flags 0x0000
    Lookup 30 of 117: type 4, flags 0x0000
    Lookup 31 of 117: type 4, flags 0x0000
    Lookup 32 of 117: type 4, flags 0x0000
    Lookup 33 of 117: type 4, flags 0x0000
    Lookup 34 of 117: type 4, flags 0x0000
    Lookup 35 of 117: type 4, flags 0x0000
    Lookup 36 of 117: type 4, flags 0x0000
    Lookup 37 of 117: type 4, flags 0x0000
    Lookup 38 of 117: type 4, flags 0x0000
    Lookup 39 of 117: type 4, flags 0x0000
    Lookup 40 of 117: type 4, flags 0x0000
    Lookup 41 of 117: type 4, flags 0x0000
    Lookup 42 of 117: type 4, flags 0x0000
    Lookup 43 of 117: type 4, flags 0x0000
    Lookup 44 of 117: type 4, flags 0x0000
    Lookup 45 of 117: type 4, flags 0x0000
    Lookup 46 of 117: type 4, flags 0x0000
    Lookup 47 of 117: type 4, flags 0x0000
    Lookup 48 of 117: type 4, flags 0x0000
    Lookup 49 of 117: type 4, flags 0x0000
    Lookup 50 of 117: type 4, flags 0x0000
    Lookup 51 of 117: type 4, flags 0x0000
    Lookup 52 of 117: type 4, flags 0x0000
    Lookup 53 of 117: type 4, flags 0x0000
    Lookup 54 of 117: type 4, flags 0x0000
    Lookup 55 of 117: type 4, flags 0x0000
    Lookup 56 of 117: type 4, flags 0x0000
    Lookup 57 of 117: type 4, flags 0x0000
    Lookup 58 of 117: type 4, flags 0x0000
    Lookup 59 of 117: type 4, flags 0x0000
    Lookup 60 of 117: type 4, flags 0x0000
    Lookup 61 of 117: type 4, flags 0x0000
    Lookup 62 of 117: type 4, flags 0x0000
    Lookup 63 of 117: type 4, flags 0x0000
    Lookup 64 of 117: type 4, flags 0x0000
    Lookup 65 of 117: type 4, flags 0x0000
    Lookup 66 of 117: type 4, flags 0x0000
    Lookup 67 of 117: type 4, flags 0x0000
    Lookup 68 of 117: type 4, flags 0x0000
    Lookup 69 of 117: type 4, flags 0x0000
    Lookup 70 of 117: type 4, flags 0x0000
    Lookup 71 of 117: type 4, flags 0x0000
    Lookup 72 of 117: type 4, flags 0x0000
    Lookup 73 of 117: type 4, flags 0x0000
    Lookup 74 of 117: type 4, flags 0x0000
    Lookup 75 of 117: type 4, flags 0x0000
    Lookup 76 of 117: type 4, flags 0x0000
    Lookup 77 of 117: type 4, flags 0x0000
    Lookup 78 of 117: type 4, flags 0x0000
    Lookup 79 of 117: type 4, flags 0x0000
    Lookup 80 of 117: type 4, flags 0x0000
    Lookup 81 of 117: type 4, flags 0x0000
    Lookup 82 of 117: type 4, flags 0x0000
    Lookup 83 of 117: type 4, flags 0x0000
    Lookup 84 of 117: type 4, flags 0x0000
    Lookup 85 of 117: type 4, flags 0x0000
    Lookup 86 of 117: type 4, flags 0x0000
    Lookup 87 of 117: type 4, flags 0x0000
    Lookup 88 of 117: type 4, flags 0x0000
    Lookup 89 of 117: type 4, flags 0x0000
    Lookup 90 of 117: type 4, flags 0x0000
    Lookup 91 of 117: type 4, flags 0x0000
    Lookup 92 of 117: type 4, flags 0x0000
    Lookup 93 of 117: type 4, flags 0x0000
    Lookup 94 of 117: type 4, flags 0x0000
    Lookup 95 of 117: type 4, flags 0x0000
    Lookup 96 of 117: type 4, flags 0x0000
    Lookup 97 of 117: type 4, flags 0x0000
    Lookup 98 of 117: type 4, flags 0x0000
    Lookup 99 of 117: type 4, flags 0x0000
    Lookup 100 of 117: type 4, flags 0x0000
    Lookup 101 of 117: type 4, flags 0x0000
    Lookup 102 of 117: type 4, flags 0x0000
    Lookup 103 of 117: type 4, flags 0x0000
    Lookup 104 of 117: type 4, flags 0x0000
    Lookup 105 of 117: type 4, flags 0x0000
    Lookup 106 of 117: type 4, flags 0x0000
    Lookup 107 of 117: type 4, flags 0x0000
    Lookup 108 of 117: type 4, flags 0x0000
    Lookup 109 of 117: type 4, flags 0x0000
    Lookup 110 of 117: type 4, flags 0x0000
    Lookup 111 of 117: type 4, flags 0x0000
    Lookup 112 of 117: type 4, flags 0x0000
    Lookup 113 of 117: type 4, flags 0x0000
    Lookup 114 of 117: type 4, flags 0x0000
    Lookup 115 of 117: type 4, flags 0x0000
    Lookup 116 of 117: type 4, flags 0x0000
  Table  3 of 19: LTSH (0x00501d50+0x00000118)
  Table  4 of 19: OS/2 (0x00500480+0x00000060)
  Table  5 of 19: VDMX (0x00501e68+0x000005e0)
  Table  6 of 19: cmap (0x0008d100+0x00473360)
  Table  7 of 19: cvt  (0x00073260+0x000006f8)
  Table  8 of 19: fpgm (0x00006238+0x00000176)
  Table  9 of 19: glyf (0x0000c56c+0x00066cf2)
  Table 10 of 19: hdmx (0x00502448+0x00022e24)
  Table 11 of 19: head (0x00073958+0x00000036)
  Table 12 of 19: hhea (0x00073990+0x00000024)
  Table 13 of 19: hmtx (0x0000013c+0x000060fc)
  Table 14 of 19: loca (0x0000646c+0x00006100)
  Table 15 of 19: maxp (0x00500460+0x00000020)
  Table 16 of 19: name (0x0008c924+0x000007da)
  Table 17 of 19: post (0x000739b4+0x00018f6e)
  Table 18 of 19: prep (0x000063b0+0x000000ba)

also in case it matters

using freetype2, git commit 2cd790d7e2de40dadea5a2a5ffacdfc7e0e56461
fontconfig, git commit 558581c434abf0d96c46cf3bb1454be6806e1ffc

fc caches rebuilt from scratch just now
Comment 5 Behdad Esfahbod 2009-08-27 02:37:49 UTC
Thanks.  No progress yet.  Can you compile with CPPFLAGS=-DHB_DEBUG=20 and attach the crash log?
Comment 6 paul 2009-08-27 03:15:47 UTC
lol, no crash with -DHB_DEBUG=20, here's the log anyhow

% rgbpaint 
Xlib:  extension "RANDR" missing on display ":0.0".
Sanitizer 0x77c6f0 start static hb_blob_t* Sanitizer<Type>::sanitize(hb_blob_t*) [with Type = OpenTypeFontFile]
0x77c6f0 hb_blob_lock (1) -> 0x23e0000
sanitize 0x77c6f0 init [0x23e0000..0x23f018c] (65932 bytes)
SANITIZE(0x23e0000) 1-> bool OpenTypeFontFile::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0x23e0000) 2 -> check [0x23e0000..0x23e0004] (4 bytes) in [0x23e0000..0x23f018c] -> pass
SANITIZE(0x23e0000) 2 -> bool OffsetTable::sanitize(hb_sanitize_context_t*, unsigned int, const void*)
SANITIZE(0x23e0000) 3  -> check [0x23e0000..0x23e000c] (12 bytes) in [0x23e0000..0x23f018c] -> pass
SANITIZE(0x23e000c) 3  -> check [0x23e000c..0x23e011c] (272 bytes) in [0x23e0000..0x23f018c] -> pass
SANITIZE(0x23e000c) 3  -> bool TableDirectory::sanitize(hb_sanitize_context_t*, unsigned int, const void*)
SANITIZE(0x23e000c) 4   -> check [0x23e000c..0x23e001c] (16 bytes) in [0x23e0000..0x23f018c] -> pass
SANITIZE(0x23e000c) 4   -> bool Tag::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0x23e000c) 5    -> check [0x23e000c..0x23e0010] (4 bytes) in [0x23e0000..0x23f018c] -> pass
SANITIZE(0x23eeb70) 4   -> check [0x23eeb70..0x23eebc6] (86 bytes) in [0x23e0000..0x23f018c] -> pass
SANITIZE(0x23e001c) 3  -> bool TableDirectory::sanitize(hb_sanitize_context_t*, unsigned int, const void*)
SANITIZE(0x23e001c) 4   -> check [0x23e001c..0x23e002c] (16 bytes) in [0x23e0000..0x23f018c] -> pass
SANITIZE(0x23e001c) 4   -> bool Tag::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0x23e001c) 5    -> check [0x23e001c..0x23e0020] (4 bytes) in [0x23e0000..0x23f018c] -> pass
SANITIZE(0x23eebc8) 4   -> check [0x23eebc8..0x23eebfe] (54 bytes) in [0x23e0000..0x23f018c] -> pass
SANITIZE(0x23e002c) 3  -> bool TableDirectory::sanitize(hb_sanitize_context_t*, unsigned int, const void*)
SANITIZE(0x23e002c) 4   -> check [0x23e002c..0x23e003c] (16 bytes) in [0x23e0000..0x23f018c] -> pass
SANITIZE(0x23e002c) 4   -> bool Tag::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0x23e002c) 5    -> check [0x23e002c..0x23e0030] (4 bytes) in [0x23e0000..0x23f018c] -> pass
SANITIZE(0x23eb16c) 4   -> check [0x23eb16c..0x23eb4c4] (856 bytes) in [0x23e0000..0x23f018c] -> pass
SANITIZE(0x23e003c) 3  -> bool TableDirectory::sanitize(hb_sanitize_context_t*, unsigned int, const void*)
SANITIZE(0x23e003c) 4   -> check [0x23e003c..0x23e004c] (16 bytes) in [0x23e0000..0x23f018c] -> pass
SANITIZE(0x23e003c) 4   -> bool Tag::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0x23e003c) 5    -> check [0x23e003c..0x23e0040] (4 bytes) in [0x23e0000..0x23f018c] -> pass
SANITIZE(0x23e1efc) 4   -> check [0x23e1efc..0x23e20f8] (508 bytes) in [0x23e0000..0x23f018c] -> pass
SANITIZE(0x23e004c) 3  -> bool TableDirectory::sanitize(hb_sanitize_context_t*, unsigned int, const void*)
SANITIZE(0x23e004c) 4   -> check [0x23e004c..0x23e005c] (16 bytes) in [0x23e0000..0x23f018c] -> pass
SANITIZE(0x23e004c) 4   -> bool Tag::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0x23e004c) 5    -> check [0x23e004c..0x23e0050] (4 bytes) in [0x23e0000..0x23f018c] -> pass
SANITIZE(0x23e2660) 4   -> check [0x23e2660..0x23e26eb] (139 bytes) in [0x23e0000..0x23f018c] -> pass
SANITIZE(0x23e005c) 3  -> bool TableDirectory::sanitize(hb_sanitize_context_t*, unsigned int, const void*)
SANITIZE(0x23e005c) 4   -> check [0x23e005c..0x23e006c] (16 bytes) in [0x23e0000..0x23f018c] -> pass
SANITIZE(0x23e005c) 4   -> bool Tag::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0x23e005c) 5    -> check [0x23e005c..0x23e0060] (4 bytes) in [0x23e0000..0x23f018c] -> pass
SANITIZE(0x23f0148) 4   -> check [0x23f0148..0x23f0154] (12 bytes) in [0x23e0000..0x23f018c] -> pass
SANITIZE(0x23e006c) 3  -> bool TableDirectory::sanitize(hb_sanitize_context_t*, unsigned int, const void*)
SANITIZE(0x23e006c) 4   -> check [0x23e006c..0x23e007c] (16 bytes) in [0x23e0000..0x23f018c] -> pass
SANITIZE(0x23e006c) 4   -> bool Tag::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0x23e006c) 5    -> check [0x23e006c..0x23e0070] (4 bytes) in [0x23e0000..0x23f018c] -> pass
SANITIZE(0x23e26ec) 4   -> check [0x23e26ec..0x23eb16a] (35454 bytes) in [0x23e0000..0x23f018c] -> pass
SANITIZE(0x23e007c) 3  -> bool TableDirectory::sanitize(hb_sanitize_context_t*, unsigned int, const void*)
SANITIZE(0x23e007c) 4   -> check [0x23e007c..0x23e008c] (16 bytes) in [0x23e0000..0x23f018c] -> pass
SANITIZE(0x23e007c) 4   -> bool Tag::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0x23e007c) 5    -> check [0x23e007c..0x23e0080] (4 bytes) in [0x23e0000..0x23f018c] -> pass
SANITIZE(0x23eec00) 4   -> check [0x23eec00..0x23f0148] (5448 bytes) in [0x23e0000..0x23f018c] -> pass
SANITIZE(0x23e008c) 3  -> bool TableDirectory::sanitize(hb_sanitize_context_t*, unsigned int, const void*)
SANITIZE(0x23e008c) 4   -> check [0x23e008c..0x23e009c] (16 bytes) in [0x23e0000..0x23f018c] -> pass
SANITIZE(0x23e008c) 4   -> bool Tag::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0x23e008c) 5    -> check [0x23e008c..0x23e0090] (4 bytes) in [0x23e0000..0x23f018c] -> pass
SANITIZE(0x23f0154) 4   -> check [0x23f0154..0x23f018a] (54 bytes) in [0x23e0000..0x23f018c] -> pass
SANITIZE(0x23e009c) 3  -> bool TableDirectory::sanitize(hb_sanitize_context_t*, unsigned int, const void*)
SANITIZE(0x23e009c) 4   -> check [0x23e009c..0x23e00ac] (16 bytes) in [0x23e0000..0x23f018c] -> pass
SANITIZE(0x23e009c) 4   -> bool Tag::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0x23e009c) 5    -> check [0x23e009c..0x23e00a0] (4 bytes) in [0x23e0000..0x23f018c] -> pass
SANITIZE(0x23eeb4c) 4   -> check [0x23eeb4c..0x23eeb70] (36 bytes) in [0x23e0000..0x23f018c] -> pass
SANITIZE(0x23e00ac) 3  -> bool TableDirectory::sanitize(hb_sanitize_context_t*, unsigned int, const void*)
SANITIZE(0x23e00ac) 4   -> check [0x23e00ac..0x23e00bc] (16 bytes) in [0x23e0000..0x23f018c] -> pass
SANITIZE(0x23e00ac) 4   -> bool Tag::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0x23e00ac) 5    -> check [0x23e00ac..0x23e00b0] (4 bytes) in [0x23e0000..0x23f018c] -> pass
SANITIZE(0x23eb4c4) 4   -> check [0x23eb4c4..0x23eb8f4] (1072 bytes) in [0x23e0000..0x23f018c] -> pass
SANITIZE(0x23e00bc) 3  -> bool TableDirectory::sanitize(hb_sanitize_context_t*, unsigned int, const void*)
SANITIZE(0x23e00bc) 4   -> check [0x23e00bc..0x23e00cc] (16 bytes) in [0x23e0000..0x23f018c] -> pass
SANITIZE(0x23e00bc) 4   -> bool Tag::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0x23e00bc) 5    -> check [0x23e00bc..0x23e00c0] (4 bytes) in [0x23e0000..0x23f018c] -> pass
SANITIZE(0x23ebda0) 4   -> check [0x23ebda0..0x23eeb2a] (11658 bytes) in [0x23e0000..0x23f018c] -> pass
SANITIZE(0x23e00cc) 3  -> bool TableDirectory::sanitize(hb_sanitize_context_t*, unsigned int, const void*)
SANITIZE(0x23e00cc) 4   -> check [0x23e00cc..0x23e00dc] (16 bytes) in [0x23e0000..0x23f018c] -> pass
SANITIZE(0x23e00cc) 4   -> bool Tag::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0x23e00cc) 5    -> check [0x23e00cc..0x23e00d0] (4 bytes) in [0x23e0000..0x23f018c] -> pass
SANITIZE(0x23ebb84) 4   -> check [0x23ebb84..0x23ebd9e] (538 bytes) in [0x23e0000..0x23f018c] -> pass
SANITIZE(0x23e00dc) 3  -> bool TableDirectory::sanitize(hb_sanitize_context_t*, unsigned int, const void*)
SANITIZE(0x23e00dc) 4   -> check [0x23e00dc..0x23e00ec] (16 bytes) in [0x23e0000..0x23f018c] -> pass
SANITIZE(0x23e00dc) 4   -> bool Tag::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0x23e00dc) 5    -> check [0x23e00dc..0x23e00e0] (4 bytes) in [0x23e0000..0x23f018c] -> pass
SANITIZE(0x23eeb2c) 4   -> check [0x23eeb2c..0x23eeb4c] (32 bytes) in [0x23e0000..0x23f018c] -> pass
SANITIZE(0x23e00ec) 3  -> bool TableDirectory::sanitize(hb_sanitize_context_t*, unsigned int, const void*)
SANITIZE(0x23e00ec) 4   -> check [0x23e00ec..0x23e00fc] (16 bytes) in [0x23e0000..0x23f018c] -> pass
SANITIZE(0x23e00ec) 4   -> bool Tag::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0x23e00ec) 5    -> check [0x23e00ec..0x23e00f0] (4 bytes) in [0x23e0000..0x23f018c] -> pass
SANITIZE(0x23e011c) 4   -> check [0x23e011c..0x23e1efb] (7647 bytes) in [0x23e0000..0x23f018c] -> pass
SANITIZE(0x23e00fc) 3  -> bool TableDirectory::sanitize(hb_sanitize_context_t*, unsigned int, const void*)
SANITIZE(0x23e00fc) 4   -> check [0x23e00fc..0x23e010c] (16 bytes) in [0x23e0000..0x23f018c] -> pass
SANITIZE(0x23e00fc) 4   -> bool Tag::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0x23e00fc) 5    -> check [0x23e00fc..0x23e0100] (4 bytes) in [0x23e0000..0x23f018c] -> pass
SANITIZE(0x23eb8f4) 4   -> check [0x23eb8f4..0x23ebb82] (654 bytes) in [0x23e0000..0x23f018c] -> pass
SANITIZE(0x23e010c) 3  -> bool TableDirectory::sanitize(hb_sanitize_context_t*, unsigned int, const void*)
SANITIZE(0x23e010c) 4   -> check [0x23e010c..0x23e011c] (16 bytes) in [0x23e0000..0x23f018c] -> pass
SANITIZE(0x23e010c) 4   -> bool Tag::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0x23e010c) 5    -> check [0x23e010c..0x23e0110] (4 bytes) in [0x23e0000..0x23f018c] -> pass
SANITIZE(0x23e20f8) 4   -> check [0x23e20f8..0x23e2660] (1384 bytes) in [0x23e0000..0x23f018c] -> pass
sanitize 0x77c6f0 fini [0x23e0000..0x23f018c] 0 edit requests
0x77c6f0 hb_blob_unlock (0) -> 0x23e0000
Sanitizer 0x77c6f0 passed static hb_blob_t* Sanitizer<Type>::sanitize(hb_blob_t*) [with Type = OpenTypeFontFile]
0x77c6f0 hb_blob_lock (1) -> 0x23e0000
0x77c6f0 hb_blob_unlock (0) -> 0x23e0000
Sanitizer 0xd1216c start static hb_blob_t* Sanitizer<Type>::sanitize(hb_blob_t*) [with Type = GDEF]
sanitize 0xd1216c init [0x0..0x0] (0 bytes)
SANITIZE(0x0) 1-> bool GDEF::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0x0) 2 -> bool FixedVersion::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0x0) 3  -> check [0x0..0x4] (4 bytes) in [0x0..0x0] -> FAIL
sanitize 0xd1216c fini [0x0..0x0] 0 edit requests
Sanitizer 0xd1216c FAILED static hb_blob_t* Sanitizer<Type>::sanitize(hb_blob_t*) [with Type = GDEF]
0x77c6f0 hb_blob_lock (1) -> 0x23e0000
0x77c6f0 hb_blob_unlock (0) -> 0x23e0000
Sanitizer 0xd1216c start static hb_blob_t* Sanitizer<Type>::sanitize(hb_blob_t*) [with Type = GSUB]
sanitize 0xd1216c init [0x0..0x0] (0 bytes)
SANITIZE(0x0) 1-> bool GSUB::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0x0) 2 -> bool GSUBGPOS::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0x0) 3  -> bool FixedVersion::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0x0) 4   -> check [0x0..0x4] (4 bytes) in [0x0..0x0] -> FAIL
sanitize 0xd1216c fini [0x0..0x0] 0 edit requests
Sanitizer 0xd1216c FAILED static hb_blob_t* Sanitizer<Type>::sanitize(hb_blob_t*) [with Type = GSUB]
0x77c6f0 hb_blob_lock (1) -> 0x23e0000
0x77c6f0 hb_blob_unlock (0) -> 0x23e0000
Sanitizer 0xd1216c start static hb_blob_t* Sanitizer<Type>::sanitize(hb_blob_t*) [with Type = GPOS]
sanitize 0xd1216c init [0x0..0x0] (0 bytes)
SANITIZE(0x0) 1-> bool GPOS::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0x0) 2 -> bool GSUBGPOS::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0x0) 3  -> bool FixedVersion::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0x0) 4   -> check [0x0..0x4] (4 bytes) in [0x0..0x0] -> FAIL
sanitize 0xd1216c fini [0x0..0x0] 0 edit requests
Sanitizer 0xd1216c FAILED static hb_blob_t* Sanitizer<Type>::sanitize(hb_blob_t*) [with Type = GPOS]
Comment 7 Behdad Esfahbod 2009-08-27 04:34:45 UTC
That's cruel!  The app works then?
Comment 8 paul 2009-08-27 04:36:43 UTC
yep, all of them
Comment 9 Behdad Esfahbod 2009-08-27 05:17:24 UTC
Out of things for you to try :(.  Any chance you can give me ssh access to the box?!

If you feel like debugging, basically at the point of crash lookup_count is nonsensical.  You need to debug into hb_ot_layout_feature_get_lookup_indexes() and see why that's happening.

Humm, although I now see a bug that should fix the crash, however the lookup_count is still wrong.
Comment 10 Behdad Esfahbod 2009-08-27 05:22:19 UTC
Pushed the "fix" to master.  However, as I said, there is another bug in there.
Comment 11 Behdad Esfahbod 2009-09-22 14:28:45 UTC
Any progress here by any chance?
Comment 12 paul 2009-09-23 00:48:49 UTC
not really, switched over to a newer compiler, similar results

Start it from the beginning? (y or n) y
Starting program: /opt/local/bin/rgbpaint 
Temporarily disabling shared library breakpoints: 1
Re-enabling shared library breakpoints: 1
Xlib:  extension "RANDR" missing on display ":0.0".
Sanitizer 0x6c8480 start static hb_blob_t* Sanitizer<Type>::sanitize(hb_blob_t*) [with Type = OpenTypeFontFile]
0x6c8480 hb_blob_lock (1) -> 0xdaa000
sanitize 0x6c8480 init [0xdaa000..0xdba18c] (65932 bytes)
SANITIZE(0xdaa000) 1-> bool OpenTypeFontFile::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0xdaa000) 2 -> check [0xdaa000..0xdaa004] (4 bytes) in [0xdaa000..0xdba18c] -> pass
SANITIZE(0xdaa000) 2 -> bool OffsetTable::sanitize(hb_sanitize_context_t*, unsigned int, const void*)
SANITIZE(0xdaa000) 3  -> check [0xdaa000..0xdaa00c] (12 bytes) in [0xdaa000..0xdba18c] -> pass
SANITIZE(0xdaa00c) 3  -> check [0xdaa00c..0xdaa11c] (272 bytes) in [0xdaa000..0xdba18c] -> pass
SANITIZE(0xdaa00c) 3  -> bool TableDirectory::sanitize(hb_sanitize_context_t*, unsigned int, const void*)
SANITIZE(0xdaa00c) 4   -> check [0xdaa00c..0xdaa01c] (16 bytes) in [0xdaa000..0xdba18c] -> pass
SANITIZE(0xdaa00c) 4   -> bool Tag::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0xdaa00c) 5    -> check [0xdaa00c..0xdaa010] (4 bytes) in [0xdaa000..0xdba18c] -> pass
SANITIZE(0xdb8b70) 4   -> check [0xdb8b70..0xdb8bc6] (86 bytes) in [0xdaa000..0xdba18c] -> pass
SANITIZE(0xdaa01c) 3  -> bool TableDirectory::sanitize(hb_sanitize_context_t*, unsigned int, const void*)
SANITIZE(0xdaa01c) 4   -> check [0xdaa01c..0xdaa02c] (16 bytes) in [0xdaa000..0xdba18c] -> pass
SANITIZE(0xdaa01c) 4   -> bool Tag::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0xdaa01c) 5    -> check [0xdaa01c..0xdaa020] (4 bytes) in [0xdaa000..0xdba18c] -> pass
SANITIZE(0xdb8bc8) 4   -> check [0xdb8bc8..0xdb8bfe] (54 bytes) in [0xdaa000..0xdba18c] -> pass
SANITIZE(0xdaa02c) 3  -> bool TableDirectory::sanitize(hb_sanitize_context_t*, unsigned int, const void*)
SANITIZE(0xdaa02c) 4   -> check [0xdaa02c..0xdaa03c] (16 bytes) in [0xdaa000..0xdba18c] -> pass
SANITIZE(0xdaa02c) 4   -> bool Tag::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0xdaa02c) 5    -> check [0xdaa02c..0xdaa030] (4 bytes) in [0xdaa000..0xdba18c] -> pass
SANITIZE(0xdb516c) 4   -> check [0xdb516c..0xdb54c4] (856 bytes) in [0xdaa000..0xdba18c] -> pass
SANITIZE(0xdaa03c) 3  -> bool TableDirectory::sanitize(hb_sanitize_context_t*, unsigned int, const void*)
SANITIZE(0xdaa03c) 4   -> check [0xdaa03c..0xdaa04c] (16 bytes) in [0xdaa000..0xdba18c] -> pass
SANITIZE(0xdaa03c) 4   -> bool Tag::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0xdaa03c) 5    -> check [0xdaa03c..0xdaa040] (4 bytes) in [0xdaa000..0xdba18c] -> pass
SANITIZE(0xdabefc) 4   -> check [0xdabefc..0xdac0f8] (508 bytes) in [0xdaa000..0xdba18c] -> pass
SANITIZE(0xdaa04c) 3  -> bool TableDirectory::sanitize(hb_sanitize_context_t*, unsigned int, const void*)
SANITIZE(0xdaa04c) 4   -> check [0xdaa04c..0xdaa05c] (16 bytes) in [0xdaa000..0xdba18c] -> pass
SANITIZE(0xdaa04c) 4   -> bool Tag::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0xdaa04c) 5    -> check [0xdaa04c..0xdaa050] (4 bytes) in [0xdaa000..0xdba18c] -> pass
SANITIZE(0xdac660) 4   -> check [0xdac660..0xdac6eb] (139 bytes) in [0xdaa000..0xdba18c] -> pass
SANITIZE(0xdaa05c) 3  -> bool TableDirectory::sanitize(hb_sanitize_context_t*, unsigned int, const void*)
SANITIZE(0xdaa05c) 4   -> check [0xdaa05c..0xdaa06c] (16 bytes) in [0xdaa000..0xdba18c] -> pass
SANITIZE(0xdaa05c) 4   -> bool Tag::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0xdaa05c) 5    -> check [0xdaa05c..0xdaa060] (4 bytes) in [0xdaa000..0xdba18c] -> pass
SANITIZE(0xdba148) 4   -> check [0xdba148..0xdba154] (12 bytes) in [0xdaa000..0xdba18c] -> pass
SANITIZE(0xdaa06c) 3  -> bool TableDirectory::sanitize(hb_sanitize_context_t*, unsigned int, const void*)
SANITIZE(0xdaa06c) 4   -> check [0xdaa06c..0xdaa07c] (16 bytes) in [0xdaa000..0xdba18c] -> pass
SANITIZE(0xdaa06c) 4   -> bool Tag::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0xdaa06c) 5    -> check [0xdaa06c..0xdaa070] (4 bytes) in [0xdaa000..0xdba18c] -> pass
SANITIZE(0xdac6ec) 4   -> check [0xdac6ec..0xdb516a] (35454 bytes) in [0xdaa000..0xdba18c] -> pass
SANITIZE(0xdaa07c) 3  -> bool TableDirectory::sanitize(hb_sanitize_context_t*, unsigned int, const void*)
SANITIZE(0xdaa07c) 4   -> check [0xdaa07c..0xdaa08c] (16 bytes) in [0xdaa000..0xdba18c] -> pass
SANITIZE(0xdaa07c) 4   -> bool Tag::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0xdaa07c) 5    -> check [0xdaa07c..0xdaa080] (4 bytes) in [0xdaa000..0xdba18c] -> pass
SANITIZE(0xdb8c00) 4   -> check [0xdb8c00..0xdba148] (5448 bytes) in [0xdaa000..0xdba18c] -> pass
SANITIZE(0xdaa08c) 3  -> bool TableDirectory::sanitize(hb_sanitize_context_t*, unsigned int, const void*)
SANITIZE(0xdaa08c) 4   -> check [0xdaa08c..0xdaa09c] (16 bytes) in [0xdaa000..0xdba18c] -> pass
SANITIZE(0xdaa08c) 4   -> bool Tag::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0xdaa08c) 5    -> check [0xdaa08c..0xdaa090] (4 bytes) in [0xdaa000..0xdba18c] -> pass
SANITIZE(0xdba154) 4   -> check [0xdba154..0xdba18a] (54 bytes) in [0xdaa000..0xdba18c] -> pass
SANITIZE(0xdaa09c) 3  -> bool TableDirectory::sanitize(hb_sanitize_context_t*, unsigned int, const void*)
SANITIZE(0xdaa09c) 4   -> check [0xdaa09c..0xdaa0ac] (16 bytes) in [0xdaa000..0xdba18c] -> pass
SANITIZE(0xdaa09c) 4   -> bool Tag::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0xdaa09c) 5    -> check [0xdaa09c..0xdaa0a0] (4 bytes) in [0xdaa000..0xdba18c] -> pass
SANITIZE(0xdb8b4c) 4   -> check [0xdb8b4c..0xdb8b70] (36 bytes) in [0xdaa000..0xdba18c] -> pass
SANITIZE(0xdaa0ac) 3  -> bool TableDirectory::sanitize(hb_sanitize_context_t*, unsigned int, const void*)
SANITIZE(0xdaa0ac) 4   -> check [0xdaa0ac..0xdaa0bc] (16 bytes) in [0xdaa000..0xdba18c] -> pass
SANITIZE(0xdaa0ac) 4   -> bool Tag::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0xdaa0ac) 5    -> check [0xdaa0ac..0xdaa0b0] (4 bytes) in [0xdaa000..0xdba18c] -> pass
SANITIZE(0xdb54c4) 4   -> check [0xdb54c4..0xdb58f4] (1072 bytes) in [0xdaa000..0xdba18c] -> pass
SANITIZE(0xdaa0bc) 3  -> bool TableDirectory::sanitize(hb_sanitize_context_t*, unsigned int, const void*)
SANITIZE(0xdaa0bc) 4   -> check [0xdaa0bc..0xdaa0cc] (16 bytes) in [0xdaa000..0xdba18c] -> pass
SANITIZE(0xdaa0bc) 4   -> bool Tag::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0xdaa0bc) 5    -> check [0xdaa0bc..0xdaa0c0] (4 bytes) in [0xdaa000..0xdba18c] -> pass
SANITIZE(0xdb5da0) 4   -> check [0xdb5da0..0xdb8b2a] (11658 bytes) in [0xdaa000..0xdba18c] -> pass
SANITIZE(0xdaa0cc) 3  -> bool TableDirectory::sanitize(hb_sanitize_context_t*, unsigned int, const void*)
SANITIZE(0xdaa0cc) 4   -> check [0xdaa0cc..0xdaa0dc] (16 bytes) in [0xdaa000..0xdba18c] -> pass
SANITIZE(0xdaa0cc) 4   -> bool Tag::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0xdaa0cc) 5    -> check [0xdaa0cc..0xdaa0d0] (4 bytes) in [0xdaa000..0xdba18c] -> pass
SANITIZE(0xdb5b84) 4   -> check [0xdb5b84..0xdb5d9e] (538 bytes) in [0xdaa000..0xdba18c] -> pass
SANITIZE(0xdaa0dc) 3  -> bool TableDirectory::sanitize(hb_sanitize_context_t*, unsigned int, const void*)
SANITIZE(0xdaa0dc) 4   -> check [0xdaa0dc..0xdaa0ec] (16 bytes) in [0xdaa000..0xdba18c] -> pass
SANITIZE(0xdaa0dc) 4   -> bool Tag::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0xdaa0dc) 5    -> check [0xdaa0dc..0xdaa0e0] (4 bytes) in [0xdaa000..0xdba18c] -> pass
SANITIZE(0xdb8b2c) 4   -> check [0xdb8b2c..0xdb8b4c] (32 bytes) in [0xdaa000..0xdba18c] -> pass
SANITIZE(0xdaa0ec) 3  -> bool TableDirectory::sanitize(hb_sanitize_context_t*, unsigned int, const void*)
SANITIZE(0xdaa0ec) 4   -> check [0xdaa0ec..0xdaa0fc] (16 bytes) in [0xdaa000..0xdba18c] -> pass
SANITIZE(0xdaa0ec) 4   -> bool Tag::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0xdaa0ec) 5    -> check [0xdaa0ec..0xdaa0f0] (4 bytes) in [0xdaa000..0xdba18c] -> pass
SANITIZE(0xdaa11c) 4   -> check [0xdaa11c..0xdabefb] (7647 bytes) in [0xdaa000..0xdba18c] -> pass
SANITIZE(0xdaa0fc) 3  -> bool TableDirectory::sanitize(hb_sanitize_context_t*, unsigned int, const void*)
SANITIZE(0xdaa0fc) 4   -> check [0xdaa0fc..0xdaa10c] (16 bytes) in [0xdaa000..0xdba18c] -> pass
SANITIZE(0xdaa0fc) 4   -> bool Tag::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0xdaa0fc) 5    -> check [0xdaa0fc..0xdaa100] (4 bytes) in [0xdaa000..0xdba18c] -> pass
SANITIZE(0xdb58f4) 4   -> check [0xdb58f4..0xdb5b82] (654 bytes) in [0xdaa000..0xdba18c] -> pass
SANITIZE(0xdaa10c) 3  -> bool TableDirectory::sanitize(hb_sanitize_context_t*, unsigned int, const void*)
SANITIZE(0xdaa10c) 4   -> check [0xdaa10c..0xdaa11c] (16 bytes) in [0xdaa000..0xdba18c] -> pass
SANITIZE(0xdaa10c) 4   -> bool Tag::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0xdaa10c) 5    -> check [0xdaa10c..0xdaa110] (4 bytes) in [0xdaa000..0xdba18c] -> pass
SANITIZE(0xdac0f8) 4   -> check [0xdac0f8..0xdac660] (1384 bytes) in [0xdaa000..0xdba18c] -> pass
sanitize 0x6c8480 fini [0xdaa000..0xdba18c] 0 edit requests
0x6c8480 hb_blob_unlock (0) -> 0xdaa000
Sanitizer 0x6c8480 passed static hb_blob_t* Sanitizer<Type>::sanitize(hb_blob_t*) [with Type = OpenTypeFontFile]
0x6c8480 hb_blob_lock (1) -> 0xdaa000
0x6c8480 hb_blob_unlock (0) -> 0xdaa000
Sanitizer 0xe6b048 start static hb_blob_t* Sanitizer<Type>::sanitize(hb_blob_t*) [with Type = GDEF]
sanitize 0xe6b048 init [0x0..0x0] (0 bytes)
SANITIZE(0x0) 1-> bool GDEF::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0x0) 2 -> bool FixedVersion::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0x0) 3  -> check [0x0..0x4] (4 bytes) in [0x0..0x0] -> FAIL
sanitize 0xe6b048 fini [0x0..0x0] 0 edit requests
Sanitizer 0xe6b048 FAILED static hb_blob_t* Sanitizer<Type>::sanitize(hb_blob_t*) [with Type = GDEF]
0x6c8480 hb_blob_lock (1) -> 0xdaa000
0x6c8480 hb_blob_unlock (0) -> 0xdaa000
Sanitizer 0xe6b048 start static hb_blob_t* Sanitizer<Type>::sanitize(hb_blob_t*) [with Type = GSUB]
sanitize 0xe6b048 init [0x0..0x0] (0 bytes)
SANITIZE(0x0) 1-> bool GSUB::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0x0) 2 -> bool GSUBGPOS::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0x0) 3  -> bool FixedVersion::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0x0) 4   -> check [0x0..0x4] (4 bytes) in [0x0..0x0] -> FAIL
sanitize 0xe6b048 fini [0x0..0x0] 0 edit requests
Sanitizer 0xe6b048 FAILED static hb_blob_t* Sanitizer<Type>::sanitize(hb_blob_t*) [with Type = GSUB]
0x6c8480 hb_blob_lock (1) -> 0xdaa000
0x6c8480 hb_blob_unlock (0) -> 0xdaa000
Sanitizer 0xe6b048 start static hb_blob_t* Sanitizer<Type>::sanitize(hb_blob_t*) [with Type = GPOS]
sanitize 0xe6b048 init [0x0..0x0] (0 bytes)
SANITIZE(0x0) 1-> bool GPOS::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0x0) 2 -> bool GSUBGPOS::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0x0) 3  -> bool FixedVersion::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0x0) 4   -> check [0x0..0x4] (4 bytes) in [0x0..0x0] -> FAIL
sanitize 0xe6b048 fini [0x0..0x0] 0 edit requests
Sanitizer 0xe6b048 FAILED static hb_blob_t* Sanitizer<Type>::sanitize(hb_blob_t*) [with Type = GPOS]

Breakpoint 1, hb_ot_layout_feature_get_lookup_indexes (face=0x6c84e0, table_tag=1196643650, feature_index=31747, lookup_count=0xbfffd6f8, lookup_indexes=0xbfffd6fc) at /Source/pango/pango/pango/opentype/hb-ot-layout.cc:507
507       const GSUBGPOS &g = get_gsubgpos_table (face, table_tag);
(gdb) bt full
  • #0 hb_ot_layout_feature_get_lookup_indexes
    at /Source/pango/pango/pango/opentype/hb-ot-layout.cc line 507

Comment 13 Behdad Esfahbod 2009-09-24 20:05:29 UTC
When you say new compiler, what exactly is that?  And what was the old compiler?
Comment 14 paul 2009-09-24 20:20:31 UTC
used gcc 3.3 originally, then gcc 4.2 this last time
Comment 15 Behdad Esfahbod 2009-09-28 21:27:19 UTC
*** Bug 596654 has been marked as a duplicate of this bug. ***
Comment 16 Behdad Esfahbod 2009-09-28 22:56:48 UTC
*** Bug 596674 has been marked as a duplicate of this bug. ***
Comment 17 Behdad Esfahbod 2009-09-28 22:59:00 UTC
*** Bug 596675 has been marked as a duplicate of this bug. ***
Comment 18 Behdad Esfahbod 2009-09-28 23:08:59 UTC
*** Bug 596675 has been marked as a duplicate of this bug. ***
Comment 19 Behdad Esfahbod 2009-09-28 23:16:51 UTC
*** Bug 596674 has been marked as a duplicate of this bug. ***
Comment 20 Behdad Esfahbod 2009-09-28 23:17:17 UTC
*** Bug 596654 has been marked as a duplicate of this bug. ***
Comment 21 Behdad Esfahbod 2009-09-28 23:18:11 UTC
Has someone tried compiling with upstream gcc, as opposed to Apple gcc?
Comment 22 Jeremy Huddleston 2009-09-28 23:19:00 UTC
Nope, this has nothing to do with PPC.  This is gcc-4.2.1:

i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5651)
Copyright (C) 2007 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

This is happening with both i386 and x86_64 code.
Comment 23 Jeremy Huddleston 2009-09-28 23:19:55 UTC
Created attachment 144211 [details]
30 second sample of xchat during this problem
Comment 24 paul 2009-10-07 04:37:14 UTC
ok, using vanilla gcc 4.4.1, -DHB_DEBUG=20
seems to work

% rgbpaint 
Xlib:  extension "RANDR" missing on display ":0.0".
Sanitizer 0x6c54b0 start static hb_blob_t* Sanitizer<Type>::sanitize(hb_blob_t*) [with Type = OpenTypeFontFile]
0x6c54b0 hb_blob_lock (1) -> 0xf34000
sanitize 0x6c54b0 init [0xf34000..0xf4418c] (65932 bytes)
SANITIZE(0xf34000) 1-> bool OpenTypeFontFile::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0xf34000) 2 -> check [0xf34000..0xf34004] (4 bytes) in [0xf34000..0xf4418c] -> pass
SANITIZE(0xf34000) 2 -> bool OffsetTable::sanitize(hb_sanitize_context_t*, unsigned int, const void*)
SANITIZE(0xf34000) 3  -> check [0xf34000..0xf3400c] (12 bytes) in [0xf34000..0xf4418c] -> pass
SANITIZE(0xf3400c) 3  -> check [0xf3400c..0xf3411c] (272 bytes) in [0xf34000..0xf4418c] -> pass
SANITIZE(0xf3400c) 3  -> bool TableDirectory::sanitize(hb_sanitize_context_t*, unsigned int, const void*)
SANITIZE(0xf3400c) 4   -> check [0xf3400c..0xf3401c] (16 bytes) in [0xf34000..0xf4418c] -> pass
SANITIZE(0xf3400c) 4   -> bool Tag::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0xf3400c) 5    -> check [0xf3400c..0xf34010] (4 bytes) in [0xf34000..0xf4418c] -> pass
SANITIZE(0xf42b70) 4   -> check [0xf42b70..0xf42bc6] (86 bytes) in [0xf34000..0xf4418c] -> pass
SANITIZE(0xf3401c) 3  -> bool TableDirectory::sanitize(hb_sanitize_context_t*, unsigned int, const void*)
SANITIZE(0xf3401c) 4   -> check [0xf3401c..0xf3402c] (16 bytes) in [0xf34000..0xf4418c] -> pass
SANITIZE(0xf3401c) 4   -> bool Tag::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0xf3401c) 5    -> check [0xf3401c..0xf34020] (4 bytes) in [0xf34000..0xf4418c] -> pass
SANITIZE(0xf42bc8) 4   -> check [0xf42bc8..0xf42bfe] (54 bytes) in [0xf34000..0xf4418c] -> pass
SANITIZE(0xf3402c) 3  -> bool TableDirectory::sanitize(hb_sanitize_context_t*, unsigned int, const void*)
SANITIZE(0xf3402c) 4   -> check [0xf3402c..0xf3403c] (16 bytes) in [0xf34000..0xf4418c] -> pass
SANITIZE(0xf3402c) 4   -> bool Tag::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0xf3402c) 5    -> check [0xf3402c..0xf34030] (4 bytes) in [0xf34000..0xf4418c] -> pass
SANITIZE(0xf3f16c) 4   -> check [0xf3f16c..0xf3f4c4] (856 bytes) in [0xf34000..0xf4418c] -> pass
SANITIZE(0xf3403c) 3  -> bool TableDirectory::sanitize(hb_sanitize_context_t*, unsigned int, const void*)
SANITIZE(0xf3403c) 4   -> check [0xf3403c..0xf3404c] (16 bytes) in [0xf34000..0xf4418c] -> pass
SANITIZE(0xf3403c) 4   -> bool Tag::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0xf3403c) 5    -> check [0xf3403c..0xf34040] (4 bytes) in [0xf34000..0xf4418c] -> pass
SANITIZE(0xf35efc) 4   -> check [0xf35efc..0xf360f8] (508 bytes) in [0xf34000..0xf4418c] -> pass
SANITIZE(0xf3404c) 3  -> bool TableDirectory::sanitize(hb_sanitize_context_t*, unsigned int, const void*)
SANITIZE(0xf3404c) 4   -> check [0xf3404c..0xf3405c] (16 bytes) in [0xf34000..0xf4418c] -> pass
SANITIZE(0xf3404c) 4   -> bool Tag::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0xf3404c) 5    -> check [0xf3404c..0xf34050] (4 bytes) in [0xf34000..0xf4418c] -> pass
SANITIZE(0xf36660) 4   -> check [0xf36660..0xf366eb] (139 bytes) in [0xf34000..0xf4418c] -> pass
SANITIZE(0xf3405c) 3  -> bool TableDirectory::sanitize(hb_sanitize_context_t*, unsigned int, const void*)
SANITIZE(0xf3405c) 4   -> check [0xf3405c..0xf3406c] (16 bytes) in [0xf34000..0xf4418c] -> pass
SANITIZE(0xf3405c) 4   -> bool Tag::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0xf3405c) 5    -> check [0xf3405c..0xf34060] (4 bytes) in [0xf34000..0xf4418c] -> pass
SANITIZE(0xf44148) 4   -> check [0xf44148..0xf44154] (12 bytes) in [0xf34000..0xf4418c] -> pass
SANITIZE(0xf3406c) 3  -> bool TableDirectory::sanitize(hb_sanitize_context_t*, unsigned int, const void*)
SANITIZE(0xf3406c) 4   -> check [0xf3406c..0xf3407c] (16 bytes) in [0xf34000..0xf4418c] -> pass
SANITIZE(0xf3406c) 4   -> bool Tag::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0xf3406c) 5    -> check [0xf3406c..0xf34070] (4 bytes) in [0xf34000..0xf4418c] -> pass
SANITIZE(0xf366ec) 4   -> check [0xf366ec..0xf3f16a] (35454 bytes) in [0xf34000..0xf4418c] -> pass
SANITIZE(0xf3407c) 3  -> bool TableDirectory::sanitize(hb_sanitize_context_t*, unsigned int, const void*)
SANITIZE(0xf3407c) 4   -> check [0xf3407c..0xf3408c] (16 bytes) in [0xf34000..0xf4418c] -> pass
SANITIZE(0xf3407c) 4   -> bool Tag::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0xf3407c) 5    -> check [0xf3407c..0xf34080] (4 bytes) in [0xf34000..0xf4418c] -> pass
SANITIZE(0xf42c00) 4   -> check [0xf42c00..0xf44148] (5448 bytes) in [0xf34000..0xf4418c] -> pass
SANITIZE(0xf3408c) 3  -> bool TableDirectory::sanitize(hb_sanitize_context_t*, unsigned int, const void*)
SANITIZE(0xf3408c) 4   -> check [0xf3408c..0xf3409c] (16 bytes) in [0xf34000..0xf4418c] -> pass
SANITIZE(0xf3408c) 4   -> bool Tag::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0xf3408c) 5    -> check [0xf3408c..0xf34090] (4 bytes) in [0xf34000..0xf4418c] -> pass
SANITIZE(0xf44154) 4   -> check [0xf44154..0xf4418a] (54 bytes) in [0xf34000..0xf4418c] -> pass
SANITIZE(0xf3409c) 3  -> bool TableDirectory::sanitize(hb_sanitize_context_t*, unsigned int, const void*)
SANITIZE(0xf3409c) 4   -> check [0xf3409c..0xf340ac] (16 bytes) in [0xf34000..0xf4418c] -> pass
SANITIZE(0xf3409c) 4   -> bool Tag::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0xf3409c) 5    -> check [0xf3409c..0xf340a0] (4 bytes) in [0xf34000..0xf4418c] -> pass
SANITIZE(0xf42b4c) 4   -> check [0xf42b4c..0xf42b70] (36 bytes) in [0xf34000..0xf4418c] -> pass
SANITIZE(0xf340ac) 3  -> bool TableDirectory::sanitize(hb_sanitize_context_t*, unsigned int, const void*)
SANITIZE(0xf340ac) 4   -> check [0xf340ac..0xf340bc] (16 bytes) in [0xf34000..0xf4418c] -> pass
SANITIZE(0xf340ac) 4   -> bool Tag::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0xf340ac) 5    -> check [0xf340ac..0xf340b0] (4 bytes) in [0xf34000..0xf4418c] -> pass
SANITIZE(0xf3f4c4) 4   -> check [0xf3f4c4..0xf3f8f4] (1072 bytes) in [0xf34000..0xf4418c] -> pass
SANITIZE(0xf340bc) 3  -> bool TableDirectory::sanitize(hb_sanitize_context_t*, unsigned int, const void*)
SANITIZE(0xf340bc) 4   -> check [0xf340bc..0xf340cc] (16 bytes) in [0xf34000..0xf4418c] -> pass
SANITIZE(0xf340bc) 4   -> bool Tag::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0xf340bc) 5    -> check [0xf340bc..0xf340c0] (4 bytes) in [0xf34000..0xf4418c] -> pass
SANITIZE(0xf3fda0) 4   -> check [0xf3fda0..0xf42b2a] (11658 bytes) in [0xf34000..0xf4418c] -> pass
SANITIZE(0xf340cc) 3  -> bool TableDirectory::sanitize(hb_sanitize_context_t*, unsigned int, const void*)
SANITIZE(0xf340cc) 4   -> check [0xf340cc..0xf340dc] (16 bytes) in [0xf34000..0xf4418c] -> pass
SANITIZE(0xf340cc) 4   -> bool Tag::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0xf340cc) 5    -> check [0xf340cc..0xf340d0] (4 bytes) in [0xf34000..0xf4418c] -> pass
SANITIZE(0xf3fb84) 4   -> check [0xf3fb84..0xf3fd9e] (538 bytes) in [0xf34000..0xf4418c] -> pass
SANITIZE(0xf340dc) 3  -> bool TableDirectory::sanitize(hb_sanitize_context_t*, unsigned int, const void*)
SANITIZE(0xf340dc) 4   -> check [0xf340dc..0xf340ec] (16 bytes) in [0xf34000..0xf4418c] -> pass
SANITIZE(0xf340dc) 4   -> bool Tag::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0xf340dc) 5    -> check [0xf340dc..0xf340e0] (4 bytes) in [0xf34000..0xf4418c] -> pass
SANITIZE(0xf42b2c) 4   -> check [0xf42b2c..0xf42b4c] (32 bytes) in [0xf34000..0xf4418c] -> pass
SANITIZE(0xf340ec) 3  -> bool TableDirectory::sanitize(hb_sanitize_context_t*, unsigned int, const void*)
SANITIZE(0xf340ec) 4   -> check [0xf340ec..0xf340fc] (16 bytes) in [0xf34000..0xf4418c] -> pass
SANITIZE(0xf340ec) 4   -> bool Tag::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0xf340ec) 5    -> check [0xf340ec..0xf340f0] (4 bytes) in [0xf34000..0xf4418c] -> pass
SANITIZE(0xf3411c) 4   -> check [0xf3411c..0xf35efb] (7647 bytes) in [0xf34000..0xf4418c] -> pass
SANITIZE(0xf340fc) 3  -> bool TableDirectory::sanitize(hb_sanitize_context_t*, unsigned int, const void*)
SANITIZE(0xf340fc) 4   -> check [0xf340fc..0xf3410c] (16 bytes) in [0xf34000..0xf4418c] -> pass
SANITIZE(0xf340fc) 4   -> bool Tag::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0xf340fc) 5    -> check [0xf340fc..0xf34100] (4 bytes) in [0xf34000..0xf4418c] -> pass
SANITIZE(0xf3f8f4) 4   -> check [0xf3f8f4..0xf3fb82] (654 bytes) in [0xf34000..0xf4418c] -> pass
SANITIZE(0xf3410c) 3  -> bool TableDirectory::sanitize(hb_sanitize_context_t*, unsigned int, const void*)
SANITIZE(0xf3410c) 4   -> check [0xf3410c..0xf3411c] (16 bytes) in [0xf34000..0xf4418c] -> pass
SANITIZE(0xf3410c) 4   -> bool Tag::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0xf3410c) 5    -> check [0xf3410c..0xf34110] (4 bytes) in [0xf34000..0xf4418c] -> pass
SANITIZE(0xf360f8) 4   -> check [0xf360f8..0xf36660] (1384 bytes) in [0xf34000..0xf4418c] -> pass
sanitize 0x6c54b0 fini [0xf34000..0xf4418c] 0 edit requests
0x6c54b0 hb_blob_unlock (0) -> 0xf34000
Sanitizer 0x6c54b0 passed static hb_blob_t* Sanitizer<Type>::sanitize(hb_blob_t*) [with Type = OpenTypeFontFile]
0x6c54b0 hb_blob_lock (1) -> 0xf34000
0x6c54b0 hb_blob_unlock (0) -> 0xf34000
Sanitizer 0xe4d044 start static hb_blob_t* Sanitizer<Type>::sanitize(hb_blob_t*) [with Type = GDEF]
sanitize 0xe4d044 init [0x0..0x0] (0 bytes)
SANITIZE(0x0) 1-> bool GDEF::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0x0) 2 -> bool FixedVersion::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0x0) 3  -> check [0x0..0x4] (4 bytes) in [0x0..0x0] -> FAIL
sanitize 0xe4d044 fini [0x0..0x0] 0 edit requests
Sanitizer 0xe4d044 FAILED static hb_blob_t* Sanitizer<Type>::sanitize(hb_blob_t*) [with Type = GDEF]
0x6c54b0 hb_blob_lock (1) -> 0xf34000
0x6c54b0 hb_blob_unlock (0) -> 0xf34000
Sanitizer 0xe4d044 start static hb_blob_t* Sanitizer<Type>::sanitize(hb_blob_t*) [with Type = GSUB]
sanitize 0xe4d044 init [0x0..0x0] (0 bytes)
SANITIZE(0x0) 1-> bool GSUB::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0x0) 2 -> bool GSUBGPOS::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0x0) 3  -> bool FixedVersion::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0x0) 4   -> check [0x0..0x4] (4 bytes) in [0x0..0x0] -> FAIL
sanitize 0xe4d044 fini [0x0..0x0] 0 edit requests
Sanitizer 0xe4d044 FAILED static hb_blob_t* Sanitizer<Type>::sanitize(hb_blob_t*) [with Type = GSUB]
0x6c54b0 hb_blob_lock (1) -> 0xf34000
0x6c54b0 hb_blob_unlock (0) -> 0xf34000
Sanitizer 0xe4d044 start static hb_blob_t* Sanitizer<Type>::sanitize(hb_blob_t*) [with Type = GPOS]
sanitize 0xe4d044 init [0x0..0x0] (0 bytes)
SANITIZE(0x0) 1-> bool GPOS::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0x0) 2 -> bool GSUBGPOS::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0x0) 3  -> bool FixedVersion::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0x0) 4   -> check [0x0..0x4] (4 bytes) in [0x0..0x0] -> FAIL
sanitize 0xe4d044 fini [0x0..0x0] 0 edit requests
Sanitizer 0xe4d044 FAILED static hb_blob_t* Sanitizer<Type>::sanitize(hb_blob_t*) [with Type = GPOS]

will post without debug define set later (probably should have done that first)
Comment 25 paul 2009-10-07 06:45:26 UTC
works fine without HB_DEBUG set using gcc 4.4.1, so now i'm gonna compile vanilla gcc 4.2.1 and see how that works out
Comment 26 Behdad Esfahbod 2009-10-07 06:47:10 UTC
Thanks for trying.
Comment 27 paul 2009-10-08 08:51:35 UTC
works with vanilla gcc 4.2.1
and thank you for developing this et al
Comment 28 Behdad Esfahbod 2009-10-08 21:18:25 UTC
So, looks like only happening with Apple gcc?  Any suggestions as to how to proceed?
Comment 29 Jeremy Huddleston 2009-10-08 21:44:37 UTC
Try to find a reduced test case, then http://bugreport.apple.com
Comment 30 paul 2009-10-09 02:52:09 UTC
actually, this is beyond just apple's gcc, you can't compile current pango in cygwin with their gcc 3.4.4 iirc
Comment 31 Behdad Esfahbod 2009-10-09 05:56:44 UTC
(In reply to comment #30)
> actually, this is beyond just apple's gcc, you can't compile current pango in
> cygwin with their gcc 3.4.4 iirc

We don't support gcc 3.x.  The error you get compiling with that compiler is very common if you Google it.  And unless someone figures out what it actually means and how to fix it, that compiler remains unsupported.

That doesn't have anything to do with the fact that the code that we have so far no reason to think being wrong misbehaves with Apple gcc only.
Comment 32 paul 2009-12-05 00:42:55 UTC
pango as of commit 1a6d89b217fb259f91f8661351336cec651c55e3 compiles and installs and seems to work for me
Comment 33 Behdad Esfahbod 2009-12-05 06:34:11 UTC
Interesting.  Care to git-bisect or something?
Comment 34 paul 2009-12-10 20:48:44 UTC
i or somethinged, and it looks to be commit 29010456474a512c4193f2fec583c2723f3e2806 that finally gets things going again
works for me with apple's gcc 4.2.1
Comment 35 Jeremy Huddleston 2009-12-10 21:36:00 UTC
I just tested 1.26.1 + the mentioned commit (http://git.gnome.org/cgit/pango/patch/?id=29010456474a512c4193f2fec583c2723f3e2806) ... the problem persists.
Comment 36 Jeremy Huddleston 2009-12-10 21:55:02 UTC
The bug is still present.  I just tested 1.26.1 tarball + all 6 commits that have been pushed to master since then.

Paul, how are you testing your bug?  What system are you on?  What architecture are you targeting? 

Here: SnowLeopard Unibody MBP, architectures tested i386 and x86_64
Comment 37 paul 2009-12-11 01:25:13 UTC
building with gcc version 4.2.1 (Apple Inc. build 5646), macosx 10.2, ppc
Comment 38 paul 2010-02-04 00:52:25 UTC
i'm able to reproduce it not working again, however, it seems all it takes for that to happen is to build it in a different location
environment, libraries and headers, all the same, but it just doesn't work
i guess i'll mention too to gum things up, the way i got it to work and how i normally build is by using the coreosmakefiles

not gonna post the full HB_DEBUG=20 output because i doubt it'll do much good since it pretty much just repeats until i ctrl+c it

% rgbpaint 
Xlib:  extension "RANDR" missing on display ":0.0".
Sanitizer 0x2687e0 start static hb_blob_t* Sanitizer<Type>::sanitize(hb_blob_t*) [with Type = OpenTypeFontFile]
0x2687e0 hb_blob_lock (1) -> 0xee1000
sanitize 0x2687e0 init [0xee1000..0xef118c] (65932 bytes)
SANITIZE(0xee1000) 1-> bool OpenTypeFontFile::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0xee1000) 2 -> check [0xee1000..0xee1004] (4 bytes) in [0xee1000..0xef118c] -> pass
SANITIZE(0xee1000) 2 -> bool OffsetTable::sanitize(hb_sanitize_context_t*, unsigned int, const void*)
SANITIZE(0xee1000) 3  -> check [0xee1000..0xee101c] (28 bytes) in [0xee1000..0xef118c] -> pass
SANITIZE(0xee100c) 3  -> check [0xee100c..0xee111c] (272 bytes) in [0xee1000..0xef118c] -> pass
SANITIZE(0xee100c) 3  -> bool TableDirectory::sanitize(hb_sanitize_context_t*, unsigned int, const void*)
SANITIZE(0xee100c) 4   -> check [0xee100c..0xee101c] (16 bytes) in [0xee1000..0xef118c] -> pass
SANITIZE(0xee100c) 4   -> bool Tag::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0xee100c) 5    -> check [0xee100c..0xee1010] (4 bytes) in [0xee1000..0xef118c] -> pass
SANITIZE(0xeefb70) 4   -> check [0xeefb70..0xeefbc6] (86 bytes) in [0xee1000..0xef118c] -> pass
SANITIZE(0xee101c) 3  -> bool TableDirectory::sanitize(hb_sanitize_context_t*, unsigned int, const void*)
SANITIZE(0xee101c) 4   -> check [0xee101c..0xee102c] (16 bytes) in [0xee1000..0xef118c] -> pass
SANITIZE(0xee101c) 4   -> bool Tag::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0xee101c) 5    -> check [0xee101c..0xee1020] (4 bytes) in [0xee1000..0xef118c] -> pass
SANITIZE(0xeefbc8) 4   -> check [0xeefbc8..0xeefbfe] (54 bytes) in [0xee1000..0xef118c] -> pass
SANITIZE(0xee102c) 3  -> bool TableDirectory::sanitize(hb_sanitize_context_t*, unsigned int, const void*)
SANITIZE(0xee102c) 4   -> check [0xee102c..0xee103c] (16 bytes) in [0xee1000..0xef118c] -> pass
SANITIZE(0xee102c) 4   -> bool Tag::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0xee102c) 5    -> check [0xee102c..0xee1030] (4 bytes) in [0xee1000..0xef118c] -> pass
SANITIZE(0xeec16c) 4   -> check [0xeec16c..0xeec4c4] (856 bytes) in [0xee1000..0xef118c] -> pass
SANITIZE(0xee103c) 3  -> bool TableDirectory::sanitize(hb_sanitize_context_t*, unsigned int, const void*)
SANITIZE(0xee103c) 4   -> check [0xee103c..0xee104c] (16 bytes) in [0xee1000..0xef118c] -> pass
SANITIZE(0xee103c) 4   -> bool Tag::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0xee103c) 5    -> check [0xee103c..0xee1040] (4 bytes) in [0xee1000..0xef118c] -> pass
SANITIZE(0xee2efc) 4   -> check [0xee2efc..0xee30f8] (508 bytes) in [0xee1000..0xef118c] -> pass
SANITIZE(0xee104c) 3  -> bool TableDirectory::sanitize(hb_sanitize_context_t*, unsigned int, const void*)
SANITIZE(0xee104c) 4   -> check [0xee104c..0xee105c] (16 bytes) in [0xee1000..0xef118c] -> pass
SANITIZE(0xee104c) 4   -> bool Tag::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0xee104c) 5    -> check [0xee104c..0xee1050] (4 bytes) in [0xee1000..0xef118c] -> pass
SANITIZE(0xee3660) 4   -> check [0xee3660..0xee36eb] (139 bytes) in [0xee1000..0xef118c] -> pass
SANITIZE(0xee105c) 3  -> bool TableDirectory::sanitize(hb_sanitize_context_t*, unsigned int, const void*)
SANITIZE(0xee105c) 4   -> check [0xee105c..0xee106c] (16 bytes) in [0xee1000..0xef118c] -> pass
SANITIZE(0xee105c) 4   -> bool Tag::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0xee105c) 5    -> check [0xee105c..0xee1060] (4 bytes) in [0xee1000..0xef118c] -> pass
SANITIZE(0xef1148) 4   -> check [0xef1148..0xef1154] (12 bytes) in [0xee1000..0xef118c] -> pass
SANITIZE(0xee106c) 3  -> bool TableDirectory::sanitize(hb_sanitize_context_t*, unsigned int, const void*)
SANITIZE(0xee106c) 4   -> check [0xee106c..0xee107c] (16 bytes) in [0xee1000..0xef118c] -> pass
SANITIZE(0xee106c) 4   -> bool Tag::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0xee106c) 5    -> check [0xee106c..0xee1070] (4 bytes) in [0xee1000..0xef118c] -> pass
SANITIZE(0xee36ec) 4   -> check [0xee36ec..0xeec16a] (35454 bytes) in [0xee1000..0xef118c] -> pass
SANITIZE(0xee107c) 3  -> bool TableDirectory::sanitize(hb_sanitize_context_t*, unsigned int, const void*)
SANITIZE(0xee107c) 4   -> check [0xee107c..0xee108c] (16 bytes) in [0xee1000..0xef118c] -> pass
SANITIZE(0xee107c) 4   -> bool Tag::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0xee107c) 5    -> check [0xee107c..0xee1080] (4 bytes) in [0xee1000..0xef118c] -> pass
SANITIZE(0xeefc00) 4   -> check [0xeefc00..0xef1148] (5448 bytes) in [0xee1000..0xef118c] -> pass
SANITIZE(0xee108c) 3  -> bool TableDirectory::sanitize(hb_sanitize_context_t*, unsigned int, const void*)
SANITIZE(0xee108c) 4   -> check [0xee108c..0xee109c] (16 bytes) in [0xee1000..0xef118c] -> pass
SANITIZE(0xee108c) 4   -> bool Tag::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0xee108c) 5    -> check [0xee108c..0xee1090] (4 bytes) in [0xee1000..0xef118c] -> pass
SANITIZE(0xef1154) 4   -> check [0xef1154..0xef118a] (54 bytes) in [0xee1000..0xef118c] -> pass
SANITIZE(0xee109c) 3  -> bool TableDirectory::sanitize(hb_sanitize_context_t*, unsigned int, const void*)
SANITIZE(0xee109c) 4   -> check [0xee109c..0xee10ac] (16 bytes) in [0xee1000..0xef118c] -> pass
SANITIZE(0xee109c) 4   -> bool Tag::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0xee109c) 5    -> check [0xee109c..0xee10a0] (4 bytes) in [0xee1000..0xef118c] -> pass
SANITIZE(0xeefb4c) 4   -> check [0xeefb4c..0xeefb70] (36 bytes) in [0xee1000..0xef118c] -> pass
SANITIZE(0xee10ac) 3  -> bool TableDirectory::sanitize(hb_sanitize_context_t*, unsigned int, const void*)
SANITIZE(0xee10ac) 4   -> check [0xee10ac..0xee10bc] (16 bytes) in [0xee1000..0xef118c] -> pass
SANITIZE(0xee10ac) 4   -> bool Tag::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0xee10ac) 5    -> check [0xee10ac..0xee10b0] (4 bytes) in [0xee1000..0xef118c] -> pass
SANITIZE(0xeec4c4) 4   -> check [0xeec4c4..0xeec8f4] (1072 bytes) in [0xee1000..0xef118c] -> pass
SANITIZE(0xee10bc) 3  -> bool TableDirectory::sanitize(hb_sanitize_context_t*, unsigned int, const void*)
SANITIZE(0xee10bc) 4   -> check [0xee10bc..0xee10cc] (16 bytes) in [0xee1000..0xef118c] -> pass
SANITIZE(0xee10bc) 4   -> bool Tag::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0xee10bc) 5    -> check [0xee10bc..0xee10c0] (4 bytes) in [0xee1000..0xef118c] -> pass
SANITIZE(0xeecda0) 4   -> check [0xeecda0..0xeefb2a] (11658 bytes) in [0xee1000..0xef118c] -> pass
SANITIZE(0xee10cc) 3  -> bool TableDirectory::sanitize(hb_sanitize_context_t*, unsigned int, const void*)
SANITIZE(0xee10cc) 4   -> check [0xee10cc..0xee10dc] (16 bytes) in [0xee1000..0xef118c] -> pass
SANITIZE(0xee10cc) 4   -> bool Tag::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0xee10cc) 5    -> check [0xee10cc..0xee10d0] (4 bytes) in [0xee1000..0xef118c] -> pass
SANITIZE(0xeecb84) 4   -> check [0xeecb84..0xeecd9e] (538 bytes) in [0xee1000..0xef118c] -> pass
SANITIZE(0xee10dc) 3  -> bool TableDirectory::sanitize(hb_sanitize_context_t*, unsigned int, const void*)
SANITIZE(0xee10dc) 4   -> check [0xee10dc..0xee10ec] (16 bytes) in [0xee1000..0xef118c] -> pass
SANITIZE(0xee10dc) 4   -> bool Tag::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0xee10dc) 5    -> check [0xee10dc..0xee10e0] (4 bytes) in [0xee1000..0xef118c] -> pass
SANITIZE(0xeefb2c) 4   -> check [0xeefb2c..0xeefb4c] (32 bytes) in [0xee1000..0xef118c] -> pass
SANITIZE(0xee10ec) 3  -> bool TableDirectory::sanitize(hb_sanitize_context_t*, unsigned int, const void*)
SANITIZE(0xee10ec) 4   -> check [0xee10ec..0xee10fc] (16 bytes) in [0xee1000..0xef118c] -> pass
SANITIZE(0xee10ec) 4   -> bool Tag::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0xee10ec) 5    -> check [0xee10ec..0xee10f0] (4 bytes) in [0xee1000..0xef118c] -> pass
SANITIZE(0xee111c) 4   -> check [0xee111c..0xee2efb] (7647 bytes) in [0xee1000..0xef118c] -> pass
SANITIZE(0xee10fc) 3  -> bool TableDirectory::sanitize(hb_sanitize_context_t*, unsigned int, const void*)
SANITIZE(0xee10fc) 4   -> check [0xee10fc..0xee110c] (16 bytes) in [0xee1000..0xef118c] -> pass
SANITIZE(0xee10fc) 4   -> bool Tag::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0xee10fc) 5    -> check [0xee10fc..0xee1100] (4 bytes) in [0xee1000..0xef118c] -> pass
SANITIZE(0xeec8f4) 4   -> check [0xeec8f4..0xeecb82] (654 bytes) in [0xee1000..0xef118c] -> pass
SANITIZE(0xee110c) 3  -> bool TableDirectory::sanitize(hb_sanitize_context_t*, unsigned int, const void*)
SANITIZE(0xee110c) 4   -> check [0xee110c..0xee111c] (16 bytes) in [0xee1000..0xef118c] -> pass
SANITIZE(0xee110c) 4   -> bool Tag::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0xee110c) 5    -> check [0xee110c..0xee1110] (4 bytes) in [0xee1000..0xef118c] -> pass
SANITIZE(0xee30f8) 4   -> check [0xee30f8..0xee3660] (1384 bytes) in [0xee1000..0xef118c] -> pass
sanitize 0x2687e0 fini [0xee1000..0xef118c] 0 edit requests
0x2687e0 hb_blob_unlock (0) -> 0xee1000
Sanitizer 0x2687e0 passed static hb_blob_t* Sanitizer<Type>::sanitize(hb_blob_t*) [with Type = OpenTypeFontFile]
0x2687e0 hb_blob_lock (1) -> 0xee1000
0x2687e0 hb_blob_unlock (0) -> 0xee1000
Sanitizer 0x678048 start static hb_blob_t* Sanitizer<Type>::sanitize(hb_blob_t*) [with Type = GDEF]
sanitize 0x678048 init [0x0..0x0] (0 bytes)
SANITIZE(0x0) 1-> bool GDEF::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0x0) 2 -> bool FixedVersion::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0x0) 3  -> check [0x0..0x4] (4 bytes) in [0x0..0x0] -> FAIL
sanitize 0x678048 fini [0x0..0x0] 0 edit requests
Sanitizer 0x678048 FAILED static hb_blob_t* Sanitizer<Type>::sanitize(hb_blob_t*) [with Type = GDEF]
0x2687e0 hb_blob_lock (1) -> 0xee1000
0x2687e0 hb_blob_unlock (0) -> 0xee1000
Sanitizer 0x678048 start static hb_blob_t* Sanitizer<Type>::sanitize(hb_blob_t*) [with Type = GSUB]
sanitize 0x678048 init [0x0..0x0] (0 bytes)
SANITIZE(0x0) 1-> bool GSUB::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0x0) 2 -> bool GSUBGPOS::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0x0) 3  -> bool FixedVersion::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0x0) 4   -> check [0x0..0x4] (4 bytes) in [0x0..0x0] -> FAIL
sanitize 0x678048 fini [0x0..0x0] 0 edit requests
Sanitizer 0x678048 FAILED static hb_blob_t* Sanitizer<Type>::sanitize(hb_blob_t*) [with Type = GSUB]
0x2687e0 hb_blob_lock (1) -> 0xee1000
0x2687e0 hb_blob_unlock (0) -> 0xee1000
Sanitizer 0x678048 start static hb_blob_t* Sanitizer<Type>::sanitize(hb_blob_t*) [with Type = GPOS]
sanitize 0x678048 init [0x0..0x0] (0 bytes)
SANITIZE(0x0) 1-> bool GPOS::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0x0) 2 -> bool GSUBGPOS::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0x0) 3  -> bool FixedVersion::sanitize(hb_sanitize_context_t*, unsigned int)
SANITIZE(0x0) 4   -> check [0x0..0x4] (4 bytes) in [0x0..0x0] -> FAIL
sanitize 0x678048 fini [0x0..0x0] 0 edit requests
Sanitizer 0x678048 FAILED static hb_blob_t* Sanitizer<Type>::sanitize(hb_blob_t*) [with Type = GPOS]
APPLY(0x6558b3) 1-> bool SubstLookupSubTable::apply(hb_ot_layout_context_t*, hb_buffer_t*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) const
APPLY(0x6559ab) 1-> bool SubstLookupSubTable::apply(hb_ot_layout_context_t*, hb_buffer_t*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) const
APPLY(0x655fc0) 1-> bool SubstLookupSubTable::apply(hb_ot_layout_context_t*, hb_buffer_t*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) const
APPLY(0x655084) 1-> bool SubstLookupSubTable::apply(hb_ot_layout_context_t*, hb_buffer_t*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) const
APPLY(0x6549bf) 1-> bool SubstLookupSubTable::apply(hb_ot_layout_context_t*, hb_buffer_t*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) const
APPLY(0x655ebe) 1-> bool SubstLookupSubTable::apply(hb_ot_layout_context_t*, hb_buffer_t*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) const
APPLY(0x6561b5) 1-> bool SubstLookupSubTable::apply(hb_ot_layout_context_t*, hb_buffer_t*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) const
APPLY(0x654ec0) 1-> bool SubstLookupSubTable::apply(hb_ot_layout_context_t*, hb_buffer_t*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) const
APPLY(0x65524c) 1-> bool SubstLookupSubTable::apply(hb_ot_layout_context_t*, hb_buffer_t*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) const
APPLY(0x653aad) 1-> bool SubstLookupSubTable::apply(hb_ot_layout_context_t*, hb_buffer_t*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) const
APPLY(0x6558b3) 1-> bool SubstLookupSubTable::apply(hb_ot_layout_context_t*, hb_buffer_t*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) const
APPLY(0x65594c) 1-> bool SubstLookupSubTable::apply(hb_ot_layout_context_t*, hb_buffer_t*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) const
APPLY(0x0) 1-> bool SubstLookupSubTable::apply(hb_ot_layout_context_t*, hb_buffer_t*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) const
APPLY(0x655a6c) 1-> bool SubstLookupSubTable::apply(hb_ot_layout_context_t*, hb_buffer_t*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) const
APPLY(0x650b89) 1-> bool SubstLookupSubTable::apply(hb_ot_layout_context_t*, hb_buffer_t*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) const
APPLY(0x650a9a) 1-> bool SubstLookupSubTable::apply(hb_ot_layout_context_t*, hb_buffer_t*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) const
APPLY(0x653f98) 1-> bool SubstLookupSubTable::apply(hb_ot_layout_context_t*, hb_buffer_t*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) const
APPLY(0x65364c) 1-> bool SubstLookupSubTable::apply(hb_ot_layout_context_t*, hb_buffer_t*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) const
APPLY(0x0) 1-> bool SubstLookupSubTable::apply(hb_ot_layout_context_t*, hb_buffer_t*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) const
APPLY(0x655aad) 1-> bool SubstLookupSubTable::apply(hb_ot_layout_context_t*, hb_buffer_t*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) const
APPLY(0x6558b3) 1-> bool SubstLookupSubTable::apply(hb_ot_layout_context_t*, hb_buffer_t*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) const
APPLY(0x6559ab) 1-> bool SubstLookupSubTable::apply(hb_ot_layout_context_t*, hb_buffer_t*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) const
APPLY(0x655fc0) 1-> bool SubstLookupSubTable::apply(hb_ot_layout_context_t*, hb_buffer_t*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) const
APPLY(0x655084) 1-> bool SubstLookupSubTable::apply(hb_ot_layout_context_t*, hb_buffer_t*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) const
APPLY(0x6549bf) 1-> bool SubstLookupSubTable::apply(hb_ot_layout_context_t*, hb_buffer_t*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) const
APPLY(0x655ebe) 1-> bool SubstLookupSubTable::apply(hb_ot_layout_context_t*, hb_buffer_t*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) const
APPLY(0x6556b1) 1-> bool SubstLookupSubTable::apply(hb_ot_layout_context_t*, hb_buffer_t*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) const
APPLY(0x65584c) 1-> bool SubstLookupSubTable::apply(hb_ot_layout_context_t*, hb_buffer_t*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) const
APPLY(0x0) 1-> bool SubstLookupSubTable::apply(hb_ot_layout_context_t*, hb_buffer_t*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) const
APPLY(0x655a6c) 1-> bool SubstLookupSubTable::apply(hb_ot_layout_context_t*, hb_buffer_t*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) const
APPLY(0x650b89) 1-> bool SubstLookupSubTable::apply(hb_ot_layout_context_t*, hb_buffer_t*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) const
APPLY(0x650a9a) 1-> bool SubstLookupSubTable::apply(hb_ot_layout_context_t*, hb_buffer_t*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) const
APPLY(0x653f98) 1-> bool SubstLookupSubTable::apply(hb_ot_layout_context_t*, hb_buffer_t*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) const
APPLY(0x65366c) 1-> bool SubstLookupSubTable::apply(hb_ot_layout_context_t*, hb_buffer_t*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) const
APPLY(0x6566c8) 1-> bool SubstLookupSubTable::apply(hb_ot_layout_context_t*, hb_buffer_t*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) const
APPLY(0x650ab9) 1-> bool SubstLookupSubTable::apply(hb_ot_layout_context_t*, hb_buffer_t*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) const
APPLY(0x654bc4) 1-> bool SubstLookupSubTable::apply(hb_ot_layout_context_t*, hb_buffer_t*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) const
APPLY(0x650a89) 1-> bool SubstLookupSubTable::apply(hb_ot_layout_context_t*, hb_buffer_t*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) const
APPLY(0x65276c) 1-> bool SubstLookupSubTable::apply(hb_ot_layout_context_t*, hb_buffer_t*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) const
APPLY(0x651a4c) 1-> bool SubstLookupSubTable::apply(hb_ot_layout_context_t*, hb_buffer_t*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) const
APPLY(0x0) 1-> bool SubstLookupSubTable::apply(hb_ot_layout_context_t*, hb_buffer_t*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) const
APPLY(0x653aad) 1-> bool SubstLookupSubTable::apply(hb_ot_layout_context_t*, hb_buffer_t*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) const
APPLY(0x6558b3) 1-> bool SubstLookupSubTable::apply(hb_ot_layout_context_t*, hb_buffer_t*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) const
APPLY(0x655992) 1-> bool SubstLookupSubTable::apply(hb_ot_layout_context_t*, hb_buffer_t*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) const
APPLY(0x654d92) 1-> bool SubstLookupSubTable::apply(hb_ot_layout_context_t*, hb_buffer_t*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) const
APPLY(0x6559ba) 1-> bool SubstLookupSubTable::apply(hb_ot_layout_context_t*, hb_buffer_t*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) const
APPLY(0x655e4c) 1-> bool SubstLookupSubTable::apply(hb_ot_layout_context_t*, hb_buffer_t*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) const
APPLY(0x655aad) 1-> bool SubstLookupSubTable::apply(hb_ot_layout_context_t*, hb_buffer_t*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) const
APPLY(0x655ec0) 1-> bool SubstLookupSubTable::apply(hb_ot_layout_context_t*, hb_buffer_t*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) const
APPLY(0x654fbe) 1-> bool SubstLookupSubTable::apply(hb_ot_layout_context_t*, hb_buffer_t*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) const
APPLY(0x65584c) 1-> bool SubstLookupSubTable::apply(hb_ot_layout_context_t*, hb_buffer_t*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) const
APPLY(0x653aad) 1-> bool SubstLookupSubTable::apply(hb_ot_layout_context_t*, hb_buffer_t*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) const
APPLY(0x655ec0) 1-> bool SubstLookupSubTable::apply(hb_ot_layout_context_t*, hb_buffer_t*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) const
APPLY(0x654fbe) 1-> bool SubstLookupSubTable::apply(hb_ot_layout_context_t*, hb_buffer_t*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) const
APPLY(0x65584c) 1-> bool SubstLookupSubTable::apply(hb_ot_layout_context_t*, hb_buffer_t*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) const
APPLY(0x653eb4) 1-> bool SubstLookupSubTable::apply(hb_ot_layout_context_t*, hb_buffer_t*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) const
APPLY(0x654f6c) 1-> bool SubstLookupSubTable::apply(hb_ot_layout_context_t*, hb_buffer_t*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) const
APPLY(0x6550bb) 1-> bool SubstLookupSubTable::apply(hb_ot_layout_context_t*, hb_buffer_t*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) const
APPLY(0x6558c0) 1-> bool SubstLookupSubTable::apply(hb_ot_layout_context_t*, hb_buffer_t*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) const
APPLY(0x654dbb) 1-> bool SubstLookupSubTable::apply(hb_ot_layout_context_t*, hb_buffer_t*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) const
APPLY(0x6558b2) 1-> bool SubstLookupSubTable::apply(hb_ot_layout_context_t*, hb_buffer_t*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) const
APPLY(0x6553b3) 1-> bool SubstLookupSubTable::apply(hb_ot_layout_context_t*, hb_buffer_t*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) const
APPLY(0x650abc) 1-> bool SubstLookupSubTable::apply(hb_ot_layout_context_t*, hb_buffer_t*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) const
APPLY(0x654bc0) 1-> bool SubstLookupSubTable::apply(hb_ot_layout_context_t*, hb_buffer_t*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) const
APPLY(0x655eb1) 1-> bool SubstLookupSubTable::apply(hb_ot_layout_context_t*, hb_buffer_t*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) const
APPLY(0x655cba) 1-> bool SubstLookupSubTable::apply(hb_ot_layout_context_t*, hb_buffer_t*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) const
APPLY(0x650ab2) 1-> bool SubstLookupSubTable::apply(hb_ot_layout_context_t*, hb_buffer_t*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) const
APPLY(0x6559be) 1-> bool SubstLookupSubTable::apply(hb_ot_layout_context_t*, hb_buffer_t*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) const
APPLY(0x650ac0) 1-> bool SubstLookupSubTable::apply(hb_ot_layout_context_t*, hb_buffer_t*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) const
APPLY(0x6552b5) 1-> bool SubstLookupSubTable::apply(hb_ot_layout_context_t*, hb_buffer_t*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) const
APPLY(0x655d6c) 1-> bool SubstLookupSubTable::apply(hb_ot_layout_context_t*, hb_buffer_t*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) const
APPLY(0x6550bb) 1-> bool SubstLookupSubTable::apply(hb_ot_layout_context_t*, hb_buffer_t*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) const
APPLY(0x6558c0) 1-> bool SubstLookupSubTable::apply(hb_ot_layout_context_t*, hb_buffer_t*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) const
APPLY(0x0) 1-> bool SubstLookupSubTable::apply(hb_ot_layout_context_t*, hb_buffer_t*, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) const
Comment 39 paul 2010-02-04 02:13:28 UTC
this seems to be a VPATH problem
works when i let the coreosmakefiles set SRCROOT, which is also set to VPATH
doesn't work when i override SRCROOT
doesn't work when i build in the srcdir and VPATH doesn't even get set
Comment 40 paul 2010-02-06 20:45:23 UTC
i compile most everything without optimization, but now i realize that some optimization flags enabled by at least -O2 allows me to compile a working libpangoft2 no matter what i do
i'll keep reconfiguring to determine what
Comment 41 Jeremy Huddleston 2010-02-06 22:47:48 UTC
Make sure you 'make clean' after changing your CFLAGS and checkout.  It sounds like some things might not be getting remade...
Comment 42 paul 2010-02-06 23:26:19 UTC
i'm anal, srcdir is always pristine and i never use the same builddir twice
Comment 43 paul 2010-02-16 12:43:13 UTC
built on an essentially stock macosx 10.2.8 chroot (aside from cctools-758, gcc-5646.1, and libtool 1.5.27a)
libpangoft2 builds fine, doesn't work, unless libharfbuzz is built with optimizations -O3, -Os, or -Oz while leaving no optimization on the other objects produces a functional dylib
also of note perhaps, the chroot has stock c run time objects (csu-45), whereas my main environment uses newer ones (csu-58.1.1 built with gcc 3.3 as opposed to gcc 3.1), when i swapped the csu objects out for ones built with 3.1, i was able to reproduce failures
also ignore the VPATH comment, idk what's doing that
also holla back if you test this plz
Comment 44 Matthias Scheler 2010-02-21 23:58:42 UTC
Created attachment 154347 [details] [review]
Fix for bug 593240

This is just a a work around. The code should be rewritten.
Comment 45 Matthias Scheler 2010-02-21 23:58:43 UTC
Created attachment 154348 [details] [review]
Fix for bug 593240

This is just a a work around. The code should be rewritten.
Comment 46 Matthias Scheler 2010-02-22 00:10:54 UTC
This is *not* a bug in Apple's tool chain. This problem is caused by very questionable and apparently not portable C++ code:

/* Null objects */

/* Global nul-content Null pool.  Enlarge as necessary. */
static const char NullPool[32] = "";

/* Generic template for nul-content sizeof-sized Null objects. */
template <typename Type>
struct Null
{
  ASSERT_STATIC (sizeof (Type) <= sizeof (NullPool));
  static inline const Type &get () { return CONST_CAST (Type, *NullPool, 0); }
};

I'm sorry but I'm lost for words. This code is wrong in so many ways. The particular problem which this causes under Mac OS X seems to be related to the lack of alignment of the "NullPool" array. Changing the definition slightly to ...

static const void *NullPool[32];

... avoids the endless CPU loop on my system (with gcc version 4.2.1 (Apple Inc. build 5646) (dot 1)). The important difference might be that Mac OS X doesn't use ELF as the binary format. Please consider to replace this code.

I've  tested this change under Mac OS 10.6.2 and NetBSD/amd 5.0_STABLE (which does use ELF) and it didn't cause any problems for XChat and Wireshark.
Comment 47 Behdad Esfahbod 2010-02-22 02:29:31 UTC
Sure, Matthias, the alignment for the NullPoll can be improved.  That's easy.  But if you see any other problems with that code, just speak up.  Otherwise it will remain as is.
Comment 48 Behdad Esfahbod 2010-02-22 21:04:16 UTC
Committed.  Please reopen if problem persists.

commit ab8d5f6df3171197a7d3913bdf2195bca90fe6de
Author: Behdad Esfahbod <behdad@behdad.org>
Date:   Mon Feb 22 16:03:15 2010 -0500

    Ensure proper alignment of NullPool
    
    Bug 593240 - (pangoosx) Crash / infinite loop with Mac OS X
Comment 49 Behdad Esfahbod 2010-02-22 21:10:20 UTC
Actually thinking about it again, I think the change is unnecessary and there may be a bug somewhere else.  That whole code is written in a way to not require any alignment at all.  If it's not working, something's broken.
Comment 50 Behdad Esfahbod 2010-02-22 21:21:32 UTC
Reopening.
Comment 51 Behdad Esfahbod 2010-03-16 08:26:56 UTC
Ok, I believe I've fixed this bug.  Please test and report ASAP since I need to make the release for GNOME 2.30 really soon!

    [HB] Fix the mystery bug!
    
    A couple bugs joined forces to exhibit the mystery behavior of
    crashes / infinite loops on OS X / wrong kerning / invalid memory
    access.  Pooh!
    
    The bugs were involved:
    
      - Wrong pointer math with ValueRecord in PairPosFormat1
    
      - Fallout from avoiding flex arrays, code not correctly updated
        to remove sizeof() usage.
    
    We strictly never use sizeof() directly now.  And the PairPos code
    is cleaned up.  Should fix them all.  Bugs are:
    
      Bug 605655 - Pango 1.26.2 introduces kerning bug
      Bug 611229 - Pango reads from uninitialized memory
      Bug 593240 - (pangoosx) Crash / infinite loop with Mac OS X
    
    We were also doing wrong math converting Device adjustments to
    hb_position_t.  Fallout from FreeType days.  Should shift 16, not
    6.  Fixed that too.
    
    There's still another bug: we don't sanitize Device records
    referenced from value records.  Fixing that also.
Comment 52 Matthias Scheler 2010-03-16 09:18:31 UTC
Can you please provide a patch file with these changes for pango 1.26.2?
Comment 54 Jeremy Huddleston 2010-03-16 19:27:15 UTC
This fix alone does not solve the problem.  I tested 1.26.2 with the patch applied.
Comment 55 Behdad Esfahbod 2010-03-16 20:10:56 UTC
Reopening then.  Anyone can figure out what font is causing this (use pmap or cat /proc/PID/maps on the process and "grep -i font" or something)?  I'd have much more luck with the font in hand.
Comment 56 Jeremy Huddleston 2010-03-16 20:32:12 UTC
It's just spinning using pango-view with no options.  I'll get you more info.
Comment 57 Jeremy Huddleston 2010-03-16 20:59:26 UTC
Created attachment 156304 [details]
30s sample of pango-view with 1.26.2 + the pointer math fix

Here is a sample using 1.26.2 and the pointer arithmetic fix.

Here's a single-point backtrace as well:

(gdb) bt
  • #0 SubstLookup::apply_once
  • #1 SubstLookup::apply_string
  • #2 GSUB::substitute_lookup
  • #3 hb_ot_layout_substitute_lookup
  • #4 _pango_ot_info_substitute
    at pango-ot-info.c line 559
  • #5 pango_ot_ruleset_substitute
    at pango-ot-ruleset.c line 488
  • #6 basic_engine_shape
    at basic-fc.c line 211
  • #7 _pango_engine_shape_shape
    at pango-engine.c line 71
  • #8 pango_shape
    at shape.c line 55
  • #9 shape_run
    at pango-layout.c line 3120
  • #10 process_item
    at pango-layout.c line 3231
  • #11 process_line
    at pango-layout.c line 3526
  • #12 pango_layout_check_lines
    at pango-layout.c line 3847
  • #13 pango_layout_get_extents_internal
    at pango-layout.c line 2431
  • #14 pango_layout_get_extents
    at pango-layout.c line 2611
  • #15 pango_layout_get_pixel_extents
    at pango-layout.c line 2635
  • #16 output_body
    at viewer-render.c line 210
  • #17 do_output
    at viewer-render.c line 308
  • #18 pangocairo_view_render
    at viewer-pangocairo.c line 336
  • #19 main
    at viewer-main.c line 63

Comment 58 Jeremy Huddleston 2010-03-16 21:06:35 UTC
Oh yeah... and /usr/X11/lib/X11/fonts/TTF/VeraSe.ttf is the only font opened.
Comment 59 Behdad Esfahbod 2012-08-25 20:34:51 UTC
I'm fairly sure this has already been fixed in HarfBuzz, since we have not received new reports on Firefox about it.  But reopen if still present.