<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>24592</bug_id>
          
          <creation_ts>2009-03-13 15:54:24 -0700</creation_ts>
          <short_desc>[GTK] Crash in FcPatternHash</short_desc>
          <delta_ts>2009-03-17 10:26:21 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Xan Lopez">xan.lopez</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>zecke</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>113727</commentid>
    <comment_count>0</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2009-03-13 15:54:24 -0700</bug_when>
    <thetext>Wasn&apos;t running debug image, so only have this. Happens when closing a web view, can&apos;t reproduce at will:

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0xb56e7700 (LWP 29433)]
0xb5c8c501 in FcPatternHash () from /usr/lib/libfontconfig.so.1
(gdb) bt
#0  0xb5c8c501 in FcPatternHash () from /usr/lib/libfontconfig.so.1
#1  0xb7742d00 in WebCore::FontCache::purgeInactiveFontData () from /opt/gnome2/lib/libwebkit-1.0.so.2
#2  0xb7743dec in WebCore::FontCache::releaseFontData () from /opt/gnome2/lib/libwebkit-1.0.so.2
#3  0xb77472c9 in WebCore::FontFallbackList::releaseFontData () from /opt/gnome2/lib/libwebkit-1.0.so.2
#4  0xb7741b70 in WebCore::Font::~Font () from /opt/gnome2/lib/libwebkit-1.0.so.2
#5  0xb7840228 in WebCore::StyleInheritedData::~StyleInheritedData () from /opt/gnome2/lib/libwebkit-1.0.so.2
#6  0xb783aa20 in WebCore::RenderStyle::~RenderStyle () from /opt/gnome2/lib/libwebkit-1.0.so.2
#7  0xb77f84b8 in WebCore::RenderObject::~RenderObject () from /opt/gnome2/lib/libwebkit-1.0.so.2
#8  0xb77bd875 in WebCore::RenderBoxModelObject::~RenderBoxModelObject () from /opt/gnome2/lib/libwebkit-1.0.so.2
#9  0xb77b56e5 in WebCore::RenderBox::~RenderBox () from /opt/gnome2/lib/libwebkit-1.0.so.2
#10 0xb77a4d2a in WebCore::RenderBlock::~RenderBlock () from /opt/gnome2/lib/libwebkit-1.0.so.2
#11 0xb77f3753 in WebCore::RenderObject::arenaDelete () from /opt/gnome2/lib/libwebkit-1.0.so.2
#12 0xb77f3843 in WebCore::RenderObject::destroy () from /opt/gnome2/lib/libwebkit-1.0.so.2
#13 0xb77bd7c1 in WebCore::RenderBoxModelObject::destroy () from /opt/gnome2/lib/libwebkit-1.0.so.2
#14 0xb77b6cd2 in WebCore::RenderBox::destroy () from /opt/gnome2/lib/libwebkit-1.0.so.2
#15 0xb77a129d in WebCore::RenderBlock::destroy () from /opt/gnome2/lib/libwebkit-1.0.so.2
#16 0xb754d369 in WebCore::Node::detach () from /opt/gnome2/lib/libwebkit-1.0.so.2
#17 0xb7518a4e in WebCore::ContainerNode::detach () from /opt/gnome2/lib/libwebkit-1.0.so.2
#18 0xb753dbd3 in WebCore::Element::detach () from /opt/gnome2/lib/libwebkit-1.0.so.2
#19 0xb7518a3b in WebCore::ContainerNode::detach () from /opt/gnome2/lib/libwebkit-1.0.so.2
#20 0xb753dbd3 in WebCore::Element::detach () from /opt/gnome2/lib/libwebkit-1.0.so.2
#21 0xb7518a3b in WebCore::ContainerNode::detach () from /opt/gnome2/lib/libwebkit-1.0.so.2
#22 0xb753dbd3 in WebCore::Element::detach () from /opt/gnome2/lib/libwebkit-1.0.so.2
#23 0xb7518a3b in WebCore::ContainerNode::detach () from /opt/gnome2/lib/libwebkit-1.0.so.2
#24 0xb753dbd3 in WebCore::Element::detach () from /opt/gnome2/lib/libwebkit-1.0.so.2
#25 0xb7518a3b in WebCore::ContainerNode::detach () from /opt/gnome2/lib/libwebkit-1.0.so.2
#26 0xb753dbd3 in WebCore::Element::detach () from /opt/gnome2/lib/libwebkit-1.0.so.2
#27 0xb7518a3b in WebCore::ContainerNode::detach () from /opt/gnome2/lib/libwebkit-1.0.so.2
#28 0xb7520d05 in WebCore::Document::detach () from /opt/gnome2/lib/libwebkit-1.0.so.2
#29 0xb76f9884 in WebCore::Frame::setView () from /opt/gnome2/lib/libwebkit-1.0.so.2
#30 0xb76f990f in WebCore::Frame::createView () from /opt/gnome2/lib/libwebkit-1.0.so.2
#31 0xb7434da5 in WebKit::FrameLoaderClient::transitionToCommittedForNewPage ()
   from /opt/gnome2/lib/libwebkit-1.0.so.2
#32 0xb76a4b46 in WebCore::FrameLoader::transitionToCommitted () from /opt/gnome2/lib/libwebkit-1.0.so.2
#33 0xb76a545e in WebCore::FrameLoader::commitProvisionalLoad () from /opt/gnome2/lib/libwebkit-1.0.so.2
#34 0xb768448d in WebCore::DocumentLoader::commitIfReady () from /opt/gnome2/lib/libwebkit-1.0.so.2
#35 0xb7684916 in WebCore::DocumentLoader::commitLoad () from /opt/gnome2/lib/libwebkit-1.0.so.2
---Type &lt;return&gt; to continue, or q &lt;return&gt; to quit---
#36 0xb7693175 in WebCore::FrameLoader::receivedData () from /opt/gnome2/lib/libwebkit-1.0.so.2
#37 0xb76ac1b6 in WebCore::MainResourceLoader::addData () from /opt/gnome2/lib/libwebkit-1.0.so.2
#38 0xb76b4139 in WebCore::ResourceLoader::didReceiveData () from /opt/gnome2/lib/libwebkit-1.0.so.2
#39 0xb76ac401 in WebCore::MainResourceLoader::didReceiveData () from /opt/gnome2/lib/libwebkit-1.0.so.2
#40 0xb76b3a48 in WebCore::ResourceLoader::didReceiveData () from /opt/gnome2/lib/libwebkit-1.0.so.2
#41 0xb784c755 in WebCore::gotChunkCallback () from /opt/gnome2/lib/libwebkit-1.0.so.2
#42 0xb5bb852a in IA__g_cclosure_marshal_VOID__BOXED (closure=0x9424910, return_value=0x0, n_param_values=2, 
    param_values=0x8c00cf0, invocation_hint=0xbfc83dfc, marshal_data=0x93ef068) at gmarshal.c:566
#43 0xb5ba9fdb in IA__g_closure_invoke (closure=0x9424910, return_value=0x0, n_param_values=2, 
    param_values=0x8c00cf0, invocation_hint=0xbfc83dfc) at gclosure.c:767
#44 0xb5bc16e7 in signal_emit_unlocked_R (node=0x8a4ae28, detail=0, instance=0x93ef068, emission_return=0x0, 
    instance_and_params=0x8c00cf0) at gsignal.c:3244
#45 0xb5bc2d5b in IA__g_signal_emit_valist (instance=0x93ef068, signal_id=374, detail=0, 
    var_args=0xbfc83fa0 &quot;��\026�\034q\031�\030`ȿ%�\026�h�&gt;\t8\236Y\b&quot;) at gsignal.c:2977
#46 0xb5bc3206 in IA__g_signal_emit (instance=0x93ef068, signal_id=374, detail=0) at gsignal.c:3034
#47 0xb616a316 in soup_message_got_chunk (msg=0x93ef068, chunk=0x8599e38) at soup-message.c:775
#48 0xb616f325 in read_body_chunk (msg=0x93ef068) at soup-message-io.c:313
#49 0xb616fa15 in io_read (sock=0x9b5cc18, msg=0x93ef068) at soup-message-io.c:785
#50 0xb5bb7e84 in IA__g_cclosure_marshal_VOID__VOID (closure=0x8e8a508, return_value=0x0, n_param_values=1, 
    param_values=0x8599c80, invocation_hint=0xbfc8620c, marshal_data=0xb616f6e0) at gmarshal.c:77
#51 0xb5ba9fdb in IA__g_closure_invoke (closure=0x8e8a508, return_value=0x0, n_param_values=1, 
    param_values=0x8599c80, invocation_hint=0xbfc8620c) at gclosure.c:767
#52 0xb5bc16e7 in signal_emit_unlocked_R (node=0x8a169c0, detail=0, instance=0x9b5cc18, emission_return=0x0, 
    instance_and_params=0x8599c80) at gsignal.c:3244
#53 0xb5bc2d5b in IA__g_signal_emit_valist (instance=0x9b5cc18, signal_id=382, detail=0, 
    var_args=0xbfc863ac &quot;�B���B��h\035\034\n�cȿ����`�\032\n\001&quot;) at gsignal.c:2977
#54 0xb5bc3206 in IA__g_signal_emit (instance=0x9b5cc18, signal_id=382, detail=0) at gsignal.c:3034
#55 0xb617a402 in socket_read_watch (chan=0xa1aa460, cond=&lt;value optimized out&gt;, user_data=0x9b5cc18)
    at soup-socket.c:1074
#56 0xb5afa2bd in g_io_unix_dispatch (source=0xa1c1d68, callback=0xb617a3b0 &lt;socket_read_watch&gt;, 
    user_data=0x9b5cc18) at giounix.c:162
#57 0xb5ac30c8 in IA__g_main_context_dispatch (context=0x835e838) at gmain.c:1814
#58 0xb5ac662b in g_main_context_iterate (context=0x835e838, block=1, dispatch=1, self=0x8336480) at gmain.c:2448
#59 0xb5ac6afa in IA__g_main_loop_run (loop=0x83899d0) at gmain.c:2656
#60 0xb628b409 in IA__gtk_main () at gtkmain.c:1205
#61 0x08048c86 in main (argc=Cannot access memory at address 0x4f0682
) at ../../../src/ephy-main.c:781
(gdb) r</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>113805</commentid>
    <comment_count>1</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2009-03-15 00:42:19 -0700</bug_when>
    <thetext>Just had this again, and it&apos;s crashing when trying to access the first pattern element in here:

