<?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>58058</bug_id>
          
          <creation_ts>2011-04-07 10:27:16 -0700</creation_ts>
          <short_desc>Replace WKStringGetCharactersPtr() with WKStringGetCharacters()</short_desc>
          <delta_ts>2011-04-07 13:15:02 -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>528+ (Nightly build)</version>
          <rep_platform>Other</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="Jeff Miller">jeffm</reporter>
          <assigned_to name="Jeff Miller">jeffm</assigned_to>
          <cc>abarth</cc>
    
    <cc>aroben</cc>
    
    <cc>eric</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>381460</commentid>
    <comment_count>0</comment_count>
    <who name="Jeff Miller">jeffm</who>
    <bug_when>2011-04-07 10:27:16 -0700</bug_when>
    <thetext>Replace WKStringGetCharactersPtr() with WKStringGetCharacters()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381464</commentid>
    <comment_count>1</comment_count>
      <attachid>88659</attachid>
    <who name="Jeff Miller">jeffm</who>
    <bug_when>2011-04-07 10:31:36 -0700</bug_when>
    <thetext>Created attachment 88659
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381471</commentid>
    <comment_count>2</comment_count>
      <attachid>88659</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-04-07 10:40:44 -0700</bug_when>
    <thetext>Comment on attachment 88659
Patch

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

I should be encouraging you to write API tests for the new API you&apos;re adding. They&apos;re pretty easy to write; just add some code to Tools/TestWebKitAPI/Tests/WebKit2/WKString.cpp.

&gt; Source/WebKit2/Shared/WebString.h:68
&gt; +        ASSERT(buffer);
&gt; +        if (!buffer)
&gt; +            return 0;

I don&apos;t think we&apos;re normally this defensive in the WK2 API.

&gt; Source/WebKit2/Shared/WebString.h:72
&gt; +        size_t lengthInBytes = m_string.length() * sizeof(UChar);
&gt; +        if (bufferSize &gt; lengthInBytes)
&gt; +            bufferSize = lengthInBytes;
&gt; +        memcpy(buffer, m_string.characters(), bufferSize);

This will cause a buffer overrun if bufferSize is less than lengthInBytes.

&gt; Source/WebKit2/Shared/API/c/WKString.cpp:55
&gt; +size_t WKStringGetCharacters(WKStringRef stringRef, WKChar* buffer, size_t bufferSize)

It&apos;s surprising that this API takes a number bytes to copy rather than a number of characters.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381478</commentid>
    <comment_count>3</comment_count>
      <attachid>88659</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-04-07 10:44:16 -0700</bug_when>
    <thetext>Comment on attachment 88659
Patch

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

&gt;&gt; Source/WebKit2/Shared/WebString.h:72
&gt;&gt; +        memcpy(buffer, m_string.characters(), bufferSize);
&gt; 
&gt; This will cause a buffer overrun if bufferSize is less than lengthInBytes.

Maybe this was intentional? Perhaps the caller is required to pass in a large enough bufferSize?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381486</commentid>
    <comment_count>4</comment_count>
      <attachid>88659</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-04-07 10:52:59 -0700</bug_when>
    <thetext>Comment on attachment 88659
Patch

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

&gt;&gt;&gt; Source/WebKit2/Shared/WebString.h:72
&gt;&gt;&gt; +        memcpy(buffer, m_string.characters(), bufferSize);
&gt;&gt; 
&gt;&gt; This will cause a buffer overrun if bufferSize is less than lengthInBytes.
&gt; 
&gt; Maybe this was intentional? Perhaps the caller is required to pass in a large enough bufferSize?

Jeff politely pointed out to me that there is in fact no overrun here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381555</commentid>
    <comment_count>5</comment_count>
      <attachid>88670</attachid>
    <who name="Jeff Miller">jeffm</who>
    <bug_when>2011-04-07 12:04:42 -0700</bug_when>
    <thetext>Created attachment 88670
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381558</commentid>
    <comment_count>6</comment_count>
      <attachid>88670</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-04-07 12:07:26 -0700</bug_when>
    <thetext>Comment on attachment 88670
