<?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>115805</bug_id>
          
          <creation_ts>2013-05-08 08:02:55 -0700</creation_ts>
          <short_desc>DFGArrayMode::fromObserved is too liberal when it sees different Array and NonArray shapes</short_desc>
          <delta_ts>2013-05-09 12:37:43 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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="Mark Hahnenberg">mhahnenberg</reporter>
          <assigned_to name="Mark Hahnenberg">mhahnenberg</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>886348</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-05-08 08:02:55 -0700</bug_when>
    <thetext>It checks the observed ArrayModes to see if we have seen any ArrayWith* first. If so, it assumes it&apos;s an Array::Array, even if we&apos;ve also observed any NonArrayWith* in the ArrayProfile. This leads to the code generated by jumpSlowForUnwantedArrayMode to check the indexing type against (shape | IsArray) instead of just shape, which can cause us to exit a lot in the case that we saw have a NonArray.

To fix, we simply need to change the order of the if-statements in fromObserved to check for NonArray ArrayModes first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>886355</commentid>
    <comment_count>1</comment_count>
      <attachid>201076</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-05-08 08:09:24 -0700</bug_when>
    <thetext>Created attachment 201076
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>886513</commentid>
    <comment_count>2</comment_count>
      <attachid>201076</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-05-08 16:42:53 -0700</bug_when>
    <thetext>Comment on attachment 201076
Patch

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

&gt; Source/JavaScriptCore/dfg/DFGArrayMode.cpp:120
&gt; -        if (observed &amp; (asArrayModes(ArrayWithUndecided) | asArrayModes(ArrayWithInt32) | asArrayModes(ArrayWithDouble) | asArrayModes(ArrayWithContiguous) | asArrayModes(ArrayWithArrayStorage) | asArrayModes(ArrayWithSlowPutArrayStorage)))
&gt; -            arrayClass = Array::Array;
&gt; -        else if (observed &amp; (asArrayModes(NonArray) | asArrayModes(NonArrayWithInt32) | asArrayModes(NonArrayWithDouble) | asArrayModes(NonArrayWithContiguous) | asArrayModes(NonArrayWithArrayStorage) | asArrayModes(NonArrayWithSlowPutArrayStorage)))
&gt; +        if (observed &amp; (asArrayModes(NonArray) | asArrayModes(NonArrayWithInt32) | asArrayModes(NonArrayWithDouble) | asArrayModes(NonArrayWithContiguous) | asArrayModes(NonArrayWithArrayStorage) | asArrayModes(NonArrayWithSlowPutArrayStorage)))
&gt;              arrayClass = Array::NonArray;
&gt; +        else if (observed &amp; (asArrayModes(ArrayWithUndecided) | asArrayModes(ArrayWithInt32) | asArrayModes(ArrayWithDouble) | asArrayModes(ArrayWithContiguous) | asArrayModes(ArrayWithArrayStorage) | asArrayModes(ArrayWithSlowPutArrayStorage)))
&gt; +            arrayClass = Array::Array;
&gt;          else
&gt;              arrayClass = Array::PossiblyArray;

Actually, I think the bug here is that PossiblyArray wasn&apos;t working right.  PossiblyArray is supposed to represent &quot;this could be an Array or a NonArray&quot;.  So it appears that the problem here is that PossiblyArray isn&apos;t being compiled to do the right thing (i.e. accept either Array or NonArray).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>886515</commentid>
    <comment_count>3</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-05-08 16:44:16 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 201076 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=201076&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGArrayMode.cpp:120
