<?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>62382</bug_id>
          
          <creation_ts>2011-06-09 09:31:48 -0700</creation_ts>
          <short_desc>IndexedDB: backingStoreMap is per backing store, not per database</short_desc>
          <delta_ts>2011-06-17 02:44:36 -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>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>
          
          <blocked>62780</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Hans Wennborg">hans</reporter>
          <assigned_to name="Hans Wennborg">hans</assigned_to>
          <cc>dgrogan</cc>
    
    <cc>gregsimon</cc>
    
    <cc>tonyg</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>418059</commentid>
    <comment_count>0</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-06-09 09:31:48 -0700</bug_when>
    <thetext>IndexedDB: backingStoreMap is per backing store, not per database</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>418065</commentid>
    <comment_count>1</comment_count>
      <attachid>96597</attachid>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-06-09 09:41:10 -0700</bug_when>
    <thetext>Created attachment 96597
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>418068</commentid>
    <comment_count>2</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-06-09 09:43:49 -0700</bug_when>
    <thetext>This fixes a bug introduced in r88358 which could cause the same LevelDB database to opened multiple times, and makes sure that it&apos;s possible to use a SQLite backing store even though a LevelDB one has been previously created.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>419183</commentid>
    <comment_count>3</comment_count>
      <attachid>96597</attachid>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2011-06-10 23:57:25 -0700</bug_when>
    <thetext>Comment on attachment 96597
Patch

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

&gt; Source/WebCore/storage/IDBFactoryBackendImpl.cpp:99
&gt; +            if (hasSQLBackingStore) {

It looks like the old code checked to see if the migration already occurred.  We don&apos;t need that anymore?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>419468</commentid>
    <comment_count>4</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-06-13 01:41:33 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 96597 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=96597&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/storage/IDBFactoryBackendImpl.cpp:99
&gt; &gt; +            if (hasSQLBackingStore) {
&gt; 
&gt; It looks like the old code checked to see if the migration already occurred.  We don&apos;t need that anymore?

I think it makes more sense to always try to migrate if there is a SQLite backing store.

When we flip the switch and make LevelDB the default, the migration test will have problems otherwise: 

- first some tests run with leveldb,
- then the migration test writes some data to sqlite,
- then it opens a leveldb backing store.. and since there already exists a leveldb backing store, it doesn&apos;t do migration.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420075</commentid>
    <comment_count>5</comment_count>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2011-06-13 17:09:09 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; (From update of attachment 96597 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=96597&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/storage/IDBFactoryBackendImpl.cpp:99
&gt; &gt; &gt; +            if (hasSQLBackingStore) {
&gt; &gt; 
&gt; &gt; It looks like the old code checked to see if the migration already occurred.  We don&apos;t need that anymore?
&gt; 
&gt; I think it makes more sense to always try to migrate if there is a SQLite backing store.

Maybe I just don&apos;t know how the migration works. Is the sqlite database removed after migration runs?  The case I&apos;m thinking of is where a user:

1) visits an indexeddb-enabled site that stores stuff in sqlite
2) upgrades chrome to a version that uses leveldb
3) revisits that site: migration code runs and the site stores some more stuff in indexeddb/leveldb
4) user later revisits that site: original sqlite database is migrated, blowing away the new stuff stored in (3).

&gt; When we flip the switch and make LevelDB the default, the migration test will have problems otherwise: 
&gt; 
&gt; - first some tests run with leveldb,
&gt; - then the migration test writes some data to sqlite,

&gt; - then it opens a leveldb backing store.. and since there already exists a leveldb backing store, it doesn&apos;t do migration.

