<?xml version="1.0" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://www.jacorb.org/bugzilla/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.2"
          urlbase="https://www.jacorb.org/bugzilla/"
          
          maintainer="jacorb@goots.org"
>

    <bug>
          <bug_id>958</bug_id>
          
          <creation_ts>2013-07-15 17:38:14 +0000</creation_ts>
          <short_desc>BufferManager gives bad buffers</short_desc>
          <delta_ts>2013-09-05 06:03:15 +0000</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>JacORB</product>
          <component>ORB</component>
          <version>3.3</version>
          <rep_platform>PC</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></keywords>
          <priority>P5</priority>
          <bug_severity>major</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Phil Mesnier">mesnierp</reporter>
          <assigned_to name="Mailinglist to track bugs">jacorb-bugs</assigned_to>
          <cc>jacorb</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>3038</commentid>
    <comment_count>0</comment_count>
      <attachid>419</attachid>
    <who name="Phil Mesnier">mesnierp</who>
    <bug_when>2013-07-15 17:38:14 +0000</bug_when>
    <thetext>Created attachment 419
Buffer manager diff

The application was choking when a stream became corrupt, forcing socket closure and loss of message. The stream was corrupted because a previous read request had a buffer too small for desired read. That previous read had pulled the GIOP message header and determined the message length which was between 2^18 and 2^19 bytes. The reader went to the buffer manager, which correctly determined a buffer from slot 18 was needed, and slot 18 had an available buffer. Unfortunately the actual size of that buffer was 0x5A000 rather than the expected 0x7FFFF, and thus insufficient for the necessary read.

The problem is that somehow a buffer was offered to the buffer manager that stored it in the appropriate slot, but without checking that the actual size of the returned buffer actually met the criteria for that slot.

The source of the bad buffer was the CDROutputStream class. In this case, the user had obtained one from the ORB, then used setBuffer() to supply a buffer into which the data was marshaled but then when done, the buffer was returned to the buffer manager.

The solution is 2 fold. First, the buffer manager should validate the size of returned buffers. Second, the CDROutputStream should have a sense of buffer ownership.

Addressing the buffer manager is straight forward. The CDROuputStream&apos;s buffer ownership is a little trickier. I think the easiest solution would be to add an overloaded setBuffer method that takes an explicit ownership flag indicating that the stream can return the buffer to the manager or not. The existing 1-arg call would be the same as the 2-arg call with the second argument true:

The only risk is that if the externally set buffer were insufficient for the data being marshaled, the check() method would grow the buffer discarding the original.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>3039</commentid>
    <comment_count>1</comment_count>
      <attachid>420</attachid>
    <who name="Phil Mesnier">mesnierp</who>
    <bug_when>2013-07-15 17:40:10 +0000</bug_when>
    <thetext>Created attachment 420
CDR Output Stream diff</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>3046</commentid>
    <comment_count>2</comment_count>
      <attachid>421</attachid>
    <who name="Phil Mesnier">mesnierp</who>
    <bug_when>2013-07-30 18:17:28 +0000</bug_when>
    <thetext>Created attachment 421
An improved variation of the CDR Output Stream patch

Here is a new patch for the CDR Output Stream. The idea here is an application can supply its own buffer, or allow the CDROS object to go to the ORB&apos;s buffer manager to obtain one. In either case, ownership of the buffer is passed to the CDROS, which may replace it from the buffer manager, until such time as the application calls release buffer to take back control. The buffer being released DOES NOT have deferred write blocks integrated with it, so for that reason if the application gives a buffer, the deferred write functionality is disabled for that CDROS. If the buffer is selected by size, the application may choose to disable deferred writes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>3063</commentid>
    <comment_count>3</comment_count>
    <who name="Nick Cross">jacorb</who>
    <bug_when>2013-09-05 06:03:15 +0000</bug_when>
    <thetext>Patches merged in for 3.3 together with new tests (3505b97 / b15bd90 / af904be )</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>419</attachid>
            <date>2013-07-15 17:38:14 +0000</date>
            <delta_ts>2013-07-15 17:38:14 +0000</delta_ts>
            <desc>Buffer manager diff</desc>
            <filename>bmgr.diff</filename>
            <type>text/plain</type>
            <size>2538</size>
            <attacher name="Phil Mesnier">mesnierp</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL3NyYy9vcmcvamFjb3JiL29yYi9CdWZmZXJNYW5hZ2VyLmphdmEgYi9zcmMv
