<?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>201102</bug_id>
          
          <creation_ts>2019-08-23 16:27:11 -0700</creation_ts>
          <short_desc>Make CacheStorageEngineCaches&apos;s decodeCachesNames() more robust against bad input data</short_desc>
          <delta_ts>2019-08-24 09:03:00 -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>WebKit2</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>achristensen</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>koivisto</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1564678</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-08-23 16:27:11 -0700</bug_when>
    <thetext>Make CacheStorageEngineCaches&apos;s decodeCachesNames() more robust against bad input data:
Thread[0] EXC_BREAKPOINT (SIGTRAP) (0x0000000000000001, 0x00000001b854ab74)
ok
[  0] 0x00000001b854ab74 WebKit`WTF::Detail::CallableWrapper&lt;WebKit::CacheStorage::Caches::readCachesFromDisk(WTF::Function&lt;void (std::experimental::fundamentals_v3::expected&lt;WTF::Vector&lt;WebKit::CacheStorage::Cache, 0ul, WTF::CrashOnOverflow, 16ul&gt;, WebCore::DOMCacheEngine::Error&gt;&amp;&amp;)&gt;&amp;&amp;)::$_54, void, WebKit::NetworkCache::Data const&amp;, int&gt;::call(WebKit::NetworkCache::Data const&amp;, int) [inlined] WTF::VectorBufferBase&lt;std::__1::pair&lt;WTF::String, WTF::String&gt; &gt;::allocateBuffer(unsigned long) at Vector.h:290:13

     0x00000001b854ab64:     ldrb w8, [sp, #0x10]
     0x00000001b854ab68:      cbz w8, 0x144984         ; &lt;+672&gt; [inlined] std::experimental::fundamentals_v3::unexpected&lt;WebCore::DOMCacheEngine::Error&gt;::unexpected&lt;WebCore::DOMCacheEngine::Error&amp;&gt;(WebCore::DOMCacheEngine::Error&amp;) at Unexpected.h:79
     0x00000001b854ab6c:       bl 0x2acb0              ; std::experimental::fundamentals_v3::__expected_detail::__expected_terminate at Expected.h:231
     0x00000001b854ab70:       bl 0x54fe94             ; symbol stub for: __stack_chk_fail
 -&gt;  0x00000001b854ab74:      brk #0
     0x00000001b854ab78:      brk #0x1
     0x00000001b854ab7c:      brk #0
     0x00000001b854ab80:      brk #0x1

[  0] 0x00000001b854ab74 WebKit`WTF::Detail::CallableWrapper&lt;WebKit::CacheStorage::Caches::readCachesFromDisk(WTF::Function&lt;void (std::experimental::fundamentals_v3::expected&lt;WTF::Vector&lt;WebKit::CacheStorage::Cache, 0ul, WTF::CrashOnOverflow, 16ul&gt;, WebCore::DOMCacheEngine::Error&gt;&amp;&amp;)&gt;&amp;&amp;)::$_54, void, WebKit::NetworkCache::Data const&amp;, int&gt;::call(WebKit::NetworkCache::Data const&amp;, int) [inlined] WTF::Vector&lt;std::__1::pair&lt;WTF::String, WTF::String&gt;, 0ul, WTF::CrashOnOverflow, 16ul&gt;::reserveInitialCapacity(unsigned long) at Vector.h:1222
[  0] 0x00000001b854ab74 WebKit`WTF::Detail::CallableWrapper&lt;WebKit::CacheStorage::Caches::readCachesFromDisk(WTF::Function&lt;void (std::experimental::fundamentals_v3::expected&lt;WTF::Vector&lt;WebKit::CacheStorage::Cache, 0ul, WTF::CrashOnOverflow, 16ul&gt;, WebCore::DOMCacheEngine::Error&gt;&amp;&amp;)&gt;&amp;&amp;)::$_54, void, WebKit::NetworkCache::Data const&amp;, int&gt;::call(WebKit::NetworkCache::Data const&amp;, int) [inlined] WebKit::CacheStorage::decodeCachesNames(WebKit::NetworkCache::Data const&amp;) at CacheStorageEngineCaches.cpp:414
       410 	    if (!decoder.decode(count))
       411 	        return makeUnexpected(Error::ReadDisk);
       412 	
       413 	    Vector&lt;std::pair&lt;String, String&gt;&gt; names;
    -&gt; 414 	    names.reserveInitialCapacity(count);
       415 	    for (size_t index = 0; index &lt; count; ++index) {
       416 	        String name;
       417 	        if (!decoder.decode(name))
       418 	            return makeUnexpected(Error::ReadDisk);
    
[  0] 0x00000001b854ab74 WebKit`WTF::Detail::CallableWrapper&lt;WebKit::CacheStorage::Caches::readCachesFromDisk(WTF::Function&lt;void (std::experimental::fundamentals_v3::expected&lt;WTF::Vector&lt;WebKit::CacheStorage::Cache, 0ul, WTF::CrashOnOverflow, 16ul&gt;, WebCore::DOMCacheEngine::Error&gt;&amp;&amp;)&gt;&amp;&amp;)::$_54, void, WebKit::NetworkCache::Data const&amp;, int&gt;::call(WebKit::NetworkCache::Data const&amp;, int) [inlined] WebKit::CacheStorage::Caches::readCachesFromDisk(WTF::Function&lt;void (std::experimental::fundamentals_v3::expected&lt;WTF::Vector&lt;WebKit::CacheStorage::Cache, 0ul, WTF::CrashOnOverflow, 16ul&gt;, WebCore::DOMCacheEngine::Error&gt;&amp;&amp;)&gt;&amp;&amp;)::$_54::operator()(WebKit::NetworkCache::Data const&amp;, int) + 896 at CacheStorageEngineCaches.cpp:457
       453 	            callback(makeUnexpected(Error::ReadDisk));
       454 	            return;
       455 	        }
       456 	
    -&gt; 457 	        auto result = decodeCachesNames(data);
       458 	        if (!result.has_value()) {
       459 	            RELEASE_LOG_ERROR(CacheStorage, &quot;Caches::decodeCachesNames failed decoding caches with error %d&quot;, static_cast&lt;int&gt;(result.error()));
       460 	            callback(makeUnexpected(result.error()));
       461 	            return;
    
[  0] 0x00000001b854a7f4 WebKit`WTF::Detail::CallableWrapper&lt;WebKit::CacheStorage::Caches::readCachesFromDisk(WTF::Function&lt;void (std::experimental::fundamentals_v3::expected&lt;WTF::Vector&lt;WebKit::CacheStorage::Cache, 0ul, WTF::CrashOnOverflow, 16ul&gt;, WebCore::DOMCacheEngine::Error&gt;&amp;&amp;)&gt;&amp;&amp;)::$_54, void, WebKit::NetworkCache::Data const&amp;, int&gt;::call(WebKit::NetworkCache::Data const&amp;, int) + 272 at Function.h:52
[  1] 0x00000001b854a817 WebKit`WTF::Detail::CallableWrapper&lt;WebKit::CacheStorage::Caches::readCachesFromDisk(WTF::Function&lt;void (std::experimental::fundamentals_v3::expected&lt;WTF::Vector&lt;WebKit::CacheStorage::Cache, 0ul, WTF::CrashOnOverflow, 16ul&gt;, WebCore::DOMCacheEngine::Error&gt;&amp;&amp;)&gt;&amp;&amp;)::$_54, void, WebKit::NetworkCache::Data const&amp;, int&gt;::call(WebKit::NetworkCache::Data const&amp;, int) [inlined] WebKit::CacheStorage::decodeCachesNames(WebKit::NetworkCache::Data const&amp;) + 35 at CacheStorageEngineCaches.cpp:410:18
[  1] 0x00000001b854a7f4 WebKit`WTF::Detail::CallableWrapper&lt;WebKit::CacheStorage::Caches::readCachesFromDisk(WTF::Function&lt;void (std::experimental::fundamentals_v3::expected&lt;WTF::Vector&lt;WebKit::CacheStorage::Cache, 0ul, WTF::CrashOnOverflow, 16ul&gt;, WebCore::DOMCacheEngine::Error&gt;&amp;&amp;)&gt;&amp;&amp;)::$_54, void, WebKit::NetworkCache::Data const&amp;, int&gt;::call(WebKit::NetworkCache::Data const&amp;, int) [inlined] WebKit::CacheStorage::Caches::readCachesFromDisk(WTF::Function&lt;void (std::experimental::fundamentals_v3::expected&lt;WTF::Vector&lt;WebKit::CacheStorage::Cache, 0ul, WTF::CrashOnOverflow, 16ul&gt;, WebCore::DOMCacheEngine::Error&gt;&amp;&amp;)&gt;&amp;&amp;)::$_54::operator()(WebKit::NetworkCache::Data const&amp;, int) at CacheStorageEngineCaches.cpp:457
[  1] 0x00000001b854a7f4 WebKit`WTF::Detail::CallableWrapper&lt;WebKit::CacheStorage::Caches::readCachesFromDisk(WTF::Function&lt;void (std::experimental::fundamentals_v3::expected&lt;WTF::Vector&lt;WebKit::CacheStorage::Cache, 0ul, WTF::CrashOnOverflow, 16ul&gt;, WebCore::DOMCacheEngine::Error&gt;&amp;&amp;)&gt;&amp;&amp;)::$_54, void, WebKit::NetworkCache::Data const&amp;, int&gt;::call(WebKit::NetworkCache::Data const&amp;, int) + 272 at Function.h:52
[  2] 0x00000001b8542bab WebKit`WTF::Detail::CallableWrapper&lt;WebKit::CacheStorage::Engine::readFile(WTF::String const&amp;, WTF::CompletionHandler&lt;void (WebKit::NetworkCache::Data const&amp;, int)&gt;&amp;&amp;)::$_25::operator()()::&apos;lambda&apos;(WebKit::NetworkCache::Data const&amp;, int), void, WebKit::NetworkCache::Data&amp;, int&gt;::call(WebKit::NetworkCache::Data&amp;, int) [inlined] WTF::Function&lt;void (WebKit::NetworkCache::Data const&amp;, int)&gt;::operator()(WebKit::NetworkCache::Data const&amp;, int) const + 23 at Function.h:79:35
[  2] 0x00000001b8542b94 WebKit`WTF::Detail::CallableWrapper&lt;WebKit::CacheStorage::Engine::readFile(WTF::String const&amp;, WTF::CompletionHandler&lt;void (WebKit::NetworkCache::Data const&amp;, int)&gt;&amp;&amp;)::$_25::operator()()::&apos;lambda&apos;(WebKit::NetworkCache::Data const&amp;, int), void, WebKit::NetworkCache::Data&amp;, int&gt;::call(WebKit::NetworkCache::Data&amp;, int) [inlined] WTF::CompletionHandler&lt;void (WebKit::NetworkCache::Data const&amp;, int)&gt;::operator()(WebKit::NetworkCache::Data const&amp;, int) + 8 at CompletionHandler.h:64
[  2] 0x00000001b8542b8c WebKit`WTF::Detail::CallableWrapper&lt;WebKit::CacheStorage::Engine::readFile(WTF::String const&amp;, WTF::CompletionHandler&lt;void (WebKit::NetworkCache::Data const&amp;, int)&gt;&amp;&amp;)::$_25::operator()()::&apos;lambda&apos;(WebKit::NetworkCache::Data const&amp;, int), void, WebKit::NetworkCache::Data&amp;, int&gt;::call(WebKit::NetworkCache::Data&amp;, int) [inlined] WebKit::CacheStorage::Engine::readFile(WTF::String const&amp;, WTF::CompletionHandler&lt;void (WebKit::NetworkCache::Data const&amp;, int)&gt;&amp;&amp;)::$_25::operator()()::&apos;lambda&apos;(WebKit::NetworkCache::Data const&amp;, int)::operator()(WebKit::NetworkCache::Data const&amp;, int) + 64 at CacheStorageEngine.cpp:445
[  2] 0x00000001b8542b4c WebKit`WTF::Detail::CallableWrapper&lt;WebKit::CacheStorage::Engine::readFile(WTF::String const&amp;, WTF::CompletionHandler&lt;void (WebKit::NetworkCache::Data const&amp;, int)&gt;&amp;&amp;)::$_25::operator()()::&apos;lambda&apos;(WebKit::NetworkCache::Data const&amp;, int), void, WebKit::NetworkCache::Data&amp;, int&gt;::call(WebKit::NetworkCache::Data&amp;, int) + 40 at Function.h:52
[  3] 0x00000001b849a73b WebKit`WTF::BlockPtr&lt;void (bool, NSObject&lt;OS_dispatch_data&gt;*, int)&gt; WTF::BlockPtr&lt;void (bool, NSObject&lt;OS_dispatch_data&gt;*, int)&gt;::fromCallable&lt;WebKit::NetworkCache::IOChannel::read(unsigned long, unsigned long, WTF::WorkQueue*, WTF::Function&lt;void (WebKit::NetworkCache::Data&amp;, int)&gt;&amp;&amp;)::$_5&gt;(WebKit::NetworkCache::IOChannel::read(unsigned long, unsigned long, WTF::WorkQueue*, WTF::Function&lt;void (WebKit::NetworkCache::Data&amp;, int)&gt;&amp;&amp;)::$_5)::&apos;lambda&apos;(void*, bool, NSObject&lt;OS_dispatch_data&gt;*, int)::__invoke(void*, bool, NSObject&lt;OS_dispatch_data&gt;*, int) [inlined] WTF::Function&lt;void (WebKit::NetworkCache::Data&amp;, int)&gt;::operator()(WebKit::NetworkCache::Data&amp;, int) const + 23 at Function.h:79:35
[  3] 0x00000001b849a724 WebKit`WTF::BlockPtr&lt;void (bool, NSObject&lt;OS_dispatch_data&gt;*, int)&gt; WTF::BlockPtr&lt;void (bool, NSObject&lt;OS_dispatch_data&gt;*, int)&gt;::fromCallable&lt;WebKit::NetworkCache::IOChannel::read(unsigned long, unsigned long, WTF::WorkQueue*, WTF::Function&lt;void (WebKit::NetworkCache::Data&amp;, int)&gt;&amp;&amp;)::$_5&gt;(WebKit::NetworkCache::IOChannel::read(unsigned long, unsigned long, WTF::WorkQueue*, WTF::Function&lt;void (WebKit::NetworkCache::Data&amp;, int)&gt;&amp;&amp;)::$_5)::&apos;lambda&apos;(void*, bool, NSObject&lt;OS_dispatch_data&gt;*, int)::__invoke(void*, bool, NSObject&lt;OS_dispatch_data&gt;*, int) [inlined] WebKit::NetworkCache::IOChannel::read(unsigned long, unsigned long, WTF::WorkQueue*, WTF::Function&lt;void (WebKit::NetworkCache::Data&amp;, int)&gt;&amp;&amp;)::$_5::operator()(bool, NSObject&lt;OS_dispatch_data&gt;*, int) + 72 at NetworkCacheIOChannelCocoa.mm:100
[  3] 0x00000001b849a6dc WebKit`WTF::BlockPtr&lt;void (bool, NSObject&lt;OS_dispatch_data&gt;*, int)&gt; WTF::BlockPtr&lt;void (bool, NSObject&lt;OS_dispatch_data&gt;*, int)&gt;::fromCallable&lt;WebKit::NetworkCache::IOChannel::read(unsigned long, unsigned long, WTF::WorkQueue*, WTF::Function&lt;void (WebKit::NetworkCache::Data&amp;, int)&gt;&amp;&amp;)::$_5&gt;(WebKit::NetworkCache::IOChannel::read(unsigned long, unsigned long, WTF::WorkQueue*, WTF::Function&lt;void (WebKit::NetworkCache::Data&amp;, int)&gt;&amp;&amp;)::$_5)::&apos;lambda&apos;(void*, bool, NSObject&lt;OS_dispatch_data&gt;*, int)::__invoke(void*, bool, NSObject&lt;OS_dispatch_data&gt;*, int) [inlined] WTF::BlockPtr&lt;void (bool, NSObject&lt;OS_dispatch_data&gt;*, int)&gt; WTF::BlockPtr&lt;void (bool, NSObject&lt;OS_dispatch_data&gt;*, int)&gt;::fromCallable&lt;WebKit::NetworkCache::IOChannel::read(unsigned long, unsigned long, WTF::WorkQueue*, WTF::Function&lt;void (WebKit::NetworkCache::Data&amp;, int)&gt;&amp;&amp;)::$_5&gt;(WebKit::NetworkCache::IOChannel::read(unsigned long, unsigned long, WTF::WorkQueue*, WTF::Function&lt;void (WebKit::NetworkCache::Data&amp;, int)&gt;&amp;&amp;)::$_5)::&apos;lambda&apos;(void*, bool, NSObject&lt;OS_dispatch_data&gt;*, int)::operator()(void*, bool, NSObject&lt;OS_dispatch_data&gt;*, int) const at BlockPtr.h:99
[  3] 0x00000001b849a6dc WebKit`WTF::BlockPtr&lt;void (bool, NSObject&lt;OS_dispatch_data&gt;*, int)&gt; WTF::BlockPtr&lt;void (bool, NSObject&lt;OS_dispatch_data&gt;*, int)&gt;::fromCallable&lt;WebKit::NetworkCache::IOChannel::read(unsigned long, unsigned long, WTF::WorkQueue*, WTF::Function&lt;void (WebKit::NetworkCache::Data&amp;, int)&gt;&amp;&amp;)::$_5&gt;(WebKit::NetworkCache::IOChannel::read(unsigned long, unsigned long, WTF::WorkQueue*, WTF::Function&lt;void (WebKit::NetworkCache::Data&amp;, int)&gt;&amp;&amp;)::$_5)::&apos;lambda&apos;(void*, bool, NSObject&lt;OS_dispatch_data&gt;*, int)::__invoke(void*, bool, NSObject&lt;OS_dispatch_data&gt;*, int) + 20 at BlockPtr.h:98
ok
[  4] 0x00000001b0c4fe37 libdispatch.dylib`___dispatch_operation_deliver_data_block_invoke + 135 at io.c:2547:3
[  5] 0x00000001b0c7f657 libdispatch.dylib`_dispatch_call_block_and_release + 23 at init.c:1408:2
[  6] 0x00000001b0c801cb libdispatch.dylib`_dispatch_client_callout + 15 at object.m:495:10
[  7] 0x00000001b0c2c523 libdispatch.dylib`_dispatch_lane_serial_drain$VARIANT$mp [inlined] _dispatch_continuation_invoke_inline + 299 at inline_internal.h:2487:2
[  7] 0x00000001b0c2c3f8 libdispatch.dylib`_dispatch_lane_serial_drain$VARIANT$mp [inlined] _dispatch_continuation_pop_inline + 60 at inline_internal.h:2530
[  7] 0x00000001b0c2c3bc libdispatch.dylib`_dispatch_lane_serial_drain$VARIANT$mp [inlined] _dispatch_lane_drain + 216 at queue.c:3693
[  7] 0x00000001b0c2c2e4 libdispatch.dylib`_dispatch_lane_serial_drain$VARIANT$mp + 32 at queue.c:3738
[  8] 0x00000001b0c2cf47 libdispatch.dylib`_dispatch_lane_invoke$VARIANT$mp [inlined] _dispatch_lane_invoke2 + 43 at queue.c:3820:10
[  8] 0x00000001b0c2cf1c libdispatch.dylib`_dispatch_lane_invoke$VARIANT$mp [inlined] _dispatch_queue_class_invoke + 384 at inline_internal.h:1854
[  8] 0x00000001b0c2cd9c libdispatch.dylib`_dispatch_lane_invoke$VARIANT$mp + 40 at queue.c:3830
[  9] 0x00000001b0c32173 libdispatch.dylib`_dispatch_main_queue_callback_4CF$VARIANT$mp [inlined] _dispatch_continuation_pop_inline + 51 at inline_internal.h:2528:3
[  9] 0x00000001b0c32140 libdispatch.dylib`_dispatch_main_queue_callback_4CF$VARIANT$mp [inlined] _dispatch_main_queue_drain + 648 at queue.c:7189
[  9] 0x00000001b0c31eb8 libdispatch.dylib`_dispatch_main_queue_callback_4CF$VARIANT$mp + 60 at queue.c:7351

We&apos;re hitting this:
if (newCapacity &gt; std::numeric_limits&lt;unsigned&gt;::max() / sizeof(T))
   CRASH();

under VectorBufferBase::allocateBuffer().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1564681</commentid>
    <comment_count>1</comment_count>
      <attachid>377177</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-08-23 16:29:40 -0700</bug_when>
    <thetext>Created attachment 377177
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1564682</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-08-23 16:30:03 -0700</bug_when>
    <thetext>&lt;rdar://problem/54659562&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1564815</commentid>
    <comment_count>3</comment_count>
      <attachid>377177</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-08-24 09:02:58 -0700</bug_when>
    <thetext>Comment on attachment 377177
Patch

Clearing flags on attachment: 377177

Committed r249087: &lt;https://trac.webkit.org/changeset/249087&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1564816</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-08-24 09:03:00 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>377177</attachid>
            <date>2019-08-23 16:29:40 -0700</date>
            <delta_ts>2019-08-24 09:02:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-201102-20190823162939.patch</filename>
            <type>text/plain</type>
            <size>1940</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ5MDcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGNlYWJlZmNiMzY5ODQ5ZjU0
MDA2MWUzZDcxOGY2NjFlOTMxYzJmNWIuLmU2MmI2MTIwN2I3MzJjYTJmZTYxYWUzYWYzMzViN2I1
NjBkMzg5ZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTktMDgtMjMgIENocmlzIER1
bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIENhY2hlU3RvcmFnZUVuZ2lu
ZUNhY2hlcydzIGRlY29kZUNhY2hlc05hbWVzKCkgbW9yZSByb2J1c3QgYWdhaW5zdCBiYWQgaW5w
dXQgZGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjAxMTAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VXNlIFZlY3Rvcjo6dHJ5UmVzZXJ2ZUNhcGFjaXR5KCkgaW5zdGVhZCBvZiBWZWN0b3I6OnJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkoKSBpbiBDYWNoZVN0b3JhZ2U6OmRlY29kZUNhY2hlc05hbWVzKCkK
KyAgICAgICAgc2luY2UgdGhlIHNpemUgaXMgcmVhZCBmcm9tIGRpc2sgYW5kIHRodXMgY2Fubm90
IGJlIHRydXN0ZWQuIElmIHRoZSBzaXplIGlzIHRvbyBsYXJnZSwgcmVzZXJ2ZUluaXRpYWxDYXBh
Y2l0eSgpCisgICAgICAgIHdvdWxkIGVuZCB1cCBjcmFzaGluZyB0aGUgbmV0d29yayBwcm9jZXNz
LiBOb3csIHdlIG1lcmVseSBkaXNjYXJkIHRoZSBkYXRhIGlmIHRyeVJlc2VydmVDYXBhY2l0eSgp
IGZhaWxzIGJlY2F1c2UKKyAgICAgICAgdGhlIHNpemUgaXMgdG9vIGxhcmdlLgorCisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpkZWNvZGVDYWNoZXNOYW1lcyk6CisKIDIwMTkt
MDgtMjMgIEppZXdlbiBUYW4gIDxqaWV3ZW5fdGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJl
dmlld2VkLCBidWlsZCBmaXggYWZ0ZXIgcjI0OTA1OQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwIGIvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMu
Y3BwCmluZGV4IDVhN2JlMjdmYTRhMDM1ZmFiM2VjZWEyYjY2NjJlYzg0ZjUwY2UxNzUuLjIzODc5
NDE2ZmZkYzNkMjEzMDY3ZDFlMjc5NTE3ZWUxNGNiYjVhNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2lu
ZUNhY2hlcy5jcHAKQEAgLTQxMSw3ICs0MTEsOSBAQCBzdGF0aWMgaW5saW5lIEV4cGVjdGVkPFZl
Y3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+PiwgRXJyb3I+IGRlY29kZUNhY2hlc05hbQog
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoRXJyb3I6OlJlYWREaXNrKTsKIAogICAgIFZl
Y3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+PiBuYW1lczsKLSAgICBuYW1lcy5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KGNvdW50KTsKKyAgICBpZiAoIW5hbWVzLnRyeVJlc2VydmVDYXBhY2l0
eShjb3VudCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChFcnJvcjo6UmVhZERpc2sp
OworCiAgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IGNvdW50OyArK2luZGV4KSB7
CiAgICAgICAgIFN0cmluZyBuYW1lOwogICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG5hbWUp
KQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>