Because DumpRenderTree would give all the tests the same origin?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420309</commentid>
    <comment_count>6</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-06-14 03:22:52 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; (In reply to comment #3)
&gt; &gt; &gt; (From update of attachment 96597 [details] [details] [details])
&gt; &gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=96597&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebCore/storage/IDBFactoryBackendImpl.cpp:99
&gt; &gt; &gt; &gt; +            if (hasSQLBackingStore) {
&gt; &gt; &gt; 
&gt; &gt; &gt; It looks like the old code checked to see if the migration already occurred.  We don&apos;t need that anymore?
&gt; &gt; 
&gt; &gt; I think it makes more sense to always try to migrate if there is a SQLite backing store.
&gt; 
&gt; Maybe I just don&apos;t know how the migration works. Is the sqlite database removed after migration runs?  The case I&apos;m thinking of is where a user:

Since there&apos;s no migration code landed yet, I think we&apos;re free to define the best way for it to work :)

I&apos;m thinking that removing the sqlite database after migration would make sense. Or have the migration code be smart enough to only migrate the databases/objectstores/data from sqlite which are not already present in leveldb.

&gt; 
&gt; &gt; When we flip the switch and make LevelDB the default, the migration test will have problems otherwise: 
&gt; &gt; 
&gt; &gt; - first some tests run with leveldb,
&gt; &gt; - then the migration test writes some data to sqlite,
&gt; 
&gt; &gt; - then it opens a leveldb backing store.. and since there already exists a leveldb backing store, it doesn&apos;t do migration.
&gt; 
&gt; Because DumpRenderTree would give all the tests the same origin?

Exactly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420512</commentid>
    <comment_count>7</comment_count>
    <who name="Greg Simon">gregsimon</who>
    <bug_when>2011-06-14 09:56:10 -0700</bug_when>
    <thetext>
(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; &gt; (In reply to comment #4)
&gt; &gt; &gt; (In reply to comment #3)
&gt; &gt; &gt; &gt; (From update of attachment 96597 [details] [details] [details] [details])
&gt; &gt; &gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=96597&amp;action=review
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; Source/WebCore/storage/IDBFactoryBackendImpl.cpp:99
&gt; &gt; &gt; &gt; &gt; +            if (hasSQLBackingStore) {
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; It looks like the old code checked to see if the migration already occurred.  We don&apos;t need that anymore?
&gt; &gt; &gt; 
&gt; &gt; &gt; I think it makes more sense to always try to migrate if there is a SQLite backing store.
&gt; &gt; 
&gt; &gt; Maybe I just don&apos;t know how the migration works. Is the sqlite database removed after migration runs?  The case I&apos;m thinking of is where a user:
&gt; 
&gt; Since there&apos;s no migration code landed yet, I think we&apos;re free to define the best way for it to work :)
&gt; 
&gt; I&apos;m thinking that removing the sqlite database after migration would make sense. Or have the migration code be smart enough to only migrate the databases/objectstores/data from sqlite which are not already present in leveldb.


It would not be difficult to migrate only object stores that do not exist. 
 
&gt; &gt; 
&gt; &gt; &gt; When we flip the switch and make LevelDB the default, the migration test will have problems otherwise: 
&gt; &gt; &gt; 
&gt; &gt; &gt; - first some tests run with leveldb,
&gt; &gt; &gt; - then the migration test writes some data to sqlite,
&gt; &gt; 
&gt; &gt; &gt; - then it opens a leveldb backing store.. and since there already exists a leveldb backing store, it doesn&apos;t do migration.
&gt; &gt; 
&gt; &gt; Because DumpRenderTree would give all the tests the same origin?
&gt; 
&gt; Exactly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420517</commentid>
    <comment_count>8</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-06-14 10:03:41 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; &gt; I&apos;m thinking that removing the sqlite database after migration would make sense. Or have the migration code be smart enough to only migrate the databases/objectstores/data from sqlite which are not already present in leveldb.
&gt; 
&gt; 
&gt; It would not be difficult to migrate only object stores that do not exist. 

That would be great</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420735</commentid>
    <comment_count>9</comment_count>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2011-06-14 14:44:11 -0700</bug_when>
    <thetext>LGTM

(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; &gt; I&apos;m thinking that removing the sqlite database after migration would make sense. Or have the migration code be smart enough to only migrate the databases/objectstores/data from sqlite which are not already present in leveldb.
&gt; &gt; 
&gt; &gt; 
&gt; &gt; It would not be difficult to migrate only object stores that do not exist. 
&gt; 
&gt; That would be great

Either of smart migration or delete-after-migrate sounds good to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>422493</commentid>
    <comment_count>10</comment_count>
      <attachid>96597</attachid>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2011-06-17 01:53:50 -0700</bug_when>
    <thetext>Comment on attachment 96597
Patch

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

&gt; Source/WebCore/storage/IDBFactoryBackendImpl.cpp:125
&gt; +    return false; // FIXME: To be implemented.

If you want, could replace this with a notImplemented() call which will just log.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>422510</commentid>
    <comment_count>11</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-06-17 02:44:36 -0700</bug_when>
    <thetext>Committed r89130: &lt;http://trac.webkit.org/changeset/89130&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>96597</attachid>
            <date>2011-06-09 09:41:10 -0700</date>
            <delta_ts>2011-06-17 01:53:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-62382-20110609174108.patch</filename>
            <type>text/plain</type>
            <size>8131</size>
            <attacher name="Hans Wennborg">hans</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODg0MzkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAzMmQ5YmU2YmEyYmY2N2U5
ZGEwN2I4M2FlYTZhMzM2NWYyZDkyNzAyLi5jODAzNjIwM2Y3ZmUxOTZlNmM5OTQ3NGQ4YmFmNWM5
MTE0MjkwOGE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjggQEAKKzIwMTEtMDYtMDkgIEhhbnMg
V2VubmJvcmcgIDxoYW5zQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBJbmRleGVkREI6IGJhY2tpbmdTdG9yZU1hcCBpcyBwZXIg
YmFja2luZyBzdG9yZSwgbm90IHBlciBkYXRhYmFzZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjIzODIKKworICAgICAgICBJREJGYWN0b3J5QmFja2Vu
ZEltcGw6Om1fYmFja2luZ1N0b3JlTWFwIHNob3VsZCBjb250YWluIGFuIGVudHJ5IHBlcgorICAg
ICAgICBiYWNraW5nIHN0b3JlLCBub3QgcGVyIGRhdGFiYXNlLiBPdGhlcndpc2UsIHdlIG1pZ2h0
IGFjY2lkZW50YWxseSBvcGVuCisgICAgICAgIHRoZSBzYW1lIGJhY2tpbmcgc3RvcmUgbW9yZSB0
aGFuIG9uY2UsIHdoaWNoIGlzIGRhbmdlcm91cy4KKworICAgICAgICBBbHNvIHR3ZWFrIHRoZSBj
b2RlIHRoYXQgY2hvb3NlcyBiYWNraW5nIHN0b3JlIHR5cGUuIEl0IHNob3VsZCBiZQorICAgICAg
ICBzaW1wbGU6IHdlIGRlZmF1bHQgdG8gU1FMaXRlOyBpZiBMZXZlbERCIGlzIHNwZWNpZmljYWxs
eSByZXF1ZXN0ZWQsIHdlCisgICAgICAgIHVzZSB0aGF0LiBJZiBMZXZlbERCIGlzIHJlcXVlc3Rl
ZCBhbmQgdGhlcmUgaXMgYSBTUUxpdGUgZGF0YWJhc2UsIHdlCisgICAgICAgIG1pZ3JhdGUuCisK
KyAgICAgICAgTm8gbmV3IHRlc3RzLCBqdXN0IGNsZWFuaW5nIHVwIHRoZSBjb2RlLgorCisgICAg
ICAgICogc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SURCRmFjdG9yeUJhY2tlbmRJbXBsOjphZGRJREJCYWNraW5nU3RvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6SURCRmFjdG9yeUJhY2tlbmRJbXBsOjpyZW1vdmVJREJCYWNraW5nU3RvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQkZhY3RvcnlCYWNrZW5kSW1wbDo6bWlncmF0ZUZyb21TUUxpdGVUb0xldmVs
REIpOgorICAgICAgICAqIHN0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmg6CisKIDIwMTEt
MDYtMDkgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBFcmljIFNlaWRlbC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
RmFjdG9yeUJhY2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9y
eUJhY2tlbmRJbXBsLmNwcAppbmRleCBkZDlhODk5NzYyZDM0NDNjNGM0NTU2YjkyNWQ2N2FhOTNh
ODMwY2U4Li4wMmM1MDU4N2MyNWI5YWYyOWU0NTI2MzNmYWYxMzJhOTM5MGIzYjNhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwCkBAIC01
OCwyMSArNTgsMjYgQEAgdm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6OnJlbW92ZUlEQkRhdGFi
YXNlQmFja2VuZChjb25zdCBTdHJpbmcmIHVuaXF1ZUlkZW50aWYKICAgICBtX2RhdGFiYXNlQmFj
a2VuZE1hcC5yZW1vdmUodW5pcXVlSWRlbnRpZmllcik7CiB9CiAKLXZvaWQgSURCRmFjdG9yeUJh
Y2tlbmRJbXBsOjphZGRJREJCYWNraW5nU3RvcmUoY29uc3QgU3RyaW5nJiB1bmlxdWVJZGVudGlm
aWVyLCBJREJCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSkKK3ZvaWQgSURCRmFjdG9yeUJhY2tl
bmRJbXBsOjphZGRJREJCYWNraW5nU3RvcmUoY29uc3QgU3RyaW5nJiBmaWxlSWRlbnRpZmllciwg
SURCQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUpCiB7Ci0gICAgQVNTRVJUKCFtX2JhY2tpbmdT
dG9yZU1hcC5jb250YWlucyh1bmlxdWVJZGVudGlmaWVyKSk7Ci0gICAgbV9iYWNraW5nU3RvcmVN
YXAuc2V0KHVuaXF1ZUlkZW50aWZpZXIsIGJhY2tpbmdTdG9yZSk7CisgICAgQVNTRVJUKCFtX2Jh
Y2tpbmdTdG9yZU1hcC5jb250YWlucyhmaWxlSWRlbnRpZmllcikpOworICAgIG1fYmFja2luZ1N0
b3JlTWFwLnNldChmaWxlSWRlbnRpZmllciwgYmFja2luZ1N0b3JlKTsKIH0KIAotdm9pZCBJREJG
YWN0b3J5QmFja2VuZEltcGw6OnJlbW92ZUlEQkJhY2tpbmdTdG9yZShjb25zdCBTdHJpbmcmIHVu
aXF1ZUlkZW50aWZpZXIpCit2b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6cmVtb3ZlSURCQmFj
a2luZ1N0b3JlKGNvbnN0IFN0cmluZyYgZmlsZUlkZW50aWZpZXIpCiB7Ci0gICAgQVNTRVJUKG1f
YmFja2luZ1N0b3JlTWFwLmNvbnRhaW5zKHVuaXF1ZUlkZW50aWZpZXIpKTsKLSAgICBtX2JhY2tp
bmdTdG9yZU1hcC5yZW1vdmUodW5pcXVlSWRlbnRpZmllcik7CisgICAgQVNTRVJUKG1fYmFja2lu
Z1N0b3JlTWFwLmNvbnRhaW5zKGZpbGVJZGVudGlmaWVyKSk7CisgICAgbV9iYWNraW5nU3RvcmVN
YXAucmVtb3ZlKGZpbGVJZGVudGlmaWVyKTsKIH0KIAogdm9pZCBJREJGYWN0b3J5QmFja2VuZElt
cGw6Om9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbiwgRnJhbWUq
LCBjb25zdCBTdHJpbmcmIGRhdGFEaXIsIGludDY0X3QgbWF4aW11bVNpemUsIEJhY2tpbmdTdG9y
ZVR5cGUgYmFja2luZ1N0b3JlVHlwZSkKIHsKLSAgICBTdHJpbmcgdW5pcXVlSWRlbnRpZmllciA9
IHNlY3VyaXR5T3JpZ2luLT5kYXRhYmFzZUlkZW50aWZpZXIoKSArICJAIiArIG5hbWUgKyBTdHJp
bmc6OmZvcm1hdCgiQCVkIiwgKGludCliYWNraW5nU3RvcmVUeXBlKTsKKyAgICBpZiAoYmFja2lu
Z1N0b3JlVHlwZSA9PSBEZWZhdWx0QmFja2luZ1N0b3JlKQorICAgICAgICBiYWNraW5nU3RvcmVU
eXBlID0gU1FMaXRlQmFja2luZ1N0b3JlOyAvLyBGSVhNRTogRGVmYXVsdEJhY2tpbmdTdG9yZSBp
cyBjb25mdXNpbmc7IGdldCByaWQgb2YgaXQuCisKKyAgICBjb25zdCBTdHJpbmcgZmlsZUlkZW50
aWZpZXIgPSBzZWN1cml0eU9yaWdpbi0+ZGF0YWJhc2VJZGVudGlmaWVyKCkgKyBTdHJpbmc6OmZv
cm1hdCgiQCVkIiwgc3RhdGljX2Nhc3Q8aW50PihiYWNraW5nU3RvcmVUeXBlKSk7CisgICAgY29u
c3QgU3RyaW5nIHVuaXF1ZUlkZW50aWZpZXIgPSBmaWxlSWRlbnRpZmllciArICJAIiArIG5hbWU7
CisKICAgICBJREJEYXRhYmFzZUJhY2tlbmRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9kYXRhYmFzZUJh
Y2tlbmRNYXAuZmluZCh1bmlxdWVJZGVudGlmaWVyKTsKICAgICBpZiAoaXQgIT0gbV9kYXRhYmFz
ZUJhY2tlbmRNYXAuZW5kKCkpIHsKICAgICAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoaXQtPnNl
Y29uZCk7CkBAIC04MiwzMCArODcsMjcgQEAgdm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6Om9w
ZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2EKICAgICAv
LyBGSVhNRTogRXZlcnl0aGluZyBmcm9tIG5vdyBvbiBzaG91bGQgYmUgZG9uZSBvbiBhbm90aGVy
IHRocmVhZC4KIAogICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZTsKLSAg
ICBJREJCYWNraW5nU3RvcmVNYXA6Oml0ZXJhdG9yIGl0MiA9IG1fYmFja2luZ1N0b3JlTWFwLmZp
bmQodW5pcXVlSWRlbnRpZmllcik7CisgICAgSURCQmFja2luZ1N0b3JlTWFwOjppdGVyYXRvciBp
dDIgPSBtX2JhY2tpbmdTdG9yZU1hcC5maW5kKGZpbGVJZGVudGlmaWVyKTsKICAgICBpZiAoaXQy
ICE9IG1fYmFja2luZ1N0b3JlTWFwLmVuZCgpICYmIChiYWNraW5nU3RvcmVUeXBlID09IGl0Mi0+
c2Vjb25kLT5iYWNraW5nU3RvcmVUeXBlKCkpKQogICAgICAgICBiYWNraW5nU3RvcmUgPSBpdDIt
PnNlY29uZDsKICAgICBlbHNlIHsKLSNpZiBFTkFCTEUoTEVWRUxEQikKLSAgICAgICAgLy8gU2hv
dWxkIHdlIG1pZ3JhdGUgdGhpcyBiYWNraW5nIHN0b3JlPwotICAgICAgICBib29sIGhhc1NRTEJh
Y2tpbmdTdG9yZSA9IElEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6YmFja2luZ1N0b3JlRXhpc3RzKHNl
Y3VyaXR5T3JpZ2luLmdldCgpLCBkYXRhRGlyKTsKLSAgICAgICAgYm9vbCBoYXNMZXZlbERCQmFj
a2luZ1N0b3JlID0gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6YmFja2luZ1N0b3JlRXhpc3RzKHNl
Y3VyaXR5T3JpZ2luLmdldCgpLCBkYXRhRGlyKTsKIAotICAgICAgICBpZiAoaGFzU1FMQmFja2lu
Z1N0b3JlICYmIGhhc0xldmVsREJCYWNraW5nU3RvcmUpCi0gICAgICAgICAgICBiYWNraW5nU3Rv
cmVUeXBlID0gTGV2ZWxEQkJhY2tpbmdTdG9yZTsKKyNpZiBFTkFCTEUoTEVWRUxEQikKKyAgICAg
ICAgaWYgKGJhY2tpbmdTdG9yZVR5cGUgPT0gTGV2ZWxEQkJhY2tpbmdTdG9yZSkgeworICAgICAg
ICAgICAgY29uc3QgYm9vbCBoYXNTUUxCYWNraW5nU3RvcmUgPSBJREJTUUxpdGVCYWNraW5nU3Rv
cmU6OmJhY2tpbmdTdG9yZUV4aXN0cyhzZWN1cml0eU9yaWdpbi5nZXQoKSwgZGF0YURpcik7CiAK
LSAgICAgICAgLy8gTWlncmF0aW9uOiBpZiB0aGUgZGF0YWJhc2UgZXhpc3RzIGFuZCBpcyBTUUxp
dGUgd2Ugd2FudCB0byBtaWdyYXRlIGl0IHRvIExldmVsREIuCi0gICAgICAgIGlmIChoYXNTUUxC
YWNraW5nU3RvcmUgJiYgIWhhc0xldmVsREJCYWNraW5nU3RvcmUpIHsKLSAgICAgICAgICAgIGlm
IChtaWdyYXRlKG5hbWUsIHNlY3VyaXR5T3JpZ2luLmdldCgpLCBkYXRhRGlyLCBtYXhpbXVtU2l6
ZSkpCi0gICAgICAgICAgICAgICAgYmFja2luZ1N0b3JlVHlwZSA9IExldmVsREJCYWNraW5nU3Rv
cmU7CisgICAgICAgICAgICBpZiAoaGFzU1FMQmFja2luZ1N0b3JlKSB7CisgICAgICAgICAgICAg
ICAgYm9vbCBtaWdyYXRpb25TdWNjZWVkZWQgPSBtaWdyYXRlRnJvbVNRTGl0ZVRvTGV2ZWxEQihu
YW1lLCBzZWN1cml0eU9yaWdpbi5nZXQoKSwgZGF0YURpciwgbWF4aW11bVNpemUpOworICAgICAg
ICAgICAgICAgICh2b2lkKW1pZ3JhdGlvblN1Y2NlZWRlZDsgLy8gRklYTUU6IFdoZW4gbWlncmF0
aW9uIGlzIGFjdHVhbGx5IGltcGxlbWVudGVkLCB3ZSBuZWVkIGVycm9yIGhhbmRsaW5nIGhlcmUu
CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICNlbmRpZgogCi0gICAgICAgIGlmIChiYWNraW5n
U3RvcmVUeXBlID09IERlZmF1bHRCYWNraW5nU3RvcmUgfHwgYmFja2luZ1N0b3JlVHlwZSA9PSBT
UUxpdGVCYWNraW5nU3RvcmUpCi0gICAgICAgICAgICBiYWNraW5nU3RvcmUgPSBJREJTUUxpdGVC
YWNraW5nU3RvcmU6Om9wZW4oc2VjdXJpdHlPcmlnaW4uZ2V0KCksIGRhdGFEaXIsIG1heGltdW1T
aXplLCB1bmlxdWVJZGVudGlmaWVyLCB0aGlzKTsKKyAgICAgICAgaWYgKGJhY2tpbmdTdG9yZVR5
cGUgPT0gU1FMaXRlQmFja2luZ1N0b3JlKQorICAgICAgICAgICAgYmFja2luZ1N0b3JlID0gSURC
U1FMaXRlQmFja2luZ1N0b3JlOjpvcGVuKHNlY3VyaXR5T3JpZ2luLmdldCgpLCBkYXRhRGlyLCBt
YXhpbXVtU2l6ZSwgZmlsZUlkZW50aWZpZXIsIHRoaXMpOwogI2lmIEVOQUJMRShMRVZFTERCKQog
ICAgICAgICBlbHNlIGlmIChiYWNraW5nU3RvcmVUeXBlID09IExldmVsREJCYWNraW5nU3RvcmUp
Ci0gICAgICAgICAgICBiYWNraW5nU3RvcmUgPSBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVu
KHNlY3VyaXR5T3JpZ2luLmdldCgpLCBkYXRhRGlyLCBtYXhpbXVtU2l6ZSwgdW5pcXVlSWRlbnRp
ZmllciwgdGhpcyk7CisgICAgICAgICAgICBiYWNraW5nU3RvcmUgPSBJREJMZXZlbERCQmFja2lu
Z1N0b3JlOjpvcGVuKHNlY3VyaXR5T3JpZ2luLmdldCgpLCBkYXRhRGlyLCBtYXhpbXVtU2l6ZSwg
ZmlsZUlkZW50aWZpZXIsIHRoaXMpOwogI2VuZGlmCiAgICAgICAgIGlmICghYmFja2luZ1N0b3Jl
KSB7CiAgICAgICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3Jl
YXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVTktOT1dOX0VSUiwgIkludGVybmFsIGVycm9yLiIp
KTsKQEAgLTExOCw5ICsxMjAsOSBAQCB2b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6b3Blbihj
b25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYQogICAgIG1fZGF0
YWJhc2VCYWNrZW5kTWFwLnNldCh1bmlxdWVJZGVudGlmaWVyLCBkYXRhYmFzZUJhY2tlbmQuZ2V0
KCkpOwogfQogCi1ib29sIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6bWlncmF0ZShjb25zdCBTdHJp
bmcmIG5hbWUsIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbiwgY29uc3QgU3RyaW5nJiBk
YXRhRGlyLCBpbnQ2NF90IG1heGltdW1TaXplKQorYm9vbCBJREJGYWN0b3J5QmFja2VuZEltcGw6
Om1pZ3JhdGVGcm9tU1FMaXRlVG9MZXZlbERCKGNvbnN0IFN0cmluZyYgbmFtZSwgU2VjdXJpdHlP
cmlnaW4qIHNlY3VyaXR5T3JpZ2luLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIsIGludDY0X3QgbWF4
aW11bVNpemUpCiB7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBmYWxzZTsgLy8gRklY
TUU6IFRvIGJlIGltcGxlbWVudGVkLgogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5oIGIv
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuaAppbmRleCBjYjYw
MTgxMzUxMDQzY2M1NTc5ZWNkOGQ0NWIxZDgyOGJhZTQwZDU1Li5mYjMwM2QxYTJiNjU4ZDIyYjUx
MWU3NjVlOWQ0ZTU5YjRlY2QxYmU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
RmFjdG9yeUJhY2tlbmRJbXBsLmgKQEAgLTUyLDE0ICs1MiwxNCBAQCBwdWJsaWM6CiAKICAgICAv
LyBOb3RpZmljYXRpb25zIGZyb20gd2VhayBwb2ludGVycy4KICAgICB2b2lkIHJlbW92ZUlEQkRh
dGFiYXNlQmFja2VuZChjb25zdCBTdHJpbmcmIHVuaXF1ZUlkZW50aWZpZXIpOwotICAgIHZvaWQg
YWRkSURCQmFja2luZ1N0b3JlKGNvbnN0IFN0cmluZyYgdW5pcXVlSWRlbnRpZmllciwgSURCQmFj
a2luZ1N0b3JlKik7Ci0gICAgdm9pZCByZW1vdmVJREJCYWNraW5nU3RvcmUoY29uc3QgU3RyaW5n
JiB1bmlxdWVJZGVudGlmaWVyKTsKKyAgICB2b2lkIGFkZElEQkJhY2tpbmdTdG9yZShjb25zdCBT
dHJpbmcmIGZpbGVJZGVudGlmaWVyLCBJREJCYWNraW5nU3RvcmUqKTsKKyAgICB2b2lkIHJlbW92
ZUlEQkJhY2tpbmdTdG9yZShjb25zdCBTdHJpbmcmIGZpbGVJZGVudGlmaWVyKTsKIAogICAgIHZp
cnR1YWwgdm9pZCBvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+LCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRh
dGFEaXIsIGludDY0X3QgbWF4aW11bVNpemUsIEJhY2tpbmdTdG9yZVR5cGUpOwogCiBwcml2YXRl
OgogICAgIElEQkZhY3RvcnlCYWNrZW5kSW1wbCgpOwotICAgIGJvb2wgbWlncmF0ZShjb25zdCBT
dHJpbmcmIG5hbWUsIFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyLCBpbnQ2
NF90IG1heGltdW1TaXplKTsKKyAgICBib29sIG1pZ3JhdGVGcm9tU1FMaXRlVG9MZXZlbERCKGNv
bnN0IFN0cmluZyYgbmFtZSwgU2VjdXJpdHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIs
IGludDY0X3QgbWF4aW11bVNpemUpOwogCiAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgSURC
RGF0YWJhc2VCYWNrZW5kSW1wbCo+IElEQkRhdGFiYXNlQmFja2VuZE1hcDsKICAgICBJREJEYXRh
YmFzZUJhY2tlbmRNYXAgbV9kYXRhYmFzZUJhY2tlbmRNYXA7Cg==
</data>
<flag name="review"
          id="90330"
          type_id="1"
          status="+"
          setter="tonyg"
    />
          </attachment>
      

    </bug>

</bugzilla>