b3JnL2phY29yYi9vcmIvQnVmZmVyTWFuYWdlci5qYXZhCmluZGV4IDk3ZjBhZGEuLjlhMTViMWMg
MTAwNjQ0Ci0tLSBhL3NyYy9vcmcvamFjb3JiL29yYi9CdWZmZXJNYW5hZ2VyLmphdmEKKysrIGIv
c3JjL29yZy9qYWNvcmIvb3JiL0J1ZmZlck1hbmFnZXIuamF2YQpAQCAtMzAsNiArMzAsNyBAQCBp
bXBvcnQgb3JnLmphY29yYi5vcmIuYnVmZmVybWFuYWdlci5CdWZmZXJNYW5hZ2VyRXhwYW5zaW9u
UG9saWN5OwogaW1wb3J0IG9yZy5qYWNvcmIub3JiLmJ1ZmZlcm1hbmFnZXIuRGVmYXVsdEV4cGFu
c2lvblBvbGljeTsKIGltcG9ydCBvcmcub21nLkNPUkJBLklOVEVSTkFMOwogaW1wb3J0IG9yZy5v
bWcuQ09SQkEuTk9fTUVNT1JZOworaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXI7CiAKIC8qKgogICog
QSBCdWZmZXJNYW5hZ2VyIGlzIHVzZWQgdG8gc2hhcmUgYSBwb29sIG9mIGJ1ZmZlcnMgYW5kIHRv
IGltcGxlbWVudApAQCAtOTcsMTIgKzk4LDE2IEBAIHB1YmxpYyBjbGFzcyBCdWZmZXJNYW5hZ2Vy
IGV4dGVuZHMgQWJzdHJhY3RCdWZmZXJNYW5hZ2VyCiAgICAgICovCiAgICAgcHJpdmF0ZSBCdWZm
ZXJNYW5hZ2VyRXhwYW5zaW9uUG9saWN5IGV4cGFuc2lvblBvbGljeTsKIAorICAgIHByaXZhdGUg
ZmluYWwgTG9nZ2VyIGxvZ2dlcjsKKwogICAgIC8qKgogICAgICAqIHVzZWQgdG8gY3JlYXRlIHRo
ZSBzaW5nbGV0b24gT1JCIGJ1ZmZlcm1hbmFnZXIKICAgICAgKiBAcGFyYW0gY29uZmlndXJhdGlv
bgogICAgICAqLwogICAgIHB1YmxpYyBCdWZmZXJNYW5hZ2VyKENvbmZpZ3VyYXRpb24gY29uZmln
dXJhdGlvbikKICAgICB7CisgICAgICAgIGxvZ2dlciA9IGNvbmZpZ3VyYXRpb24uZ2V0TG9nZ2Vy
ICgiamFjb3JiLm9yYi5idWZmZXJtYW5hZ2VyIik7CisKICAgICAgICAgdHJ5CiAgICAgICAgIHsK
ICAgICAgICAgICAgdGhpcy50aW1lID0gY29uZmlndXJhdGlvbi5nZXRBdHRyaWJ1dGVBc0ludGVn
ZXIoImphY29yYi5idWZmZXJNYW5hZ2VyTWF4Rmx1c2giLCAwKTsKQEAgLTExMSw3ICsxMTYsNyBA
QCBwdWJsaWMgY2xhc3MgQnVmZmVyTWFuYWdlciBleHRlbmRzIEFic3RyYWN0QnVmZmVyTWFuYWdl
cgogICAgICAgICB9CiAgICAgICAgIGNhdGNoIChDb25maWd1cmF0aW9uRXhjZXB0aW9uIGV4KQog
ICAgICAgICB7Ci0gICAgICAgICAgIGNvbmZpZ3VyYXRpb24uZ2V0TG9nZ2VyICgiYnVmZmVyIiku
ZXJyb3IgKCJFcnJvciBjb25maWd1cmluZyB0aGUgQnVmZmVyTWFuYWdlciIsIGV4KTsKKyAgICAg
ICAgICAgbG9nZ2VyLmVycm9yICgiRXJyb3IgY29uZmlndXJpbmcgdGhlIEJ1ZmZlck1hbmFnZXIi
LCBleCk7CiAgICAgICAgICAgIHRocm93IG5ldyBJTlRFUk5BTCAoIlVuYWJsZSB0byBjb25maWd1
cmUgdGhlIEJ1ZmZlck1hbmFnZXIiKTsKICAgICAgICAgfQogCkBAIC0zMzMsOSArMzM4LDIzIEBA
IHB1YmxpYyBjbGFzcyBCdWZmZXJNYW5hZ2VyIGV4dGVuZHMgQWJzdHJhY3RCdWZmZXJNYW5hZ2Vy
CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
ICAgICBmaW5hbCBDb2xsZWN0aW9uIHMgPSBidWZmZXJQb29sWyBsb2dfY3Vyci1NSU5fQ0FDSEUg
XTsKLQotICAgICAgICAgICAgICAgIGRvUmV0dXJuQnVmZmVyKHMsIGN1cnJlbnQsIHRocmVzaG9s
ZCk7CisgICAgICAgICAgICAgICAgaW50IGV4cGVjdGVkID0gKDEgPDwgbG9nX2N1cnIgKyAxKSAt
IDE7CisgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQubGVuZ3RoICE9IGV4cGVjdGVkKQorICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAobG9nZ2VyLmlzRGVidWdF
bmFibGVkKCkpCisgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgbG9nZ2VyLmRlYnVnICgicmV0dXJuQnVmZmVyLCBsb2cgID0gIiArIGxvZ19jdXJyICsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBnb3QgbGVuZ3RoICIgKworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyLnRvSGV4U3RyaW5nIChj
dXJyZW50Lmxlbmd0aCkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
IGV4cGVjdGVkIGxlbmd0aCAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgSW50ZWdlci50b0hleFN0cmluZyAoZXhwZWN0ZWQpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBmaW5hbCBDb2xsZWN0aW9uIHMgPSBidWZm
ZXJQb29sWyBsb2dfY3Vyci1NSU5fQ0FDSEUgXTsKKyAgICAgICAgICAgICAgICAgICAgZG9SZXR1
cm5CdWZmZXIocywgY3VycmVudCwgdGhyZXNob2xkKTsKKyAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>420</attachid>
            <date>2013-07-15 17:40:10 +0000</date>
            <delta_ts>2013-07-15 17:40:10 +0000</delta_ts>
            <desc>CDR Output Stream diff</desc>
            <filename>cdro.diff</filename>
            <type>text/plain</type>
            <size>1862</size>
            <attacher name="Phil Mesnier">mesnierp</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL3NyYy9vcmcvamFjb3JiL29yYi9DRFJPdXRwdXRTdHJlYW0uamF2YSBiL3Ny