FcChar32
FcPatternHash (const FcPattern *p)
{
    int		i;
    FcChar32	h = 0;
    FcPatternElt    *pe = FcPatternElts(p);

    for (i = 0; i &lt; p-&gt;num; i++)
    {
	h = (((h &lt;&lt; 1) | (h &gt;&gt; 31)) ^ 
	     pe[i].object ^ // &lt;--- crash
	     FcValueListHash (FcPatternEltValues(&amp;pe[i])));
    }

so it seems we are passing an already deleted pattern to the function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>113806</commentid>
    <comment_count>2</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2009-03-15 00:45:54 -0700</bug_when>
    <thetext>(gdb) bt
#0  IA__FcPatternHash (p=0x95c3468) at fcpat.c:432
#1  0xb6ad668e in WebCore::FontPlatformData::hash (this=0x931f188) at ../../WebCore/platform/graphics/gtk/FontPlatformData.h:91
#2  0xb6ad66d3 in WebCore::FontDataCacheKeyHash::hash (platformData=@0x931f188) at ../../WebCore/platform/graphics/FontCache.cpp:223
#3  0xb6ad66e6 in WTF::IdentityHashTranslator&lt;WebCore::FontPlatformData, std::pair&lt;WebCore::FontPlatformData, std::pair&lt;WebCore::SimpleFontData*, unsigned int&gt; &gt;, WebCore::FontDataCacheKeyHash&gt;::hash (key=@0x931f188) at ../../JavaScriptCore/wtf/HashTable.h:277
#4  0xb6ad6a1d in WTF::HashTable&lt;WebCore::FontPlatformData, std::pair&lt;WebCore::FontPlatformData, std::pair&lt;WebCore::SimpleFontData*, unsigned int&gt; &gt;, WTF::PairFirstExtractor&lt;std::pair&lt;WebCore::FontPlatformData, std::pair&lt;WebCore::SimpleFontData*, unsigned int&gt; &gt; &gt;, WebCore::FontDataCacheKeyHash, WTF::PairHashTraits&lt;WebCore::FontDataCacheKeyTraits, WTF::HashTraits&lt;std::pair&lt;WebCore::SimpleFontData*, unsigned int&gt; &gt; &gt;, WebCore::FontDataCacheKeyTraits&gt;::lookup&lt;WebCore::FontPlatformData, WTF::IdentityHashTranslator&lt;WebCore::FontPlatformData, std::pair&lt;WebCore::FontPlatformData, std::pair&lt;WebCore::SimpleFontData*, unsigned int&gt; &gt;, WebCore::FontDataCacheKeyHash&gt; &gt; (this=0x8eea850, key=@0x931f188)
    at ../../JavaScriptCore/wtf/HashTable.h:474
#5  0xb6ad6bf1 in WTF::HashTable&lt;WebCore::FontPlatformData, std::pair&lt;WebCore::FontPlatformData, std::pair&lt;WebCore::SimpleFontData*, unsigned int&gt; &gt;, WTF::PairFirstExtractor&lt;std::pair&lt;WebCore::FontPlatformData, std::pair&lt;WebCore::SimpleFontData*, unsigned int&gt; &gt; &gt;, WebCore::FontDataCacheKeyHash, WTF::PairHashTraits&lt;WebCore::FontDataCacheKeyTraits, WTF::HashTraits&lt;std::pair&lt;WebCore::SimpleFontData*, unsigned int&gt; &gt; &gt;, WebCore::FontDataCacheKeyTraits&gt;::contains&lt;WebCore::FontPlatformData, WTF::IdentityHashTranslator&lt;WebCore::FontPlatformData, std::pair&lt;WebCore::FontPlatformData, std::pair&lt;WebCore::SimpleFontData*, unsigned int&gt; &gt;, WebCore::FontDataCacheKeyHash&gt; &gt; (this=0x8eea850, key=@0x931f188)
    at ../../JavaScriptCore/wtf/HashTable.h:794
#6  0xb6ad6c22 in WTF::HashTable&lt;WebCore::FontPlatformData, std::pair&lt;WebCore::FontPlatformData, std::pair&lt;WebCore::SimpleFontData*, unsigned int&gt; &gt;, WTF::PairFirstExtractor&lt;std::pair&lt;WebCore::FontPlatformData, std::pair&lt;WebCore::SimpleFontData*, unsigned int&gt; &gt; &gt;, WebCore::FontDataCacheKeyHash, WTF::PairHashTraits&lt;WebCore::FontDataCacheKeyTraits, WTF::HashTraits&lt;std::pair&lt;WebCore::SimpleFontData*, unsigned int&gt; &gt; &gt;, WebCore::FontDataCacheKeyTraits&gt;::contains (this=0x8eea850, key=@0x931f188) at ../../JavaScriptCore/wtf/HashTable.h:325
#7  0xb6ad6c40 in WTF::HashMap&lt;WebCore::FontPlatformData, std::pair&lt;WebCore::SimpleFontData*, unsigned int&gt;, WebCore::FontDataCacheKeyHash, WebCore::FontDataCacheKeyTraits, WTF::HashTraits&lt;std::pair&lt;WebCore::SimpleFontData*, unsigned int&gt; &gt; &gt;::contains (this=0x8eea850, key=@0x931f188)
    at ../../JavaScriptCore/wtf/HashMap.h:173
#8  0xb6ace352 in WebCore::FontCache::purgeInactiveFontData (this=0x8d7c2f0, count=21) at ../../WebCore/platform/graphics/FontCache.cpp:330
#9  0xb6ace865 in WebCore::FontCache::releaseFontData (this=0x8d7c2f0, fontData=0xab93518) at ../../WebCore/platform/graphics/FontCache.cpp:295
#10 0xb6ad8e17 in WebCore::FontFallbackList::releaseFontData (this=0xb3c2270) at ../../WebCore/platform/graphics/FontFallbackList.cpp:64
#11 0xb6acc793 in ~FontFallbackList (this=0xb3c2270) at ../../WebCore/platform/graphics/FontFallbackList.h:46
#12 0xb6acc7f3 in WTF::RefCounted&lt;WebCore::FontFallbackList&gt;::deref (this=0xb3c2270) at ../../JavaScriptCore/wtf/RefCounted.h:94
#13 0xb6acc87b in ~RefPtr (this=0xc1f4e94) at ../../JavaScriptCore/wtf/RefPtr.h:50
#14 0xb6acb404 in ~Font (this=0xc1f4e80) at ../../WebCore/platform/graphics/Font.cpp:118
#15 0xb6c2b898 in ~StyleInheritedData (this=0xc1f4e68) at ../../WebCore/rendering/style/StyleInheritedData.cpp:46
#16 0xb67e4ed1 in WTF::RefCounted&lt;WebCore::StyleInheritedData&gt;::deref (this=0xc1f4e68) at ../../JavaScriptCore/wtf/RefCounted.h:94
#17 0xb6c2798d in ~RefPtr (this=0xad165b8) at ../../JavaScriptCore/wtf/RefPtr.h:50
#18 0xb6c279a1 in ~DataRef (this=0xad165b8) at ../../WebCore/rendering/style/DataRef.h:31
#19 0xb6c25984 in ~RenderStyle (this=0xad16588) at ../../WebCore/rendering/style/RenderStyle.cpp:163
#20 0xb6759af5 in WTF::RefCounted&lt;WebCore::RenderStyle&gt;::deref (this=0xad16588) at ../../JavaScriptCore/wtf/RefCounted.h:94
---Type &lt;return&gt; to continue, or q &lt;return&gt; to quit---
#21 0xb6759bbb in ~RefPtr (this=0xb194610) at ../../JavaScriptCore/wtf/RefPtr.h:50
#22 0xb6bccb74 in ~RenderObject (this=0xb19460c) at ../../WebCore/rendering/RenderObject.cpp:215
#23 0xb6b8a686 in ~RenderBoxModelObject (this=0xb19460c) at ../../WebCore/rendering/RenderBoxModelObject.cpp:56
#24 0xb6ba4a73 in ~RenderInline (this=0xb19460c) at ../../WebCore/rendering/RenderInline.cpp:56
#25 0xb6bc5d9e in WebCore::RenderObject::arenaDelete (this=0xb19460c, arena=0xc0155c8, base=0xb19460c)
    at ../../WebCore/rendering/RenderObject.cpp:1861
#26 0xb6bc5f5e in WebCore::RenderObject::destroy (this=0xb19460c) at ../../WebCore/rendering/RenderObject.cpp:1834
#27 0xb6b8a31f in WebCore::RenderBoxModelObject::destroy (this=0xb19460c) at ../../WebCore/rendering/RenderBoxModelObject.cpp:74
#28 0xb6ba4a33 in WebCore::RenderInline::destroy (this=0xb19460c) at ../../WebCore/rendering/RenderInline.cpp:93
#29 0xb68695e6 in WebCore::Node::detach (this=0xb1d00e48) at ../../WebCore/dom/Node.cpp:1103
#30 0xb680c413 in WebCore::ContainerNode::detach (this=0xb1d00e48) at ../../WebCore/dom/ContainerNode.cpp:599
#31 0xb684cd20 in WebCore::Element::detach (this=0xb1d00e48) at ../../WebCore/dom/Element.cpp:720
#32 0xb680c3e1 in WebCore::ContainerNode::detach (this=0xb1d009c0) at ../../WebCore/dom/ContainerNode.cpp:597
#33 0xb684cd20 in WebCore::Element::detach (this=0xb1d009c0) at ../../WebCore/dom/Element.cpp:720
#34 0xb680c3e1 in WebCore::ContainerNode::detach (this=0xb1308008) at ../../WebCore/dom/ContainerNode.cpp:597
#35 0xb684cd20 in WebCore::Element::detach (this=0xb1308008) at ../../WebCore/dom/Element.cpp:720
#36 0xb680c3e1 in WebCore::ContainerNode::detach (this=0xb13647e8) at ../../WebCore/dom/ContainerNode.cpp:597
#37 0xb684cd20 in WebCore::Element::detach (this=0xb13647e8) at ../../WebCore/dom/Element.cpp:720
#38 0xb680c3e1 in WebCore::ContainerNode::detach (this=0xb136c298) at ../../WebCore/dom/ContainerNode.cpp:597
#39 0xb684cd20 in WebCore::Element::detach (this=0xb136c298) at ../../WebCore/dom/Element.cpp:720
#40 0xb680c3e1 in WebCore::ContainerNode::detach (this=0xab22478) at ../../WebCore/dom/ContainerNode.cpp:597
#41 0xb684cd20 in WebCore::Element::detach (this=0xab22478) at ../../WebCore/dom/Element.cpp:720
#42 0xb680c3e1 in WebCore::ContainerNode::detach (this=0xbdfd540) at ../../WebCore/dom/ContainerNode.cpp:597
#43 0xb684cd20 in WebCore::Element::detach (this=0xbdfd540) at ../../WebCore/dom/Element.cpp:720
#44 0xb680c3e1 in WebCore::ContainerNode::detach (this=0xb13be98) at ../../WebCore/dom/ContainerNode.cpp:597
#45 0xb684cd20 in WebCore::Element::detach (this=0xb13be98) at ../../WebCore/dom/Element.cpp:720
#46 0xb680c3e1 in WebCore::ContainerNode::detach (this=0xc812448) at ../../WebCore/dom/ContainerNode.cpp:597
#47 0xb681b946 in WebCore::Document::detach (this=0xc812448) at ../../WebCore/dom/Document.cpp:1310
#48 0xb6a6bf9e in WebCore::Frame::setView (this=0x9299900, view=0x0) at ../../WebCore/page/Frame.cpp:232
#49 0xb6a6c133 in WebCore::Frame::createView (this=0x9299900, viewportSize=@0xbfeb02a4, backgroundColor=@0xbfeb029c, transparent=false, 
    fixedLayoutSize=@0xbfeb0294, useFixedLayout=false, horizontalScrollbarMode=WebCore::ScrollbarAuto, 
    verticalScrollbarMode=WebCore::ScrollbarAuto) at ../../WebCore/page/Frame.cpp:1737
