<?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>158224</bug_id>
          
          <creation_ts>2016-05-31 04:05:10 -0700</creation_ts>
          <short_desc>[Win][IndexedDB] Crash when running blob test.</short_desc>
          <delta_ts>2016-06-01 23:22:03 -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>WebCore Misc.</component>
          <version>WebKit 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="Per Arne Vollan">pvollan</reporter>
          <assigned_to name="Per Arne Vollan">pvollan</assigned_to>
          <cc>achristensen</cc>
    
    <cc>alecflett</cc>
    
    <cc>beidson</cc>
    
    <cc>bfulgham</cc>
    
    <cc>clopez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>jsbell</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1197760</commentid>
    <comment_count>0</comment_count>
    <who name="Per Arne Vollan">pvollan</who>
    <bug_when>2016-05-31 04:05:10 -0700</bug_when>
    <thetext>The test storage/indexeddb/modern/blob-simple.html makes DumpRenderTree crash on Windows.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1197761</commentid>
    <comment_count>1</comment_count>
      <attachid>280138</attachid>
    <who name="Per Arne Vollan">pvollan</who>
    <bug_when>2016-05-31 04:19:07 -0700</bug_when>
    <thetext>Created attachment 280138
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1197777</commentid>
    <comment_count>2</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-05-31 06:52:46 -0700</bug_when>
    <thetext>What&apos;s the crash?

Why does it crash on Windows but not any other platform?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1197780</commentid>
    <comment_count>3</comment_count>
    <who name="Per Arne Vollan">pvollan</who>
    <bug_when>2016-05-31 07:14:39 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; What&apos;s the crash?
&gt; 
&gt; Why does it crash on Windows but not any other platform?

My first guess on why it is only crashing on Windows was that other compilers might be optimizing away the WTFMove(value) call, since the parameter is not used in the lambda as far as I can tell. Or perhaps this points to a bug in MSVC?

Crash details follows:

EXCEPTION_RECORD:  (.exr -1)
.exr -1
ExceptionAddress: 00000000581ec843 (WebKit!WebCore::BlobRegistryImpl::writeBlobsToTemporaryFiles+0x0000000000000013)
   ExceptionCode: c0000005 (Access violation)
  ExceptionFlags: 00000000
NumberParameters: 2
   Parameter[0]: 0000000000000000
   Parameter[1]: 0000000000000014
Attempt to read from address 0000000000000014

