<?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>38112</bug_id>
          
          <creation_ts>2010-04-26 04:12:15 -0700</creation_ts>
          <short_desc>[Qt] QScriptValue::toString has a memory leak.</short_desc>
          <delta_ts>2010-05-04 06:54:13 -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>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Qt</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>31863</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Jędrzej Nowacki">jedrzej.nowacki</reporter>
          <assigned_to name="Jędrzej Nowacki">jedrzej.nowacki</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>eric</cc>
    
    <cc>jedrzej.nowacki</cc>
    
    <cc>kenneth</cc>
    
    <cc>kent.hansen</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>216995</commentid>
    <comment_count>0</comment_count>
    <who name="Jędrzej Nowacki">jedrzej.nowacki</who>
    <bug_when>2010-04-26 04:12:15 -0700</bug_when>
    <thetext>==11624==    at 0x4024C4C: malloc (vg_replace_malloc.c:195)
==11624==    by 0x40F98CB: WTF::fastMalloc(unsigned int) (FastMalloc.cpp:249)
==11624==    by 0x4053ED7: WTF::FastAllocBase::operator new(unsigned int) (FastAllocBase.h:96)
==11624==    by 0x406E59D: OpaqueJSString::create(JSC::UString const&amp;) (OpaqueJSString.cpp:38)
==11624==    by 0x406CB82: JSValueToStringCopy (JSValueRef.cpp:285)
==11624==    by 0x405083D: QScriptValuePrivate::toString() const (qscriptvalue_p.h:460)
==11624==    by 0x404EB57: QScriptValue::toString() const (qscriptvalue.cpp:333)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216998</commentid>
    <comment_count>1</comment_count>
      <attachid>54273</attachid>
    <who name="Jędrzej Nowacki">jedrzej.nowacki</who>
    <bug_when>2010-04-26 04:21:32 -0700</bug_when>
    <thetext>Created attachment 54273
Fix v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>217270</commentid>
    <comment_count>2</comment_count>
      <attachid>54273</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-04-26 14:11:57 -0700</bug_when>
    <thetext>Comment on attachment 54273
Fix v1

This looks OK, but I think it could be better.

1.  We should probably have QScriptConverter handle this correctly.  i.e. have a toString() method which takes a value() and context() directly, no?

2.  Isn&apos;t there a RetainPtr to use here so that you never have to release the string explicitly?  Then it would look something like this:

RetainPtr&lt;JSStringRef&gt; string = JSValueToStringCopy();
return QScriptConverter::toString(string.get());</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220052</commentid>
    <comment_count>3</comment_count>
      <attachid>54912</attachid>
    <who name="Jędrzej Nowacki">jedrzej.nowacki</who>
    <bug_when>2010-05-03 03:45:19 -0700</bug_when>
    <thetext>Created attachment 54912
Fix v2

(In reply to comment #2)
Thanks for review!
&gt; (From update of attachment 54273 [details])
&gt; This looks OK, but I think it could be better.
&gt; 
&gt; 1.  We should probably have QScriptConverter handle this correctly.  i.e. have
&gt; a toString() method which takes a value() and context() directly, no?
I don&apos;t think that it is a good idea or at least not for now. 
 - For simplicity, QtScript ignores exceptions, but it is a temporary solution, they will be exposed trough the QScriptEngine API. Methods of QScriptConverter are not good enough, for exception handling. Moreover for exception handling we will need QScriptEnginePrivate pointer, JSContextRef won&apos;t be sufficient, so it means that QScriptConverter couldn&apos;t be inlined inside QScriptEnginePrivate.
 - I think that context-less part of the QScriptConverter API should be moved to JSC C API as a generic JavaScript API (toArrayIndex(), toString(double)...)
 - For conversion, I like a function that takes argument and converts it without taking an additional factor (like context). But of course it is a matter taste.
I&apos;m going to reconsider/rethink QScriptConverter idea on exception handling implementation stage.

&gt; 2.  Isn&apos;t there a RetainPtr to use here so that you never have to release the
&gt; string explicitly?  Then it would look something like this:
&gt; 
&gt; RetainPtr&lt;JSStringRef&gt; string = JSValueToStringCopy();
&gt; return QScriptConverter::toString(string.get());
Good hint :-). I changed the path to use RetainPtr.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220571</commentid>
    <comment_count>4</comment_count>
      <attachid>54912</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-05-04 06:54:07 -0700</bug_when>
    <thetext>Comment on attachment 54912
