Received: from polymorphic.microstate.com (polymorphic.microstate.com [204.176.49.165]) by mail.postgresql.org (8.11.1/8.11.1) with ESMTP id f0HJWn054933 for ; Wed, 17 Jan 2001 14:32:49 -0500 (EST) (envelope-from rbulling@microstate.com) Received: from localhost (rbulling@localhost) by polymorphic.microstate.com (8.9.3/8.9.3) with ESMTP id OAA27223 for ; Wed, 17 Jan 2001 14:32:47 -0500 Date: Wed, 17 Jan 2001 14:32:47 -0500 (EST) From: Richard Bullington-McGuire To: pgsql-patches@postgresql.org Subject: Fixes and enhancements to JDBC driver (take 2) Message-ID: MIME-Version: 1.0 Content-Type: MULTIPART/Mixed; BOUNDARY="-1328765647-724582343-979758047=:26916" Content-ID: X-Archive-Number: 200101/52 X-Sequence-Number: 209 This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime@docserver.cac.washington.edu for more info. ---1328765647-724582343-979758047=:26916 Content-Type: TEXT/PLAIN; CHARSET=US-ASCII Content-ID: (My apologies, I had attempted to post another message, but it contained a flawed patch, and it may not even reach the list. If you received that message, please do not use the attached patch, named postgres-jdbc-Microstate-fixes.patch. Instead, use the attached patch, postgres-jdbc-Microstate-fixes-2.patch. Here goes again:) Please find attached a patch versus the current 7.x source tree from CVS. It fixes several problems, and adds one new feature. Here are the problems it fixes: * org.postgresql.util.PSQLException could generate a null pointer error if the message was null. I fixed this by checking for a null for message in addition to checking for null args. This fix is just putting into practice some defensive programming. * A serious off-by-one error existed in both of the BytePoolDim classes in the org.postgresql.PG_Stream class. On a request for a byte pool for the maximum size, the old code would generate an ArrayIndexOutOfBoundsException. I fixed this by increasing the size of the array by one more than the maximum buffer size, and altering the supporting methods to initialize and clean up the expanded array. * org.postgresql.jdbc1.ResultSet and org.postgresql.jdbc2.ResultSet contained several lines where SimpleDateFormat had bad format strings. The format strings contained "MM", the code for months, instead of "mm", the code for minutes, in places where the intended result was an hours:minutes:seconds string. * utils.CheckVersion version 1.2 failed to compile using the IBM JDK 1.1.8, because of the use of System.setProperty(), a method introduced in JDK 1.2. I refactored the main method of this class for maximum portability and clarity. It now supports the IBM JDK 1.1.8, and should detect other odd 1.1 JDKs more gracefully. * In utils.CheckVersion, I also removed code that looked like dead code, at the beginning and end of the main() method. I can't see any reason to print out the value of the postgresql.jdbc system property when this class is invoked, nor to set a system property at the end of main(), when CheckVersion is only used in the make process, and only then for the version of the driver it sends to System.out. * If utils.CheckVersion fails to detect a valid JDK version, it returns a non-zero error code to the calling process, allowing Make to fail gracefully. The one enhancement included is a beginning of an implementation for SQL Escape processing. This implementation implements only the date escape clause -- we have found in our development that that is the most used of the escape clauses. The enhancement affects org.postgresql.Connection and org.postgresql.jdbc1.Statement. The jdbc1.Statement class did not check to see if escape processing was enabled at all, and the Connection class had a placeholder implementation of the EscapeSQL() method. At Microstate, we've been using a variation on this for more than a year in our internal versions of the PostgreSQL JDBC drivers with great success. The patch works currently, but it could be made more efficient. -- Richard Bullington-McGuire Chief Technology Officer, The Microstate Corporation Phone: 703-796-6446 URL: http://www.microstate.com/ PGP key IDs: RSA: 0x93862305 DH/DSS: 0xDAC3028E ---1328765647-724582343-979758047=:26916 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="postgres-jdbc-Microstate-fixes-2.patch" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: PostgreSQL JDBC Driver Fixes Content-Disposition: attachment; filename="postgres-jdbc-Microstate-fixes-2.patch" SW5kZXg6IG9yZy9wb3N0Z3Jlc3FsL0Nvbm5lY3Rpb24uamF2YQ0KPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9ob21lL3Byb2plY3RzL3Bn c3FsL2N2c3Jvb3QvcGdzcWwvc3JjL2ludGVyZmFjZXMvamRiYy9vcmcvcG9z dGdyZXNxbC9Db25uZWN0aW9uLmphdmEsdg0KcmV0cmlldmluZyByZXZpc2lv biAxLjExDQpkaWZmIC11IC0zIC1yMS4xMSBDb25uZWN0aW9uLmphdmENCi0t LSBvcmcvcG9zdGdyZXNxbC9Db25uZWN0aW9uLmphdmEJMjAwMC8xMi8yMiAw MzowODo1MgkxLjExDQorKysgb3JnL3Bvc3RncmVzcWwvQ29ubmVjdGlvbi5q YXZhCTIwMDEvMDEvMTcgMTk6MjE6NTkNCkBAIC04NjgsMTAgKzg2OCwzNCBA QA0KICAgICB9DQogICAgIA0KICAgICAvKioNCi0gICAgICogVGhpcyBpcyBh biBhdHRlbXB0IHRvIGltcGxlbWVudCBTUUwgRXNjYXBlIGNsYXVzZXMNCisg ICAgICogSW1wbGVtZW50IFNRTCBFc2NhcGUgY2xhdXNlcy4NCisgICAgICoN CisgICAgICogPHA+IFRoaXMgb25seSBpbXBsZW1lbnRzIHRoZSBkYXRlIGVz Y2FwZSBjbGF1c2UgY29ycmVjdGx5IHJpZ2h0IG5vdy4NCiAgICAgICovDQog ICAgIHB1YmxpYyBTdHJpbmcgRXNjYXBlU1FMKFN0cmluZyBzcWwpIHsNCi0J cmV0dXJuIHNxbDsNCisJYm9vbGVhbiBERUJVRyA9IGZhbHNlOw0KKyAgICAg ICAgaWYgKERFQlVHKSB7IFN5c3RlbS5vdXQucHJpbnRsbiAoInBhcnNlU1FM RXNjYXBlcyBjYWxsZWQiKTsgfQ0KKw0KKwkvLyBJZiB3ZSBmaW5kIGEgIntk IiwgYXNzdW1lIHdlIGhhdmUgYSBkYXRlIGVzY2FwZS4NCisJLy8NCisJLy8g U2luY2UgdGhlIGRhdGUgZXNjYXBlIHN5bnRheCBpcyB2ZXJ5IGNsb3NlIHRv IHRoZQ0KKwkvLyBuYXRpdmUgUG9zdGdyZXMgZGF0ZSBmb3JtYXQsIHdlIGp1 c3QgcmVtb3ZlIHRoZSBlc2NhcGUNCisJLy8gZGVsaW1pdGVycy4NCisJLy8g DQorIAkvLyBUaGlzIGltcGxlbWVudGF0aW9uIGNvdWxkIHVzZSBzb21lIG9w dGltaXphdGlvbiwgYnV0IGl0IGhhcw0KKwkvLyB3b3JrZWQgaW4gcHJhY3Rp Y2UgZm9yIHR3byB5ZWFycyBvZiBzb2xpZCB1c2UuDQorICAgICAgICBpbnQg aW5kZXggPSBzcWwuaW5kZXhPZigie2QiKTsNCisgICAgICAgIHdoaWxlIChp bmRleCAhPSAtMSkgew0KKyAgICAgICAgICAgIGlmIChERUJVRykgeyBTeXN0 ZW0ub3V0LnByaW50bG4gKCJlc2NhcGUgZm91bmQgYXQgaW5kZXg6ICIgKyBp bmRleCk7fQ0KKyAgICAgICAgICAgIFN0cmluZ0J1ZmZlciBidWYgPSBuZXcg U3RyaW5nQnVmZmVyKHNxbCk7DQorICAgICAgICAgICAgYnVmLnNldENoYXJB dChpbmRleCwgJyAnKTsNCisgICAgICAgICAgICBidWYuc2V0Q2hhckF0KGlu ZGV4ICsgMSwgJyAnKTsNCisgICAgICAgICAgICBidWYuc2V0Q2hhckF0KHNx bC5pbmRleE9mKCd9JywgaW5kZXgpLCAnICcpOw0KKyAgICAgICAgICAgIHNx bCA9IG5ldyBTdHJpbmcoYnVmKTsNCisgICAgICAgICAgICBpbmRleCA9IHNx bC5pbmRleE9mKCJ7ZCIpOw0KKyAgICAgICAgfQ0KKyAgICAgICAgaWYgKERF QlVHKSB7IFN5c3RlbS5vdXQucHJpbnRsbiAoIm1vZGlmaWVkIFNRTDogIiAr IHNxbCk7IH0NCisgICAgICAgIHJldHVybiBzcWw7DQogICAgIH0NCiAgICAg DQogfQ0KSW5kZXg6IG9yZy9wb3N0Z3Jlc3FsL1BHX1N0cmVhbS5qYXZhDQo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL2hvbWUvcHJvamVj dHMvcGdzcWwvY3Zzcm9vdC9wZ3NxbC9zcmMvaW50ZXJmYWNlcy9qZGJjL29y Zy9wb3N0Z3Jlc3FsL1BHX1N0cmVhbS5qYXZhLHYNCnJldHJpZXZpbmcgcmV2 aXNpb24gMS41DQpkaWZmIC11IC0zIC1yMS41IFBHX1N0cmVhbS5qYXZhDQot LS0gb3JnL3Bvc3RncmVzcWwvUEdfU3RyZWFtLmphdmEJMjAwMC8xMC8xMiAw ODo1NToyNAkxLjUNCisrKyBvcmcvcG9zdGdyZXNxbC9QR19TdHJlYW0uamF2 YQkyMDAxLzAxLzE3IDE5OjIyOjAwDQpAQCAtNDk0LDEzICs0OTQsMTEgQEAN CiAgKi8NCiBjbGFzcyBCeXRlUG9vbERpbTEgew0KICAgICBpbnQgbWF4c2l6 ZSA9IDI1NjsNCi0gICAgT2JqZWN0UG9vbCBub3R1c2VtYXBbXSA9IG5ldyBP YmplY3RQb29sW21heHNpemVdOw0KLSAgICBPYmplY3RQb29sIGludXNlbWFw W10gPSBuZXcgT2JqZWN0UG9vbFttYXhzaXplXTsNCi0gICAgYnl0ZSBiaW5p dFtdW10gPSBuZXcgYnl0ZVttYXhzaXplXVswXTsNCisgICAgT2JqZWN0UG9v bCBub3R1c2VtYXBbXSA9IG5ldyBPYmplY3RQb29sW21heHNpemUgKyAxXTsN CisgICAgT2JqZWN0UG9vbCBpbnVzZW1hcFtdID0gbmV3IE9iamVjdFBvb2xb bWF4c2l6ZSArIDFdOw0KIA0KICAgICBwdWJsaWMgQnl0ZVBvb2xEaW0xKCl7 DQotCWZvcihpbnQgaSA9IDA7IGkgPCBtYXhzaXplOyBpKyspew0KLQkgICAg YmluaXRbaV0gPSBuZXcgYnl0ZVtpXTsNCisJZm9yKGludCBpID0gMDsgaSA8 PSBtYXhzaXplOyBpKyspew0KIAkgICAgaW51c2VtYXBbaV0gPSBuZXcgT2Jq ZWN0UG9vbCgpOw0KIAkgICAgbm90dXNlbWFwW2ldID0gbmV3IE9iamVjdFBv b2woKTsNCiAJfQ0KQEAgLTUyNiw3ICs1MjQsNyBAQA0KICAgICB9DQogCQ0K ICAgICBwdWJsaWMgdm9pZCBkZWFsbG9jYXRlKCl7DQotCWZvcihpbnQgaSA9 IDA7IGkgPCBtYXhzaXplOyBpKyspew0KKwlmb3IoaW50IGkgPSAwOyBpIDw9 IG1heHNpemU7IGkrKyl7DQogCSAgICBub3R1c2VtYXBbaV0uYWRkQWxsKGlu dXNlbWFwW2ldKTsNCiAJICAgIGludXNlbWFwW2ldLmNsZWFyKCk7DQogCX0N CkBAIC01NDIsMTEgKzU0MCwxMSBAQA0KICAqLw0KIGNsYXNzIEJ5dGVQb29s RGltMiB7DQogICAgIGludCBtYXhzaXplID0gMzI7DQotICAgIE9iamVjdFBv b2wgbm90dXNlbWFwW10gPSBuZXcgT2JqZWN0UG9vbFttYXhzaXplXTsNCi0g ICAgT2JqZWN0UG9vbCBpbnVzZW1hcFtdID0gbmV3IE9iamVjdFBvb2xbbWF4 c2l6ZV07DQorICAgIE9iamVjdFBvb2wgbm90dXNlbWFwW10gPSBuZXcgT2Jq ZWN0UG9vbFttYXhzaXplICsgMV07DQorICAgIE9iamVjdFBvb2wgaW51c2Vt YXBbXSA9IG5ldyBPYmplY3RQb29sW21heHNpemUgKyAxXTsNCiANCiAgICAg cHVibGljIEJ5dGVQb29sRGltMigpew0KLQlmb3IoaW50IGkgPSAwOyBpIDwg bWF4c2l6ZTsgaSsrKXsNCisJZm9yKGludCBpID0gMDsgaSA8PSBtYXhzaXpl OyBpKyspew0KIAkgICAgaW51c2VtYXBbaV0gPSBuZXcgT2JqZWN0UG9vbCgp Ow0KIAkgICAgbm90dXNlbWFwW2ldID0gbmV3IE9iamVjdFBvb2woKTsNCiAJ fQ0KQEAgLTU3MSw3ICs1NjksNyBAQA0KICAgICB9DQogCQ0KICAgICBwdWJs aWMgdm9pZCBkZWFsbG9jYXRlKCl7DQotCWZvcihpbnQgaSA9IDA7IGkgPCBt YXhzaXplOyBpKyspew0KKwlmb3IoaW50IGkgPSAwOyBpIDw9IG1heHNpemU7 IGkrKyl7DQogCSAgICBub3R1c2VtYXBbaV0uYWRkQWxsKGludXNlbWFwW2ld KTsNCiAJICAgIGludXNlbWFwW2ldLmNsZWFyKCk7DQogCX0NCkluZGV4OiBv cmcvcG9zdGdyZXNxbC9qZGJjMS9SZXN1bHRTZXQuamF2YQ0KPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9ob21lL3Byb2plY3RzL3Bnc3Fs L2N2c3Jvb3QvcGdzcWwvc3JjL2ludGVyZmFjZXMvamRiYy9vcmcvcG9zdGdy ZXNxbC9qZGJjMS9SZXN1bHRTZXQuamF2YSx2DQpyZXRyaWV2aW5nIHJldmlz aW9uIDEuOA0KZGlmZiAtdSAtMyAtcjEuOCBSZXN1bHRTZXQuamF2YQ0KLS0t IG9yZy9wb3N0Z3Jlc3FsL2pkYmMxL1Jlc3VsdFNldC5qYXZhCTIwMDEvMDEv MTMgMTg6NTI6NDIJMS44DQorKysgb3JnL3Bvc3RncmVzcWwvamRiYzEvUmVz dWx0U2V0LmphdmEJMjAwMS8wMS8xNyAxOToyMjowMA0KQEAgLTQ3MSwxMiAr NDcxLDEyIEBADQogICAgIFNpbXBsZURhdGVGb3JtYXQgZGYgPSBudWxsOw0K ICAgICBpZiAocy5sZW5ndGgoKT4yMSAmJiBzLmluZGV4T2YoJy4nKSAhPSAt MSkgew0KIAlkZiA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KCJ5eXl5LU1NLWRk IEhIOm1tOnNzLlNTenp6Iik7DQotICAgIH0gZWxzZSBpZiAocy5sZW5ndGgo KT4xOSAmJiBzLmluZGV4T2YoJy4nKSA9PSAtMSkgew0KLQlkZiA9IG5ldyBT aW1wbGVEYXRlRm9ybWF0KCJ5eXl5LU1NLWRkIEhIOk1NOnNzenp6Iik7DQot ICAgIH0gZWxzZSBpZiAocy5sZW5ndGgoKT4xOSAmJiBzLmluZGV4T2YoJy4n KSAhPSAtMSkgew0KLQlkZiA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KCJ5eXl5 LU1NLWRkIEhIOk1NOnNzLlNTIik7DQotICAgIH0gZWxzZSBpZiAocy5sZW5n dGgoKT4xMCAmJiBzLmxlbmd0aCgpPD0xOCkgew0KLQlkZiA9IG5ldyBTaW1w bGVEYXRlRm9ybWF0KCJ5eXl5LU1NLWRkIEhIOk1NOnNzIik7DQorICAgfSBl bHNlIGlmIChzLmxlbmd0aCgpPjE5ICYmIHMuaW5kZXhPZignLicpID09IC0x KSB7DQorCWRmID0gbmV3IFNpbXBsZURhdGVGb3JtYXQoInl5eXktTU0tZGQg SEg6bW06c3N6enoiKTsNCisgICB9IGVsc2UgaWYgKHMubGVuZ3RoKCk+MTkg JiYgcy5pbmRleE9mKCcuJykgIT0gLTEpIHsNCisJZGYgPSBuZXcgU2ltcGxl RGF0ZUZvcm1hdCgieXl5eS1NTS1kZCBISDptbTpzcy5TUyIpOw0KKyAgICB9 IGVsc2UgaWYgKHMubGVuZ3RoKCk+MTApIHsNCisJZGYgPSBuZXcgU2ltcGxl RGF0ZUZvcm1hdCgieXl5eS1NTS1kZCBISDptbTpzcyIpOw0KICAgICB9IGVs c2Ugew0KIAlkZiA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KCJ5eXl5LU1NLWRk Iik7DQogICAgIH0NCkluZGV4OiBvcmcvcG9zdGdyZXNxbC9qZGJjMS9TdGF0 ZW1lbnQuamF2YQ0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6 IC9ob21lL3Byb2plY3RzL3Bnc3FsL2N2c3Jvb3QvcGdzcWwvc3JjL2ludGVy ZmFjZXMvamRiYy9vcmcvcG9zdGdyZXNxbC9qZGJjMS9TdGF0ZW1lbnQuamF2 YSx2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMw0KZGlmZiAtdSAtMyAtcjEu MyBTdGF0ZW1lbnQuamF2YQ0KLS0tIG9yZy9wb3N0Z3Jlc3FsL2pkYmMxL1N0 YXRlbWVudC5qYXZhCTIwMDAvMTAvMDkgMTY6NDg6MTcJMS4zDQorKysgb3Jn L3Bvc3RncmVzcWwvamRiYzEvU3RhdGVtZW50LmphdmEJMjAwMS8wMS8xNyAx OToyMjowMA0KQEAgLTI2Niw2ICsyNjYsOCBAQA0KIAkgKi8NCiAJcHVibGlj IGJvb2xlYW4gZXhlY3V0ZShTdHJpbmcgc3FsKSB0aHJvd3MgU1FMRXhjZXB0 aW9uDQogCXsNCisJCWlmIChlc2NhcGVQcm9jZXNzaW5nKQ0KKwkJCXNxbCA9 IGNvbm5lY3Rpb24uRXNjYXBlU1FMKHNxbCk7DQogCQlyZXN1bHQgPSBjb25u ZWN0aW9uLkV4ZWNTUUwoc3FsKTsNCiAJCXJldHVybiAocmVzdWx0ICE9IG51 bGwgJiYgKChvcmcucG9zdGdyZXNxbC5SZXN1bHRTZXQpcmVzdWx0KS5yZWFs bHlSZXN1bHRTZXQoKSk7DQogCX0NCkluZGV4OiBvcmcvcG9zdGdyZXNxbC9q ZGJjMi9SZXN1bHRTZXQuamF2YQ0KPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0K UkNTIGZpbGU6IC9ob21lL3Byb2plY3RzL3Bnc3FsL2N2c3Jvb3QvcGdzcWwv c3JjL2ludGVyZmFjZXMvamRiYy9vcmcvcG9zdGdyZXNxbC9qZGJjMi9SZXN1 bHRTZXQuamF2YSx2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTUNCmRpZmYg LXUgLTMgLXIxLjE1IFJlc3VsdFNldC5qYXZhDQotLS0gb3JnL3Bvc3RncmVz cWwvamRiYzIvUmVzdWx0U2V0LmphdmEJMjAwMS8wMS8xMyAxODo1Mjo0Mgkx LjE1DQorKysgb3JnL3Bvc3RncmVzcWwvamRiYzIvUmVzdWx0U2V0LmphdmEJ MjAwMS8wMS8xNyAxOToyMjowMg0KQEAgLTQ4NiwxMSArNDg2LDExIEBADQog ICAgIGlmIChzLmxlbmd0aCgpPjIxICYmIHMuaW5kZXhPZignLicpICE9IC0x KSB7DQogCWRmID0gbmV3IFNpbXBsZURhdGVGb3JtYXQoInl5eXktTU0tZGQg SEg6bW06c3MuU1N6enoiKTsNCiAgICAgfSBlbHNlIGlmIChzLmxlbmd0aCgp PjE5ICYmIHMuaW5kZXhPZignLicpID09IC0xKSB7DQotCWRmID0gbmV3IFNp bXBsZURhdGVGb3JtYXQoInl5eXktTU0tZGQgSEg6TU06c3N6enoiKTsNCisJ ZGYgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdCgieXl5eS1NTS1kZCBISDptbTpz c3p6eiIpOw0KICAgICB9IGVsc2UgaWYgKHMubGVuZ3RoKCk+MTkgJiYgcy5p bmRleE9mKCcuJykgIT0gLTEpIHsNCi0JZGYgPSBuZXcgU2ltcGxlRGF0ZUZv cm1hdCgieXl5eS1NTS1kZCBISDpNTTpzcy5TUyIpOw0KKwlkZiA9IG5ldyBT aW1wbGVEYXRlRm9ybWF0KCJ5eXl5LU1NLWRkIEhIOm1tOnNzLlNTIik7DQog ICAgIH0gZWxzZSBpZiAocy5sZW5ndGgoKT4xMCAmJiBzLmxlbmd0aCgpPD0x OCkgew0KLQlkZiA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KCJ5eXl5LU1NLWRk IEhIOk1NOnNzIik7DQorCWRmID0gbmV3IFNpbXBsZURhdGVGb3JtYXQoInl5 eXktTU0tZGQgSEg6bW06c3MiKTsNCiAgICAgfSBlbHNlIHsNCiAJZGYgPSBu ZXcgU2ltcGxlRGF0ZUZvcm1hdCgieXl5eS1NTS1kZCIpOw0KICAgICB9DQpJ bmRleDogb3JnL3Bvc3RncmVzcWwvdXRpbC9QU1FMRXhjZXB0aW9uLmphdmEN Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAvaG9tZS9wcm9q ZWN0cy9wZ3NxbC9jdnNyb290L3Bnc3FsL3NyYy9pbnRlcmZhY2VzL2pkYmMv b3JnL3Bvc3RncmVzcWwvdXRpbC9QU1FMRXhjZXB0aW9uLmphdmEsdg0KcmV0 cmlldmluZyByZXZpc2lvbiAxLjINCmRpZmYgLXUgLTMgLXIxLjIgUFNRTEV4 Y2VwdGlvbi5qYXZhDQotLS0gb3JnL3Bvc3RncmVzcWwvdXRpbC9QU1FMRXhj ZXB0aW9uLmphdmEJMjAwMC8wOS8xMiAwNToxODoyNQkxLjINCisrKyBvcmcv cG9zdGdyZXNxbC91dGlsL1BTUUxFeGNlcHRpb24uamF2YQkyMDAxLzAxLzE3 IDE5OjIyOjAyDQpAQCAtODMsNyArODMsNyBAQA0KICAgICAgICAgfQ0KIAkN CiAJLy8gRXhwYW5kIGFueSBhcmd1bWVudHMNCi0JaWYoYXJncyE9bnVsbCkN CisJaWYoYXJncyAhPSBudWxsICYmIG1lc3NhZ2UgIT0gbnVsbCkNCiAJICAg IG1lc3NhZ2UgPSBNZXNzYWdlRm9ybWF0LmZvcm1hdChtZXNzYWdlLGFyZ3Mp Ow0KIAkNCiAgICAgfQ0KSW5kZXg6IHV0aWxzL0NoZWNrVmVyc2lvbi5qYXZh DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL2hvbWUvcHJv amVjdHMvcGdzcWwvY3Zzcm9vdC9wZ3NxbC9zcmMvaW50ZXJmYWNlcy9qZGJj L3V0aWxzL0NoZWNrVmVyc2lvbi5qYXZhLHYNCnJldHJpZXZpbmcgcmV2aXNp b24gMS4yDQpkaWZmIC11IC0zIC1yMS4yIENoZWNrVmVyc2lvbi5qYXZhDQot LS0gdXRpbHMvQ2hlY2tWZXJzaW9uLmphdmEJMjAwMC8xMi8xOSAxNzozMzoz OQkxLjINCisrKyB1dGlscy9DaGVja1ZlcnNpb24uamF2YQkyMDAxLzAxLzE3 IDE5OjIyOjAyDQpAQCAtMSw1ICsxLDcgQEANCiBwYWNrYWdlIHV0aWxzOw0K IA0KK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsNCisNCiAvKioNCiAg KiBUaGlzIGxpdHRsZSBhcHAgY2hlY2tzIHRvIHNlZSB3aGF0IHZlcnNpb24g b2YgSlZNIGlzIGJlaW5nIHVzZWQuDQogICogSXQgZG9lcyB0aGlzIGJ5IGNo ZWNraW5nIGZpcnN0IHRoZSBqYXZhLnZtLnZlcnNpb24gcHJvcGVydHksIGFu ZA0KQEAgLTQxLDI4ICs0MywzMCBAQA0KICAgICB7DQogCVN0cmluZyB2bXZl cnNpb24gPSBTeXN0ZW0uZ2V0UHJvcGVydHkoImphdmEudm0udmVyc2lvbiIp Ow0KIAkNCi0JU3lzdGVtLm91dC5wcmludGxuKCJwb3N0Z3Jlc3FsLmpkYmM9 IitTeXN0ZW0uZ2V0UHJvcGVydHkoInBvc3RncmVzcWwuamRiYyIpKTsNCi0J DQotCS8vIFdlIGFyZSBydW5uaW5nIGEgMS4xIEpWTQ0KLQlpZih2bXZlcnNp b24uc3RhcnRzV2l0aCgiMS4xIikpIHsNCisJLy8gV2UgbWlnaHQgYmUgcnVu bmluZyBhIDEuMSBKREsgdGhhdCBkb2VzIG5vdCBkZWZpbmUNCisJLy8gdm12 ZXJzaW9uLCBzdWNoIGFzIHRoZSBJQk0gSkRLIDEuMS44DQorCWlmKHZtdmVy c2lvbiA9PSBudWxsICYmIGNoZWNrQ2xhc3MoImphdmEubGFuZy5CeXRlIikp IHsNCiAJICAgIFN5c3RlbS5vdXQucHJpbnRsbigiamRiYzEiKTsNCi0JICAg IC8vU3lzdGVtLmV4aXQoMCk7DQotCX0NCi0JZWxzZQ0KLQkvLyBXZSBhcmUg cnVubmluZyBhIDEuMiBvciAxLjMgSlZNDQotCWlmKHZtdmVyc2lvbi5zdGFy dHNXaXRoKCIxLjIiKSB8fA0KLQkgICB2bXZlcnNpb24uc3RhcnRzV2l0aCgi MS4zIikgfHwNCi0JICAgY2hlY2tDbGFzcygiamF2YS5sYW5nLkJ5dGUiKQ0K LQkgICApIHsNCi0JICAgIA0KKwl9IA0KKwkvLyBXZSBhcmUgcnVubmluZyBh IDEuMSBKREsNCisJZWxzZSBpZiAodm12ZXJzaW9uLnN0YXJ0c1dpdGgoIjEu MSIpKSB7IA0KKwkgICAgU3lzdGVtLm91dC5wcmludGxuKCJqZGJjMSIpOw0K Kwl9IA0KKwkvLyBXZSBhcmUgcnVubmluZyBhIDEuMiBvciAxLjMgSkRLLCBv ciBtYXliZSBhbm90aGVyIA0KKwkvLyBjb21wYXRpYmxlIEpESyB0aGF0IGhh cyBqYXZhLmxhbmcuQnl0ZSBzdXBwb3J0Lg0KKwllbHNlIGlmKHZtdmVyc2lv bi5zdGFydHNXaXRoKCIxLjIiKSB8fA0KKwkgICAgICAgIHZtdmVyc2lvbi5z dGFydHNXaXRoKCIxLjMiKSB8fA0KKwkgICAgICAgIGNoZWNrQ2xhc3MoImph dmEubGFuZy5CeXRlIikNCisJICAgICAgICApIHsNCiAJICAgIC8vIENoZWNr IHRvIHNlZSBpZiB3ZSBoYXZlIHRoZSBzdGFuZGFyZCBleHRlbnNpb25zLiBJ ZiBzbywgdGhlbg0KIAkgICAgLy8gd2Ugd2FudCB0aGUgZW50ZXJwcmlzZSBl ZGl0aW9uLCBvdGhlcndpc2UgdGhlIGpkYmMyIGRyaXZlci4NCiAJICAgIGlm KGNoZWNrQ2xhc3MoImphdmF4LnNxbC5EYXRhU291cmNlIikpDQotCQlTeXN0 ZW0ub3V0LnByaW50bG4oImVudGVycHJpc2UiKTsNCisJICAgICAgICBTeXN0 ZW0ub3V0LnByaW50bG4oImVudGVycHJpc2UiKTsNCiAJICAgIGVsc2UNCi0J CVN5c3RlbS5vdXQucHJpbnRsbigiamRiYzIiKTsNCi0JICAgIC8vU3lzdGVt LmV4aXQoMCk7DQorCSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJqZGJj MiIpOw0KIAl9DQotCVN5c3RlbS5zZXRQcm9wZXJ0eSgicG9zdGdyZXNxbC5q ZGJjIiwieW95byIpOw0KKwkvLyBJZiB3ZSBoYXZlIG5vdCBkZXRlY3RlZCBh IHN1cHBvcnRlZCBKREsgdmVyc2lvbiwgDQorCS8vIGV4aXQgd2l0aCBhbiBl cnJvciBzdGF0dXMgdG8gc3RvcCB0aGUgbWFrZSBwcm9jZXNzIGVhcmx5Lg0K KwllbHNlIFN5c3RlbS5leGl0KDEpOw0KICAgICB9DQogfQ0K ---1328765647-724582343-979758047=:26916--