&gt; &gt; -        if (observed &amp; (asArrayModes(ArrayWithUndecided) | asArrayModes(ArrayWithInt32) | asArrayModes(ArrayWithDouble) | asArrayModes(ArrayWithContiguous) | asArrayModes(ArrayWithArrayStorage) | asArrayModes(ArrayWithSlowPutArrayStorage)))
&gt; &gt; -            arrayClass = Array::Array;
&gt; &gt; -        else if (observed &amp; (asArrayModes(NonArray) | asArrayModes(NonArrayWithInt32) | asArrayModes(NonArrayWithDouble) | asArrayModes(NonArrayWithContiguous) | asArrayModes(NonArrayWithArrayStorage) | asArrayModes(NonArrayWithSlowPutArrayStorage)))
&gt; &gt; +        if (observed &amp; (asArrayModes(NonArray) | asArrayModes(NonArrayWithInt32) | asArrayModes(NonArrayWithDouble) | asArrayModes(NonArrayWithContiguous) | asArrayModes(NonArrayWithArrayStorage) | asArrayModes(NonArrayWithSlowPutArrayStorage)))
&gt; &gt;              arrayClass = Array::NonArray;
&gt; &gt; +        else if (observed &amp; (asArrayModes(ArrayWithUndecided) | asArrayModes(ArrayWithInt32) | asArrayModes(ArrayWithDouble) | asArrayModes(ArrayWithContiguous) | asArrayModes(ArrayWithArrayStorage) | asArrayModes(ArrayWithSlowPutArrayStorage)))
&gt; &gt; +            arrayClass = Array::Array;
&gt; &gt;          else
&gt; &gt;              arrayClass = Array::PossiblyArray;
&gt; 
&gt; Actually, I think the bug here is that PossiblyArray wasn&apos;t working right.  PossiblyArray is supposed to represent &quot;this could be an Array or a NonArray&quot;.  So it appears that the problem here is that PossiblyArray isn&apos;t being compiled to do the right thing (i.e. accept either Array or NonArray).

Gotcha. So we need to check if there&apos;s both NonArray and Array stuff first and if so use PossiblyArray, otherwise do what we were doing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>886573</commentid>
    <comment_count>4</comment_count>
      <attachid>201129</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-05-08 19:43:01 -0700</bug_when>
    <thetext>Created attachment 201129
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>887016</commentid>
    <comment_count>5</comment_count>
      <attachid>201129</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-05-09 12:18:51 -0700</bug_when>
    <thetext>Comment on attachment 201129
Patch

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

r=me

&gt; Source/JavaScriptCore/ChangeLog:11
&gt; +        instead of just shape, which can cause us to exit a lot in the case that we saw have a NonArray.

Typo: Should be &quot;...case that we saw...&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>887031</commentid>
    <comment_count>6</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-05-09 12:37:43 -0700</bug_when>
    <thetext>Committed r149834: &lt;http://trac.webkit.org/changeset/149834&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>201076</attachid>
            <date>2013-05-08 08:09:24 -0700</date>
            <delta_ts>2013-05-08 19:43:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-115805-20130508080914.patch</filename>
            <type>text/plain</type>
            <size>6076</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ5NzM4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBA
