<?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>49353</bug_id>
          
          <creation_ts>2010-11-10 16:20:11 -0800</creation_ts>
          <short_desc>ComplexTextController not prepared to handle multiple runs</short_desc>
          <delta_ts>2010-11-11 08:17:06 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Text</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.6</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>INVALID</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>0</everconfirmed>
          <reporter name="Ned Holbrook">ned</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>mitz</cc>
    
    <cc>ned</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>307612</commentid>
    <comment_count>0</comment_count>
    <who name="Ned Holbrook">ned</who>
    <bug_when>2010-11-10 16:20:11 -0800</bug_when>
    <thetext>If, for whatever reason, CoreText were to return multiple runs for a given text run, ComplexTextController would return incorrect results. Currently ComplexTextRun::indexAt() always returns a run-based index, but if collectComplexTextRunsForCharactersCoreText() were to generate multiple ComplexTextRun objects they would not consistently be run-based since they are just using the string index array from each run, which would start at the location of that run in the string; the same goes for ComplexTextRun::characters() and ComplexTextRun::stringLocation().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307618</commentid>
    <comment_count>1</comment_count>
      <attachid>73555</attachid>
    <who name="Ned Holbrook">ned</who>
    <bug_when>2010-11-10 16:27:07 -0800</bug_when>
    <thetext>Created attachment 73555
Proposed changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307708</commentid>
    <comment_count>2</comment_count>
      <attachid>73555</attachid>
    <who name="">mitz</who>
    <bug_when>2010-11-10 20:48:58 -0800</bug_when>
    <thetext>Comment on attachment 73555
Proposed changes.

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

Wow, the code was totally wrong. I said r+ but I think there’s room for improvement.

&gt; WebCore/platform/graphics/mac/ComplexTextController.h:167
&gt; +    const int m_end;

Huh? I can’t cq+ because of this.