Patch

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

&gt; Source/WebKit2/Shared/WebString.h:68
&gt; +        if (bufferLength &gt; length)
&gt; +            bufferLength = length;

You could use std::min here.

&gt; Source/WebKit2/Shared/API/c/WKString.cpp:58
&gt; +    return (toImpl(stringRef)-&gt;getCharacters(static_cast&lt;UChar*&gt;(buffer), bufferLength));

I&apos;m a little surprised you don&apos;t need reinterpret_cast here.

&gt; Tools/TestWebKitAPI/Tests/WebKit2/WKString.cpp:60
&gt; +    maxSize = WKStringGetLength(string);
&gt; +    TEST_ASSERT(maxSize == 5);
&gt; +
&gt; +    WKChar* uniBuffer = new WKChar[maxSize];
&gt; +    actualSize = WKStringGetCharacters(string, uniBuffer, maxSize);
&gt; +    TEST_ASSERT(actualSize == 5);
&gt; +    
&gt; +    WKChar helloBuffer[] = { &apos;h&apos;, &apos;e&apos;, &apos;l&apos;, &apos;l&apos;, &apos;o&apos; };
&gt; +    TEST_ASSERT(!memcmp(uniBuffer, helloBuffer, 10));
&gt; +    
&gt; +    delete[] uniBuffer;
&gt; +    

Might be good to have tests that pass in buffers that are larger and smaller than needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381561</commentid>
    <comment_count>7</comment_count>
    <who name="Jeff Miller">jeffm</who>
    <bug_when>2011-04-07 12:11:09 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 88670 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=88670&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/Shared/WebString.h:68
&gt; &gt; +        if (bufferLength &gt; length)
&gt; &gt; +            bufferLength = length;
&gt; 
&gt; You could use std::min here.

Will do.

&gt; 
&gt; &gt; Source/WebKit2/Shared/API/c/WKString.cpp:58
&gt; &gt; +    return (toImpl(stringRef)-&gt;getCharacters(static_cast&lt;UChar*&gt;(buffer), bufferLength));
&gt; 
&gt; I&apos;m a little surprised you don&apos;t need reinterpret_cast here.

Yeah, but it works.  My typical MO is to try static_cast first, and use reinterpret_cast if the compiler complains. :)

&gt; 
&gt; &gt; Tools/TestWebKitAPI/Tests/WebKit2/WKString.cpp:60
&gt; &gt; +    maxSize = WKStringGetLength(string);
&gt; &gt; +    TEST_ASSERT(maxSize == 5);
&gt; &gt; +
&gt; &gt; +    WKChar* uniBuffer = new WKChar[maxSize];
&gt; &gt; +    actualSize = WKStringGetCharacters(string, uniBuffer, maxSize);
&gt; &gt; +    TEST_ASSERT(actualSize == 5);
&gt; &gt; +    
&gt; &gt; +    WKChar helloBuffer[] = { &apos;h&apos;, &apos;e&apos;, &apos;l&apos;, &apos;l&apos;, &apos;o&apos; };
&gt; &gt; +    TEST_ASSERT(!memcmp(uniBuffer, helloBuffer, 10));
&gt; &gt; +    
&gt; &gt; +    delete[] uniBuffer;
&gt; &gt; +    
&gt; 
&gt; Might be good to have tests that pass in buffers that are larger and smaller than needed.

Good idea, I&apos;ll add those.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381591</commentid>
    <comment_count>8</comment_count>
    <who name="Jeff Miller">jeffm</who>
    <bug_when>2011-04-07 12:49:27 -0700</bug_when>
    <thetext>Committed r83198: &lt;http://trac.webkit.org/changeset/83198&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381612</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-07 13:15:02 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/83198 might have broken SnowLeopard Intel Release (Build)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88659</attachid>
            <date>2011-04-07 10:31:36 -0700</date>
            <delta_ts>2011-04-07 12:04:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-58058-20110407103134.patch</filename>
            <type>text/plain</type>
            <size>3691</size>
            <attacher name="Jeff Miller">jeffm</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDgzMTgxKQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMTEtMDQtMDcgIEplZmYgTWls