CisyMDEzLTA1LTA4ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgREZHQXJyYXlNb2RlOjpmcm9tT2JzZXJ2ZWQgaXMgdG9vIGxpYmVyYWwgd2hlbiBp
dCBzZWVzIGRpZmZlcmVudCBBcnJheSBhbmQgTm9uQXJyYXkgc2hhcGVzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTU4MDUKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJdCBjaGVja3MgdGhlIG9ic2VydmVk
IEFycmF5TW9kZXMgdG8gc2VlIGlmIHdlIGhhdmUgc2VlbiBhbnkgQXJyYXlXaXRoKiBmaXJzdC4g
SWYgc28sIGl0IGFzc3VtZXMgaXQncyAKKyAgICAgICAgYW4gQXJyYXk6OkFycmF5LCBldmVuIGlm
IHdlJ3ZlIGFsc28gb2JzZXJ2ZWQgYW55IE5vbkFycmF5V2l0aCogaW4gdGhlIEFycmF5UHJvZmls
ZS4gVGhpcyBsZWFkcyB0byB0aGUgCisgICAgICAgIGNvZGUgZ2VuZXJhdGVkIGJ5IGp1bXBTbG93
Rm9yVW53YW50ZWRBcnJheU1vZGUgdG8gY2hlY2sgdGhlIGluZGV4aW5nIHR5cGUgYWdhaW5zdCAo
c2hhcGUgfCBJc0FycmF5KSAKKyAgICAgICAgaW5zdGVhZCBvZiBqdXN0IHNoYXBlLCB3aGljaCBj
YW4gY2F1c2UgdXMgdG8gZXhpdCBhIGxvdCBpbiB0aGUgY2FzZSB0aGF0IHdlIHNhdyBoYXZlIGEg
Tm9uQXJyYXkuCisKKyAgICAgICAgVG8gZml4LCB3ZSBzaW1wbHkgbmVlZCB0byBjaGFuZ2UgdGhl
IG9yZGVyIG9mIHRoZSBpZi1zdGF0ZW1lbnRzIGluIGZyb21PYnNlcnZlZCB0byBjaGVjayBmb3Ig
CisgICAgICAgIE5vbkFycmF5IEFycmF5TW9kZXMgZmlyc3QuCisKKyAgICAgICAgKiBkZmcvREZH
QXJyYXlNb2RlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBcnJheU1vZGU6OmZyb21PYnNlcnZl
ZCk6CisKIDIwMTMtMDUtMDcgIEp1bGllbiBCcmlhbmNlYXUgIDxqYnJpYW5jZWF1QG5kcy5jb20+
CiAKICAgICAgICAgVGFrZSBhZHZhbnRhZ2Ugb2YgcHJlLWRlY3JlbWVudCBhbmQgcG9zdC1pbmNy
ZW1lbnQgb3Bjb2RlcyBmb3Igc2g0IGJhc2UgSklULgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAkocmV2aXNpb24gMTQ5NzA4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIs
MTAgKzExMiwxMCBAQCBBcnJheU1vZGUgQXJyYXlNb2RlOjpmcm9tT2JzZXJ2ZWQoQXJyYXlQCiAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgIHR5cGUgPSBBcnJheTo6VW5kZWNpZGVkOwogICAgICAg
ICAKLSAgICAgICAgaWYgKG9ic2VydmVkICYgKGFzQXJyYXlNb2RlcyhBcnJheVdpdGhVbmRlY2lk
ZWQpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aEludDMyKSB8IGFzQXJyYXlNb2RlcyhBcnJheVdp
dGhEb3VibGUpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aENvbnRpZ3VvdXMpIHwgYXNBcnJheU1v
ZGVzKEFycmF5V2l0aEFycmF5U3RvcmFnZSkgfCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoU2xvd1B1
dEFycmF5U3RvcmFnZSkpKQotICAgICAgICAgICAgYXJyYXlDbGFzcyA9IEFycmF5OjpBcnJheTsK
LSAgICAgICAgZWxzZSBpZiAob2JzZXJ2ZWQgJiAoYXNBcnJheU1vZGVzKE5vbkFycmF5KSB8IGFz
QXJyYXlNb2RlcyhOb25BcnJheVdpdGhJbnQzMikgfCBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRo
RG91YmxlKSB8IGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhDb250aWd1b3VzKSB8IGFzQXJyYXlN
b2RlcyhOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0
aFNsb3dQdXRBcnJheVN0b3JhZ2UpKSkKKyAgICAgICAgaWYgKG9ic2VydmVkICYgKGFzQXJyYXlN
b2RlcyhOb25BcnJheSkgfCBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoSW50MzIpIHwgYXNBcnJh
eU1vZGVzKE5vbkFycmF5V2l0aERvdWJsZSkgfCBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQ29u
dGlndW91cykgfCBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSB8IGFzQXJy
YXlNb2RlcyhOb25BcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlKSkpCiAgICAgICAgICAgICBh
cnJheUNsYXNzID0gQXJyYXk6Ok5vbkFycmF5OworICAgICAgICBlbHNlIGlmIChvYnNlcnZlZCAm
IChhc0FycmF5TW9kZXMoQXJyYXlXaXRoVW5kZWNpZGVkKSB8IGFzQXJyYXlNb2RlcyhBcnJheVdp
dGhJbnQzMikgfCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoRG91YmxlKSB8IGFzQXJyYXlNb2RlcyhB
cnJheVdpdGhDb250aWd1b3VzKSB8IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhBcnJheVN0b3JhZ2Up
IHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UpKSkKKyAgICAgICAg
ICAgIGFycmF5Q2xhc3MgPSBBcnJheTo6QXJyYXk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAg
IGFycmF5Q2xhc3MgPSBBcnJheTo6UG9zc2libHlBcnJheTsKICAgICAgICAgCkluZGV4OiBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAxNDk3MzgpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxOSBAQAorMjAxMy0wNS0wOCAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJl
cmdAYXBwbGUuY29tPgorCisgICAgICAgIERGR0FycmF5TW9kZTo6ZnJvbU9ic2VydmVkIGlzIHRv
byBsaWJlcmFsIHdoZW4gaXQgc2VlcyBkaWZmZXJlbnQgQXJyYXkgYW5kIE5vbkFycmF5IHNoYXBl
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE1ODA1
CisKKyAgICAgICAgQWRkZWQgcmVncmVzc2lvbiB0ZXN0IGZvciBhcnJheSBhY2Nlc3Mgb3ZlciBw
b2x5bW9ycGhpYyBhcnJheSB2cy4gbm9uLWFycmF5IGluZGV4aW5nIHR5cGVzLgorICAgICAgICBX
aXRoIHRoZSBmaXgsIHdlIGdldCAzLjY2NnggZmFzdGVyIG9uIHRoaXMgbWljcm9iZW5jaG1hcmsu
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBmYXN0
L2pzL3JlZ3Jlc3MvYXJyYXktbm9uYXJyYXktcG9seW1vcnBoaWMtYWNjZXNzLWV4cGVjdGVkLnR4
dDogQWRkZWQuCisgICAgICAgICogZmFzdC9qcy9yZWdyZXNzL2FycmF5LW5vbmFycmF5LXBvbHlt
b3JwaGljLWFjY2Vzcy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL3JlZ3Jlc3Mvc2Ny
aXB0LXRlc3RzL2FycmF5LW5vbmFycmF5LXBvbHltb3JwaGljLWFjY2Vzcy5qczogQWRkZWQuCisg
ICAgICAgIChmKToKKyAgICAgICAgKHJ1bik6CisKIDIwMTMtMDUtMDggIFpvbHRhbiBBcnZhaSAg
PHphcnZhaUBpbmYudS1zemVnZWQuaHU+CiAKICAgICAgICAgW1F0XSBVbnJldmlld2VkIGdhcmRl
bmluZyBhZnRlciByMTQ5MjkyLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL2Fy
cmF5LW5vbmFycmF5LXBvbHltb3JwaGljLWFjY2Vzcy1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL2FycmF5LW5vbmFycmF5LXBvbHltb3JwaGlj
LWFjY2Vzcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pz
L3JlZ3Jlc3MvYXJyYXktbm9uYXJyYXktcG9seW1vcnBoaWMtYWNjZXNzLWV4cGVjdGVkLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3MvYXJyYXktbm9uYXJyYXkt
cG9seW1vcnBoaWMtYWNjZXNzCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBv
ZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNT
IG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKwor
VEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvYXJyYXkt
bm9uYXJyYXktcG9seW1vcnBoaWMtYWNjZXNzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZmFzdC9qcy9yZWdyZXNzL2FycmF5LW5vbmFycmF5LXBvbHltb3JwaGljLWFjY2Vzcy5odG1s
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL2FycmF5LW5vbmFy
cmF5LXBvbHltb3JwaGljLWFjY2Vzcy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIg
QEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNv
dXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0
IHNyYz0icmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJz
Y3JpcHQtdGVzdHMvYXJyYXktbm9uYXJyYXktcG9seW1vcnBoaWMtYWNjZXNzLmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9k
eT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9zY3JpcHQtdGVz
dHMvYXJyYXktbm9uYXJyYXktcG9seW1vcnBoaWMtYWNjZXNzLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvYXJyYXktbm9uYXJyYXktcG9s
eW1vcnBoaWMtYWNjZXNzLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9y
ZWdyZXNzL3NjcmlwdC10ZXN0cy9hcnJheS1ub25hcnJheS1wb2x5bW9ycGhpYy1hY2Nlc3MuanMJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMyBAQAordmFyIGYgPSBmdW5jdGlvbihhKSB7Cisg
ICAgdmFyIHN1bSA9IDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSB7
CisgICAgICAgIHN1bSArPSBhW2ldOworICAgIH0gICAKKyAgICByZXR1cm4gc3VtOworfTsKKwor
dmFyIHJ1biA9IGZ1bmN0aW9uKCkgeworICAgIHZhciBvMSA9IFtdOyAKKyAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IDEwMDsgaSsrKSB7CisgICAgICAgIG8xW2ldID0gaTsKKyAgICB9CisgICAgCisg
ICAgdmFyIG8yID0ge307IAorICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbzEubGVuZ3RoOyBpKysp
IHsKKyAgICAgICAgbzJbaV0gPSBvMVtpXTsKKyAgICB9CisgICAgbzIubGVuZ3RoID0gbzEubGVu
Z3RoOworCisgICAgdmFyIHN1bSA9IDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDA7
IGkrKykgeworICAgICAgICBpZiAoaSAlIDIgPT09IDApCisgICAgICAgICAgICBzdW0gKz0gZihv
MSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHN1bSArPSBmKG8yKTsKKyAgICB9CisgICAg
cmV0dXJuIHN1bTsKK307CisKK3ZhciByZXN1bHQgPSBydW4oKTsKK2lmIChyZXN1bHQgIT09IDQ5
NTAwMDAwMCkKKyAgICB0aHJvdyAiQmFkIHJlc3VsdCI7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>201129</attachid>
            <date>2013-05-08 19:43:01 -0700</date>
            <delta_ts>2013-05-09 12:18:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-115805-20130508194251.patch</filename>
            <type>text/plain</type>
            <size>6553</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ5Nzg2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0IEBA