&gt; WebCore/platform/graphics/mac/ComplexTextControllerCoreText.cpp:54
&gt;      m_coreTextIndices = CTRunGetStringIndicesPtr(m_coreTextRun.get());
&gt; -    if (!m_coreTextIndices) {
&gt; +    if (!m_coreTextIndices || runRange.location) {

You can save the function call to CTRunGetStringIndicesPtr() if runRange.location is non-zero. I’d to it like this:
m_coreTextIndices = runRange.location ? 0 : CTRunGetStringIndicesPtr(m_coreTextRun.get())
if (!m_coreTextIndices) { …

&gt; WebCore/platform/graphics/mac/ComplexTextControllerCoreText.cpp:58
&gt; +        for (unsigned i = 0; i &lt; m_glyphCount; ++i)
&gt; +            m_coreTextIndicesVector[i] -= runRange.location;

This loop should arguably be inside an if (runRange.location) block.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307710</commentid>
    <comment_count>3</comment_count>
    <who name="Ned Holbrook">ned</who>
    <bug_when>2010-11-10 21:00:28 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 73555 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=73555&amp;action=review
&gt; 
&gt; Wow, the code was totally wrong. I said r+ but I think there’s room for improvement.

I&apos;m happy to make the changes you suggested, give me a minute to prepare a new patch.
 
&gt; &gt; WebCore/platform/graphics/mac/ComplexTextController.h:167
&gt; &gt; +    const int m_end;
&gt; 
&gt; Huh? I can’t cq+ because of this.

Is it against WebKit style to make immutable member variables const? It was purely a defensive change, but I&apos;ll back it out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307712</commentid>
    <comment_count>4</comment_count>
      <attachid>73576</attachid>
    <who name="Ned Holbrook">ned</who>
    <bug_when>2010-11-10 21:10:14 -0800</bug_when>
    <thetext>Created attachment 73576
Changes per review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307716</commentid>
    <comment_count>5</comment_count>
      <attachid>73576</attachid>
    <who name="">mitz</who>
    <bug_when>2010-11-10 21:17:41 -0800</bug_when>
    <thetext>Comment on attachment 73576
Changes per review.

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

&gt; WebCore/platform/graphics/mac/ComplexTextControllerCoreText.cpp:59
&gt; +        if (runRange.location)
&gt; +            for (unsigned i = 0; i &lt; m_glyphCount; ++i)
&gt; +                m_coreTextIndicesVector[i] -= runRange.location;

The WebKit style guidelines say that a multi-line block needs to be in braces. I’ll fix this when I land the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307718</commentid>
    <comment_count>6</comment_count>
    <who name="Ned Holbrook">ned</who>
    <bug_when>2010-11-10 21:19:32 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; The WebKit style guidelines say that a multi-line block needs to be in braces. I’ll fix this when I land the patch.

That&apos;s cute: check-webkit-style didn&apos;t catch this. Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307720</commentid>
    <comment_count>7</comment_count>
    <who name="">mitz</who>
    <bug_when>2010-11-10 21:21:09 -0800</bug_when>
    <thetext>Fixed in &lt;http://trac.webkit.org/projects/webkit/changeset/71795&gt;. I forgot that I said I’d fix the style so I did that in &lt;http://trac.webkit.org/projects/webkit/changeset/71796&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307749</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-11-11 00:02:11 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/71795 might have broken SnowLeopard Intel Release (Tests)
The following tests are not passing:
fast/text/atsui-spacing-features.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307757</commentid>
    <comment_count>9</comment_count>
    <who name="">mitz</who>
    <bug_when>2010-11-11 00:15:46 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; http://trac.webkit.org/changeset/71795 might have broken SnowLeopard Intel Release (Tests)
&gt; The following tests are not passing:
&gt; fast/text/atsui-spacing-features.html

Investigating.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307770</commentid>
    <comment_count>10</comment_count>
    <who name="">mitz</who>
    <bug_when>2010-11-11 00:43:31 -0800</bug_when>
    <thetext>I am really sorry. I now think that this patch was completely wrong and the code was completely right. There are actually existing test cases where CTLineGetGlyphRuns() returns multiple runs, and they were handled correctly. I mistakenly thought that this patch was about a situation that doesn’t and currently couldn’t occur in our tests (which is why it could be allowed without a test).

I am going to revert the change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307773</commentid>
    <comment_count>11</comment_count>
    <who name="">mitz</who>
    <bug_when>2010-11-11 00:47:25 -0800</bug_when>
    <thetext>All ComplexTextRuns from a given call to collectComplexTextRunsForCharactersCoreText() should reference the substring indicated by the caller to that function (which is the basis for the CTLine created in it); the indices from all CTRuns are all relative to that same string, and don’t require any adjustment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307775</commentid>
    <comment_count>12</comment_count>
    <who name="">mitz</who>
    <bug_when>2010-11-11 00:57:02 -0800</bug_when>
    <thetext>Reverted in &lt;http://trac.webkit.org/changeset/71800&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307934</commentid>
    <comment_count>13</comment_count>
    <who name="Ned Holbrook">ned</who>
    <bug_when>2010-11-11 08:17:06 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; Reverted in &lt;http://trac.webkit.org/changeset/71800&gt;.

Clearly I misunderstood the results of some of the hacking I was doing on the controller, and I appreciate both your attentiveness to this bug and its resolution. Thanks.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73555</attachid>
            <date>2010-11-10 16:27:07 -0800</date>
            <delta_ts>2010-11-10 21:10:14 -0800</delta_ts>
            <desc>Proposed changes.</desc>
            <filename>multiple-ctruns.txt</filename>
            <type>text/plain</type>
            <size>4620</size>
            <attacher name="Ned Holbrook">ned</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MTc3OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTYgQEAKKzIwMTAtMTEtMTAgIE5lZCBIb2xicm9vayAgPG5ob2xicm9va0BhcHBs
ZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
QWxsb3cgZm9yIHRoZSBwb3NzaWJpbGl0eSBvZiBDb3JlVGV4dCBnZW5lcmF0aW5nIG11bHRpcGxl
IHJ1bnMgZm9yIGEgc2luZ2xlIHRleHQgcnVuLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDkzNTMKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBsZXhU
ZXh0Q29udHJvbGxlcjo6Q29tcGxleFRleHRSdW46OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbXBsZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxleFRleHRSdW46OkNvbXBs
ZXhUZXh0UnVuKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBsZXhUZXh0Q29udHJvbGxlcjo6Y29s
bGVjdENvbXBsZXhUZXh0UnVuc0ZvckNoYXJhY3RlcnNDb3JlVGV4dCk6CisKIDIwMTAtMTEtMTAg
IE1hdHRoZXcgRGVsYW5leSAgPG1kZWxhbmV5QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Nv
bXBsZXhUZXh0Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5oCShyZXZpc2lvbiA3MTYwNCkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03Miw5ICs3Miw5IEBAIHByaXZhdGU6CiAgICAgY2xhc3MgQ29tcGxleFRl
eHRSdW4gOiBwdWJsaWMgUmVmQ291bnRlZDxDb21wbGV4VGV4dFJ1bj4gewogICAgIHB1YmxpYzoK
ICNpZiBVU0UoQ09SRV9URVhUKQotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb21wbGV4VGV4
dFJ1bj4gY3JlYXRlKENUUnVuUmVmIGN0UnVuLCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERh
dGEsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBzdHJpbmdMb2NhdGlvbiwgc2l6
ZV90IHN0cmluZ0xlbmd0aCkKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q29tcGxleFRleHRS
dW4+IGNyZWF0ZShDVFJ1blJlZiBjdFJ1biwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRh
LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgc3RyaW5nTG9jYXRpb24sIENGUmFu
Z2UgcnVuUmFuZ2UpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
Q29tcGxleFRleHRSdW4oY3RSdW4sIGZvbnREYXRhLCBjaGFyYWN0ZXJzLCBzdHJpbmdMb2NhdGlv
biwgc3RyaW5nTGVuZ3RoKSk7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENvbXBs
ZXhUZXh0UnVuKGN0UnVuLCBmb250RGF0YSwgY2hhcmFjdGVycywgc3RyaW5nTG9jYXRpb24sIHJ1
blJhbmdlKSk7CiAgICAgICAgIH0KICNlbmRpZgogI2lmIFVTRShBVFNVSSkKQEAgLTEwMiw3ICsx
MDIsNyBAQCBwcml2YXRlOgogCiAgICAgcHJpdmF0ZToKICNpZiBVU0UoQ09SRV9URVhUKQotICAg
ICAgICBDb21wbGV4VGV4dFJ1bihDVFJ1blJlZiwgY29uc3QgU2ltcGxlRm9udERhdGEqLCBjb25z
dCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgc3RyaW5nTG9jYXRpb24sIHNpemVfdCBzdHJp
bmdMZW5ndGgpOworICAgICAgICBDb21wbGV4VGV4dFJ1bihDVFJ1blJlZiwgY29uc3QgU2ltcGxl
Rm9udERhdGEqLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgc3RyaW5nTG9jYXRp
b24sIENGUmFuZ2UgcnVuUmFuZ2UpOwogICAgICAgICB2b2lkIGNyZWF0ZVRleHRSdW5Gcm9tRm9u
dERhdGFDb3JlVGV4dChib29sIGx0cik7CiAjZW5kaWYKICNpZiBVU0UoQVRTVUkpCkBAIC0xNjQs
NyArMTY0LDcgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8Q0dHbHlwaCwgMjU2PiBtX2FkanVzdGVk
R2x5cGhzOwogIAogICAgIHVuc2lnbmVkIG1fY3VycmVudENoYXJhY3RlcjsKLSAgICBpbnQgbV9l
bmQ7CisgICAgY29uc3QgaW50IG1fZW5kOwogCiAgICAgQ0dGbG9hdCBtX3RvdGFsV2lkdGg7CiAK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxl
ckNvcmVUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21h
Yy9Db21wbGV4VGV4dENvbnRyb2xsZXJDb3JlVGV4dC5jcHAJKHJldmlzaW9uIDcxNjA0KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyQ29yZVRl
eHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxOSArNDEsMjEgQEAgZXh0ZXJuIGNvbnN0IENG
U3RyaW5nUmVmIGtDVFR5cGVzZXR0ZXJPcAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNvbXBs
ZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxleFRleHRSdW46OkNvbXBsZXhUZXh0UnVuKENUUnVuUmVm
IGN0UnVuLCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEsIGNvbnN0IFVDaGFyKiBjaGFy
YWN0ZXJzLCB1bnNpZ25lZCBzdHJpbmdMb2NhdGlvbiwgc2l6ZV90IHN0cmluZ0xlbmd0aCkKK0Nv
bXBsZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxleFRleHRSdW46OkNvbXBsZXhUZXh0UnVuKENUUnVu
UmVmIGN0UnVuLCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEsIGNvbnN0IFVDaGFyKiBj
aGFyYWN0ZXJzLCB1bnNpZ25lZCBzdHJpbmdMb2NhdGlvbiwgQ0ZSYW5nZSBydW5SYW5nZSkKICAg
ICA6IG1fY29yZVRleHRSdW4oY3RSdW4pCiAgICAgLCBtX2ZvbnREYXRhKGZvbnREYXRhKQotICAg
ICwgbV9jaGFyYWN0ZXJzKGNoYXJhY3RlcnMpCi0gICAgLCBtX3N0cmluZ0xvY2F0aW9uKHN0cmlu
Z0xvY2F0aW9uKQotICAgICwgbV9zdHJpbmdMZW5ndGgoc3RyaW5nTGVuZ3RoKQorICAgICwgbV9j
aGFyYWN0ZXJzKGNoYXJhY3RlcnMgKyBydW5SYW5nZS5sb2NhdGlvbikKKyAgICAsIG1fc3RyaW5n
TG9jYXRpb24oc3RyaW5nTG9jYXRpb24gKyBydW5SYW5nZS5sb2NhdGlvbikKKyAgICAsIG1fc3Ry
aW5nTGVuZ3RoKHJ1blJhbmdlLmxlbmd0aCkKICAgICAsIG1faXNNb25vdG9uaWModHJ1ZSkKIHsK
ICAgICBtX2dseXBoQ291bnQgPSBDVFJ1bkdldEdseXBoQ291bnQobV9jb3JlVGV4dFJ1bi5nZXQo
KSk7CiAgICAgbV9jb3JlVGV4dEluZGljZXMgPSBDVFJ1bkdldFN0cmluZ0luZGljZXNQdHIobV9j
b3JlVGV4dFJ1bi5nZXQoKSk7Ci0gICAgaWYgKCFtX2NvcmVUZXh0SW5kaWNlcykgeworICAgIGlm
ICghbV9jb3JlVGV4dEluZGljZXMgfHwgcnVuUmFuZ2UubG9jYXRpb24pIHsKICAgICAgICAgbV9j
b3JlVGV4dEluZGljZXNWZWN0b3IuZ3JvdyhtX2dseXBoQ291bnQpOwogICAgICAgICBDVFJ1bkdl
dFN0cmluZ0luZGljZXMobV9jb3JlVGV4dFJ1bi5nZXQoKSwgQ0ZSYW5nZU1ha2UoMCwgMCksIG1f
Y29yZVRleHRJbmRpY2VzVmVjdG9yLmRhdGEoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBtX2dseXBoQ291bnQ7ICsraSkKKyAgICAgICAgICAgIG1fY29yZVRleHRJbmRpY2Vz
VmVjdG9yW2ldIC09IHJ1blJhbmdlLmxvY2F0aW9uOwogICAgICAgICBtX2NvcmVUZXh0SW5kaWNl
cyA9IG1fY29yZVRleHRJbmRpY2VzVmVjdG9yLmRhdGEoKTsKICAgICB9CiAKQEAgLTE2NCw3ICsx
NjYsOCBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Y29sbGVjdENvbXBsCiAgICAgZm9y
IChDRkluZGV4IHIgPSAwOyByIDwgcnVuQ291bnQ7IHIrKykgewogICAgICAgICBDVFJ1blJlZiBj
dFJ1biA9IHN0YXRpY19jYXN0PENUUnVuUmVmPihDRkFycmF5R2V0VmFsdWVBdEluZGV4KHJ1bkFy
cmF5LCByKSk7CiAgICAgICAgIEFTU0VSVChDRkdldFR5cGVJRChjdFJ1bikgPT0gQ1RSdW5HZXRU
eXBlSUQoKSk7Ci0gICAgICAgIG1fY29tcGxleFRleHRSdW5zLmFwcGVuZChDb21wbGV4VGV4dFJ1
bjo6Y3JlYXRlKGN0UnVuLCBmb250RGF0YSwgY3AsIHN0cmluZ0xvY2F0aW9uLCBsZW5ndGgpKTsK
KyAgICAgICAgQ0ZSYW5nZSBydW5SYW5nZSA9IENUUnVuR2V0U3RyaW5nUmFuZ2UoY3RSdW4pOwor
ICAgICAgICBtX2NvbXBsZXhUZXh0UnVucy5hcHBlbmQoQ29tcGxleFRleHRSdW46OmNyZWF0ZShj
dFJ1biwgZm9udERhdGEsIGNwLCBzdHJpbmdMb2NhdGlvbiwgcnVuUmFuZ2UpKTsKICAgICB9CiB9
CiAK
</data>
<flag name="review"
          id="64006"
          type_id="1"
          status="+"
          setter="mitz"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73576</attachid>
            <date>2010-11-10 21:10:14 -0800</date>
            <delta_ts>2010-11-10 21:17:41 -0800</delta_ts>
            <desc>Changes per review.</desc>
            <filename>multiple-ctruns.txt</filename>
            <type>text/plain</type>
            <size>4533</size>
            <attacher name="Ned Holbrook">ned</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MTc4NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTYgQEAKKzIwMTAtMTEtMTAgIE5lZCBIb2xicm9vayAgPG5ob2xicm9va0BhcHBs
ZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
QWxsb3cgZm9yIHRoZSBwb3NzaWJpbGl0eSBvZiBDb3JlVGV4dCBnZW5lcmF0aW5nIG11bHRpcGxl
IHJ1bnMgZm9yIGEgc2luZ2xlIHRleHQgcnVuLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDkzNTMKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBsZXhU
ZXh0Q29udHJvbGxlcjo6Q29tcGxleFRleHRSdW46OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbXBsZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxleFRleHRSdW46OkNvbXBs
ZXhUZXh0UnVuKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBsZXhUZXh0Q29udHJvbGxlcjo6Y29s
bGVjdENvbXBsZXhUZXh0UnVuc0ZvckNoYXJhY3RlcnNDb3JlVGV4dCk6CisKIDIwMTAtMTEtMTAg
IFBhc2NhbCBNYXNzaW1pbm8gIDxwYXNjYWwubWFzc2ltaW5vQGdtYWlsLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyLmgJKHJldmlzaW9uIDcxNzg0
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTcyLDkgKzcyLDkgQEAgcHJpdmF0ZToKICAgICBjbGFzcyBD
b21wbGV4VGV4dFJ1biA6IHB1YmxpYyBSZWZDb3VudGVkPENvbXBsZXhUZXh0UnVuPiB7CiAgICAg
cHVibGljOgogI2lmIFVTRShDT1JFX1RFWFQpCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENv
bXBsZXhUZXh0UnVuPiBjcmVhdGUoQ1RSdW5SZWYgY3RSdW4sIGNvbnN0IFNpbXBsZUZvbnREYXRh
KiBmb250RGF0YSwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIHN0cmluZ0xvY2F0
aW9uLCBzaXplX3Qgc3RyaW5nTGVuZ3RoKQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb21w
bGV4VGV4dFJ1bj4gY3JlYXRlKENUUnVuUmVmIGN0UnVuLCBjb25zdCBTaW1wbGVGb250RGF0YSog
Zm9udERhdGEsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBzdHJpbmdMb2NhdGlv
biwgQ0ZSYW5nZSBydW5SYW5nZSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBDb21wbGV4VGV4dFJ1bihjdFJ1biwgZm9udERhdGEsIGNoYXJhY3RlcnMsIHN0cmlu
Z0xvY2F0aW9uLCBzdHJpbmdMZW5ndGgpKTsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgQ29tcGxleFRleHRSdW4oY3RSdW4sIGZvbnREYXRhLCBjaGFyYWN0ZXJzLCBzdHJpbmdMb2Nh
dGlvbiwgcnVuUmFuZ2UpKTsKICAgICAgICAgfQogI2VuZGlmCiAjaWYgVVNFKEFUU1VJKQpAQCAt
MTAyLDcgKzEwMiw3IEBAIHByaXZhdGU6CiAKICAgICBwcml2YXRlOgogI2lmIFVTRShDT1JFX1RF
WFQpCi0gICAgICAgIENvbXBsZXhUZXh0UnVuKENUUnVuUmVmLCBjb25zdCBTaW1wbGVGb250RGF0
YSosIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBzdHJpbmdMb2NhdGlvbiwgc2l6
ZV90IHN0cmluZ0xlbmd0aCk7CisgICAgICAgIENvbXBsZXhUZXh0UnVuKENUUnVuUmVmLCBjb25z
dCBTaW1wbGVGb250RGF0YSosIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBzdHJp
bmdMb2NhdGlvbiwgQ0ZSYW5nZSBydW5SYW5nZSk7CiAgICAgICAgIHZvaWQgY3JlYXRlVGV4dFJ1
bkZyb21Gb250RGF0YUNvcmVUZXh0KGJvb2wgbHRyKTsKICNlbmRpZgogI2lmIFVTRShBVFNVSSkK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxl
ckNvcmVUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21h
Yy9Db21wbGV4VGV4dENvbnRyb2xsZXJDb3JlVGV4dC5jcHAJKHJldmlzaW9uIDcxNzg0KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyQ29yZVRl
eHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxOSArNDEsMjIgQEAgZXh0ZXJuIGNvbnN0IENG
U3RyaW5nUmVmIGtDVFR5cGVzZXR0ZXJPcAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNvbXBs
ZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxleFRleHRSdW46OkNvbXBsZXhUZXh0UnVuKENUUnVuUmVm
IGN0UnVuLCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEsIGNvbnN0IFVDaGFyKiBjaGFy
YWN0ZXJzLCB1bnNpZ25lZCBzdHJpbmdMb2NhdGlvbiwgc2l6ZV90IHN0cmluZ0xlbmd0aCkKK0Nv
bXBsZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxleFRleHRSdW46OkNvbXBsZXhUZXh0UnVuKENUUnVu
UmVmIGN0UnVuLCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEsIGNvbnN0IFVDaGFyKiBj
aGFyYWN0ZXJzLCB1bnNpZ25lZCBzdHJpbmdMb2NhdGlvbiwgQ0ZSYW5nZSBydW5SYW5nZSkKICAg
ICA6IG1fY29yZVRleHRSdW4oY3RSdW4pCiAgICAgLCBtX2ZvbnREYXRhKGZvbnREYXRhKQotICAg
ICwgbV9jaGFyYWN0ZXJzKGNoYXJhY3RlcnMpCi0gICAgLCBtX3N0cmluZ0xvY2F0aW9uKHN0cmlu
Z0xvY2F0aW9uKQotICAgICwgbV9zdHJpbmdMZW5ndGgoc3RyaW5nTGVuZ3RoKQorICAgICwgbV9j
aGFyYWN0ZXJzKGNoYXJhY3RlcnMgKyBydW5SYW5nZS5sb2NhdGlvbikKKyAgICAsIG1fc3RyaW5n
TG9jYXRpb24oc3RyaW5nTG9jYXRpb24gKyBydW5SYW5nZS5sb2NhdGlvbikKKyAgICAsIG1fc3Ry
aW5nTGVuZ3RoKHJ1blJhbmdlLmxlbmd0aCkKICAgICAsIG1faXNNb25vdG9uaWModHJ1ZSkKIHsK
ICAgICBtX2dseXBoQ291bnQgPSBDVFJ1bkdldEdseXBoQ291bnQobV9jb3JlVGV4dFJ1bi5nZXQo
KSk7Ci0gICAgbV9jb3JlVGV4dEluZGljZXMgPSBDVFJ1bkdldFN0cmluZ0luZGljZXNQdHIobV9j
b3JlVGV4dFJ1bi5nZXQoKSk7CisgICAgbV9jb3JlVGV4dEluZGljZXMgPSBydW5SYW5nZS5sb2Nh
dGlvbiA/IDAgOiBDVFJ1bkdldFN0cmluZ0luZGljZXNQdHIobV9jb3JlVGV4dFJ1bi5nZXQoKSk7
CiAgICAgaWYgKCFtX2NvcmVUZXh0SW5kaWNlcykgewogICAgICAgICBtX2NvcmVUZXh0SW5kaWNl
c1ZlY3Rvci5ncm93KG1fZ2x5cGhDb3VudCk7CiAgICAgICAgIENUUnVuR2V0U3RyaW5nSW5kaWNl
cyhtX2NvcmVUZXh0UnVuLmdldCgpLCBDRlJhbmdlTWFrZSgwLCAwKSwgbV9jb3JlVGV4dEluZGlj
ZXNWZWN0b3IuZGF0YSgpKTsKKyAgICAgICAgaWYgKHJ1blJhbmdlLmxvY2F0aW9uKQorICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZ2x5cGhDb3VudDsgKytpKQorICAgICAg
ICAgICAgICAgIG1fY29yZVRleHRJbmRpY2VzVmVjdG9yW2ldIC09IHJ1blJhbmdlLmxvY2F0aW9u
OwogICAgICAgICBtX2NvcmVUZXh0SW5kaWNlcyA9IG1fY29yZVRleHRJbmRpY2VzVmVjdG9yLmRh
dGEoKTsKICAgICB9CiAKQEAgLTE2NCw3ICsxNjcsOCBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJv
bGxlcjo6Y29sbGVjdENvbXBsCiAgICAgZm9yIChDRkluZGV4IHIgPSAwOyByIDwgcnVuQ291bnQ7
IHIrKykgewogICAgICAgICBDVFJ1blJlZiBjdFJ1biA9IHN0YXRpY19jYXN0PENUUnVuUmVmPihD
RkFycmF5R2V0VmFsdWVBdEluZGV4KHJ1bkFycmF5LCByKSk7CiAgICAgICAgIEFTU0VSVChDRkdl
dFR5cGVJRChjdFJ1bikgPT0gQ1RSdW5HZXRUeXBlSUQoKSk7Ci0gICAgICAgIG1fY29tcGxleFRl
eHRSdW5zLmFwcGVuZChDb21wbGV4VGV4dFJ1bjo6Y3JlYXRlKGN0UnVuLCBmb250RGF0YSwgY3As
IHN0cmluZ0xvY2F0aW9uLCBsZW5ndGgpKTsKKyAgICAgICAgQ0ZSYW5nZSBydW5SYW5nZSA9IENU
UnVuR2V0U3RyaW5nUmFuZ2UoY3RSdW4pOworICAgICAgICBtX2NvbXBsZXhUZXh0UnVucy5hcHBl
bmQoQ29tcGxleFRleHRSdW46OmNyZWF0ZShjdFJ1biwgZm9udERhdGEsIGNwLCBzdHJpbmdMb2Nh
dGlvbiwgcnVuUmFuZ2UpKTsKICAgICB9CiB9CiAK
</data>
<flag name="review"
          id="64029"
          type_id="1"
          status="+"
          setter="mitz"
    />
    <flag name="commit-queue"
          id="64031"
          type_id="3"
          status="-"
          setter="mitz"
    />
          </attachment>
      

    </bug>

</bugzilla>