#50 0xb66ae11d in WebKit::FrameLoaderClient::transitionToCommittedForNewPage (this=0x9e79870)
    at ../../WebKit/gtk/WebCoreSupport/FrameLoaderClientGtk.cpp:918
#51 0xb6a062c9 in WebCore::FrameLoader::transitionToCommitted (this=0x929992c, cachedPage={m_ptr = 0xbfeb0394})
    at ../../WebCore/loader/FrameLoader.cpp:2901
#52 0xb6a06e19 in WebCore::FrameLoader::commitProvisionalLoad (this=0x929992c, prpCachedPage={m_ptr = 0xbfeb0490})
---Type &lt;return&gt; to continue, or q &lt;return&gt; to quit---
    at ../../WebCore/loader/FrameLoader.cpp:2772
#53 0xb69df644 in WebCore::DocumentLoader::commitIfReady (this=0xc5b51c8) at ../../WebCore/loader/DocumentLoader.cpp:339
#54 0xb69e1181 in WebCore::DocumentLoader::commitLoad (this=0xc5b51c8, 
    data=0xbfeb09b0 &quot;&lt;!DOCTYPE html PUBLIC \&quot;-//W3C//DTD XHTML 1.0 Strict//EN\&quot; \&quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\&quot;&gt;\n&lt;html xmlns=&apos;http://www.w3.org/1999/xhtml&apos; xmlns:b=&apos;http://www.google.com/2005/gml/b&apos; xmln&quot;..., length=1418) at ../../WebCore/loader/DocumentLoader.cpp:359
#55 0xb69e121e in WebCore::DocumentLoader::receivedData (this=0xc5b51c8, 
    data=0xbfeb09b0 &quot;&lt;!DOCTYPE html PUBLIC \&quot;-//W3C//DTD XHTML 1.0 Strict//EN\&quot; \&quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\&quot;&gt;\n&lt;html xmlns=&apos;http://www.w3.org/1999/xhtml&apos; xmlns:b=&apos;http://www.google.com/2005/gml/b&apos; xmln&quot;..., length=1418) at ../../WebCore/loader/DocumentLoader.cpp:373
#56 0xb69f9b59 in WebCore::FrameLoader::receivedData (this=0x929992c, 
    data=0xbfeb09b0 &quot;&lt;!DOCTYPE html PUBLIC \&quot;-//W3C//DTD XHTML 1.0 Strict//EN\&quot; \&quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\&quot;&gt;\n&lt;html xmlns=&apos;http://www.w3.org/1999/xhtml&apos; xmlns:b=&apos;http://www.google.com/2005/gml/b&apos; xmln&quot;..., length=1418) at ../../WebCore/loader/FrameLoader.cpp:2423
#57 0xb6a0fa9e in WebCore::MainResourceLoader::addData (this=0xc2cc4c8, 
    data=0xbfeb09b0 &quot;&lt;!DOCTYPE html PUBLIC \&quot;-//W3C//DTD XHTML 1.0 Strict//EN\&quot; \&quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\&quot;&gt;\n&lt;html xmlns=&apos;http://www.w3.org/1999/xhtml&apos; xmlns:b=&apos;http://www.google.com/2005/gml/b&apos; xmln&quot;..., length=1418, allAtOnce=false)
    at ../../WebCore/loader/MainResourceLoader.cpp:146
#58 0xb6a15ea7 in WebCore::ResourceLoader::didReceiveData (this=0xc2cc4c8, 
    data=0xbfeb09b0 &quot;&lt;!DOCTYPE html PUBLIC \&quot;-//W3C//DTD XHTML 1.0 Strict//EN\&quot; \&quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\&quot;&gt;\n&lt;html xmlns=&apos;http://www.w3.org/1999/xhtml&apos; xmlns:b=&apos;http://www.google.com/2005/gml/b&apos; xmln&quot;..., length=1418, lengthReceived=0, allAtOnce=false)
    at ../../WebCore/loader/ResourceLoader.cpp:257
#59 0xb6a0eb4e in WebCore::MainResourceLoader::didReceiveData (this=0xc2cc4c8, 
    data=0xbfeb09b0 &quot;&lt;!DOCTYPE html PUBLIC \&quot;-//W3C//DTD XHTML 1.0 Strict//EN\&quot; \&quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\&quot;&gt;\n&lt;html xmlns=&apos;http://www.w3.org/1999/xhtml&apos; xmlns:b=&apos;http://www.google.com/2005/gml/b&apos; xmln&quot;..., length=1418, lengthReceived=0, allAtOnce=false)
    at ../../WebCore/loader/MainResourceLoader.cpp:347
#60 0xb6a1512a in WebCore::ResourceLoader::didReceiveData (this=0xc2cc4c8, 
    data=0xbfeb09b0 &quot;&lt;!DOCTYPE html PUBLIC \&quot;-//W3C//DTD XHTML 1.0 Strict//EN\&quot; \&quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\&quot;&gt;\n&lt;html xmlns=&apos;http://www.w3.org/1999/xhtml&apos; xmlns:b=&apos;http://www.google.com/2005/gml/b&apos; xmln&quot;..., length=1418, lengthReceived=0)
    at ../../WebCore/loader/ResourceLoader.cpp:411
#61 0xb6c3a0f9 in gotChunkCallback (msg=0xbd61988, chunk=0xbb85898, data=0xa8686f0)
    at ../../WebCore/platform/network/soup/ResourceHandleSoup.cpp:252
#62 0xb4daf52a in IA__g_cclosure_marshal_VOID__BOXED (closure=0xbc822a0, return_value=0x0, n_param_values=2, param_values=0xc64a200, 
    invocation_hint=0xbfeb07dc, marshal_data=0xb6c39f43) at gmarshal.c:566
#63 0xb4da0fdb in IA__g_closure_invoke (closure=0xbc822a0, return_value=0x0, n_param_values=2, param_values=0xc64a200, invocation_hint=0xbfeb07dc)
    at gclosure.c:767
#64 0xb4db86e7 in signal_emit_unlocked_R (node=0x8e7d620, detail=0, instance=0xbd61988, emission_return=0x0, instance_and_params=0xc64a200)
    at gsignal.c:3244
#65 0xb4db9d5b in IA__g_signal_emit_valist (instance=0xbd61988, signal_id=374, detail=0, 
    var_args=0xbfeb0980 &quot;�B5�\034\0218��)��%\2235�\210\031�\v\230X�\v&quot;) at gsignal.c:2977
---Type &lt;return&gt; to continue, or q &lt;return&gt; to quit---
#66 0xb4dba206 in IA__g_signal_emit (instance=0xbd61988, signal_id=374, detail=0) at gsignal.c:3034
#67 0xb5354316 in soup_message_got_chunk (msg=0xbd61988, chunk=0xbb85898) at soup-message.c:830
#68 0xb5359325 in read_body_chunk (msg=0xbd61988) at soup-message-io.c:313
#69 0xb53599ad in io_read (sock=0x9462e48, msg=0xbd61988) at soup-message-io.c:758
#70 0xb4daee84 in IA__g_cclosure_marshal_VOID__VOID (closure=0x973fd20, return_value=0x0, n_param_values=1, param_values=0x8a87dc0, 
    invocation_hint=0xbfeb2bec, marshal_data=0xb53596e0) at gmarshal.c:77
#71 0xb4da0fdb in IA__g_closure_invoke (closure=0x973fd20, return_value=0x0, n_param_values=1, param_values=0x8a87dc0, invocation_hint=0xbfeb2bec)
    at gclosure.c:767
#72 0xb4db86e7 in signal_emit_unlocked_R (node=0x8e2b278, detail=0, instance=0x9462e48, emission_return=0x0, instance_and_params=0x8a87dc0)
    at gsignal.c:3244