Yy9vcmcvamFjb3JiL29yYi9DRFJPdXRwdXRTdHJlYW0uamF2YQppbmRleCA2NDRjOGMzLi5kZjFj
ZWFlIDEwMDY0NAotLS0gYS9zcmMvb3JnL2phY29yYi9vcmIvQ0RST3V0cHV0U3RyZWFtLmphdmEK
KysrIGIvc3JjL29yZy9qYWNvcmIvb3JiL0NEUk91dHB1dFN0cmVhbS5qYXZhCkBAIC04MCw2ICs4
MCw3IEBAIHB1YmxpYyBjbGFzcyBDRFJPdXRwdXRTdHJlYW0KIAogICAgIHByaXZhdGUgZmluYWwg
SUJ1ZmZlck1hbmFnZXIgYnVmTWdyOwogICAgIHByb3RlY3RlZCBieXRlW10gYnVmZmVyOworICAg
IHByb3RlY3RlZCBib29sZWFuIG93bl9idWZmZXI7CiAKICAgICBwcml2YXRlIGJvb2xlYW4gY2xv
c2VkOwogCkBAIC0yMzQsNiArMjM1LDcgQEAgcHVibGljIGNsYXNzIENEUk91dHB1dFN0cmVhbQog
ICAgICAgICB7CiAgICAgICAgICAgICBidWZmZXIgPSBidWZNZ3IuZ2V0QnVmZmVyKGJ1ZmZlclNp
emUpOwogICAgICAgICB9CisgICAgICAgIG93bl9idWZmZXIgPSB0cnVlOwogICAgIH0KICAgICAv
KioKICAgICAgKiBPdXRwdXRTdHJlYW1zIGNyZWF0ZWQgdXNpbmcgdGhpcyBjb25zdHJ1Y3RvcgpA
QCAtNDgwLDcgKzQ4MiwxMCBAQCBwdWJsaWMgY2xhc3MgQ0RST3V0cHV0U3RyZWFtCiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBidWZNZ3IucmV0dXJuQnVmZmVyKCBi
dWZmZXIsIHRydWUgKTsKKyAgICAgICAgaWYgKG93bl9idWZmZXIpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGJ1Zk1nci5yZXR1cm5CdWZmZXIoIGJ1ZmZlciwgdHJ1ZSApOworICAgICAgICB9CiAK
ICAgICAgICAgYnVmZmVyID0gbnVsbDsKICAgICAgICAgY2xvc2VkID0gdHJ1ZTsKQEAgLTUyOCwx
MCArNTMzLDE0IEBAIHB1YmxpYyBjbGFzcyBDRFJPdXRwdXRTdHJlYW0KICAgICAgICAgICAgICAg
ICBTeXN0ZW0uYXJyYXljb3B5KGJ1ZmZlciwgMCwgbmV3X2J1ZiwgMCwgcG9zKTsKICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgLy8gQ2hhbmdlIGJ1ZmZlciBzaXplIHNvIHJldHVybiB0aGUg
b2xkIG9uZS4KLSAgICAgICAgICAgIGJ1Zk1nci5yZXR1cm5CdWZmZXIgKGJ1ZmZlciwgdHJ1ZSk7
CisgICAgICAgICAgICBpZiAob3duX2J1ZmZlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAvLyBDaGFuZ2UgYnVmZmVyIHNpemUgc28gcmV0dXJuIHRoZSBvbGQgb25lLgorICAgICAg
ICAgICAgICAgIGJ1Zk1nci5yZXR1cm5CdWZmZXIgKGJ1ZmZlciwgdHJ1ZSk7CisgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgIGJ1ZmZlciA9IG5ld19idWY7CisgICAgICAgICAgICBvd25fYnVm
ZmVyID0gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNzAxLDkgKzcxMCwxOCBAQCBwdWJs
aWMgY2xhc3MgQ0RST3V0cHV0U3RyZWFtCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0QnVm
ZmVyKGZpbmFsIGJ5dGVbXSBiKQogICAgIHsKLSAgICAgICAgYnVmTWdyLnJldHVybkJ1ZmZlcigg
YnVmZmVyLCB0cnVlICk7CisgICAgICAgIHNldEJ1ZmZlciAoYiwgdHJ1ZSk7CisgICAgfQorCisg
ICAgcHVibGljIHZvaWQgc2V0QnVmZmVyKGZpbmFsIGJ5dGVbXSBiLCBib29sZWFuIHRha2UpCisg
ICAgeworICAgICAgICBpZiAob3duX2J1ZmZlcikKKyAgICAgICAgeworICAgICAgICAgICAgYnVm
TWdyLnJldHVybkJ1ZmZlciggYnVmZmVyLCB0cnVlICk7CisgICAgICAgIH0KIAogICAgICAgICBi
dWZmZXIgPSBiOworICAgICAgICBvd25fYnVmZmVyID0gdGFrZTsKIAogICAgICAgICBkZWZlcnJl
ZEFycmF5UXVldWUgPSBudWxsOwogICAgICAgICBwb3MgPSAwOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>421</attachid>
            <date>2013-07-30 18:17:28 +0000</date>
            <delta_ts>2013-07-30 18:17:28 +0000</delta_ts>
            <desc>An improved variation of the CDR Output Stream patch</desc>
            <filename>CDROS.diff</filename>
            <type>text/plain</type>
            <size>4730</size>
            <attacher name="Phil Mesnier">mesnierp</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL3NyYy9vcmcvamFjb3JiL29yYi9DRFJPdXRwdXRTdHJlYW0uamF2YSBiL3Ny