bGVyICA8amVmZm1AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFJlcGxhY2UgV0tTdHJpbmdHZXRDaGFyYWN0ZXJzUHRyKCkgd2l0aCBX
S1N0cmluZ0dldENoYXJhY3RlcnMoKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NTgwNTgKKyAgICAgICAgCisgICAgICAgIFdLU3RyaW5nR2V0Q2hhcmFj
dGVyc1B0cigpIGV4cG9zZXMgdGhlIGludGVybmFsIGltcGxlbWVudGF0aW9uIG9mIFdLU3RyaW5n
LCBzbyBjaGFuZ2UgdGhpcyB0byBXS1N0cmluZ0dldENoYXJhY3RlcnMoKSwgd2hpY2ggbWFrZXMg
YSBVVEYtMTYgY29weS4KKworICAgICAgICAqIFNoYXJlZC9BUEkvYy9XS1N0cmluZy5jcHA6Cisg
ICAgICAgIChXS1N0cmluZ0dldENoYXJhY3RlcnMpOiBBZGRlZCwgcmVwbGFjZXMgV0tTdHJpbmdH
ZXRDaGFyYWN0ZXJzUHRyKCkuCisgICAgICAgICogU2hhcmVkL0FQSS9jL1dLU3RyaW5nLmg6IFJl
cGxhY2VkIFdLU3RyaW5nR2V0Q2hhcmFjdGVyc1B0cigpIHdpdGggV0tTdHJpbmdHZXRDaGFyYWN0
ZXJzKCkuCisgICAgICAgICogU2hhcmVkL1dlYlN0cmluZy5oOgorICAgICAgICAoV2ViS2l0OjpX
ZWJTdHJpbmc6OmdldENoYXJhY3RlcnMpOiBBZGRlZC4KKwogMjAxMS0wNC0wNyAgU2lkZGhhcnRo
IE1hdGh1ciAgPHNpZGRoYXJ0aC5tYXRodXJAbm9raWEuY29tPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IExhc3psbyBHb21ib3MuCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViU3RyaW5n
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlN0cmluZy5oCShyZXZp
c2lvbiA4MzE3OSkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJTdHJpbmcuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTksNyArNTksMTkgQEAgcHVibGljOgogICAgIGJvb2wgaXNFbXB0eSgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RyaW5nLmlzRW1wdHkoKTsgfQogICAgIAogICAgIHNpemVfdCBsZW5n
dGgoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZy5sZW5ndGgoKTsgfQotICAgIGNvbnN0IFVDaGFy
KiBjaGFyYWN0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcuY2hhcmFjdGVycygpOyB9Cisg
ICAgc2l6ZV90IGdldENoYXJhY3RlcnMoVUNoYXIqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUp
IGNvbnN0CisgICAgeworICAgICAgICBpZiAoIWJ1ZmZlclNpemUpCisgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgQVNTRVJUKGJ1ZmZlcik7CisgICAgICAgIGlmICghYnVmZmVyKQorICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHNpemVfdCBsZW5ndGhJbkJ5dGVzID0gbV9zdHJp
bmcubGVuZ3RoKCkgKiBzaXplb2YoVUNoYXIpOworICAgICAgICBpZiAoYnVmZmVyU2l6ZSA+IGxl
bmd0aEluQnl0ZXMpCisgICAgICAgICAgICBidWZmZXJTaXplID0gbGVuZ3RoSW5CeXRlczsKKyAg
ICAgICAgbWVtY3B5KGJ1ZmZlciwgbV9zdHJpbmcuY2hhcmFjdGVycygpLCBidWZmZXJTaXplKTsK
KyAgICAgICAgcmV0dXJuIGJ1ZmZlclNpemU7CisgICAgfQogCiAgICAgc2l6ZV90IG1heGltdW1V
VEY4Q1N0cmluZ1NpemUoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZy5sZW5ndGgoKSAqIDMgKyAx
OyB9CiAgICAgc2l6ZV90IGdldFVURjhDU3RyaW5nKGNoYXIqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZl
clNpemUpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL2MvV0tTdHJpbmcuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvYy9XS1N0cmluZy5jcHAJKHJl
dmlzaW9uIDgzMTc5KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9jL1dLU3RyaW5nLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTIsMTAgKzUyLDEwIEBAIHNpemVfdCBXS1N0cmluZ0dldExl
bmd0aChXS1N0cmluZ1JlZiBzdHIKICAgICByZXR1cm4gdG9JbXBsKHN0cmluZ1JlZiktPmxlbmd0
aCgpOwogfQogCi1jb25zdCBXS0NoYXIqIFdLU3RyaW5nR2V0Q2hhcmFjdGVyc1B0cihXS1N0cmlu
Z1JlZiBzdHJpbmdSZWYpCitzaXplX3QgV0tTdHJpbmdHZXRDaGFyYWN0ZXJzKFdLU3RyaW5nUmVm
IHN0cmluZ1JlZiwgV0tDaGFyKiBidWZmZXIsIHNpemVfdCBidWZmZXJTaXplKQogewotICAgIENP
TVBJTEVfQVNTRVJUKHNpemVvZihXS0NoYXIpID09IHNpemVvZihVQ2hhciksIFdLU3RyaW5nR2V0
Q2hhcmFjdGVyc1B0cl9zaXplb2ZfV0tDaGFyX21hdGNoZXNfVUNoYXIpOwotICAgIHJldHVybiBy
ZWludGVycHJldF9jYXN0PGNvbnN0IFdLQ2hhcio+KHRvSW1wbChzdHJpbmdSZWYpLT5jaGFyYWN0
ZXJzKCkpOworICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihXS0NoYXIpID09IHNpemVvZihVQ2hh
ciksIFdLU3RyaW5nR2V0Q2hhcmFjdGVyc19zaXplb2ZfV0tDaGFyX21hdGNoZXNfVUNoYXIpOwor
ICAgIHJldHVybiAodG9JbXBsKHN0cmluZ1JlZiktPmdldENoYXJhY3RlcnMoc3RhdGljX2Nhc3Q8
VUNoYXIqPihidWZmZXIpLCBidWZmZXJTaXplKSk7CiB9CiAKIHNpemVfdCBXS1N0cmluZ0dldE1h
eGltdW1VVEY4Q1N0cmluZ1NpemUoV0tTdHJpbmdSZWYgc3RyaW5nUmVmKQpJbmRleDogU291cmNl
L1dlYktpdDIvU2hhcmVkL0FQSS9jL1dLU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvU2hhcmVkL0FQSS9jL1dLU3RyaW5nLmgJKHJldmlzaW9uIDgzMTc5KQorKysgU291cmNl
L1dlYktpdDIvU2hhcmVkL0FQSS9jL1dLU3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcg
KzUwLDcgQEAgV0tfRVhQT1JUIFdLU3RyaW5nUmVmIFdLU3RyaW5nQ3JlYXRlV2l0aAogV0tfRVhQ
T1JUIGJvb2wgV0tTdHJpbmdJc0VtcHR5KFdLU3RyaW5nUmVmIHN0cmluZyk7CiAKIFdLX0VYUE9S
VCBzaXplX3QgV0tTdHJpbmdHZXRMZW5ndGgoV0tTdHJpbmdSZWYgc3RyaW5nKTsKLVdLX0VYUE9S
VCBjb25zdCBXS0NoYXIqIFdLU3RyaW5nR2V0Q2hhcmFjdGVyc1B0cihXS1N0cmluZ1JlZiBzdHJp
bmcpOworV0tfRVhQT1JUIHNpemVfdCBXS1N0cmluZ0dldENoYXJhY3RlcnMoV0tTdHJpbmdSZWYg
c3RyaW5nLCBXS0NoYXIqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUpOwogCiBXS19FWFBPUlQg
c2l6ZV90IFdLU3RyaW5nR2V0TWF4aW11bVVURjhDU3RyaW5nU2l6ZShXS1N0cmluZ1JlZiBzdHJp
bmcpOwogV0tfRVhQT1JUIHNpemVfdCBXS1N0cmluZ0dldFVURjhDU3RyaW5nKFdLU3RyaW5nUmVm
IHN0cmluZywgY2hhciogYnVmZmVyLCBzaXplX3QgYnVmZmVyU2l6ZSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88670</attachid>
            <date>2011-04-07 12:04:42 -0700</date>
            <delta_ts>2011-04-07 12:07:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-58058-20110407120439.patch</filename>
            <type>text/plain</type>
            <size>4971</size>
            <attacher name="Jeff Miller">jeffm</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDgzMTgxKQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMTEtMDQtMDcgIEplZmYgTWls