Fix v2

Clearing flags on attachment: 54912

Committed r58755: &lt;http://trac.webkit.org/changeset/58755&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220572</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-05-04 06:54:13 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54273</attachid>
            <date>2010-04-26 04:21:32 -0700</date>
            <delta_ts>2010-05-03 03:45:19 -0700</delta_ts>
            <desc>Fix v1</desc>
            <filename>tostring.diff</filename>
            <type>text/plain</type>
            <size>1529</size>
            <attacher name="Jędrzej Nowacki">jedrzej.nowacki</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCBlNmFmOTY0Li5jMGJiYTJmIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0yLDYgKzIsMjAg
QEAKIAogICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KIAorICAgICAgICBGaXgg
YSBtZW1vcnkgbGVhayBpbnNpZGUgdGhlIFFTY3JpcHRWYWx1ZS4KKworICAgICAgICBRU2NpcHRW
YWx1ZVByaXZhdGU6OnRvU3RyaW5nIHNob3VsZCByZWxlYXNlIGFsbCB0ZW1wb3JhcnkgdmFyaWFi
bGVzLgorCisgICAgICAgIFtRdF0gUVNjcmlwdFZhbHVlOjp0b1N0cmluZyBoYXZlIGEgbWVtb3J5
IGxlYWsuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0z
ODExMgorCisgICAgICAgICogcXQvYXBpL3FzY3JpcHR2YWx1ZV9wLmg6CisgICAgICAgIChRU2Ny
aXB0VmFsdWVQcml2YXRlOjp0b1N0cmluZyk6CisKKzIwMTAtMDQtMjYgIEplZHJ6ZWogTm93YWNr
aSAgPGplZHJ6ZWoubm93YWNraUBub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKICAgICAgICAgRml4IGEgbWVtb3J5IGxlYWsgaW4gdGhlIFFTY3JpcHRT
dHJpbmcuCiAKICAgICAgICAgUVNjcmlwdFN0cmluZ1ByaXZhdGUncyBjb25zdHJ1Y3RvciBzaG91
bGRuJ3QgY2FsbCBKU1N0cmluZ1JldGFpbiBhcwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUv
cXQvYXBpL3FzY3JpcHR2YWx1ZV9wLmggYi9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlwdHZh
bHVlX3AuaAppbmRleCA4MzBiMzhlLi41YTFlYjAwIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9xdC9hcGkvcXNjcmlwdHZhbHVlX3AuaAorKysgYi9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcXNj
cmlwdHZhbHVlX3AuaApAQCAtNDU3LDcgKzQ1NywxMCBAQCBRU3RyaW5nIFFTY3JpcHRWYWx1ZVBy
aXZhdGU6OnRvU3RyaW5nKCkgY29uc3QKICAgICBjYXNlIEpTVmFsdWU6CiAgICAgY2FzZSBKU1By
aW1pdGl2ZToKICAgICBjYXNlIEpTT2JqZWN0OgotICAgICAgICByZXR1cm4gUVNjcmlwdENvbnZl
cnRlcjo6dG9TdHJpbmcoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0KCksIHZhbHVlKCksIC8q
IGV4Y2VwdGlvbiAqLyAwKSk7CisgICAgICAgIEpTU3RyaW5nUmVmIHRtcCA9IEpTVmFsdWVUb1N0
cmluZ0NvcHkoY29udGV4dCgpLCB2YWx1ZSgpLCAvKiBleGNlcHRpb24gKi8gMCk7CisgICAgICAg
IFFTdHJpbmcgcmVzdWx0ID0gUVNjcmlwdENvbnZlcnRlcjo6dG9TdHJpbmcodG1wKTsKKyAgICAg
ICAgSlNTdHJpbmdSZWxlYXNlKHRtcCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQog
CiAgICAgUV9BU1NFUlRfWChmYWxzZSwgInRvU3RyaW5nKCkiLCAiTm90IGFsbCBzdGF0ZXMgYXJl
IGluY2x1ZGVkIGluIHRoZSBwcmV2aW91cyBzd2l0Y2ggc3RhdGVtZW50LiIpOwo=
</data>
<flag name="review"
          id="38194"
          type_id="1"
          status="-"
          setter="eric"
    />
    <flag name="commit-queue"
          id="38195"
          type_id="3"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54912</attachid>
            <date>2010-05-03 03:45:19 -0700</date>
            <delta_ts>2010-05-04 06:54:07 -0700</delta_ts>
            <desc>Fix v2</desc>
            <filename>leak.diff</filename>
            <type>text/plain</type>
            <size>1734</size>
            <attacher name="Jędrzej Nowacki">jedrzej.nowacki</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCBlNmFmOTY0Li5jMGJiYTJmIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0yLDYgKzIsMjAg
QEAKIAogICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KIAorICAgICAgICBGaXgg
YSBtZW1vcnkgbGVhayBpbnNpZGUgdGhlIFFTY3JpcHRWYWx1ZS4KKworICAgICAgICBRU2NpcHRW
YWx1ZVByaXZhdGU6OnRvU3RyaW5nIHNob3VsZCByZWxlYXNlIGFsbCB0ZW1wb3JhcnkgdmFyaWFi
bGVzLgorCisgICAgICAgIFtRdF0gUVNjcmlwdFZhbHVlOjp0b1N0cmluZyBoYXZlIGEgbWVtb3J5
IGxlYWsuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0z
ODExMgorCisgICAgICAgICogcXQvYXBpL3FzY3JpcHR2YWx1ZV9wLmg6CisgICAgICAgIChRU2Ny
aXB0VmFsdWVQcml2YXRlOjp0b1N0cmluZyk6CisKKzIwMTAtMDQtMjYgIEplZHJ6ZWogTm93YWNr
aSAgPGplZHJ6ZWoubm93YWNraUBub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKICAgICAgICAgRml4IGEgbWVtb3J5IGxlYWsgaW4gdGhlIFFTY3JpcHRT
dHJpbmcuCiAKICAgICAgICAgUVNjcmlwdFN0cmluZ1ByaXZhdGUncyBjb25zdHJ1Y3RvciBzaG91
bGRuJ3QgY2FsbCBKU1N0cmluZ1JldGFpbiBhcwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUv
cXQvYXBpL3FzY3JpcHR2YWx1ZV9wLmggYi9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlwdHZh
bHVlX3AuaAppbmRleCA4MzBiMzhlLi5kM2Y4ZTFmIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9xdC9hcGkvcXNjcmlwdHZhbHVlX3AuaAorKysgYi9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcXNj
cmlwdHZhbHVlX3AuaApAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgInFzY3JpcHRlbmdpbmVf
cC5oIgogI2luY2x1ZGUgInFzY3JpcHR2YWx1ZS5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHQuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1JldGFpblB0ci5oPgog
I2luY2x1ZGUgPFF0Q29yZS9xbWF0aC5oPgogI2luY2x1ZGUgPFF0Q29yZS9xbnVtZXJpYy5oPgog
I2luY2x1ZGUgPFF0Q29yZS9xc2hhcmVkZGF0YS5oPgpAQCAtNDU3LDcgKzQ1OCw4IEBAIFFTdHJp
bmcgUVNjcmlwdFZhbHVlUHJpdmF0ZTo6dG9TdHJpbmcoKSBjb25zdAogICAgIGNhc2UgSlNWYWx1
ZToKICAgICBjYXNlIEpTUHJpbWl0aXZlOgogICAgIGNhc2UgSlNPYmplY3Q6Ci0gICAgICAgIHJl
dHVybiBRU2NyaXB0Q29udmVydGVyOjp0b1N0cmluZyhKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRl
eHQoKSwgdmFsdWUoKSwgLyogZXhjZXB0aW9uICovIDApKTsKKyAgICAgICAgSlNSZXRhaW5QdHI8
SlNTdHJpbmdSZWY+IHB0cihBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0KCksIHZh
bHVlKCksIC8qIGV4Y2VwdGlvbiAqLyAwKSk7CisgICAgICAgIHJldHVybiBRU2NyaXB0Q29udmVy
dGVyOjp0b1N0cmluZyhwdHIuZ2V0KCkpOwogICAgIH0KIAogICAgIFFfQVNTRVJUX1goZmFsc2Us
ICJ0b1N0cmluZygpIiwgIk5vdCBhbGwgc3RhdGVzIGFyZSBpbmNsdWRlZCBpbiB0aGUgcHJldmlv
dXMgc3dpdGNoIHN0YXRlbWVudC4iKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>