00 0018e9c8 580dfd03 WebKit!WebCore::BlobRegistryImpl::writeBlobsToTemporaryFiles(class WTF::Vector&lt;WTF::String,0,WTF::CrashOnOverflow,16&gt; * blobURLs = 0x00000014, class std::function&lt;void __cdecl(WTF::Vector&lt;WTF::String,0,WTF::CrashOnOverflow,16&gt; const &amp;)&gt; completionHandler = {...})+0x13 [c:\projects\webkit2\opensource\webkit\source\webcore\platform\network\blobregistryimpl.cpp @ 262]
01 0018ea0c 584af1c3 WebKit!WebCore::SerializedScriptValue::writeBlobsToDiskForIndexedDB(class std::function&lt;void __cdecl(WebCore::IDBValue const &amp;)&gt; completionHandler = empty)+0x83 [c:\projects\webkit2\opensource\webkit\source\webcore\bindings\js\serializedscriptvalue.cpp @ 2819]
02 0018eaac 584b39e8 WebKit!WebCore::IDBTransaction::putOrAddOnServer(class WebCore::IDBClient::TransactionOperation * operation = 0x0741f950, class WTF::RefPtr&lt;WebCore::IDBKey&gt; key = class WTF::RefPtr&lt;WebCore::IDBKey&gt;, class WTF::RefPtr&lt;WebCore::SerializedScriptValue&gt; value = class WTF::RefPtr&lt;WebCore::SerializedScriptValue&gt;, WebCore::IndexedDB::ObjectStoreOverwriteMode * overwriteMode = 0x086ab748)+0x1d3 [c:\projects\webkit2\opensource\webkit\source\webcore\modules\indexeddb\idbtransaction.cpp @ 986]
03 (Inline) -------- WebKit!WebCore::IDBClient::TransactionOperationImpl&lt;WTF::RefPtr&lt;WebCore::IDBKey&gt;,WTF::RefPtr&lt;WebCore::SerializedScriptValue&gt;,enum WebCore::IndexedDB::ObjectStoreOverwriteMode const &amp;&gt;::{ctor}::__l2::&lt;lambda_a7f81b14eb3fdd35b04794f4701533e2&gt;::operator()+0x36 [c:\projects\webkit2\opensource\webkit\source\webcore\modules\indexeddb\client\transactionoperation.h @ 139]
04 (Inline) -------- WebKit!std::_Invoker_functor::_Call+0x36 [c:\program files (x86)\microsoft visual studio 14.0\vc\include\type_traits @ 1398]
05 (Inline) -------- WebKit!std::invoke+0x36 [c:\program files (x86)\microsoft visual studio 14.0\vc\include\type_traits @ 1466]
06 (Inline) -------- WebKit!std::_Invoke_ret+0x36 [c:\program files (x86)\microsoft visual studio 14.0\vc\include\type_traits @ 1484]
07 0018eac0 584ae8cb WebKit!std::_Func_impl&lt;&lt;lambda_a7f81b14eb3fdd35b04794f4701533e2&gt;,std::allocator&lt;int&gt;,void&gt;::_Do_call(void)+0x38 [c:\program files (x86)\microsoft visual studio 14.0\vc\include\functional @ 214]
08 (Inline) -------- WebKit!std::_Func_class&lt;void&gt;::operator()+0xf [c:\program files (x86)\microsoft visual studio 14.0\vc\include\functional @ 279]
09 (Inline) -------- WebKit!WebCore::IDBClient::TransactionOperation::perform+0x12 [c:\projects\webkit2\opensource\webkit\source\webcore\modules\indexeddb\client\transactionoperation.h @ 59]
0a 0018ead4 5820ac05 WebKit!WebCore::IDBTransaction::operationTimerFired(void)+0x3b [c:\projects\webkit2\opensource\webkit\source\webcore\modules\indexeddb\idbtransaction.cpp @ 407]
0b 0018eafc 585266b3 WebKit!WebCore::ThreadTimers::sharedTimerFiredInternal(void)+0x95 [c:\projects\webkit2\opensource\webkit\source\webcore\platform\threadtimers.cpp @ 124]
0c 0018eb04 75e784f3 WebKit!WebCore::TimerWindowWndProc(struct HWND__ * hWnd = 0x00d20776, unsigned int message = 0xc41e, unsigned int wParam = 0, long lParam = 0n0)+0x83 [c:\projects\webkit2\opensource\webkit\source\webcore\platform\win\mainthreadsharedtimerwin.cpp @ 91]
0d 0018eb30 75e56c40 USER32!_InternalCallWinProc+0x2b
0e 0018ebd8 75e56541 USER32!UserCallWinProcCheckWow+0x1f0
0f 0018ec44 75e56300 USER32!DispatchMessageWorker+0x231
10 0018ec50 58b2782e USER32!DispatchMessageW+0x10
11 0018ed3c 58b23e9a DumpRenderTreeLib!runTest(class std::basic_string&lt;char,std::char_traits&lt;char&gt;,std::allocator&lt;char&gt; &gt; * inputLine = 0x0018ed7c &quot;C:\Projects\WebKit2\OpenSource\WebKit\LayoutTests\storage\indexeddb\modern\blob-simple.html&quot;)+0x53e [c:\projects\webkit2\opensource\webkit\tools\dumprendertree\win\dumprendertree.cpp @ 1133]
12 0018f598 58b23fee DumpRenderTreeLib!main(int argc = 0n3, char ** argv = 0x006d2490)+0x2da [c:\projects\webkit2\opensource\webkit\tools\dumprendertree\win\dumprendertree.cpp @ 1481]
13 0018f5a8 00a816c9 DumpRenderTreeLib!dllLauncherEntryPoint(int argc = 0n3, char ** argv = 0x006d2490)+0xe [c:\projects\webkit2\opensource\webkit\tools\dumprendertree\win\dumprendertree.cpp @ 1516]
14 0018f870 00a832ba DumpRenderTree!main(int argc = 0n3, char ** argv = 0x006d2490)+0x469 [c:\projects\webkit2\opensource\webkit\tools\win\dlllauncher\dlllaunchermain.cpp @ 247]
15 (Inline) -------- DumpRenderTree!invoke_main+0x1d [f:\dd\vctools\crt\vcstartup\src\startup\exe_common.inl @ 64]
16 0018f8bc 76f638f4 DumpRenderTree!__scrt_common_main_seh(void)+0xff [f:\dd\vctools\crt\vcstartup\src\startup\exe_common.inl @ 255]
17 0018f8d0 77095de3 KERNEL32!BaseThreadInitThunk+0x24
18 0018f918 77095dae ntdll_77030000!__RtlUserThreadStart+0x2f
19 0018f928 00000000 ntdll_77030000!_RtlUserThreadStart+0x1b</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1197805</commentid>
    <comment_count>4</comment_count>
      <attachid>280138</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-05-31 09:50:59 -0700</bug_when>
    <thetext>Comment on attachment 280138
Patch