bGVyICA8amVmZm1AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFJlcGxhY2UgV0tTdHJpbmdHZXRDaGFyYWN0ZXJzUHRyKCkgd2l0aCBX
S1N0cmluZ0dldENoYXJhY3RlcnMoKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NTgwNTgKKyAgICAgICAgCisgICAgICAgIFdLU3RyaW5nR2V0Q2hhcmFj
dGVyc1B0cigpIGV4cG9zZXMgdGhlIGludGVybmFsIGltcGxlbWVudGF0aW9uIG9mIFdLU3RyaW5n
LCBzbyBjaGFuZ2UgdGhpcyB0byBXS1N0cmluZ0dldENoYXJhY3RlcnMoKSwgd2hpY2ggbWFrZXMg
YSBVVEYtMTYgY29weS4KKworICAgICAgICAqIFNoYXJlZC9BUEkvYy9XS1N0cmluZy5jcHA6Cisg
ICAgICAgIChXS1N0cmluZ0dldENoYXJhY3RlcnMpOiBBZGRlZCwgcmVwbGFjZXMgV0tTdHJpbmdH
ZXRDaGFyYWN0ZXJzUHRyKCkuCisgICAgICAgICogU2hhcmVkL0FQSS9jL1dLU3RyaW5nLmg6IFJl
cGxhY2VkIFdLU3RyaW5nR2V0Q2hhcmFjdGVyc1B0cigpIHdpdGggV0tTdHJpbmdHZXRDaGFyYWN0
ZXJzKCkuCisgICAgICAgICogU2hhcmVkL1dlYlN0cmluZy5oOgorICAgICAgICAoV2ViS2l0OjpX
ZWJTdHJpbmc6OmdldENoYXJhY3RlcnMpOiBBZGRlZC4KKwogMjAxMS0wNC0wNyAgU2lkZGhhcnRo
IE1hdGh1ciAgPHNpZGRoYXJ0aC5tYXRodXJAbm9raWEuY29tPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IExhc3psbyBHb21ib3MuCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViU3RyaW5n
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlN0cmluZy5oCShyZXZp
c2lvbiA4MzE3OSkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJTdHJpbmcuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTksNyArNTksMTYgQEAgcHVibGljOgogICAgIGJvb2wgaXNFbXB0eSgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RyaW5nLmlzRW1wdHkoKTsgfQogICAgIAogICAgIHNpemVfdCBsZW5n
dGgoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZy5sZW5ndGgoKTsgfQotICAgIGNvbnN0IFVDaGFy
KiBjaGFyYWN0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcuY2hhcmFjdGVycygpOyB9Cisg
ICAgc2l6ZV90IGdldENoYXJhY3RlcnMoVUNoYXIqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlckxlbmd0
aCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghYnVmZmVyTGVuZ3RoKQorICAgICAgICAgICAg
cmV0dXJuIDA7CisgICAgICAgIHNpemVfdCBsZW5ndGggPSBtX3N0cmluZy5sZW5ndGgoKTsKKyAg
ICAgICAgaWYgKGJ1ZmZlckxlbmd0aCA+IGxlbmd0aCkKKyAgICAgICAgICAgIGJ1ZmZlckxlbmd0
aCA9IGxlbmd0aDsKKyAgICAgICAgbWVtY3B5KGJ1ZmZlciwgbV9zdHJpbmcuY2hhcmFjdGVycygp
LCBidWZmZXJMZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKKyAgICAgICAgcmV0dXJuIGJ1ZmZlckxl
bmd0aDsKKyAgICB9CiAKICAgICBzaXplX3QgbWF4aW11bVVURjhDU3RyaW5nU2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RyaW5nLmxlbmd0aCgpICogMyArIDE7IH0KICAgICBzaXplX3QgZ2V0VVRG
OENTdHJpbmcoY2hhciogYnVmZmVyLCBzaXplX3QgYnVmZmVyU2l6ZSkKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9BUEkvYy9XS1N0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvU2hhcmVkL0FQSS9jL1dLU3RyaW5nLmNwcAkocmV2aXNpb24gODMxNzkpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvQVBJL2MvV0tTdHJpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
MiwxMCArNTIsMTAgQEAgc2l6ZV90IFdLU3RyaW5nR2V0TGVuZ3RoKFdLU3RyaW5nUmVmIHN0cgog
ICAgIHJldHVybiB0b0ltcGwoc3RyaW5nUmVmKS0+bGVuZ3RoKCk7CiB9CiAKLWNvbnN0IFdLQ2hh
ciogV0tTdHJpbmdHZXRDaGFyYWN0ZXJzUHRyKFdLU3RyaW5nUmVmIHN0cmluZ1JlZikKK3NpemVf
dCBXS1N0cmluZ0dldENoYXJhY3RlcnMoV0tTdHJpbmdSZWYgc3RyaW5nUmVmLCBXS0NoYXIqIGJ1
ZmZlciwgc2l6ZV90IGJ1ZmZlckxlbmd0aCkKIHsKLSAgICBDT01QSUxFX0FTU0VSVChzaXplb2Yo
V0tDaGFyKSA9PSBzaXplb2YoVUNoYXIpLCBXS1N0cmluZ0dldENoYXJhY3RlcnNQdHJfc2l6ZW9m
X1dLQ2hhcl9tYXRjaGVzX1VDaGFyKTsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBXS0NoYXIqPih0b0ltcGwoc3RyaW5nUmVmKS0+Y2hhcmFjdGVycygpKTsKKyAgICBDT01QSUxF
X0FTU0VSVChzaXplb2YoV0tDaGFyKSA9PSBzaXplb2YoVUNoYXIpLCBXS1N0cmluZ0dldENoYXJh
Y3RlcnNfc2l6ZW9mX1dLQ2hhcl9tYXRjaGVzX1VDaGFyKTsKKyAgICByZXR1cm4gKHRvSW1wbChz
dHJpbmdSZWYpLT5nZXRDaGFyYWN0ZXJzKHN0YXRpY19jYXN0PFVDaGFyKj4oYnVmZmVyKSwgYnVm
ZmVyTGVuZ3RoKSk7CiB9CiAKIHNpemVfdCBXS1N0cmluZ0dldE1heGltdW1VVEY4Q1N0cmluZ1Np
emUoV0tTdHJpbmdSZWYgc3RyaW5nUmVmKQpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL0FQ
SS9jL1dLU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9j
L1dLU3RyaW5nLmgJKHJldmlzaW9uIDgzMTc5KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL0FQ
SS9jL1dLU3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgV0tfRVhQT1JU
IFdLU3RyaW5nUmVmIFdLU3RyaW5nQ3JlYXRlV2l0aAogV0tfRVhQT1JUIGJvb2wgV0tTdHJpbmdJ
c0VtcHR5KFdLU3RyaW5nUmVmIHN0cmluZyk7CiAKIFdLX0VYUE9SVCBzaXplX3QgV0tTdHJpbmdH
ZXRMZW5ndGgoV0tTdHJpbmdSZWYgc3RyaW5nKTsKLVdLX0VYUE9SVCBjb25zdCBXS0NoYXIqIFdL
U3RyaW5nR2V0Q2hhcmFjdGVyc1B0cihXS1N0cmluZ1JlZiBzdHJpbmcpOworV0tfRVhQT1JUIHNp
emVfdCBXS1N0cmluZ0dldENoYXJhY3RlcnMoV0tTdHJpbmdSZWYgc3RyaW5nLCBXS0NoYXIqIGJ1
ZmZlciwgc2l6ZV90IGJ1ZmZlckxlbmd0aCk7CiAKIFdLX0VYUE9SVCBzaXplX3QgV0tTdHJpbmdH
ZXRNYXhpbXVtVVRGOENTdHJpbmdTaXplKFdLU3RyaW5nUmVmIHN0cmluZyk7CiBXS19FWFBPUlQg
c2l6ZV90IFdLU3RyaW5nR2V0VVRGOENTdHJpbmcoV0tTdHJpbmdSZWYgc3RyaW5nLCBjaGFyKiBi
dWZmZXIsIHNpemVfdCBidWZmZXJTaXplKTsKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDgzMTk0KQorKysgVG9vbHMvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTEtMDQtMDcgIEplZmYgTWls
bGVyICA8amVmZm1AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFJlcGxhY2UgV0tTdHJpbmdHZXRDaGFyYWN0ZXJzUHRyKCkgd2l0aCBX
S1N0cmluZ0dldENoYXJhY3RlcnMoKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NTgwNTgKKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Mi9XS1N0cmluZy5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKTogQWRkIHRl
c3RzIGZvciAgV0tTdHJpbmdHZXRMZW5ndGgoKSBhbmQgV0tTdHJpbmdHZXRDaGFyYWN0ZXJzUHRy
KCkuCisKIDIwMTEtMDQtMDcgIEFkYW0gUm9iZW4gIDxhcm9iZW5AYXBwbGUuY29tPgogCiAgICAg
ICAgIEJ1aWxkIGZpeApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyL1dL
U3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dDIvV0tTdHJpbmcuY3BwCShyZXZpc2lvbiA4MzE3OSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Mi9XS1N0cmluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDE4
IEBAIFRFU1QoV2ViS2l0MiwgV0tTdHJpbmcpCiAKICAgICBkZWxldGVbXSBidWZmZXI7CiAgICAg
CisgICAgbWF4U2l6ZSA9IFdLU3RyaW5nR2V0TGVuZ3RoKHN0cmluZyk7CisgICAgVEVTVF9BU1NF
UlQobWF4U2l6ZSA9PSA1KTsKKworICAgIFdLQ2hhciogdW5pQnVmZmVyID0gbmV3IFdLQ2hhcltt
YXhTaXplXTsKKyAgICBhY3R1YWxTaXplID0gV0tTdHJpbmdHZXRDaGFyYWN0ZXJzKHN0cmluZywg
dW5pQnVmZmVyLCBtYXhTaXplKTsKKyAgICBURVNUX0FTU0VSVChhY3R1YWxTaXplID09IDUpOwor
ICAgIAorICAgIFdLQ2hhciBoZWxsb0J1ZmZlcltdID0geyAnaCcsICdlJywgJ2wnLCAnbCcsICdv
JyB9OworICAgIFRFU1RfQVNTRVJUKCFtZW1jbXAodW5pQnVmZmVyLCBoZWxsb0J1ZmZlciwgMTAp
KTsKKyAgICAKKyAgICBkZWxldGVbXSB1bmlCdWZmZXI7CisgICAgCiAgICAgV0tSZWxlYXNlKHN0
cmluZyk7CiB9CiAK
</data>
<flag name="review"
          id="81214"
          type_id="1"
          status="+"
          setter="aroben"
    />
          </attachment>
      

    </bug>

</bugzilla>