CisyMDEzLTA1LTA4ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgREZHQXJyYXlNb2RlOjpmcm9tT2JzZXJ2ZWQgaXMgdG9vIGxpYmVyYWwgd2hlbiBp
dCBzZWVzIGRpZmZlcmVudCBBcnJheSBhbmQgTm9uQXJyYXkgc2hhcGVzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTU4MDUKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJdCBjaGVja3MgdGhlIG9ic2VydmVk
IEFycmF5TW9kZXMgdG8gc2VlIGlmIHdlIGhhdmUgc2VlbiBhbnkgQXJyYXlXaXRoKiBmaXJzdC4g
SWYgc28sIGl0IGFzc3VtZXMgaXQncyAKKyAgICAgICAgYW4gQXJyYXk6OkFycmF5LCBldmVuIGlm
IHdlJ3ZlIGFsc28gb2JzZXJ2ZWQgYW55IE5vbkFycmF5V2l0aCogaW4gdGhlIEFycmF5UHJvZmls
ZS4gVGhpcyBsZWFkcyB0byB0aGUgCisgICAgICAgIGNvZGUgZ2VuZXJhdGVkIGJ5IGp1bXBTbG93
Rm9yVW53YW50ZWRBcnJheU1vZGUgdG8gY2hlY2sgdGhlIGluZGV4aW5nIHR5cGUgYWdhaW5zdCAo
c2hhcGUgfCBJc0FycmF5KSAKKyAgICAgICAgaW5zdGVhZCBvZiBqdXN0IHNoYXBlLCB3aGljaCBj
YW4gY2F1c2UgdXMgdG8gZXhpdCBhIGxvdCBpbiB0aGUgY2FzZSB0aGF0IHdlIHNhdyBoYXZlIGEg
Tm9uQXJyYXkuCisKKyAgICAgICAgVG8gZml4IHRoaXMgd2UgbmVlZCB0byBhZGQgYSBjYXNlIHRo
YXQgY2hlY2tzIGZvciBib3RoIEFycmF5V2l0aCogYW5kIE5vbkFycmF5V2l0aCogY2FzZXMgZmly
c3QsIHdoaWNoIAorICAgICAgICBzaG91bGQgdGhlbiB1c2UgQXJyYXk6OlBvc3NpYmx5QXJyYXks
IHRoZW4gZG8gdGhlIGNoZWNrcyB3ZSB3ZXJlIGFscmVhZHkgZG9pbmcuCisKKyAgICAgICAgKiBi
eXRlY29kZS9BcnJheVByb2ZpbGUuaDoKKyAgICAgICAgKEpTQzo6aGFzU2VlbkFycmF5KToKKyAg
ICAgICAgKEpTQzo6aGFzU2Vlbk5vbkFycmF5KToKKyAgICAgICAgKiBkZmcvREZHQXJyYXlNb2Rl
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBcnJheU1vZGU6OmZyb21PYnNlcnZlZCk6CisKIDIw
MTMtMDUtMDcgIEp1bGllbiBCcmlhbmNlYXUgIDxqYnJpYW5jZWF1QG5kcy5jb20+CiAKICAgICAg
ICAgVGFrZSBhZHZhbnRhZ2Ugb2YgcHJlLWRlY3JlbWVudCBhbmQgcG9zdC1pbmNyZW1lbnQgb3Bj
b2RlcyBmb3Igc2g0IGJhc2UgSklULgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0FycmF5UHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9BcnJheVByb2ZpbGUuaAkocmV2aXNpb24gMTQ5NzgwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0FycmF5UHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUs
NiArMTE1LDE2IEBAIGlubGluZSBib29sIHNob3VsZFVzZUludDMyKEFycmF5TW9kZXMgYXIKICAg
ICByZXR1cm4gYXJyYXlNb2Rlc0luY2x1ZGUoYXJyYXlNb2RlcywgSW50MzJTaGFwZSk7CiB9CiAK
K2lubGluZSBib29sIGhhc1NlZW5BcnJheShBcnJheU1vZGVzIGFycmF5TW9kZXMpCit7CisgICAg
cmV0dXJuIGFycmF5TW9kZXMgJiBBTExfQVJSQVlfQVJSQVlfTU9ERVM7Cit9CisKK2lubGluZSBi
b29sIGhhc1NlZW5Ob25BcnJheShBcnJheU1vZGVzIGFycmF5TW9kZXMpCit7CisgICAgcmV0dXJu
IGFycmF5TW9kZXMgJiBBTExfTk9OX0FSUkFZX0FSUkFZX01PREVTOworfQorCiBjbGFzcyBBcnJh
eVByb2ZpbGUgewogcHVibGljOgogICAgIEFycmF5UHJvZmlsZSgpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCShyZXZpc2lvbiAxNDk3ODApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTExMiw5ICsxMTIsMTEgQEAgQXJyYXlNb2RlIEFycmF5TW9kZTo6ZnJvbU9ic2VydmVkKEFy
cmF5UAogICAgICAgICBlbHNlCiAgICAgICAgICAgICB0eXBlID0gQXJyYXk6OlVuZGVjaWRlZDsK
ICAgICAgICAgCi0gICAgICAgIGlmIChvYnNlcnZlZCAmIChhc0FycmF5TW9kZXMoQXJyYXlXaXRo
VW5kZWNpZGVkKSB8IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhJbnQzMikgfCBhc0FycmF5TW9kZXMo
QXJyYXlXaXRoRG91YmxlKSB8IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhDb250aWd1b3VzKSB8IGFz
QXJyYXlNb2RlcyhBcnJheVdpdGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0
aFNsb3dQdXRBcnJheVN0b3JhZ2UpKSkKKyAgICAgICAgaWYgKGhhc1NlZW5BcnJheShvYnNlcnZl
ZCkgJiYgaGFzU2Vlbk5vbkFycmF5KG9ic2VydmVkKSkKKyAgICAgICAgICAgIGFycmF5Q2xhc3Mg
PSBBcnJheTo6UG9zc2libHlBcnJheTsKKyAgICAgICAgZWxzZSBpZiAoaGFzU2VlbkFycmF5KG9i
c2VydmVkKSkKICAgICAgICAgICAgIGFycmF5Q2xhc3MgPSBBcnJheTo6QXJyYXk7Ci0gICAgICAg
IGVsc2UgaWYgKG9ic2VydmVkICYgKGFzQXJyYXlNb2RlcyhOb25BcnJheSkgfCBhc0FycmF5TW9k
ZXMoTm9uQXJyYXlXaXRoSW50MzIpIHwgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aERvdWJsZSkg
fCBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQ29udGlndW91cykgfCBhc0FycmF5TW9kZXMoTm9u
QXJyYXlXaXRoQXJyYXlTdG9yYWdlKSB8IGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhTbG93UHV0
QXJyYXlTdG9yYWdlKSkpCisgICAgICAgIGVsc2UgaWYgKGhhc1NlZW5Ob25BcnJheShvYnNlcnZl
ZCkpCiAgICAgICAgICAgICBhcnJheUNsYXNzID0gQXJyYXk6Ok5vbkFycmF5OwogICAgICAgICBl
bHNlCiAgICAgICAgICAgICBhcnJheUNsYXNzID0gQXJyYXk6OlBvc3NpYmx5QXJyYXk7CkluZGV4
OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCShyZXZpc2lvbiAxNDk3ODYpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwxOSBAQAorMjAxMy0wNS0wOCAgTWFyayBIYWhuZW5iZXJnICA8bWhh
aG5lbmJlcmdAYXBwbGUuY29tPgorCisgICAgICAgIERGR0FycmF5TW9kZTo6ZnJvbU9ic2VydmVk
IGlzIHRvbyBsaWJlcmFsIHdoZW4gaXQgc2VlcyBkaWZmZXJlbnQgQXJyYXkgYW5kIE5vbkFycmF5
IHNoYXBlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTE1ODA1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
QWRkZWQgcmVncmVzc2lvbiB0ZXN0IGZvciBhcnJheSBhY2Nlc3Mgb3ZlciBwb2x5bW9ycGhpYyBh
cnJheSB2cy4gbm9uLWFycmF5IGluZGV4aW5nIHR5cGVzLgorICAgICAgICBXaXRoIHRoZSBmaXgs
IHdlIGdldCAzLjY2NnggZmFzdGVyIG9uIHRoaXMgbWljcm9iZW5jaG1hcmsuCisKKyAgICAgICAg
KiBmYXN0L2pzL3JlZ3Jlc3MvYXJyYXktbm9uYXJyYXktcG9seW1vcnBoaWMtYWNjZXNzLWV4cGVj
dGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9qcy9yZWdyZXNzL2FycmF5LW5vbmFycmF5
LXBvbHltb3JwaGljLWFjY2Vzcy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL3JlZ3Jl
c3Mvc2NyaXB0LXRlc3RzL2FycmF5LW5vbmFycmF5LXBvbHltb3JocGljLWFjY2Vzcy5qczogQWRk
ZWQuCisgICAgICAgIChmKToKKyAgICAgICAgKHJ1bik6CisKIDIwMTMtMDUtMDggIFNlb2tqdSBL
d29uICA8c2Vva2p1Lmt3b25AZ21haWwuY29tPgogCiAgICAgICAgIFtFRkxdIEdldCByaWQgb2Yg
ZHVwbGljYXRlIGVudHJ5IGxpbmUgaW4gVGVzdEV4cGVjdGF0aW9ucwpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC9qcy9yZWdyZXNzL2FycmF5LW5vbmFycmF5LXBvbHltb3JwaGljLWFjY2Vzcy1leHBl
Y3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL2FycmF5
LW5vbmFycmF5LXBvbHltb3JwaGljLWFjY2Vzcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvYXJyYXktbm9uYXJyYXktcG9seW1vcnBoaWMt
YWNjZXNzLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBACitKU1Jl
Z3Jlc3MvYXJyYXktbm9uYXJyYXktcG9seW1vcnBoaWMtYWNjZXNzCisKK09uIHN1Y2Nlc3MsIHlv
dSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNU
IENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1
bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9m
YXN0L2pzL3JlZ3Jlc3MvYXJyYXktbm9uYXJyYXktcG9seW1vcnBoaWMtYWNjZXNzLmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL2FycmF5LW5vbmFycmF5LXBv
bHltb3JwaGljLWFjY2Vzcy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9q
cy9yZWdyZXNzL2FycmF5LW5vbmFycmF5LXBvbHltb3JwaGljLWFjY2Vzcy5odG1sCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4K
KzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9o
ZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvYXJyYXktbm9uYXJyYXktcG9seW1vcnBo
aWMtYWNjZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcmVncmVzcy1w
b3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0
LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qv
anMvcmVncmVzcy9zY3JpcHQtdGVzdHMvYXJyYXktbm9uYXJyYXktcG9seW1vcmhwaWMtYWNjZXNz
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9zY3JpcHQtdGVz
dHMvYXJyYXktbm9uYXJyYXktcG9seW1vcmhwaWMtYWNjZXNzLmpzCShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9hcnJheS1ub25hcnJheS1w
b2x5bW9yaHBpYy1hY2Nlc3MuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMyBAQAordmFy
IGYgPSBmdW5jdGlvbihhKSB7CisgICAgdmFyIHN1bSA9IDA7CisgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBhLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIHN1bSArPSBhW2ldOworICAgIH0gICAKKyAg
ICByZXR1cm4gc3VtOworfTsKKwordmFyIHJ1biA9IGZ1bmN0aW9uKCkgeworICAgIHZhciBvMSA9
IFtdOyAKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDsgaSsrKSB7CisgICAgICAgIG8xW2ld
ID0gaTsKKyAgICB9CisgICAgCisgICAgdmFyIG8yID0ge307IAorICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgbzEubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgbzJbaV0gPSBvMVtpXTsKKyAgICB9Cisg
ICAgbzIubGVuZ3RoID0gbzEubGVuZ3RoOworCisgICAgdmFyIHN1bSA9IDA7CisgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCAxMDAwMDA7IGkrKykgeworICAgICAgICBpZiAoaSAlIDIgPT09IDApCisg
ICAgICAgICAgICBzdW0gKz0gZihvMSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHN1bSAr
PSBmKG8yKTsKKyAgICB9CisgICAgcmV0dXJuIHN1bTsKK307CisKK3ZhciByZXN1bHQgPSBydW4o
KTsKK2lmIChyZXN1bHQgIT09IDQ5NTAwMDAwMCkKKyAgICB0aHJvdyAiQmFkIHJlc3VsdCI7Cg==
</data>
<flag name="review"
          id="222477"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>