Yy9vcmcvamFjb3JiL29yYi9DRFJPdXRwdXRTdHJlYW0uamF2YQppbmRleCA2NDRjOGMzLi40OTUx
MjI2IDEwMDY0NAotLS0gYS9zcmMvb3JnL2phY29yYi9vcmIvQ0RST3V0cHV0U3RyZWFtLmphdmEK
KysrIGIvc3JjL29yZy9qYWNvcmIvb3JiL0NEUk91dHB1dFN0cmVhbS5qYXZhCkBAIC03OCw3ICs3
OCw3IEBAIHB1YmxpYyBjbGFzcyBDRFJPdXRwdXRTdHJlYW0KICAgICAgICAgc2l6ZSwgYnV0IHRo
YXQgaGF2ZSBub3QgeWV0IGJlZW4gd3JpdHRlbiAqLwogICAgIHByaXZhdGUgaW50IGRlZmVycmVk
X3dyaXRlczsKIAotICAgIHByaXZhdGUgZmluYWwgSUJ1ZmZlck1hbmFnZXIgYnVmTWdyOworICAg
IHByaXZhdGUgSUJ1ZmZlck1hbmFnZXIgYnVmTWdyOwogICAgIHByb3RlY3RlZCBieXRlW10gYnVm
ZmVyOwogCiAgICAgcHJpdmF0ZSBib29sZWFuIGNsb3NlZDsKQEAgLTE1Niw3ICsxNTYsNyBAQCBw
dWJsaWMgY2xhc3MgQ0RST3V0cHV0U3RyZWFtCiAKICAgICBwcml2YXRlIGludCBkZWZlcnJlZEFy
cmF5UXVldWVTaXplOwogCi0gICAgcHJvdGVjdGVkIGZpbmFsIG9yZy5qYWNvcmIub3JiLk9SQlNp
bmdsZXRvbiBvcmI7CisgICAgcHJvdGVjdGVkIG9yZy5qYWNvcmIub3JiLk9SQlNpbmdsZXRvbiBv
cmI7CiAKICAgICBwcm90ZWN0ZWQgaW50IGdpb3BfbWlub3IgPSAyOwogCkBAIC0xODQsNyArMTg0
LDcgQEAgcHVibGljIGNsYXNzIENEUk91dHB1dFN0cmVhbQogICAgIC8vIGJ5IGRlZmF1bHQgc3Ry
ZWFtIHZlcnNpb24gaXMgMSBmb3IgR0lPUCB2MS4yIG1lc3NhZ2VzCiAgICAgcHJpdmF0ZSBieXRl
IG1heFN0cmVhbUZvcm1hdFZlcnNpb24gPSBWYWx1ZUhhbmRsZXIuU1RSRUFNX0ZPUk1BVF9WRVJT
SU9OXzE7CiAKLSAgICBwcml2YXRlIGZpbmFsIFR5cGVDb2RlQ29tcGFjdG9yIHR5cGVDb2RlQ29t
cGFjdG9yOworICAgIHByaXZhdGUgVHlwZUNvZGVDb21wYWN0b3IgdHlwZUNvZGVDb21wYWN0b3I7
CiAKICAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBEZWxlZ2F0aW5nVHlwZUNvZGVXcml0ZXIgdHlw
ZUNvZGVXcml0ZXIgPSBuZXcgRGVsZWdhdGluZ1R5cGVDb2RlV3JpdGVyKCk7CiAKQEAgLTIwOCwy
MyArMjA4LDE4IEBAIHB1YmxpYyBjbGFzcyBDRFJPdXRwdXRTdHJlYW0KICAgICB9CiAKICAgICAv
KioKLSAgICAgKiBpbnRlcm5hbCBjJ3RvcgorICAgICAqIHNpemUgc2VsZWN0aW5nIGMndG9yCiAg
ICAgICogQHBhcmFtIG9yYiBtdXN0IGJlIGEgSmFjT1JCIE9SQgogICAgICAqIEBwYXJhbSBidWZm
ZXJTaXplIC0xIHRvIGZldGNoIHRoZSBkZWZhdWx0IGJ1ZmZlciBzaXplLAogICAgICAqICAgICAg
ICB2YWx1ZSA+IDAgdG8gc3BlY2lmeSBhIHNwZWNpZmljIHNpemUKKyAgICAgKiBAcGFyYW0gbm9f
ZGVmZXJyZWQgdHJ1ZSBvdmVycmlkZXMgdGhlIGNvbmZpZ3VyZWQgZGVmZXJyZWQgd3JpdGVzIGJo
YXZpb3IKKyAgICAgKiAgICAgICAgYW5kIGZvcmNlcyBhbGwgZGF0ZSBpbnRvIHRoZSBzaW5nbGUg
YnVmZmVyIHdoaWxlIG1hcnNoYWxsaW5nCiAgICAgICovCi0gICAgcHJpdmF0ZSBDRFJPdXRwdXRT
dHJlYW0ob3JnLm9tZy5DT1JCQS5PUkIgb3JiLCBpbnQgYnVmZmVyU2l6ZSkKKyAgICBwdWJsaWMg
Q0RST3V0cHV0U3RyZWFtKG9yZy5vbWcuQ09SQkEuT1JCIG9yYiwgaW50IGJ1ZmZlclNpemUsIGJv
b2xlYW4gbm9fZGVmZXJyZWQpCiAgICAgewogICAgICAgICBzdXBlcigpOwogCi0gICAgICAgIGlm
ICghIChvcmIgaW5zdGFuY2VvZiBPUkJTaW5nbGV0b24pKQotICAgICAgICB7Ci0gICAgICAgICAg
ICB0aHJvdyBuZXcgQkFEX1BBUkFNKCJkb24ndCBwYXNzIGluIGEgbm9uIEphY09SQiBPUkIiKTsK
LSAgICAgICAgfQotCi0gICAgICAgIHRoaXMub3JiID0gKE9SQlNpbmdsZXRvbikgb3JiOwotICAg
ICAgICBidWZNZ3IgPSB0aGlzLm9yYi5nZXRCdWZmZXJNYW5hZ2VyKCk7Ci0gICAgICAgIHR5cGVD
b2RlQ29tcGFjdG9yID0gdGhpcy5vcmIuZ2V0VHlwZUNvZGVDb21wYWN0b3IoKTsKKyAgICAgICAg
c2hhcmVkX2luaXQgKG9yYiwgbm9fZGVmZXJyZWQpOwogCiAgICAgICAgIGlmIChidWZmZXJTaXpl
ID09IC0xKQogICAgICAgICB7CkBAIC0yMzQsNyArMjI5LDI0IEBAIHB1YmxpYyBjbGFzcyBDRFJP
dXRwdXRTdHJlYW0KICAgICAgICAgewogICAgICAgICAgICAgYnVmZmVyID0gYnVmTWdyLmdldEJ1
ZmZlcihidWZmZXJTaXplKTsKICAgICAgICAgfQorCisgICAgfQorCisgICAgLyoqCisgICAgICog
YnVmZmVyIHN1cHBseWluZyBjJ3RvcgorICAgICAqIEBwYXJhbSBvcmIgbXVzdCBiZSBhIEphY09S
QiBPUkIKKyAgICAgKiBAcGFyYW0gYnVmZmVyU2l6ZSAtMSB0byBmZXRjaCB0aGUgZGVmYXVsdCBi
dWZmZXIgc2l6ZSwKKyAgICAgKiAgICAgICAgdmFsdWUgPiAwIHRvIHNwZWNpZnkgYSBzcGVjaWZp
YyBzaXplCisgICAgICogQHBhcmFtIG5vX2RlZmVycmVkIHRydWUgb3ZlcnJpZGVzIHRoZSBjb25m
aWd1cmVkIGRlZmVycmVkIHdyaXRlcyBiaGF2aW9yCisgICAgICogICAgICAgIGFuZCBmb3JjZXMg
YWxsIGRhdGUgaW50byB0aGUgc2luZ2xlIGJ1ZmZlciB3aGlsZSBtYXJzaGFsbGluZworICAgICAq
LworICAgIHB1YmxpYyBDRFJPdXRwdXRTdHJlYW0ob3JnLm9tZy5DT1JCQS5PUkIgb3JiLCBieXRl
IFtdIGV4dGJ1ZmYgKQorICAgIHsKKyAgICAgICAgc3VwZXIoKTsKKyAgICAgICAgc2hhcmVkX2lu
aXQgKG9yYiwgdHJ1ZSk7CisgICAgICAgIHRoaXMuYnVmZmVyID0gZXh0YnVmZjsKICAgICB9CisK
ICAgICAvKioKICAgICAgKiBPdXRwdXRTdHJlYW1zIGNyZWF0ZWQgdXNpbmcgdGhpcyBjb25zdHJ1
Y3RvcgogICAgICAqIGFyZSB1c2VkIGFsc28gZm9yIGluIG1lbW9yeSBtYXJzaGFsaW5nLCBidXQg
ZG8gdXNlIHRoZQpAQCAtMjQyLDE2ICsyNTQsNyBAQCBwdWJsaWMgY2xhc3MgQ0RST3V0cHV0U3Ry
ZWFtCiAgICAgICovCiAgICAgcHVibGljIENEUk91dHB1dFN0cmVhbShmaW5hbCBvcmcub21nLkNP
UkJBLk9SQiBvcmIpCiAgICAgewotICAgICAgICB0aGlzKG9yYiwgLTEpOwotCi0gICAgICAgIHRy
eQotICAgICAgICB7Ci0gICAgICAgICAgICBjb25maWd1cmUoKChPUkJTaW5nbGV0b24pb3JiKS5n
ZXRDb25maWd1cmF0aW9uKCkpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoKENvbmZpZ3VyYXRp
b25FeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgICAgdGhyb3cgbmV3IElOVEVSTkFM
KGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgfQorICAgICAgdGhpcyhvcmIsIC0xLCBmYWxzZSk7
CiAgICAgfQogCiAgICAgLyoqCkBAIC0yNzEsNiArMjc0LDMxIEBAIHB1YmxpYyBjbGFzcyBDRFJP
dXRwdXRTdHJlYW0KICAgICB9CiAKIAorICAgIHByaXZhdGUgdm9pZCBzaGFyZWRfaW5pdCAob3Jn
Lm9tZy5DT1JCQS5PUkIgb3JiLCBib29sZWFuIG5vX2RlZmVycmVkKQorICAgIHsKKyAgICAgICAg
aWYgKCEgKG9yYiBpbnN0YW5jZW9mIE9SQlNpbmdsZXRvbikpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHRocm93IG5ldyBCQURfUEFSQU0oImRvbid0IHBhc3MgaW4gYSBub24gSmFjT1JCIE9SQiIp
OworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5vcmIgPSAoT1JCU2luZ2xldG9uKSBvcmI7Cisg
ICAgICAgIGJ1Zk1nciA9IHRoaXMub3JiLmdldEJ1ZmZlck1hbmFnZXIoKTsKKyAgICAgICAgdHlw
ZUNvZGVDb21wYWN0b3IgPSB0aGlzLm9yYi5nZXRUeXBlQ29kZUNvbXBhY3RvcigpOworCisgICAg
ICAgIHRyeQorICAgICAgICB7CisgICAgICAgICAgICBjb25maWd1cmUoKChPUkJTaW5nbGV0b24p
b3JiKS5nZXRDb25maWd1cmF0aW9uKCkpOworICAgICAgICB9CisgICAgICAgIGNhdGNoKENvbmZp
Z3VyYXRpb25FeGNlcHRpb24gZSkKKyAgICAgICAgeworICAgICAgICAgICAgdGhyb3cgbmV3IElO
VEVSTkFMKGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChub19kZWZl
cnJlZCkKKyAgICAgICAgeworICAgICAgICAgICAgZGVmZXJyZWRBcnJheVF1ZXVlU2l6ZSA9IDA7
CisgICAgICAgIH0KKyAgICB9CiAKICAgICAvKioKICAgICAgKiBUaGlzIHN0cmVhbSBpcyBzZWxm
LWNvbmZpZ3VyaW5nLCBpLmUuIGNvbmZpZ3VyZSgpIGlzIHByaXZhdGUKQEAgLTcxMSw2ICs3Mzks
MjEgQEAgcHVibGljIGNsYXNzIENEUk91dHB1dFN0cmVhbQogICAgICAgICBpbmRleCA9IDA7CiAg
ICAgfQogCisgICAgLyoqCisgICAgICogR2l2ZSB1cCB0aGUgYnVmZmVyIHRvIHRoZSBjYWxsZXIu
IEl0IGlzIHVwIHRvIHRoZSBjYWxsZXIgdG8KKyAgICAgKiBldmVudHVhbGx5IHJldHVybiB0aGUg
YnVmZmVyIHRvIHRoZSBtYW5hZ2VyLCBpZiBhcHByb3ByaWF0ZS4KKyAgICAgKi8KKworICAgIHB1
YmxpYyBieXRlW10gcmVsZWFzZUJ1ZmZlciAoKQorICAgIHsKKyAgICAgICAgYnl0ZSBbXSByZXRu
ID0gYnVmZmVyOworICAgICAgICBidWZmZXIgPSBudWxsOworICAgICAgICBkZWZlcnJlZEFycmF5
UXVldWUgPSBudWxsOworICAgICAgICBwb3MgPSAwOworICAgICAgICBkZWZlcnJlZF93cml0ZXMg
PSAwOworICAgICAgICBpbmRleCA9IDA7CisgICAgICAgIHJldHVybiByZXRuOworICAgIH0KIAog
ICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgog
ICAgICAqIFRoZSBmb2xsb3dpbmcgb3BlcmF0aW9ucyBhcmUgZnJvbSBPdXRwdXRTdHJlYW0gKgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>