#73 0xb4db9d5b in IA__g_signal_emit_valist (instance=0x9462e48, signal_id=382, detail=0, 
    var_args=0xbfeb2d8c &quot;��ִ��ִ`�\177\v�-뿽\022ϴ\030\2073\f\001&quot;) at gsignal.c:2977
#74 0xb4dba206 in IA__g_signal_emit (instance=0x9462e48, signal_id=382, detail=0) at gsignal.c:3034
#75 0xb5364402 in socket_read_watch (chan=0xc338718, cond=&lt;value optimized out&gt;, user_data=0x9462e48) at soup-socket.c:1116
#76 0xb4cf12bd in g_io_unix_dispatch (source=0xb7fa560, callback=0xb53643b0 &lt;socket_read_watch&gt;, user_data=0x9462e48) at giounix.c:162
#77 0xb4cba0c8 in IA__g_main_context_dispatch (context=0x8768880) at gmain.c:1814
#78 0xb4cbd62b in g_main_context_iterate (context=0x8768880, block=1, dispatch=1, self=0x87404b8) at gmain.c:2448
#79 0xb4cbdafa in IA__g_main_loop_run (loop=0x87959c8) at gmain.c:2656
#80 0xb545bf29 in IA__gtk_main () at gtkmain.c:1205
#81 0x08048c86 in main (argc=Cannot access memory at address 0x157b6e68
) at ../../../src/ephy-main.c:781
Current language:  auto; currently c
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>113902</commentid>
    <comment_count>3</comment_count>
      <attachid>28653</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2009-03-16 11:56:31 -0700</bug_when>
    <thetext>Created attachment 28653
gtkfonts.patch

This patch makes FontPlatformDataGtk free the memory it allocates in its own destructor, instead of having SimpleFontDataGtk free it in platformDestroy. Also, since the class has reference counted members we need a copy constructor and &apos;=&apos; operator to properly track those references when assigning and copying objects. With these two changes I can&apos;t reproduce the crash anymore.

Holger said he was concerned this might be a performance regression, but: other ports have objects that they also have to copy in their FontPlatformData* classes, so I don&apos;t see how this is that different. Besides, what this does is to add two extra refcounts per copy, it does not do actual copies of the fc pattern or the cairo fonts. That being said, there might be better ways to handle this, so I&apos;m totally open to comments :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>113978</commentid>
    <comment_count>4</comment_count>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2009-03-16 22:28:58 -0700</bug_when>
    <thetext>I&apos;m convinced this is the proper change. You are absolutely right in terms of information hiding that FontPlatformData should own these things.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>113980</commentid>
    <comment_count>5</comment_count>
      <attachid>28653</attachid>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2009-03-16 22:35:37 -0700</bug_when>
    <thetext>Comment on attachment 28653
gtkfonts.patch

&gt;         * platform/graphics/gtk/FontPlatformData.h:
&gt;         * platform/graphics/gtk/FontPlatformDataGtk.cpp:


FontPlatformDataPango.cpp needs some love too?


&gt; +FontPlatformData&amp; FontPlatformData::operator=(const FontPlatformData&amp; other)
&gt; +{
&gt; +    m_size = other.m_size;
&gt; +    m_syntheticBold = other.m_syntheticBold;
&gt; +    m_syntheticOblique = other.m_syntheticOblique;
&gt; +    if (other.m_scaledFont)
&gt; +        m_scaledFont = cairo_scaled_font_reference (other.m_scaledFont);
&gt; +    else
&gt; +        m_scaledFont = 0;
&gt; +
&gt; +    if (other.m_pattern)
&gt; +        FcPatternReference(other.m_pattern);
&gt; +    m_pattern = other.m_pattern;
&gt; +
&gt; +    // This will be re-created on demand.
&gt; +    m_fallbacks = 0;

This is not correct. FontPlatformData might already have a properly initialized m_scaledFont and m_pattern. This means the normal flow of things are. Ref the new stuff, unref the old stuff, copy over the pointers. This makes sure you don&apos;t lead and guards you against self assignment (fontData = fontData). And in case of the self assignment you reset m_fallbacks without freeing it...

A incomplete pointer: http://www.codingstandard.com/HICPPCM/High_Integrity_CPP_Rule_3.1.5.html


&gt; +FontPlatformData::FontPlatformData(const FontPlatformData&amp; other)
&gt; +{
       *this = other;

to avoid the code duplication.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>113997</commentid>
    <comment_count>6</comment_count>
      <attachid>28682</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2009-03-17 00:08:28 -0700</bug_when>
    <thetext>Created attachment 28682
gtkfontsv2.patch

Address Holger review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>113998</commentid>
    <comment_count>7</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2009-03-17 00:09:48 -0700</bug_when>
    <thetext>I think I&apos;ve fixed all your comments (thanks, great review), save for the Pango thing. I think Alp has said that the FC backend does everything the Pango one did, and that it&apos;s pointless to use it/maintain it now. If he can confirm this I think we should remove it (?), otherwise I&apos;ll make another patch to apply the same fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114011</commentid>
    <comment_count>8</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2009-03-17 03:56:13 -0700</bug_when>
    <thetext>+    if (other.m_scaledFont)
+        cairo_scaled_font_reference (other.m_scaledFont);

Meh, bad space. I&apos;ll fix that when landing if the patch is OK :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114022</commentid>
    <comment_count>9</comment_count>
      <attachid>28682</attachid>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2009-03-17 07:25:41 -0700</bug_when>
    <thetext>Comment on attachment 28682
gtkfontsv2.patch


&gt; +    // Do this first, since we need to catch self assignment.
&gt; +    if (m_fallbacks &amp;&amp; !(*this == other)) {

okay, we don&apos;t want to go through the operator== of this class but really compare the pointers of this and &amp;other. You might want to consider having if (this == &amp;other)\ return *this; at the top but this would optimize for the unlikely case... at least change it to compare the pointers as discussed on irc.


&gt; -    if (m_font.m_pattern &amp;&amp; ((FcPattern*)-1 != m_font.m_pattern)) {

we don&apos;t do the -1 check in the assignment operator and it seems fine. So let us schedule this bit for removal too (later patch or might be proven wrong if the assignment is crashing).



regarding the pango backend. we should update it too, it is needed for users on OSX (native/framework) and win32...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114039</commentid>
    <comment_count>10</comment_count>
      <attachid>28690</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2009-03-17 10:09:04 -0700</bug_when>
    <thetext>Created attachment 28690
pangofonts.patch

Same fix for the pango backend.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114040</commentid>
    <comment_count>11</comment_count>
      <attachid>28691</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2009-03-17 10:09:38 -0700</bug_when>
    <thetext>Created attachment 28691
style.patch

Style fix which I forgot to apply in the first patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114047</commentid>
    <comment_count>12</comment_count>
      <attachid>28690</attachid>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2009-03-17 10:17:42 -0700</bug_when>
    <thetext>Comment on attachment 28690
pangofonts.patch


&gt; -  PangoFontMap* FontPlatformData::m_fontMap = 0;
&gt; -  GHashTable* FontPlatformData::m_hashTable = 0;
&gt; +PangoFontMap* FontPlatformData::m_fontMap = 0;
&gt; +GHashTable* FontPlatformData::m_hashTable = 0;

maybe move this to the style patch?


&gt;  
&gt;  FontPlatformData::FontPlatformData(const FontDescription&amp; fontDescription, const AtomicString&amp; familyName)
&gt;      : m_context(0)
&gt; @@ -193,7 +194,20 @@ bool FontPlatformData::init()
&gt;  
&gt;  FontPlatformData::~FontPlatformData()
&gt;  {
&gt; -    // Destroy takes place in FontData::platformDestroy().
&gt; +    if (m_font &amp;&amp; m_font != reinterpret_cast&lt;PangoFont*&gt;(-1)) {

probably the same as with the previous patch. (-1)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114048</commentid>
    <comment_count>13</comment_count>
      <attachid>28691</attachid>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2009-03-17 10:18:38 -0700</bug_when>
    <thetext>Comment on attachment 28691
style.patch


&gt;      if (other.m_scaledFont)
&gt; -        cairo_scaled_font_reference (other.m_scaledFont);
&gt; +        cairo_scaled_font_reference(other.m_scaledFont);

damn, you tricked me. Sorry for not noticing. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114053</commentid>
    <comment_count>14</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2009-03-17 10:26:21 -0700</bug_when>
    <thetext>All patches landed (r41762, r41767 and r41768), closing as FIXED.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>28653</attachid>
            <date>2009-03-16 11:56:31 -0700</date>
            <delta_ts>2009-03-17 00:08:28 -0700</delta_ts>
            <desc>gtkfonts.patch</desc>
            <filename>gtkfonts.patch</filename>
            <type>text/plain</type>
            <size>6219</size>
            <attacher name="Xan Lopez">xan.lopez</attacher>
            
              <data encoding="base64">RnJvbSAyZGNjNWI2NTg3NWRjNjY5NTgwNGJiNzk5OGRmNTA0ZDk3ODc0N2M4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBYYW4gTG9wZXogPHhsb3BlekBpZ2FsaWEuY29tPgpEYXRlOiBN
b24sIDE2IE1hciAyMDA5IDIwOjUwOjA4ICswMjAwClN1YmplY3Q6IFtQQVRDSF0gMjAwOS0wMy0x
NiAgWGFuIExvcGV6ICA8eGxvcGV6QGlnYWxpYS5jb20+CgogICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgoKICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjQ1OTIKICAgICAgICBbR1RLXSBDcmFzaCBpbiBGY1BhdHRlcm5IYXNoCgogICAgICAg
IFNhbml0aXplIG1lbW9yeSBtYW5hZ2VtZW50IGluIGd0ayBmb250cy4KCiAgICAgICAgUmVsZWFz
ZSBtZW1vcnkgYWxsb2NhdGVkIGJ5IEZvbnRQbGF0Zm9ybURhdGFHdGsgaW4gaXRzIG93bgogICAg
ICAgIGRlc3RydWN0b3IgaW5zdGVhZCBvZiBkb2luZyBpdCBmcm9tIG90aGVyIGNsYXNzZXMsIGFu
ZCBhZGQgY29weQogICAgICAgIGNvbnN0cnVjdG9yIGFuZCAnPScgb3BlcmF0b3IgdG8gYmUgYWJs
ZSB0byB0cmFjayByZWZlcmVuY2VkCiAgICAgICAgb2JqZWN0cyBwcm9wZXJseS4KCiAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udFBsYXRmb3JtRGF0YS5oOgogICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRQbGF0Zm9ybURhdGFHdGsuY3BwOgogICAgICAgIChXZWJD
b3JlOjpGb250UGxhdGZvcm1EYXRhOjpvcGVyYXRvcj0pOgogICAgICAgIChXZWJDb3JlOjpGb250
UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKToKICAgICAgICAoV2ViQ29yZTo6Rm9udFBs
YXRmb3JtRGF0YTo6fkZvbnRQbGF0Zm9ybURhdGEpOgogICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3RrL1NpbXBsZUZvbnREYXRhR3RrLmNwcDoKICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9u
dERhdGE6OnBsYXRmb3JtRGVzdHJveSk6Ci0tLQogV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIyICsrKysrKysrCiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2d0ay9Gb250UGxhdGZvcm1EYXRhLmggICB8ICAgIDIgKwogLi4uL3BsYXRmb3Jt
L2dyYXBoaWNzL2d0ay9Gb250UGxhdGZvcm1EYXRhR3RrLmNwcCAgfCAgIDUyICsrKysrKysrKysr
KysrKysrKysrCiAuLi4vcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL1NpbXBsZUZvbnREYXRhR3RrLmNw
cCAgICB8ICAgMTggLS0tLS0tLQogNCBmaWxlcyBjaGFuZ2VkLCA3NiBpbnNlcnRpb25zKCspLCAx
OCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUv
Q2hhbmdlTG9nCmluZGV4IDA3ODFhYmYuLjE1MTczNGEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hh
bmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMDktMDMt
MTYgIFhhbiBMb3BleiAgPHhsb3BlekBpZ2FsaWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yNDU5MgorICAgICAgICBbR1RLXSBDcmFzaCBpbiBGY1BhdHRlcm5IYXNoCisK
KyAgICAgICAgU2FuaXRpemUgbWVtb3J5IG1hbmFnZW1lbnQgaW4gZ3RrIGZvbnRzLgorCisgICAg
ICAgIFJlbGVhc2UgbWVtb3J5IGFsbG9jYXRlZCBieSBGb250UGxhdGZvcm1EYXRhR3RrIGluIGl0
cyBvd24KKyAgICAgICAgZGVzdHJ1Y3RvciBpbnN0ZWFkIG9mIGRvaW5nIGl0IGZyb20gb3RoZXIg
Y2xhc3NlcywgYW5kIGFkZCBjb3B5CisgICAgICAgIGNvbnN0cnVjdG9yIGFuZCAnPScgb3BlcmF0
b3IgdG8gYmUgYWJsZSB0byB0cmFjayByZWZlcmVuY2VkCisgICAgICAgIG9iamVjdHMgcHJvcGVy
bHkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udFBsYXRmb3JtRGF0YS5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250UGxhdGZvcm1EYXRhR3RrLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6Om9wZXJhdG9yPSk6CisgICAg
ICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6On5Gb250UGxhdGZvcm1EYXRhKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvU2ltcGxlRm9udERhdGFHdGsuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OnBsYXRmb3JtRGVzdHJveSk6CisKIDIwMDktMDMt
MTYgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IERhcmluIEFkbGVyLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ndGsvRm9udFBsYXRmb3JtRGF0YS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsv
Rm9udFBsYXRmb3JtRGF0YS5oCmluZGV4IGVmYTVkZDUuLjIwYzUyZTUgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRQbGF0Zm9ybURhdGEuaAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250UGxhdGZvcm1EYXRhLmgKQEAgLTc0LDYgKzc0
LDcgQEAgcHVibGljOgogCiAgICAgRm9udFBsYXRmb3JtRGF0YShmbG9hdCBzaXplLCBib29sIGJv
bGQsIGJvb2wgaXRhbGljKTsKICAgICBGb250UGxhdGZvcm1EYXRhKGNhaXJvX2ZvbnRfZmFjZV90
KiBmb250RmFjZSwgaW50IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMpOworICAgIEZvbnRQ
bGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYpOwogCiAgICAgfkZvbnRQbGF0Zm9y
bURhdGEoKTsKIApAQCAtOTUsNiArOTYsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKSBjb25zdDsKKyAgICBGb250UGxhdGZv
cm1EYXRhJiBvcGVyYXRvcj0oY29uc3QgRm9udFBsYXRmb3JtRGF0YSYpOwogICAgIGJvb2wgaXNI
YXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7CiAjaWYgZGVmaW5lZChVU0VfRlJFRVRZUEUp
CiAgICAgICAgIHJldHVybiBtX3BhdHRlcm4gPT0gaGFzaFRhYmxlRGVsZXRlZEZvbnRWYWx1ZSgp
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udFBsYXRmb3Jt
RGF0YUd0ay5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250UGxhdGZvcm1E
YXRhR3RrLmNwcAppbmRleCAxN2Q3ODliLi4xN2IzZGM1IDEwMDY0NAotLS0gYS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250UGxhdGZvcm1EYXRhR3RrLmNwcAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250UGxhdGZvcm1EYXRhR3RrLmNwcApAQCAtMTYxLDYg
KzE2MSw0NCBAQCBGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKGNhaXJvX2ZvbnRf
ZmFjZV90KiBmb250RmFjZSwgaW50IHNpemUsIGJvb2wgYgogICAgIG1fc2NhbGVkRm9udCA9IGNh
aXJvX3NjYWxlZF9mb250X2NyZWF0ZShmb250RmFjZSwgJmZvbnRNYXRyaXgsICZjdG0sIG9wdGlv
bnMpOwogfQogCitGb250UGxhdGZvcm1EYXRhJiBGb250UGxhdGZvcm1EYXRhOjpvcGVyYXRvcj0o
Y29uc3QgRm9udFBsYXRmb3JtRGF0YSYgb3RoZXIpCit7CisgICAgbV9zaXplID0gb3RoZXIubV9z
aXplOworICAgIG1fc3ludGhldGljQm9sZCA9IG90aGVyLm1fc3ludGhldGljQm9sZDsKKyAgICBt
X3N5bnRoZXRpY09ibGlxdWUgPSBvdGhlci5tX3N5bnRoZXRpY09ibGlxdWU7CisgICAgaWYgKG90
aGVyLm1fc2NhbGVkRm9udCkKKyAgICAgICAgbV9zY2FsZWRGb250ID0gY2Fpcm9fc2NhbGVkX2Zv
bnRfcmVmZXJlbmNlIChvdGhlci5tX3NjYWxlZEZvbnQpOworICAgIGVsc2UKKyAgICAgICAgbV9z
Y2FsZWRGb250ID0gMDsKKworICAgIGlmIChvdGhlci5tX3BhdHRlcm4pCisgICAgICAgIEZjUGF0
dGVyblJlZmVyZW5jZShvdGhlci5tX3BhdHRlcm4pOworICAgIG1fcGF0dGVybiA9IG90aGVyLm1f
cGF0dGVybjsKKworICAgIC8vIFRoaXMgd2lsbCBiZSByZS1jcmVhdGVkIG9uIGRlbWFuZC4KKyAg
ICBtX2ZhbGxiYWNrcyA9IDA7CisKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK0ZvbnRQbGF0Zm9y
bURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgb3RoZXIpCit7
CisgICAgbV9zaXplID0gb3RoZXIubV9zaXplOworICAgIG1fc3ludGhldGljQm9sZCA9IG90aGVy
Lm1fc3ludGhldGljQm9sZDsKKyAgICBtX3N5bnRoZXRpY09ibGlxdWUgPSBvdGhlci5tX3N5bnRo
ZXRpY09ibGlxdWU7CisgICAgaWYgKG90aGVyLm1fc2NhbGVkRm9udCkKKyAgICAgICAgbV9zY2Fs
ZWRGb250ID0gY2Fpcm9fc2NhbGVkX2ZvbnRfcmVmZXJlbmNlIChvdGhlci5tX3NjYWxlZEZvbnQp
OworICAgIGVsc2UKKyAgICAgICAgbV9zY2FsZWRGb250ID0gMDsKKworICAgIGlmIChvdGhlci5t
X3BhdHRlcm4pCisgICAgICAgIEZjUGF0dGVyblJlZmVyZW5jZShvdGhlci5tX3BhdHRlcm4pOwor
ICAgIG1fcGF0dGVybiA9IG90aGVyLm1fcGF0dGVybjsKKworICAgIC8vIFRoaXMgd2lsbCBiZSBy
ZS1jcmVhdGVkIG9uIGRlbWFuZC4KKyAgICBtX2ZhbGxiYWNrcyA9IDA7Cit9CisKIGJvb2wgRm9u
dFBsYXRmb3JtRGF0YTo6aW5pdCgpCiB7CiAgICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQgPSBm
YWxzZTsKQEAgLTE3Niw2ICsyMTQsMjAgQEAgYm9vbCBGb250UGxhdGZvcm1EYXRhOjppbml0KCkK
IAogRm9udFBsYXRmb3JtRGF0YTo6fkZvbnRQbGF0Zm9ybURhdGEoKQogeworICAgIGlmIChtX3Bh
dHRlcm4gJiYgKChGY1BhdHRlcm4qKS0xICE9IG1fcGF0dGVybikpIHsKKyAgICAgICAgRmNQYXR0
ZXJuRGVzdHJveShtX3BhdHRlcm4pOworICAgICAgICBtX3BhdHRlcm4gPSAwOworICAgIH0KKwor
ICAgIGlmIChtX2ZhbGxiYWNrcykgeworICAgICAgICBGY0ZvbnRTZXREZXN0cm95KG1fZmFsbGJh
Y2tzKTsKKyAgICAgICAgbV9mYWxsYmFja3MgPSAwOworICAgIH0KKworICAgIGlmIChtX3NjYWxl
ZEZvbnQpIHsKKyAgICAgICAgY2Fpcm9fc2NhbGVkX2ZvbnRfZGVzdHJveShtX3NjYWxlZEZvbnQp
OworICAgICAgICBtX3NjYWxlZEZvbnQgPSAwOworICAgIH0KIH0KIAogYm9vbCBGb250UGxhdGZv
cm1EYXRhOjppc0ZpeGVkUGl0Y2goKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ndGsvU2ltcGxlRm9udERhdGFHdGsuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ndGsvU2ltcGxlRm9udERhdGFHdGsuY3BwCmluZGV4IDUyMDdiYTYuLjE4OWI1ZjEgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL1NpbXBsZUZvbnREYXRhR3RrLmNw
cAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9TaW1wbGVGb250RGF0YUd0ay5j
cHAKQEAgLTY0LDI0ICs2NCw2IEBAIHZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtRGVzdHJv
eSgpCiB7CiAgICAgZGVsZXRlIG1fc21hbGxDYXBzRm9udERhdGE7CiAgICAgbV9zbWFsbENhcHNG
b250RGF0YSA9IDA7Ci0KLSAgICBpZiAoaXNDdXN0b21Gb250KCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChtX2ZvbnQubV9wYXR0ZXJuICYmICgoRmNQYXR0ZXJuKiktMSAhPSBtX2ZvbnQu
bV9wYXR0ZXJuKSkgewotICAgICAgICBGY1BhdHRlcm5EZXN0cm95KG1fZm9udC5tX3BhdHRlcm4p
OwotICAgICAgICBtX2ZvbnQubV9wYXR0ZXJuID0gMDsKLSAgICB9Ci0KLSAgICBpZiAobV9mb250
Lm1fZmFsbGJhY2tzKSB7Ci0gICAgICAgIEZjRm9udFNldERlc3Ryb3kobV9mb250Lm1fZmFsbGJh
Y2tzKTsKLSAgICAgICAgbV9mb250Lm1fZmFsbGJhY2tzID0gMDsKLSAgICB9Ci0KLSAgICBpZiAo
bV9mb250Lm1fc2NhbGVkRm9udCkgewotICAgICAgICBjYWlyb19zY2FsZWRfZm9udF9kZXN0cm95
KG1fZm9udC5tX3NjYWxlZEZvbnQpOwotICAgICAgICBtX2ZvbnQubV9zY2FsZWRGb250ID0gMDsK
LSAgICB9CiB9CiAKIFNpbXBsZUZvbnREYXRhKiBTaW1wbGVGb250RGF0YTo6c21hbGxDYXBzRm9u
dERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0Ci0tIAox
LjYuMgoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>28682</attachid>
            <date>2009-03-17 00:08:28 -0700</date>
            <delta_ts>2009-03-17 07:25:41 -0700</delta_ts>
            <desc>gtkfontsv2.patch</desc>
            <filename>gtkfontsv2.patch</filename>
            <type>text/plain</type>
            <size>6463</size>
            <attacher name="Xan Lopez">xan.lopez</attacher>
            
              <data encoding="base64">RnJvbSAzMzAxMTM0ZGMwNmZmNWI4MDRkNjZkZGJhMzIyNGNlNTg0ZjRlZWJkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBYYW4gTG9wZXogPHhsb3BlekBpZ2FsaWEuY29tPgpEYXRlOiBN
b24sIDE2IE1hciAyMDA5IDIwOjUwOjA4ICswMjAwClN1YmplY3Q6IFtQQVRDSF0gMjAwOS0wMy0x
NiAgWGFuIExvcGV6ICA8eGxvcGV6QGlnYWxpYS5jb20+CgogICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgoKICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjQ1OTIKICAgICAgICBbR1RLXSBDcmFzaCBpbiBGY1BhdHRlcm5IYXNoCgogICAgICAg
IFNhbml0aXplIG1lbW9yeSBtYW5hZ2VtZW50IGluIGd0ayBmb250cy4KCiAgICAgICAgUmVsZWFz
ZSBtZW1vcnkgYWxsb2NhdGVkIGJ5IEZvbnRQbGF0Zm9ybURhdGFHdGsgaW4gaXRzIG93bgogICAg
ICAgIGRlc3RydWN0b3IgaW5zdGVhZCBvZiBkb2luZyBpdCBmcm9tIG90aGVyIGNsYXNzZXMsIGFu
ZCBhZGQgY29weQogICAgICAgIGNvbnN0cnVjdG9yIGFuZCAnPScgb3BlcmF0b3IgdG8gYmUgYWJs
ZSB0byB0cmFjayByZWZlcmVuY2VkCiAgICAgICAgb2JqZWN0cyBwcm9wZXJseS4KCiAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udFBsYXRmb3JtRGF0YS5oOgogICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRQbGF0Zm9ybURhdGFHdGsuY3BwOgogICAgICAgIChXZWJD
b3JlOjpGb250UGxhdGZvcm1EYXRhOjpvcGVyYXRvcj0pOgogICAgICAgIChXZWJDb3JlOjpGb250
UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKToKICAgICAgICAoV2ViQ29yZTo6Rm9udFBs
YXRmb3JtRGF0YTo6fkZvbnRQbGF0Zm9ybURhdGEpOgogICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3RrL1NpbXBsZUZvbnREYXRhR3RrLmNwcDoKICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9u
dERhdGE6OnBsYXRmb3JtRGVzdHJveSk6Ci0tLQogV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIyICsrKysrKysrCiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2d0ay9Gb250UGxhdGZvcm1EYXRhLmggICB8ICAgIDIgKwogLi4uL3BsYXRmb3Jt
L2dyYXBoaWNzL2d0ay9Gb250UGxhdGZvcm1EYXRhR3RrLmNwcCAgfCAgIDUxICsrKysrKysrKysr
KysrKysrKysrCiAuLi4vcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL1NpbXBsZUZvbnREYXRhR3RrLmNw
cCAgICB8ICAgMTggLS0tLS0tLQogNCBmaWxlcyBjaGFuZ2VkLCA3NSBpbnNlcnRpb25zKCspLCAx
OCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUv
Q2hhbmdlTG9nCmluZGV4IDA3ODFhYmYuLjE1MTczNGEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hh
bmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMDktMDMt
MTYgIFhhbiBMb3BleiAgPHhsb3BlekBpZ2FsaWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yNDU5MgorICAgICAgICBbR1RLXSBDcmFzaCBpbiBGY1BhdHRlcm5IYXNoCisK
KyAgICAgICAgU2FuaXRpemUgbWVtb3J5IG1hbmFnZW1lbnQgaW4gZ3RrIGZvbnRzLgorCisgICAg
ICAgIFJlbGVhc2UgbWVtb3J5IGFsbG9jYXRlZCBieSBGb250UGxhdGZvcm1EYXRhR3RrIGluIGl0
cyBvd24KKyAgICAgICAgZGVzdHJ1Y3RvciBpbnN0ZWFkIG9mIGRvaW5nIGl0IGZyb20gb3RoZXIg
Y2xhc3NlcywgYW5kIGFkZCBjb3B5CisgICAgICAgIGNvbnN0cnVjdG9yIGFuZCAnPScgb3BlcmF0
b3IgdG8gYmUgYWJsZSB0byB0cmFjayByZWZlcmVuY2VkCisgICAgICAgIG9iamVjdHMgcHJvcGVy
bHkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udFBsYXRmb3JtRGF0YS5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250UGxhdGZvcm1EYXRhR3RrLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6Om9wZXJhdG9yPSk6CisgICAg
ICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6On5Gb250UGxhdGZvcm1EYXRhKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvU2ltcGxlRm9udERhdGFHdGsuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OnBsYXRmb3JtRGVzdHJveSk6CisKIDIwMDktMDMt
MTYgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IERhcmluIEFkbGVyLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ndGsvRm9udFBsYXRmb3JtRGF0YS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsv
Rm9udFBsYXRmb3JtRGF0YS5oCmluZGV4IGVmYTVkZDUuLjIwYzUyZTUgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRQbGF0Zm9ybURhdGEuaAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250UGxhdGZvcm1EYXRhLmgKQEAgLTc0LDYgKzc0
LDcgQEAgcHVibGljOgogCiAgICAgRm9udFBsYXRmb3JtRGF0YShmbG9hdCBzaXplLCBib29sIGJv
bGQsIGJvb2wgaXRhbGljKTsKICAgICBGb250UGxhdGZvcm1EYXRhKGNhaXJvX2ZvbnRfZmFjZV90
KiBmb250RmFjZSwgaW50IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMpOworICAgIEZvbnRQ
bGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYpOwogCiAgICAgfkZvbnRQbGF0Zm9y
bURhdGEoKTsKIApAQCAtOTUsNiArOTYsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKSBjb25zdDsKKyAgICBGb250UGxhdGZv
cm1EYXRhJiBvcGVyYXRvcj0oY29uc3QgRm9udFBsYXRmb3JtRGF0YSYpOwogICAgIGJvb2wgaXNI
YXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7CiAjaWYgZGVmaW5lZChVU0VfRlJFRVRZUEUp
CiAgICAgICAgIHJldHVybiBtX3BhdHRlcm4gPT0gaGFzaFRhYmxlRGVsZXRlZEZvbnRWYWx1ZSgp
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udFBsYXRmb3Jt
RGF0YUd0ay5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250UGxhdGZvcm1E
YXRhR3RrLmNwcAppbmRleCAxN2Q3ODliLi4wMjkzNmE0IDEwMDY0NAotLS0gYS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250UGxhdGZvcm1EYXRhR3RrLmNwcAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250UGxhdGZvcm1EYXRhR3RrLmNwcApAQCAtMyw2ICsz
LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21h
aWwuY29tCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQWxwIFRva2VyIDxhbHBAYXRva2Vy
LmNvbT4KICAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgor
ICogQ29weXJpZ2h0IChDKSAyMDA5IElnYWxpYSBTLkwuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKQEAgLTE2MSw2ICsxNjIsNDIgQEAgRm9udFBsYXRmb3JtRGF0YTo6Rm9u
dFBsYXRmb3JtRGF0YShjYWlyb19mb250X2ZhY2VfdCogZm9udEZhY2UsIGludCBzaXplLCBib29s
IGIKICAgICBtX3NjYWxlZEZvbnQgPSBjYWlyb19zY2FsZWRfZm9udF9jcmVhdGUoZm9udEZhY2Us
ICZmb250TWF0cml4LCAmY3RtLCBvcHRpb25zKTsKIH0KIAorRm9udFBsYXRmb3JtRGF0YSYgRm9u
dFBsYXRmb3JtRGF0YTo6b3BlcmF0b3I9KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIG90aGVyKQor
eworICAgIC8vIERvIHRoaXMgZmlyc3QsIHNpbmNlIHdlIG5lZWQgdG8gY2F0Y2ggc2VsZiBhc3Np
Z25tZW50LgorICAgIGlmIChtX2ZhbGxiYWNrcyAmJiAhKCp0aGlzID09IG90aGVyKSkgeworICAg
ICAgICBGY0ZvbnRTZXREZXN0cm95KG1fZmFsbGJhY2tzKTsKKyAgICAgICAgLy8gVGhpcyB3aWxs
IGJlIHJlLWNyZWF0ZWQgb24gZGVtYW5kLgorICAgICAgICBtX2ZhbGxiYWNrcyA9IDA7CisgICAg
fQorICAgICAgCisgICAgbV9zaXplID0gb3RoZXIubV9zaXplOworICAgIG1fc3ludGhldGljQm9s
ZCA9IG90aGVyLm1fc3ludGhldGljQm9sZDsKKyAgICBtX3N5bnRoZXRpY09ibGlxdWUgPSBvdGhl
ci5tX3N5bnRoZXRpY09ibGlxdWU7CisKKyAgICBpZiAob3RoZXIubV9zY2FsZWRGb250KQorICAg
ICAgICBjYWlyb19zY2FsZWRfZm9udF9yZWZlcmVuY2UgKG90aGVyLm1fc2NhbGVkRm9udCk7Cisg
ICAgaWYgKG1fc2NhbGVkRm9udCkKKyAgICAgICAgY2Fpcm9fc2NhbGVkX2ZvbnRfZGVzdHJveSht
X3NjYWxlZEZvbnQpOworICAgIG1fc2NhbGVkRm9udCA9IG90aGVyLm1fc2NhbGVkRm9udDsKKwor
ICAgIGlmIChvdGhlci5tX3BhdHRlcm4pCisgICAgICAgIEZjUGF0dGVyblJlZmVyZW5jZShvdGhl
ci5tX3BhdHRlcm4pOworICAgIGlmIChtX3BhdHRlcm4pCisgICAgICAgIEZjUGF0dGVybkRlc3Ry
b3kobV9wYXR0ZXJuKTsKKyAgICBtX3BhdHRlcm4gPSBvdGhlci5tX3BhdHRlcm47CisKKyAgICBy
ZXR1cm4gKnRoaXM7Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoY29u
c3QgRm9udFBsYXRmb3JtRGF0YSYgb3RoZXIpCisgICAgOiBtX3BhdHRlcm4oMCkKKyAgICAsIG1f
ZmFsbGJhY2tzKDApCisgICAgLCBtX3NjYWxlZEZvbnQoMCkKK3sKKyAgICAqdGhpcyA9IG90aGVy
OworfQorCiBib29sIEZvbnRQbGF0Zm9ybURhdGE6OmluaXQoKQogewogICAgIHN0YXRpYyBib29s
IGluaXRpYWxpemVkID0gZmFsc2U7CkBAIC0xNzYsNiArMjEzLDIwIEBAIGJvb2wgRm9udFBsYXRm
b3JtRGF0YTo6aW5pdCgpCiAKIEZvbnRQbGF0Zm9ybURhdGE6On5Gb250UGxhdGZvcm1EYXRhKCkK
IHsKKyAgICBpZiAobV9wYXR0ZXJuICYmICgoRmNQYXR0ZXJuKiktMSAhPSBtX3BhdHRlcm4pKSB7
CisgICAgICAgIEZjUGF0dGVybkRlc3Ryb3kobV9wYXR0ZXJuKTsKKyAgICAgICAgbV9wYXR0ZXJu
ID0gMDsKKyAgICB9CisKKyAgICBpZiAobV9mYWxsYmFja3MpIHsKKyAgICAgICAgRmNGb250U2V0
RGVzdHJveShtX2ZhbGxiYWNrcyk7CisgICAgICAgIG1fZmFsbGJhY2tzID0gMDsKKyAgICB9CisK
KyAgICBpZiAobV9zY2FsZWRGb250KSB7CisgICAgICAgIGNhaXJvX3NjYWxlZF9mb250X2Rlc3Ry
b3kobV9zY2FsZWRGb250KTsKKyAgICAgICAgbV9zY2FsZWRGb250ID0gMDsKKyAgICB9CiB9CiAK
IGJvb2wgRm9udFBsYXRmb3JtRGF0YTo6aXNGaXhlZFBpdGNoKCkKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL1NpbXBsZUZvbnREYXRhR3RrLmNwcCBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL1NpbXBsZUZvbnREYXRhR3RrLmNwcAppbmRleCA1MjA3YmE2
Li4xODliNWYxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9TaW1w
bGVGb250RGF0YUd0ay5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvU2lt
cGxlRm9udERhdGFHdGsuY3BwCkBAIC02NCwyNCArNjQsNiBAQCB2b2lkIFNpbXBsZUZvbnREYXRh
OjpwbGF0Zm9ybURlc3Ryb3koKQogewogICAgIGRlbGV0ZSBtX3NtYWxsQ2Fwc0ZvbnREYXRhOwog
ICAgIG1fc21hbGxDYXBzRm9udERhdGEgPSAwOwotCi0gICAgaWYgKGlzQ3VzdG9tRm9udCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9mb250Lm1fcGF0dGVybiAmJiAoKEZjUGF0dGVy
biopLTEgIT0gbV9mb250Lm1fcGF0dGVybikpIHsKLSAgICAgICAgRmNQYXR0ZXJuRGVzdHJveSht
X2ZvbnQubV9wYXR0ZXJuKTsKLSAgICAgICAgbV9mb250Lm1fcGF0dGVybiA9IDA7Ci0gICAgfQot
Ci0gICAgaWYgKG1fZm9udC5tX2ZhbGxiYWNrcykgewotICAgICAgICBGY0ZvbnRTZXREZXN0cm95
KG1fZm9udC5tX2ZhbGxiYWNrcyk7Ci0gICAgICAgIG1fZm9udC5tX2ZhbGxiYWNrcyA9IDA7Ci0g
ICAgfQotCi0gICAgaWYgKG1fZm9udC5tX3NjYWxlZEZvbnQpIHsKLSAgICAgICAgY2Fpcm9fc2Nh
bGVkX2ZvbnRfZGVzdHJveShtX2ZvbnQubV9zY2FsZWRGb250KTsKLSAgICAgICAgbV9mb250Lm1f
c2NhbGVkRm9udCA9IDA7Ci0gICAgfQogfQogCiBTaW1wbGVGb250RGF0YSogU2ltcGxlRm9udERh
dGE6OnNtYWxsQ2Fwc0ZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0
aW9uKSBjb25zdAotLSAKMS42LjIKCg==
</data>
<flag name="review"
          id="14126"
          type_id="1"
          status="+"
          setter="zecke"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>28690</attachid>
            <date>2009-03-17 10:09:04 -0700</date>
            <delta_ts>2009-03-17 10:17:42 -0700</delta_ts>
            <desc>pangofonts.patch</desc>
            <filename>pangofonts.patch</filename>
            <type>text/plain</type>
            <size>5786</size>
            <attacher name="Xan Lopez">xan.lopez</attacher>
            
              <data encoding="base64">RnJvbSA0ZThlMzI5OWE3YTU4MzVjZjZmZWNmNmYyZmViYzlkMTVjN2VkYmI0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBYYW4gTG9wZXogPHhsb3BlekBpZ2FsaWEuY29tPgpEYXRlOiBU
dWUsIDE3IE1hciAyMDA5IDE5OjA2OjExICswMjAwClN1YmplY3Q6IFtQQVRDSCAxLzJdIDIwMDkt
MDMtMTcgIFhhbiBMb3BleiAgPHhsb3BlekBpZ2FsaWEuY29tPgoKICAgICAgICBSZXZpZXdlZCBi
eSBIb2xnZXIgRnJleXRoZXIuCgogICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yNDU5MgogICAgICAgIFtHVEtdIENyYXNoIGluIEZjUGF0dGVybkhhc2gKCiAg
ICAgICAgU2FuaXRpemUgbWVtb3J5IG1hbmFnZW1lbnQgaW4gcGFuZ28gZm9udHMuCgogICAgICAg
IFJlbGVhc2UgbWVtb3J5IGFsbG9jYXRlZCBieSBGb250UGxhdGZvcm1EYXRhUGFuZ28gaW4gaXRz
IG93bgogICAgICAgIGRlc3RydWN0b3IgaW5zdGVhZCBvZiBkb2luZyBpdCBmcm9tIG90aGVyIGNs
YXNzZXMsIGFuZCBhZGQgY29weQogICAgICAgIGNvbnN0cnVjdG9yIGFuZCAnPScgb3BlcmF0b3Ig
dG8gYmUgYWJsZSB0byB0cmFjayByZWZlcmVuY2VkCiAgICAgICAgb2JqZWN0cyBwcm9wZXJseS4K
CiAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udFBsYXRmb3JtRGF0YVBhbmdvLmNw
cDoKICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6fkZvbnRQbGF0Zm9ybURhdGEp
OgogICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpvcGVyYXRvcj0pOgogICAgICAg
IChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKToKICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9TaW1wbGVGb250RGF0YVBhbmdvLmNwcDoKLS0tCiBXZWJD
b3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMjAgKysr
KysrKwogLi4uL2dyYXBoaWNzL2d0ay9Gb250UGxhdGZvcm1EYXRhUGFuZ28uY3BwICAgICAgICAg
fCAgIDU5ICsrKysrKysrKysrKysrKysrKystCiAuLi4vcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL1Np
bXBsZUZvbnREYXRhUGFuZ28uY3BwICB8ICAgMTggLS0tLS0tCiAzIGZpbGVzIGNoYW5nZWQsIDc2
IGluc2VydGlvbnMoKyksIDIxIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hh
bmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDFlNzJiNy4uOTUzMjljOSAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwyMyBAQAorMjAwOS0wMy0xNyAgWGFuIExvcGV6ICA8eGxvcGV6QGlnYWxpYS5jb20+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgSG9sZ2VyIEZyZXl0aGVyLgorCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNDU5MgorICAgICAgICBbR1RLXSBDcmFzaCBp
biBGY1BhdHRlcm5IYXNoCisKKyAgICAgICAgU2FuaXRpemUgbWVtb3J5IG1hbmFnZW1lbnQgaW4g
cGFuZ28gZm9udHMuCisKKyAgICAgICAgUmVsZWFzZSBtZW1vcnkgYWxsb2NhdGVkIGJ5IEZvbnRQ
bGF0Zm9ybURhdGFQYW5nbyBpbiBpdHMgb3duCisgICAgICAgIGRlc3RydWN0b3IgaW5zdGVhZCBv
ZiBkb2luZyBpdCBmcm9tIG90aGVyIGNsYXNzZXMsIGFuZCBhZGQgY29weQorICAgICAgICBjb25z
dHJ1Y3RvciBhbmQgJz0nIG9wZXJhdG9yIHRvIGJlIGFibGUgdG8gdHJhY2sgcmVmZXJlbmNlZAor
ICAgICAgICBvYmplY3RzIHByb3Blcmx5LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3RrL0ZvbnRQbGF0Zm9ybURhdGFQYW5nby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxh
dGZvcm1EYXRhOjp+Rm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxh
dGZvcm1EYXRhOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0
YTo6Rm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL1Np
bXBsZUZvbnREYXRhUGFuZ28uY3BwOgorCiAyMDA5LTAzLTE2ICBYYW4gTG9wZXogIDx4bG9wZXpA
aWdhbGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBIb2xnZXIgRnJleXRoZXIuCmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250UGxhdGZvcm1EYXRhUGFu
Z28uY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udFBsYXRmb3JtRGF0YVBh
bmdvLmNwcAppbmRleCBiZTNmZDQzLi44OGJmNDI3IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2d0ay9Gb250UGxhdGZvcm1EYXRhUGFuZ28uY3BwCisrKyBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRQbGF0Zm9ybURhdGFQYW5nby5jcHAKQEAgLTQsNiAr
NCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQWxwIFRva2VyIDxhbHBAYXRva2Vy
LmNvbT4KICAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgog
ICogQ29weXJpZ2h0IChDKSAyMDA3IFBpb25lZXIgUmVzZWFyY2ggQ2VudGVyIFVTQSwgSW5jLgor
ICogQ29weXJpZ2h0IChDKSAyMDA5IElnYWxpYSBTLkwuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKQEAgLTQ2LDggKzQ3LDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci0gIFBhbmdvRm9udE1hcCogRm9udFBsYXRmb3JtRGF0YTo6bV9mb250TWFwID0gMDsKLSAgR0hh
c2hUYWJsZSogRm9udFBsYXRmb3JtRGF0YTo6bV9oYXNoVGFibGUgPSAwOworUGFuZ29Gb250TWFw
KiBGb250UGxhdGZvcm1EYXRhOjptX2ZvbnRNYXAgPSAwOworR0hhc2hUYWJsZSogRm9udFBsYXRm
b3JtRGF0YTo6bV9oYXNoVGFibGUgPSAwOwogCiBGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZv
cm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9t
aWNTdHJpbmcmIGZhbWlseU5hbWUpCiAgICAgOiBtX2NvbnRleHQoMCkKQEAgLTE5Myw3ICsxOTQs
MjAgQEAgYm9vbCBGb250UGxhdGZvcm1EYXRhOjppbml0KCkKIAogRm9udFBsYXRmb3JtRGF0YTo6
fkZvbnRQbGF0Zm9ybURhdGEoKQogewotICAgIC8vIERlc3Ryb3kgdGFrZXMgcGxhY2UgaW4gRm9u
dERhdGE6OnBsYXRmb3JtRGVzdHJveSgpLgorICAgIGlmIChtX2ZvbnQgJiYgbV9mb250ICE9IHJl
aW50ZXJwcmV0X2Nhc3Q8UGFuZ29Gb250Kj4oLTEpKSB7CisgICAgICAgIGdfb2JqZWN0X3VucmVm
KG1fZm9udCk7CisgICAgICAgIG1fZm9udCA9IDA7CisgICAgfQorCisgICAgaWYgKG1fY29udGV4
dCkgeworICAgICAgICBnX29iamVjdF91bnJlZihtX2NvbnRleHQpOworICAgICAgICBtX2NvbnRl
eHQgPSAwOworICAgIH0KKworICAgIGlmIChtX3NjYWxlZEZvbnQpIHsKKyAgICAgICAgY2Fpcm9f
c2NhbGVkX2ZvbnRfZGVzdHJveShtX3NjYWxlZEZvbnQpOworICAgICAgICBtX3NjYWxlZEZvbnQg
PSAwOworICAgIH0KIH0KIAogYm9vbCBGb250UGxhdGZvcm1EYXRhOjppc0ZpeGVkUGl0Y2goKQpA
QCAtMjExLDYgKzIyNSw0NSBAQCB2b2lkIEZvbnRQbGF0Zm9ybURhdGE6OnNldEZvbnQoY2Fpcm9f
dCogY3IpIGNvbnN0CiAgICAgY2Fpcm9fc2V0X3NjYWxlZF9mb250KGNyLCBtX3NjYWxlZEZvbnQp
OwogfQogCitGb250UGxhdGZvcm1EYXRhJiBGb250UGxhdGZvcm1EYXRhOjpvcGVyYXRvcj0oY29u
c3QgRm9udFBsYXRmb3JtRGF0YSYgb3RoZXIpCit7CisgICAgLy8gQ2hlY2sgZm9yIHNlbGYtYXNz
aWdubWVudC4KKyAgICBpZiAodGhpcyA9PSAmb3RoZXIpCisgICAgICAgIHJldHVybiAqdGhpczsK
KworICAgIG1fc2l6ZSA9IG90aGVyLm1fc2l6ZTsKKyAgICBtX3N5bnRoZXRpY0JvbGQgPSBvdGhl
ci5tX3N5bnRoZXRpY0JvbGQ7CisgICAgbV9zeW50aGV0aWNPYmxpcXVlID0gb3RoZXIubV9zeW50
aGV0aWNPYmxpcXVlOworCisgICAgaWYgKG90aGVyLm1fc2NhbGVkRm9udCkKKyAgICAgICAgY2Fp
cm9fc2NhbGVkX2ZvbnRfcmVmZXJlbmNlKG90aGVyLm1fc2NhbGVkRm9udCk7CisgICAgaWYgKG1f
c2NhbGVkRm9udCkKKyAgICAgICAgY2Fpcm9fc2NhbGVkX2ZvbnRfZGVzdHJveShtX3NjYWxlZEZv
bnQpOworICAgIG1fc2NhbGVkRm9udCA9IG90aGVyLm1fc2NhbGVkRm9udDsKKworICAgIGlmIChv
dGhlci5tX2ZvbnQpCisgICAgICAgIGdfb2JqZWN0X3JlZihvdGhlci5tX2ZvbnQpOworICAgIGlm
IChtX2ZvbnQpCisgICAgICAgIGdfb2JqZWN0X3VucmVmKG1fZm9udCk7CisgICAgbV9mb250ID0g
b3RoZXIubV9mb250OworCisgICAgaWYgKG90aGVyLm1fY29udGV4dCkKKyAgICAgICAgZ19vYmpl
Y3RfcmVmKG90aGVyLm1fY29udGV4dCk7CisgICAgaWYgKG1fY29udGV4dCkKKyAgICAgICAgZ19v
YmplY3RfdW5yZWYobV9jb250ZXh0KTsKKyAgICBtX2NvbnRleHQgPSBvdGhlci5tX2NvbnRleHQ7
CisKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9y
bURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgb3RoZXIpCisgICAgOiBtX2NvbnRleHQoMCkK
KyAgICAsIG1fZm9udCgwKQorICAgICwgbV9zY2FsZWRGb250KDApCit7CisgICAgKnRoaXMgPSBv
dGhlcjsKK30KKwogYm9vbCBGb250UGxhdGZvcm1EYXRhOjpvcGVyYXRvcj09KGNvbnN0IEZvbnRQ
bGF0Zm9ybURhdGEmIG90aGVyKSBjb25zdAogewogICAgIGlmIChtX2ZvbnQgPT0gb3RoZXIubV9m
b250KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvU2ltcGxlRm9u
dERhdGFQYW5nby5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9TaW1wbGVGb250
RGF0YVBhbmdvLmNwcAppbmRleCBkYjhkZDNiLi4xYTdjNGY0IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9TaW1wbGVGb250RGF0YVBhbmdvLmNwcAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9TaW1wbGVGb250RGF0YVBhbmdvLmNwcApAQCAtNjEs
MjQgKzYxLDYgQEAgdm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1Jbml0KCkKIAogdm9pZCBT
aW1wbGVGb250RGF0YTo6cGxhdGZvcm1EZXN0cm95KCkKIHsKLSAgICBpZiAoIWlzQ3VzdG9tRm9u
dCgpKSB7Ci0KLSAgICAgICAgaWYgKG1fZm9udC5tX2ZvbnQgJiYgbV9mb250Lm1fZm9udCAhPSBy
ZWludGVycHJldF9jYXN0PFBhbmdvRm9udCo+KC0xKSkgewotICAgICAgICAgICAgZ19vYmplY3Rf
dW5yZWYobV9mb250Lm1fZm9udCk7Ci0gICAgICAgICAgICBtX2ZvbnQubV9mb250ID0gMDsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmIChtX2ZvbnQubV9jb250ZXh0KSB7Ci0gICAgICAgICAgICBn
X29iamVjdF91bnJlZiAobV9mb250Lm1fY29udGV4dCk7Ci0gICAgICAgICAgICBtX2ZvbnQubV9j
b250ZXh0ID0gMDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtX2ZvbnQubV9zY2FsZWRGb250
KSB7Ci0gICAgICAgICAgICBjYWlyb19zY2FsZWRfZm9udF9kZXN0cm95KG1fZm9udC5tX3NjYWxl
ZEZvbnQpOwotICAgICAgICAgICAgbV9mb250Lm1fc2NhbGVkRm9udCA9IDA7Ci0gICAgICAgIH0K
LSAgICB9Ci0KICAgICBkZWxldGUgbV9zbWFsbENhcHNGb250RGF0YTsKICAgICBtX3NtYWxsQ2Fw
c0ZvbnREYXRhID0gMDsKIH0KLS0gCjEuNi4yCgo=
</data>
<flag name="review"
          id="14130"
          type_id="1"
          status="+"
          setter="zecke"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>28691</attachid>
            <date>2009-03-17 10:09:38 -0700</date>
            <delta_ts>2009-03-17 10:18:38 -0700</delta_ts>
            <desc>style.patch</desc>
            <filename>style.patch</filename>
            <type>text/plain</type>
            <size>2026</size>
            <attacher name="Xan Lopez">xan.lopez</attacher>
            
              <data encoding="base64">RnJvbSBmOTliNmIyODQzMmYzMjI1OGQxYjBhN2U0NDYzZDhhYmUwMjExZTAzIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBYYW4gTG9wZXogPHhsb3BlekBpZ2FsaWEuY29tPgpEYXRlOiBU
dWUsIDE3IE1hciAyMDA5IDE5OjA3OjEyICswMjAwClN1YmplY3Q6IFtQQVRDSCAyLzJdIDIwMDkt
MDMtMTcgIFhhbiBMb3BleiAgPHhsb3BlekBpZ2FsaWEuY29tPgoKICAgICAgICBSZXZpZXdlZCBi
eSBIb2xnZXIgRnJleXRoZXIuCgogICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yNDU5MgogICAgICAgIFtHVEtdIENyYXNoIGluIEZjUGF0dGVybkhhc2gKCiAg
ICAgICAgU3R5bGUgZml4LgoKICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250UGxh
dGZvcm1EYXRhR3RrLmNwcDoKICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6b3Bl
cmF0b3I9KToKLS0tCiBXZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8ICAgMTIgKysrKysrKysrKysrCiAuLi4vcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0Zv
bnRQbGF0Zm9ybURhdGFHdGsuY3BwICB8ICAgIDIgKy0KIDIgZmlsZXMgY2hhbmdlZCwgMTMgaW5z
ZXJ0aW9ucygrKSwgMSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxv
ZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDk1MzI5YzkuLjc3Y2MyOWQgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC01LDYgKzUsMTgg
QEAKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI0NTky
CiAgICAgICAgIFtHVEtdIENyYXNoIGluIEZjUGF0dGVybkhhc2gKIAorICAgICAgICBTdHlsZSBm
aXguCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udFBsYXRmb3JtRGF0YUd0
ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpvcGVyYXRvcj0pOgor
CisyMDA5LTAzLTE3ICBYYW4gTG9wZXogIDx4bG9wZXpAaWdhbGlhLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBIb2xnZXIgRnJleXRoZXIuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTI0NTkyCisgICAgICAgIFtHVEtdIENyYXNoIGluIEZjUGF0
dGVybkhhc2gKKwogICAgICAgICBTYW5pdGl6ZSBtZW1vcnkgbWFuYWdlbWVudCBpbiBwYW5nbyBm
b250cy4KIAogICAgICAgICBSZWxlYXNlIG1lbW9yeSBhbGxvY2F0ZWQgYnkgRm9udFBsYXRmb3Jt
RGF0YVBhbmdvIGluIGl0cyBvd24KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3RrL0ZvbnRQbGF0Zm9ybURhdGFHdGsuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ndGsvRm9udFBsYXRmb3JtRGF0YUd0ay5jcHAKaW5kZXggMTdjOWU4Zi4uNjg2ODVlOSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udFBsYXRmb3JtRGF0YUd0
ay5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udFBsYXRmb3JtRGF0
YUd0ay5jcHAKQEAgLTE3Myw3ICsxNzMsNyBAQCBGb250UGxhdGZvcm1EYXRhJiBGb250UGxhdGZv
cm1EYXRhOjpvcGVyYXRvcj0oY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgb3RoZXIpCiAgICAgbV9z
eW50aGV0aWNPYmxpcXVlID0gb3RoZXIubV9zeW50aGV0aWNPYmxpcXVlOwogCiAgICAgaWYgKG90
aGVyLm1fc2NhbGVkRm9udCkKLSAgICAgICAgY2Fpcm9fc2NhbGVkX2ZvbnRfcmVmZXJlbmNlIChv
dGhlci5tX3NjYWxlZEZvbnQpOworICAgICAgICBjYWlyb19zY2FsZWRfZm9udF9yZWZlcmVuY2Uo
b3RoZXIubV9zY2FsZWRGb250KTsKICAgICBpZiAobV9zY2FsZWRGb250KQogICAgICAgICBjYWly
b19zY2FsZWRfZm9udF9kZXN0cm95KG1fc2NhbGVkRm9udCk7CiAgICAgbV9zY2FsZWRGb250ID0g
b3RoZXIubV9zY2FsZWRGb250OwotLSAKMS42LjIKCg==
</data>
<flag name="review"
          id="14131"
          type_id="1"
          status="+"
          setter="zecke"
    />
          </attachment>
      

    </bug>

</bugzilla>