The order of these operations probably isn&apos;t defined.
Brady would have to confirm that value isn&apos;t needed in the lambda.  It&apos;s probably needed to keep value alive during the life of the lambda.  Could we save the SerializedScriptValue* to use for the function call before possibly WTFMoving it away?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1197821</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-05-31 10:17:53 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; It&apos;s probably needed to keep value alive during the life of the lambda.

I am pretty sure that is not true, but if it was true, then writeBlobsToTemporaryFiles should take care of it, not the lambda itself.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1197822</commentid>
    <comment_count>6</comment_count>
      <attachid>280138</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-05-31 10:19:31 -0700</bug_when>
    <thetext>Comment on attachment 280138
Patch

No r+!  This is actually wrong.

Alex will come explain in a followup.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1197837</commentid>
    <comment_count>7</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-05-31 11:16:18 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Comment on attachment 280138 [details]
&gt; Patch
&gt; 
&gt; No r+!  This is actually wrong.
&gt; 
&gt; Alex will come explain in a followup.

He did not explain.

So I just got back from my appointment and was going to explain.

But then looked closer and saw darin was right - Inside writeBlobsToDiskForIndexedDB, the SSV keeps itself alive.

The captured value is, in fact, unnecessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1197838</commentid>
    <comment_count>8</comment_count>
      <attachid>280138</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-05-31 11:16:32 -0700</bug_when>
    <thetext>Comment on attachment 280138
Patch

Consider this restoring Darin&apos;s r+</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1197850</commentid>
    <comment_count>9</comment_count>
    <who name="Per Arne Vollan">pvollan</who>
    <bug_when>2016-05-31 11:27:48 -0700</bug_when>
    <thetext>Thanks for reviewing, guys!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1197860</commentid>
    <comment_count>10</comment_count>
    <who name="Per Arne Vollan">pvollan</who>
    <bug_when>2016-05-31 11:43:03 -0700</bug_when>
    <thetext>By the way, it seems that the lambda is meant to be executing on the main thread. Does the SerializedScriptValue need to kept alive until the lambda has finished executing on the main thread?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1197872</commentid>
    <comment_count>11</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-05-31 12:13:59 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; By the way, it seems that the lambda is meant to be executing on the main
&gt; thread. Does the SerializedScriptValue need to kept alive until the lambda
&gt; has finished executing on the main thread?

It is.

See SerializedScriptValue::writeBlobsToDiskForIndexedDB.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1197910</commentid>
    <comment_count>12</comment_count>
    <who name="Per Arne Vollan">pvollan</who>
    <bug_when>2016-05-31 13:33:12 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #10)
&gt; &gt; By the way, it seems that the lambda is meant to be executing on the main
&gt; &gt; thread. Does the SerializedScriptValue need to kept alive until the lambda
&gt; &gt; has finished executing on the main thread?
&gt; 
&gt; It is.
&gt; 
&gt; See SerializedScriptValue::writeBlobsToDiskForIndexedDB.

Ok, thanks :)

I can see now that this is done by &apos;protectedThis = WTFMove(protectedThis)&apos; in the code below.

