<?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>189722</bug_id>
          
          <creation_ts>2018-09-18 16:13:58 -0700</creation_ts>
          <short_desc>Fix crash under FontCache::purgeInactiveFontData() when a memory warning fires</short_desc>
          <delta_ts>2018-10-04 09:40: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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=189861</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1460795</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2018-09-18 16:13:58 -0700</bug_when>
    <thetext>Fix crash under FontCache::purgeInactiveFontData() when a memory warning fires</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1460800</commentid>
    <comment_count>1</comment_count>
      <attachid>350073</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2018-09-18 16:18:08 -0700</bug_when>
    <thetext>Created attachment 350073
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1460801</commentid>
    <comment_count>2</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2018-09-18 16:18:10 -0700</bug_when>
    <thetext>&lt;rdar://problem/44182860&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1460859</commentid>
    <comment_count>3</comment_count>
      <attachid>350073</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2018-09-18 23:45:48 -0700</bug_when>
    <thetext>Comment on attachment 350073
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=350073&amp;action=review

&gt; Source/WebCore/platform/graphics/FontCache.cpp:379
&gt; -        for (auto&amp; font : cachedFonts().values()) {
&gt; +        for (auto font : cachedFonts().values()) {

Right, I see what&apos;s happening here. cachedFonts().remove(font-&gt;platformData()); is removing the wrong item. This null deref means that if we follow the RefPtr in the cachedFonts() cache to a Font object, and we look up that Font’s inner FontPlatformData, we don’t end up with the same entry in cachedFonts() than we started with. This should be impossible because we maintain the invariant that this cycle should hold.

Copying the RefPtr is the wrong thing to do because it means that the cachedFonts().remove() call won&apos;t actually remove the font, which is contrary to the whole point of this function. This is papering over the problem rather than actually fixing it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1461276</commentid>
    <comment_count>4</comment_count>
      <attachid>350073</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2018-09-20 01:34:34 -0700</bug_when>
    <thetext>Comment on attachment 350073
Patch

I can&apos;t reproduce this in the simulator, so we can commit this until I get back to Cupertino.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1461278</commentid>
    <comment_count>5</comment_count>
      <attachid>350073</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-09-20 02:00:22 -0700</bug_when>
    <thetext>Comment on attachment 350073
Patch

Clearing flags on attachment: 350073

Committed r236254: &lt;https://trac.webkit.org/changeset/236254&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1461279</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-09-20 02:00:23 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1461487</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2018-09-20 12:46:29 -0700</bug_when>
    <thetext>This is an extremely important bug to fix, and I am thrilled that it’s resolved!

Since moving out of the hash table value is something we can’t support, I think the best way to change the code to do that is to remove the call to WTFMove (and ideally write a clear comment explaining why we must copy and not move, preventing future people from attempting that optimization). The much more subtle alteration we chose to do, changing from auto&amp; to auto so that the WTFMove won’t move out of the hash map values, does not seem to be as clear.

I also don’t fully understand why we need to do it. Can we instead fix the crash by changing the code to not assume the pointer can never be null?

I also think we need to either find a way to test this, make the code’s rationale much clearer, or both.

And the whole thing about &quot;removing the wrong item&quot; seems like it needs a separate fix -- I assume that it has a symptom even if we don’t crash.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1464459</commentid>
    <comment_count>8</comment_count>
      <attachid>350073</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-09-28 12:11:29 -0700</bug_when>
    <thetext>Comment on attachment 350073
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=350073&amp;action=review

&gt; Source/WebCore/platform/graphics/FontCache.cpp:381
&gt;              if (!font-&gt;hasOneRef())

But then how can this ever be false since you have now copied the RefPtr?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1464460</commentid>
    <comment_count>9</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-09-28 12:13:20 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #8)
&gt; Comment on attachment 350073 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=350073&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/FontCache.cpp:381
&gt; &gt;              if (!font-&gt;hasOneRef())
&gt; 
&gt; But then how can this ever be false since you have now copied the RefPtr?

Note that I later re-introduced auto&amp; in http://trac.webkit.org/r236383 (but stopped using WTFMove() later), I wasn&apos;t aware of Simon&apos;s change until now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1464574</commentid>
    <comment_count>10</comment_count>
      <attachid>350073</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2018-09-28 15:53:03 -0700</bug_when>
    <thetext>Comment on attachment 350073
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=350073&amp;action=review

&gt;&gt;&gt; Source/WebCore/platform/graphics/FontCache.cpp:381
&gt;&gt;&gt;              if (!font-&gt;hasOneRef())
&gt;&gt; 
&gt;&gt; But then how can this ever be false since you have now copied the RefPtr?
&gt; 
&gt; Note that I later re-introduced auto&amp; in http://trac.webkit.org/r236383 (but stopped using WTFMove() later), I wasn&apos;t aware of Simon&apos;s change until now.

I’m pretty sure that, because of the error you are pointing out here, in the time after *this* patch was landed but before r236383 we had a purgeInactiveFontData function that would not delete any fonts!

This means we need to find a way to add some tests that verify that our purge function actually does what it is supposed to. So next time we break it we notice that we have done so.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1466098</commentid>
    <comment_count>11</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-10-03 10:09:17 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #10)
&gt; Comment on attachment 350073 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=350073&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/platform/graphics/FontCache.cpp:381
&gt; &gt;&gt;&gt;              if (!font-&gt;hasOneRef())
&gt; &gt;&gt; 
&gt; &gt;&gt; But then how can this ever be false since you have now copied the RefPtr?
&gt; &gt; 
&gt; &gt; Note that I later re-introduced auto&amp; in http://trac.webkit.org/r236383 (but stopped using WTFMove() later), I wasn&apos;t aware of Simon&apos;s change until now.
&gt; 
&gt; I’m pretty sure that, because of the error you are pointing out here, in the
&gt; time after *this* patch was landed but before r236383 we had a
&gt; purgeInactiveFontData function that would not delete any fonts!
&gt; 
&gt; This means we need to find a way to add some tests that verify that our
&gt; purge function actually does what it is supposed to. So next time we break
&gt; it we notice that we have done so.

FYI, we did notice because r236254 caused a ~2% PLT regression.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1466184</commentid>
    <comment_count>12</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2018-10-03 14:35:40 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #11)
&gt; (In reply to Darin Adler from comment #10)
&gt; &gt; Comment on attachment 350073 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=350073&amp;action=review
&gt; &gt; 
&gt; &gt; &gt;&gt;&gt; Source/WebCore/platform/graphics/FontCache.cpp:381
&gt; &gt; &gt;&gt;&gt;              if (!font-&gt;hasOneRef())
&gt; &gt; &gt;&gt; 
&gt; &gt; &gt;&gt; But then how can this ever be false since you have now copied the RefPtr?
&gt; &gt; &gt; 
&gt; &gt; &gt; Note that I later re-introduced auto&amp; in http://trac.webkit.org/r236383 (but stopped using WTFMove() later), I wasn&apos;t aware of Simon&apos;s change until now.
&gt; &gt; 
&gt; &gt; I’m pretty sure that, because of the error you are pointing out here, in the
&gt; &gt; time after *this* patch was landed but before r236383 we had a
&gt; &gt; purgeInactiveFontData function that would not delete any fonts!
&gt; &gt; 
&gt; &gt; This means we need to find a way to add some tests that verify that our
&gt; &gt; purge function actually does what it is supposed to. So next time we break
&gt; &gt; it we notice that we have done so.
&gt; 
&gt; FYI, we did notice because r236254 caused a ~2% PLT regression.

&lt;rdar://problem/44954219&gt; is for reverting this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1466193</commentid>
    <comment_count>13</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-10-03 15:02:35 -0700</bug_when>
    <thetext>(In reply to Myles C. Maxfield from comment #12)
&gt; (In reply to Chris Dumez from comment #11)
&gt; &gt; (In reply to Darin Adler from comment #10)
&gt; &gt; &gt; Comment on attachment 350073 [details]
&gt; &gt; &gt; Patch
&gt; &gt; &gt; 
&gt; &gt; &gt; View in context:
&gt; &gt; &gt; https://bugs.webkit.org/attachment.cgi?id=350073&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt;&gt;&gt; Source/WebCore/platform/graphics/FontCache.cpp:381
&gt; &gt; &gt; &gt;&gt;&gt;              if (!font-&gt;hasOneRef())
&gt; &gt; &gt; &gt;&gt; 
&gt; &gt; &gt; &gt;&gt; But then how can this ever be false since you have now copied the RefPtr?
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Note that I later re-introduced auto&amp; in http://trac.webkit.org/r236383 (but stopped using WTFMove() later), I wasn&apos;t aware of Simon&apos;s change until now.
&gt; &gt; &gt; 
&gt; &gt; &gt; I’m pretty sure that, because of the error you are pointing out here, in the
&gt; &gt; &gt; time after *this* patch was landed but before r236383 we had a
&gt; &gt; &gt; purgeInactiveFontData function that would not delete any fonts!
&gt; &gt; &gt; 
&gt; &gt; &gt; This means we need to find a way to add some tests that verify that our
&gt; &gt; &gt; purge function actually does what it is supposed to. So next time we break
&gt; &gt; &gt; it we notice that we have done so.
&gt; &gt; 
&gt; &gt; FYI, we did notice because r236254 caused a ~2% PLT regression.
&gt; 
&gt; &lt;rdar://problem/44954219&gt; is for reverting this patch.

What sure what you mean, http://trac.webkit.org/r236383 basically already reverted it and recovered the regression.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1466218</commentid>
    <comment_count>14</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2018-10-03 16:11:45 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #13)
&gt; (In reply to Myles C. Maxfield from comment #12)
&gt; &gt; (In reply to Chris Dumez from comment #11)
&gt; &gt; &gt; (In reply to Darin Adler from comment #10)
&gt; &gt; &gt; &gt; Comment on attachment 350073 [details]
&gt; &gt; &gt; &gt; Patch
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; View in context:
&gt; &gt; &gt; &gt; https://bugs.webkit.org/attachment.cgi?id=350073&amp;action=review
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt;&gt;&gt; Source/WebCore/platform/graphics/FontCache.cpp:381
&gt; &gt; &gt; &gt; &gt;&gt;&gt;              if (!font-&gt;hasOneRef())
&gt; &gt; &gt; &gt; &gt;&gt; 
&gt; &gt; &gt; &gt; &gt;&gt; But then how can this ever be false since you have now copied the RefPtr?
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; Note that I later re-introduced auto&amp; in http://trac.webkit.org/r236383 (but stopped using WTFMove() later), I wasn&apos;t aware of Simon&apos;s change until now.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; I’m pretty sure that, because of the error you are pointing out here, in the
&gt; &gt; &gt; &gt; time after *this* patch was landed but before r236383 we had a
&gt; &gt; &gt; &gt; purgeInactiveFontData function that would not delete any fonts!
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; This means we need to find a way to add some tests that verify that our
&gt; &gt; &gt; &gt; purge function actually does what it is supposed to. So next time we break
&gt; &gt; &gt; &gt; it we notice that we have done so.
&gt; &gt; &gt; 
&gt; &gt; &gt; FYI, we did notice because r236254 caused a ~2% PLT regression.
&gt; &gt; 
&gt; &gt; &lt;rdar://problem/44954219&gt; is for reverting this patch.
&gt; 
&gt; What sure what you mean, http://trac.webkit.org/r236383 basically already
&gt; reverted it and recovered the regression.

That patch says copyRef(), so I don&apos;t understand how that fixed it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1466220</commentid>
    <comment_count>15</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-10-03 16:15:03 -0700</bug_when>
    <thetext>(In reply to Myles C. Maxfield from comment #14)
&gt; (In reply to Chris Dumez from comment #13)
&gt; &gt; (In reply to Myles C. Maxfield from comment #12)
&gt; &gt; &gt; (In reply to Chris Dumez from comment #11)
&gt; &gt; &gt; &gt; (In reply to Darin Adler from comment #10)
&gt; &gt; &gt; &gt; &gt; Comment on attachment 350073 [details]
&gt; &gt; &gt; &gt; &gt; Patch
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; View in context:
&gt; &gt; &gt; &gt; &gt; https://bugs.webkit.org/attachment.cgi?id=350073&amp;action=review
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt; Source/WebCore/platform/graphics/FontCache.cpp:381
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;              if (!font-&gt;hasOneRef())
&gt; &gt; &gt; &gt; &gt; &gt;&gt; 
&gt; &gt; &gt; &gt; &gt; &gt;&gt; But then how can this ever be false since you have now copied the RefPtr?
&gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; Note that I later re-introduced auto&amp; in http://trac.webkit.org/r236383 (but stopped using WTFMove() later), I wasn&apos;t aware of Simon&apos;s change until now.
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; I’m pretty sure that, because of the error you are pointing out here, in the
&gt; &gt; &gt; &gt; &gt; time after *this* patch was landed but before r236383 we had a
&gt; &gt; &gt; &gt; &gt; purgeInactiveFontData function that would not delete any fonts!
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; This means we need to find a way to add some tests that verify that our
&gt; &gt; &gt; &gt; &gt; purge function actually does what it is supposed to. So next time we break
&gt; &gt; &gt; &gt; &gt; it we notice that we have done so.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; FYI, we did notice because r236254 caused a ~2% PLT regression.
&gt; &gt; &gt; 
&gt; &gt; &gt; &lt;rdar://problem/44954219&gt; is for reverting this patch.
&gt; &gt; 
&gt; &gt; What sure what you mean, http://trac.webkit.org/r236383 basically already
&gt; &gt; reverted it and recovered the regression.
&gt; 
&gt; That patch says copyRef(), so I don&apos;t understand how that fixed it.

r236383 fixed the regression introduced by r236254 by reverting it:
auto -&gt; auto&amp; so that hasOneRef() check does the right thing again
r236383 still addresses the crash that r236254 was trying to fix AFAICT, because it uses copyRef() instead of WTFMove(), thus not modifying the original structure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1466379</commentid>
    <comment_count>16</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2018-10-04 09:40:21 -0700</bug_when>
    <thetext>I believe Chris’s analysis is correct. There is no need to &quot;revert&quot; this patch.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>350073</attachid>
            <date>2018-09-18 16:18:08 -0700</date>
            <delta_ts>2018-09-20 02:00:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-189722-20180918161806.patch</filename>
            <type>text/plain</type>
            <size>2384</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM2MDk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzE1Njc1YjBmZjMyNjE3
YmNiNDMyNTg4NTg1NGJjMjRjNjY3OTg3Zi4uNWJmNjUyMWNlMDg0ZDM4YTFkMDVhNTlmNzZlM2Q0
MjU2MDdhNDdkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDE4LTA5LTE4ICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIEZpeCBjcmFzaCB1
bmRlciBGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YSgpIHdoZW4gYSBtZW1vcnkgd2Fy
bmluZyBmaXJlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTg5NzIyCisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzQ0MTgyODYwCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBIYXNoaW5nIG9mIEZv
bnRQbGF0Zm9ybURhdGEgZm9yIGNhY2hlZEZvbnRzKCkgaXMgc29tZXdoYXQgYnJva2VuIGJlY2F1
c2UgQ0ZFcXVhbCgpIG9uIENURm9udAorICAgICAgICBjYW4gcmV0dXJuIGZhbHNlIHdoZW4gdGhl
IGZvbnRzIGFyZSBhY3R1YWxseSB0aGUgc2FtZSwgYW5kIGhhdmUgdGhlIHNhbWUgQ0ZIYXNoKCku
IFRoaXMgCisgICAgICAgIGNhbiByZXN1bHQgaW4gbXVsdGlwbGUgZW50cmllcyBpbiBjYWNoZWRG
b250cygpIHdpdGggdGhlIHNhbWUgRm9udC4KKyAgICAgICAgCisgICAgICAgIFRoZW4gaW4gRm9u
dENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGEoKSwgdGhlIGxvb3AgdGhhdCBhcHBlbmRzIGZv
bnRzIHRvIGZvbnRzVG9EZWxldGUKKyAgICAgICAgZ2V0cyB0aGUgdmFsdWUgYnkgcmVmZXJlbmNl
LCBhbmQgV1RGTW92ZXMgaXQgaW50byBmb250c1RvRGVsZXRlLiBUaGlzIG51bGxzIG91dCBhbGwK
KyAgICAgICAgdGhlIGVudHJpZXMgc2hhcmluZyB0aGUgc2FtZSB2YWx1ZSwgbGVhdmluZyBudWxs
IGVudHJpZXMgaW4gdGhlIGhhc2ggdGFibGUuCisgICAgICAgIFdlIGxhdGVyIGNyYXNoIGF0IGZv
bnQtPmhhc09uZVJlZigpIHdoZW4gdXNpbmcgb25lIG9mIHRob3NlIG51bGwgZW50cmllcy4KKyAg
ICAgICAgCisgICAgICAgIEZpeCBieSBtYWtpbmcgYSBjb3B5IG9mIHRoZSBSZWZQdHI8Rm9udD4g
aW4gdGhlIGxvb3AsIHNvIHRoZSBXVEZNb3ZlIGRvZXNuJ3QgbnVrZQorICAgICAgICB0aGUgaGFz
aCB0YWJsZSBlbnRyaWVzLiBUaGUgZW50cmllcyB3aWxsIGdldCByZW1vdmVkIGF0IGNhY2hlZEZv
bnRzKCkucmVtb3ZlKCkgbG93ZXIgZG93bi4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0ZvbnRDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnB1cmdlSW5hY3Rp
dmVGb250RGF0YSk6CisKIDIwMTgtMDktMTcgIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5j
b20+CiAKICAgICAgICAgQWRkIHN1cHBvcnQgZm9yIEhFVkMgY29kZWMgdHlwZXMgaW4gTWVkaWEg
Q2FwYWJpbGl0aWVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250Q2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
Y2hlLmNwcAppbmRleCA1ODc3M2JlNzNjMjZjMzc5MTM5ODA5MGJkNTQwYjNhOTIwYWQ1NmJmLi40
YmJhZGZiMjgzMDBlNGNmMTJlYjJlODJiNmU5ZWE2MmI2YjE4ODVmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAKQEAgLTM3Niw3ICszNzYsNyBA
QCB2b2lkIEZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhKHVuc2lnbmVkIHB1cmdlQ291
bnQpCiAKICAgICB3aGlsZSAocHVyZ2VDb3VudCkgewogICAgICAgICBWZWN0b3I8UmVmUHRyPEZv
bnQ+LCAyMD4gZm9udHNUb0RlbGV0ZTsKLSAgICAgICAgZm9yIChhdXRvJiBmb250IDogY2FjaGVk
Rm9udHMoKS52YWx1ZXMoKSkgeworICAgICAgICBmb3IgKGF1dG8gZm9udCA6IGNhY2hlZEZvbnRz
KCkudmFsdWVzKCkpIHsKICAgICAgICAgICAgIExPRyhGb250cywgIiB0cnlpbmcgdG8gcHVyZ2Ug
Zm9udCAlcyAoaGFzIG9uZSByZWYgJWQpIiwgZm9udC0+cGxhdGZvcm1EYXRhKCkuZGVzY3JpcHRp
b24oKS51dGY4KCkuZGF0YSgpLCBmb250LT5oYXNPbmVSZWYoKSk7CiAgICAgICAgICAgICBpZiAo
IWZvbnQtPmhhc09uZVJlZigpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>