void SerializedScriptValue::writeBlobsToDiskForIndexedDB(std::function&lt;void (const IDBValue&amp;)&gt; completionHandler)
{
    ASSERT(isMainThread());
    ASSERT(hasBlobURLs());

    RefPtr&lt;SerializedScriptValue&gt; protectedThis(this);
    blobRegistry().writeBlobsToTemporaryFiles(m_blobURLs, [completionHandler = WTFMove(completionHandler), this, protectedThis = WTFMove(protectedThis)](auto&amp; blobFilePaths) {</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1198106</commentid>
    <comment_count>13</comment_count>
    <who name="Per Arne Vollan">pvollan</who>
    <bug_when>2016-06-01 02:12:53 -0700</bug_when>
    <thetext>Committed r201547: &lt;https://trac.webkit.org/changeset/201547&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1198144</commentid>
    <comment_count>14</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2016-06-01 07:38:43 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; What&apos;s the crash?
&gt; 
&gt; Why does it crash on Windows but not any other platform?

For the record:

We have found that WebKitGTK+ was crashing when loading http://html5test.com when we built WebKit with GCC but not with Clang.

We identified that the crash started to happen with http://trac.webkit.org/changeset/201302

Zan had a fix for it http://sprunge.us/DQMf but then we found that r201547 already fixed the crash.

So this crash was triggered both with GCC and MSVC. Only with Clang it was fine.

Not sure what this means</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1198168</commentid>
    <comment_count>15</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-06-01 09:18:37 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (In reply to comment #2)
&gt; &gt; What&apos;s the crash?
&gt; &gt; 
&gt; &gt; Why does it crash on Windows but not any other platform?
&gt; 
&gt; For the record:
&gt; 
&gt; We have found that WebKitGTK+ was crashing when loading http://html5test.com
&gt; when we built WebKit with GCC but not with Clang.
&gt; 
&gt; We identified that the crash started to happen with
&gt; http://trac.webkit.org/changeset/201302
&gt; 
&gt; Zan had a fix for it http://sprunge.us/DQMf but then we found that r201547
&gt; already fixed the crash.
&gt; 
&gt; So this crash was triggered both with GCC and MSVC. Only with Clang it was
&gt; fine.
&gt; 
&gt; Not sure what this means

Since the code was wrong from a sanity standpoint, not sure it&apos;s worth digging much deeper.

I&apos;m willing to accept &quot;it means the behavior being triggered was probably unspecified, and Clang was lenient&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1198467</commentid>
    <comment_count>16</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2016-06-01 23:22:03 -0700</bug_when>
    <thetext>This happens due to different calling convention being used on GCC and apparently MSVC as well -- there the lambda argument is constructed first, moving from the RefPtr which is later dereferenced to provide `this` for the call to SerializedScriptValue::writeBlobsToDiskForIndexedDB(), which is null after the move is done. Clang uses a calling convention that does this in the reverse order, caching the value for `this` first and only afterwards constructing the lambda and performing the move.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>280138</attachid>
            <date>2016-05-31 04:19:07 -0700</date>
            <delta_ts>2016-05-31 11:16:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-158224-20160531042000.patch</filename>
            <type>text/plain</type>
            <size>1716</size>
            <attacher name="Per Arne Vollan">pvollan</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwMTUwOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDE2LTA1LTMxICBQZXIgQXJu
ZSBWb2xsYW4gIDxwdm9sbGFuQGFwcGxlLmNvbT4KKworICAgICAgICBbV2luXVtJbmRleGVkREJd
IENyYXNoIHdoZW4gcnVubmluZyBibG9iIHRlc3QuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTgyMjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBBdm9pZCBjYWxsaW5nIFdURk1vdmUoeCkgYmVmb3JlIGNh
bGxpbmcgeC0+bWV0aG9kKCkuCisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFu
c2FjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6cHV0T3JBZGRP
blNlcnZlcik6CisKIDIwMTYtMDUtMzAgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29t
PgogCiAgICAgICAgIE1vdmUgQ3Jvc3NUaHJlYWRDb3BpZXIvQ3Jvc3NUaHJlYWRUYXNrIHRvIFdU
Ri4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJU
cmFuc2FjdGlvbi5jcHAJKHJldmlzaW9uIDIwMTUwNSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTY4LDcg
Kzk2OCw3IEBAIHZvaWQgSURCVHJhbnNhY3Rpb246OnB1dE9yQWRkT25TZXJ2ZXIoSUQKIAogICAg
IFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBSZWZQdHI8
SURCQ2xpZW50OjpUcmFuc2FjdGlvbk9wZXJhdGlvbj4gcHJvdGVjdGVkT3BlcmF0aW9uKCZvcGVy
YXRpb24pOwotICAgIHZhbHVlLT53cml0ZUJsb2JzVG9EaXNrRm9ySW5kZXhlZERCKFtwcm90ZWN0
ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKSwgdGhpcywgcHJvdGVjdGVkT3BlcmF0aW9u
ID0gV1RGTW92ZShwcm90ZWN0ZWRPcGVyYXRpb24pLCBrZXkgPSBXVEZNb3ZlKGtleSksIHZhbHVl
ID0gV1RGTW92ZSh2YWx1ZSksIG92ZXJ3cml0ZU1vZGVdKGNvbnN0IElEQlZhbHVlJiBpZGJWYWx1
ZSkgbXV0YWJsZSB7CisgICAgdmFsdWUtPndyaXRlQmxvYnNUb0Rpc2tGb3JJbmRleGVkREIoW3By
b3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpLCB0aGlzLCBwcm90ZWN0ZWRPcGVy
YXRpb24gPSBXVEZNb3ZlKHByb3RlY3RlZE9wZXJhdGlvbiksIGtleSA9IFdURk1vdmUoa2V5KSwg
b3ZlcndyaXRlTW9kZV0oY29uc3QgSURCVmFsdWUmIGlkYlZhbHVlKSBtdXRhYmxlIHsKICAgICAg
ICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBvcmlnaW5UaHJlYWRJRCgpKTsKICAgICAgICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICAgICAgaWYgKGlkYlZhbHVlLmRhdGEoKS5kYXRh
KCkpIHsK
</data>
<flag name="review"
          id="304109"
          type_id="1"
          status="+"
          setter="beidson"
    />
          </attachment>
      

    </bug>

</bugzilla>