Return-Path: X-Original-To: apmail-commons-issues-archive@minotaur.apache.org Delivered-To: apmail-commons-issues-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id EA896793F for ; Sun, 11 Dec 2011 09:27:04 +0000 (UTC) Received: (qmail 28440 invoked by uid 500); 11 Dec 2011 09:27:03 -0000 Delivered-To: apmail-commons-issues-archive@commons.apache.org Received: (qmail 28161 invoked by uid 500); 11 Dec 2011 09:27:02 -0000 Mailing-List: contact issues-help@commons.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: issues@commons.apache.org Delivered-To: mailing list issues@commons.apache.org Received: (qmail 28149 invoked by uid 99); 11 Dec 2011 09:27:02 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Sun, 11 Dec 2011 09:27:02 +0000 X-ASF-Spam-Status: No, hits=-2001.2 required=5.0 tests=ALL_TRUSTED,RP_MATCHES_RCVD X-Spam-Check-By: apache.org Received: from [140.211.11.116] (HELO hel.zones.apache.org) (140.211.11.116) by apache.org (qpsmtpd/0.29) with ESMTP; Sun, 11 Dec 2011 09:27:00 +0000 Received: from hel.zones.apache.org (hel.zones.apache.org [140.211.11.116]) by hel.zones.apache.org (Postfix) with ESMTP id 1F13710CB16 for ; Sun, 11 Dec 2011 09:26:40 +0000 (UTC) Date: Sun, 11 Dec 2011 09:26:40 +0000 (UTC) From: "Stephen Kruger (Updated) (JIRA)" To: issues@commons.apache.org Message-ID: <1449739312.62533.1323595600128.JavaMail.tomcat@hel.zones.apache.org> In-Reply-To: <774693690.62527.1323595180114.JavaMail.tomcat@hel.zones.apache.org> Subject: [jira] [Updated] (EMAIL-110) java.lang.OutOfMemoryError: Java heap space while parsing Mime part MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394 [ https://issues.apache.org/jira/browse/EMAIL-110?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Stephen Kruger updated EMAIL-110: --------------------------------- Description: I have a particular eml message which appears to cause a complete memory overflow deep within commons-email. A look at the source code does reveal a suspect "while" loop which appears to never exit properly, and should be rewritten so that bad data could not give us this situation. The stack trace is : java.lang.OutOfMemoryError: Java heap space at java.util.Arrays.copyOf(Arrays.java:2786) at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:71) at javax.mail.internet.MimeMultipart.readTillFirstBoundary(MimeMultipart.java:316) at javax.mail.internet.MimeMultipart.parse(MimeMultipart.java:186) at javax.mail.internet.MimeMultipart.updateHeaders(MimeMultipart.java:130) at javax.mail.internet.MimeBodyPart.updateHeaders(MimeBodyPart.java:539) at javax.mail.internet.MimeMultipart.updateHeaders(MimeMultipart.java:133) at javax.mail.internet.MimeMessage.updateHeaders(MimeMessage.java:1393) at javax.mail.internet.MimeMessage.saveChanges(MimeMessage.java:1366) at javax.mail.Transport.send(Transport.java:76) at javax.mail.Transport.send(Transport.java:48) There are many public threads illustrating this same error, but they never pinpoint the code to Commons Email, I'm guessing I'm using the code in a way which exhibits this behaviour : http://stackoverflow.com/questions/3177092/uploading-to-blobstore-gives-a-java-heap-outofmemoryerror http://stackoverflow.com/questions/2994031/outofmemoryerror-trying-to-upload-to-blobstore-locally was: I have a particular eml message which appears to cause a complete memory overflow deep within commons-email. A look at the source code does reveal a suspect "while" loop which appears to never exit properly, and should be rewritten so that bad data could not give us this situation. The stack trace is : java.lang.OutOfMemoryError: Java heap space at java.util.Arrays.copyOf(Arrays.java:2786) at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:71) at javax.mail.internet.MimeMultipart.readTillFirstBoundary(MimeMultipart.java:316) at javax.mail.internet.MimeMultipart.parse(MimeMultipart.java:186) at javax.mail.internet.MimeMultipart.updateHeaders(MimeMultipart.java:130) at javax.mail.internet.MimeBodyPart.updateHeaders(MimeBodyPart.java:539) at javax.mail.internet.MimeMultipart.updateHeaders(MimeMultipart.java:133) at javax.mail.internet.MimeMessage.updateHeaders(MimeMessage.java:1393) at javax.mail.internet.MimeMessage.saveChanges(MimeMessage.java:1366) at javax.mail.Transport.send(Transport.java:76) at javax.mail.Transport.send(Transport.java:48) The message which can repeatedly cause this issue is pasted below (this form shows no attachment capability) : Received: from somedomain.test.com (somedomain.test.com [99.168.1.33]) by smtp.myserver.com with SMTP (BlueBox) for postmaster@localhost; Fri, 07 Oct 2011 10:35:04 -0400 (EDT) To: postmaster@localhost From: noreply@example.com Reply-To: noreply@example.com Subject: Attachment Test X-Mailer: CakePHP Email Component MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="026a2bea167826bf111c47c4213d68b1" This part of the E-mail should never be seen. If: you are reading this, consider upgrading your e-mail: client to a MIME-compatible client.: Content-Transfer-Encoding: base64 --026a2bea167826bf111c47c4213d68b1 Content-Type: multipart/alternative; boundary="alt-026a2bea167826bf111c47c4213d68b1" Content-Transfer-Encoding: 7bit

This is the body of the message

--026a2bea167826bf111c47c4213d68b1 Content-Type: application/octet-stream Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="email.test.php" PD9waHAKLyogU1ZOIEZJTEU6ICRJZCQgKi8KLyoqCiAqIEVtYWlsQ29tcG9uZW50VGVzdCBmaWxl CiAqCiAqIFNlcmllcyBvZiB0ZXN0cyBmb3IgZW1haWwgY29tcG9uZW50LgogKgogKiBQSFAgdmVy c2lvbnMgNCBhbmQgNQogKgogKiBDYWtlUEhQKHRtKSBUZXN0cyA8aHR0cHM6Ly90cmFjLmNha2Vw aHAub3JnL3dpa2kvRGV2ZWxvcGVtZW50L1Rlc3RTdWl0ZT4KICogQ29weXJpZ2h0IDIwMDUtMjAw OCwgQ2FrZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuIChodHRwOi8vd3d3LmNha2Vmb3VuZGF0 aW9uLm9yZykKICoKICogIExpY2Vuc2VkIHVuZGVyIFRoZSBPcGVuIEdyb3VwIFRlc3QgU3VpdGUg TGljZW5zZQogKiAgUmVkaXN0cmlidXRpb25zIG9mIGZpbGVzIG11c3QgcmV0YWluIHRoZSBhYm92 ZSBjb3B5cmlnaHQgbm90aWNlLgogKgogKiBAZmlsZXNvdXJjZQogKiBAY29weXJpZ2h0ICAgICBD b3B5cmlnaHQgMjAwNS0yMDA4LCBDYWtlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gKGh0dHA6 Ly93d3cuY2FrZWZvdW5kYXRpb24ub3JnKQogKiBAbGluayAgICAgICAgICBodHRwczovL3RyYWMu Y2FrZXBocC5vcmcvd2lraS9EZXZlbG9wZW1lbnQvVGVzdFN1aXRlIENha2VQSFAodG0pIFRlc3Rz CiAqIEBwYWNrYWdlICAgICAgIGNha2UKICogQHN1YnBhY2thZ2UgICAgY2FrZS5jYWtlLnRlc3Rz LmNhc2VzLmxpYnMuY29udHJvbGxlci5jb21wb25lbnRzCiAqIEBzaW5jZSAgICAgICAgIENha2VQ SFAodG0pIHYgMS4yLjAuNTM0NwogKiBAdmVyc2lvbiAgICAgICAkUmV2aXNpb24kCiAqIEBtb2Rp ZmllZGJ5ICAgICRMYXN0Q2hhbmdlZEJ5JAogKiBAbGFzdG1vZGlmaWVkICAkRGF0ZSQKICogQGxp Y2Vuc2UgICAgICAgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9vcGVuZ3JvdXAu cGhwIFRoZSBPcGVuIEdyb3VwIFRlc3QgU3VpdGUgTGljZW5zZQogKi8KaWYgKCFkZWZpbmVkKCdS VU5OSU5HX0VNQUlMX1VOSVRfVEVTVFMnKSkgZGVmaW5lKCdSVU5OSU5HX0VNQUlMX1VOSVRfVEVT VFMnLHRydWUpOwpBcHA6OmltcG9ydCgnQ29tcG9uZW50JywgJ0VtYWlsJyk7Ci8qKgogKiBFbWFp bFRlc3RDb21wb25lbnQgY2xhc3MKICoKICogQHBhY2thZ2UgICAgICAgY2FrZQogKiBAc3VicGFj a2FnZSAgICBjYWtlLnRlc3RzLmNhc2VzLmxpYnMuY29udHJvbGxlci5jb21wb25lbnRzCiAqLwpj bGFzcyBFbWFpbFRlc3RDb21wb25lbnQgZXh0ZW5kcyBFbWFpbENvbXBvbmVudCB7Ci8qKgogKiBu YW1lIHByb3BlcnR5CiAqCiAqIEB2YXIgc3RyaW5nICdFbWFpbFRlc3RDb21wb25lbnQnCiAqIEBh Y2Nlc3MgcHVibGljCiAqLwoJdmFyICRuYW1lID0gJ0VtYWlsVGVzdENvbXBvbmVudCc7Ci8qKgog KiBMaXN0IG9mIG9wdGlvbnMgdG8gdXNlIGZvciBzbXRwIG1haWwgbWV0aG9kLCBvdmVycmlkZSBm b3IgdGVzdGluZwogKgogKiBPcHRpb25zIGlzOgogKiAtIHBvcnQKICogLSBob3N0CiAqIC0gdGlt ZW91dAogKiAtIHVzZXJuYW1lCiAqIC0gcGFzc3dvcmQKICoKICogQHZhciBhcnJheQogKiBAYWNj ZXNzIHB1YmxpYwogKi8KCXZhciAkc210cE9wdGlvbnMgPSBhcnJheSgKCQkncG9ydCc9PiAyNSwg J2hvc3QnID0+IFNNVFBfU0VSVkVSLCAndGltZW91dCcgPT4gMzAKCSk7Ci8qKgogKiBzbXRwU2Vu ZCBtZXRob2Qgb3ZlcnJpZGUgZm9yIHRlc3RpbmcKICoKICogQGFjY2VzcyBwdWJsaWMKICogQHJl dHVybiBtaXhlZAogKi8KCWZ1bmN0aW9uIHNtdHBTZW5kKCRkYXRhLCAkY29kZSA9ICcyNTAnKSB7 CgkJcmV0dXJuIHBhcmVudDo6X19zbXRwU2VuZCgkZGF0YSwgJGNvZGUpOwoJfQovKioKICogQ29u dmVuaWVuY2Ugc2V0dGVyIG1ldGhvZCBmb3IgdGVzdGluZy4KICoKICogQGFjY2VzcyBwdWJsaWMK ICogQHJldHVybiB2b2lkCiAqLwoJZnVuY3Rpb24gc2V0Q29ubmVjdGlvblNvY2tldCgmJHNvY2tl dCkgewoJCSR0aGlzLT5fX3NtdHBDb25uZWN0aW9uID0gJHNvY2tldDsKCX0KLyoqCiAqIENvbnZl bmllbmNlIGdldHRlciBtZXRob2QgZm9yIHRlc3RpbmcuCiAqCiAqIEBhY2Nlc3MgcHVibGljCiAq IEByZXR1cm4gbWl4ZWQKICovCglmdW5jdGlvbiBnZXRDb25uZWN0aW9uU29ja2V0KCkgewoJCXJl dHVybiAkdGhpcy0+X19zbXRwQ29ubmVjdGlvbjsKCX0KLyoqCiAqIENvbnZlbmllbmNlIHNldHRl ciBmb3IgdGVzdGluZy4KICoKICogQGFjY2VzcyBwdWJsaWMKICogQHJldHVybiB2b2lkCiAqLwoJ ZnVuY3Rpb24gc2V0SGVhZGVycygkaGVhZGVycykgewoJCSR0aGlzLT5fX2hlYWRlciArPSAkaGVh ZGVyczsKCX0KLyoqCiAqIENvbnZlbmllbmNlIGdldHRlciBmb3IgdGVzdGluZy4KICoKICogQGFj Y2VzcyBwdWJsaWMKICogQHJldHVybiBhcnJheQogKi8KCWZ1bmN0aW9uIGdldEhlYWRlcnMoKSB7 CgkJcmV0dXJuICR0aGlzLT5fX2hlYWRlcjsKCX0KLyoqCiAqIENvbnZlbmllbmNlIHNldHRlciBm b3IgdGVzdGluZy4KICoKICogQGFjY2VzcyBwdWJsaWMKICogQHJldHVybiB2b2lkCiAqLwoJZnVu Y3Rpb24gc2V0Qm91bmRhcnkoKSB7CgkJJHRoaXMtPl9fY3JlYXRlQm91bmRhcnkoKTsKCX0KLyoq CiAqIENvbnZlbmllbmNlIGdldHRlciBmb3IgdGVzdGluZy4KICoKICogQGFjY2VzcyBwdWJsaWMK ICogQHJldHVybiBzdHJpbmcKICovCglmdW5jdGlvbiBnZXRCb3VuZGFyeSgpIHsKCQlyZXR1cm4g JHRoaXMtPl9fYm91bmRhcnk7Cgl9Ci8qKgogKiBDb252ZW5pZW5jZSBnZXR0ZXIgZm9yIHRlc3Rp bmcuCiAqCiAqIEBhY2Nlc3MgcHVibGljCiAqIEByZXR1cm4gc3RyaW5nCiAqLwoJZnVuY3Rpb24g Z2V0TWVzc2FnZSgpIHsKCQlyZXR1cm4gJHRoaXMtPl9fbWVzc2FnZTsKCX0KLyoqCiAqIENvbnZl bmllbmNlIG1ldGhvZCBmb3IgdGVzdGluZy4KICoKICogQGFjY2VzcyBwdWJsaWMKICogQHJldHVy biBzdHJpbmcKICovCglmdW5jdGlvbiBzdHJpcCgkY29udGVudCwgJG1lc3NhZ2UgPSBmYWxzZSkg ewoJCXJldHVybiBwYXJlbnQ6Ol9fc3RyaXAoJGNvbnRlbnQsICRtZXNzYWdlKTsKCX0KfQovKioK ICogRW1haWxUZXN0Q29udHJvbGxlciBjbGFzcwogKgogKiBAcGFja2FnZSAgICAgICBjYWtlCiAq IEBzdWJwYWNrYWdlICAgIGNha2UudGVzdHMuY2FzZXMubGlicy5jb250cm9sbGVyLmNvbXBvbmVu dHMKICovCmNsYXNzIEVtYWlsVGVzdENvbnRyb2xsZXIgZXh0ZW5kcyBDb250cm9sbGVyIHsKLyoq CiAqIG5hbWUgcHJvcGVydHkKICoKICogQHZhciBzdHJpbmcgJ0VtYWlsVGVzdCcKICogQGFjY2Vz cyBwdWJsaWMKICovCgl2YXIgJG5hbWUgPSAnRW1haWxUZXN0JzsKLyoqCiAqIHVzZXMgcHJvcGVy dHkKICoKICogQHZhciBtaXhlZCBudWxsCiAqIEBhY2Nlc3MgcHVibGljCiAqLwoJdmFyICR1c2Vz ID0gbnVsbDsKLyoqCiAqIGNvbXBvbmVudHMgcHJvcGVydHkKICoKICogQHZhciBhcnJheQogKiBA YWNjZXNzIHB1YmxpYwogKi8KCXZhciAkY29tcG9uZW50cyA9IGFycmF5KCdFbWFpbFRlc3QnKTsK LyoqCiAqIHBhZ2VUaXRsZSBwcm9wZXJ0eQogKgogKiBAdmFyIHN0cmluZwogKiBAYWNjZXNzIHB1 YmxpYwogKi8KCXZhciAkcGFnZVRpdGxlID0gJ0VtYWlsVGVzdCc7Cn0KLyoqCiAqIEVtYWlsVGVz dCBjbGFzcwogKgogKiBAcGFja2FnZSAgICAgICBjYWtlCiAqIEBzdWJwYWNrYWdlICAgIGNha2Uu dGVzdHMuY2FzZXMubGlicy5jb250cm9sbGVyLmNvbXBvbmVudHMKICovCmNsYXNzIEVtYWlsQ29t cG9uZW50VGVzdCBleHRlbmRzIENha2VUZXN0Q2FzZSB7Ci8qKgogKiBDb250cm9sbGVyIHByb3Bl cnR5CiAqCiAqIEB2YXIgRW1haWxUZXN0Q29udHJvbGxlcgogKiBAYWNjZXNzIHB1YmxpYwogKi8K CXZhciAkQ29udHJvbGxlcjsKLyoqCiAqIG5hbWUgcHJvcGVydHkKICoKICogQHZhciBzdHJpbmcg J0VtYWlsJwogKiBAYWNjZXNzIHB1YmxpYwogKi8KCXZhciAkbmFtZSA9ICdFbWFpbCc7Ci8qKgog KiBzZXRVcCBtZXRob2QKICoKICogQGFjY2VzcyBwdWJsaWMKICogQHJldHVybiB2b2lkCiAqLwoJ ZnVuY3Rpb24gc2V0VXAoKSB7CgkJJHRoaXMtPl9hcHBFbmNvZGluZyA9IENvbmZpZ3VyZTo6cmVh ZCgnQXBwLmVuY29kaW5nJyk7CgkJQ29uZmlndXJlOjp3cml0ZSgnQXBwLmVuY29kaW5nJywgJ1VU Ri04Jyk7CgoJCSR0aGlzLT5Db250cm9sbGVyID0mIG5ldyBFbWFpbFRlc3RDb250cm9sbGVyKCk7 CgoJCXJlc3RvcmVfZXJyb3JfaGFuZGxlcigpOwoJCUAkdGhpcy0+Q29udHJvbGxlci0+Q29tcG9u ZW50LT5pbml0KCR0aGlzLT5Db250cm9sbGVyKTsKCQlzZXRfZXJyb3JfaGFuZGxlcignc2ltcGxl VGVzdEVycm9ySGFuZGxlcicpOwoKCQkkdGhpcy0+Q29udHJvbGxlci0+RW1haWxUZXN0LT5pbml0 aWFsaXplKCR0aGlzLT5Db250cm9sbGVyLCBhcnJheSgpKTsKCQlDbGFzc1JlZ2lzdHJ5OjphZGRP YmplY3QoJ3ZpZXcnLCBuZXcgVmlldygkdGhpcy0+Q29udHJvbGxlcikpOwoKCQkkdGhpcy0+X3Zp ZXdQYXRocyA9IENvbmZpZ3VyZTo6cmVhZCgndmlld1BhdGhzJyk7CgkJQ29uZmlndXJlOjp3cml0 ZSgndmlld1BhdGhzJywgYXJyYXkoVEVTVF9DQUtFX0NPUkVfSU5DTFVERV9QQVRIIC4gJ3Rlc3Rz JyAuIERTIC4gJ3Rlc3RfYXBwJyAuIERTIC4gJ3ZpZXdzJy4gRFMpKTsKCgkJJHRoaXMtPkNvbnRy b2xsZXItPlNlc3Npb24tPmFjdGl2YXRlKCdNZXNzYWdlJyk7Cgl9Ci8qKgogKiB0ZWFyRG93biBt ZXRob2QKICoKICogQGFjY2VzcyBwdWJsaWMKICogQHJldHVybiB2b2lkCiAqLwoJZnVuY3Rpb24g dGVhckRvd24oKSB7CgkJQ29uZmlndXJlOjp3cml0ZSgnQXBwLmVuY29kaW5nJywgJHRoaXMtPl9h cHBFbmNvZGluZyk7CgkJQ29uZmlndXJlOjp3cml0ZSgndmlld1BhdGhzJywgJHRoaXMtPl92aWV3 UGF0aHMpOwoJCSR0aGlzLT5Db250cm9sbGVyLT5TZXNzaW9uLT5kZWwoJ01lc3NhZ2UnKTsKCQly ZXN0b3JlX2Vycm9yX2hhbmRsZXIoKTsKCQlDbGFzc1JlZ2lzdHJ5OjpmbHVzaCgpOwoJfQovKioK ICogdGVzdEJhZFNtdHBTZW5kIG1ldGhvZAogKgogKiBAYWNjZXNzIHB1YmxpYwogKiBAcmV0dXJu IHZvaWQKICovCglmdW5jdGlvbiB0ZXN0QmFkU210cFNlbmQoKSB7CgkJJHRoaXMtPkNvbnRyb2xs ZXItPkVtYWlsVGVzdC0+c210cE9wdGlvbnNbJ2hvc3QnXSA9ICdibGFoJzsKCQkkdGhpcy0+Q29u dHJvbGxlci0+RW1haWxUZXN0LT5kZWxpdmVyeSA9ICdzbXRwJzsKCQkkdGhpcy0+YXNzZXJ0RmFs c2UoJHRoaXMtPkNvbnRyb2xsZXItPkVtYWlsVGVzdC0+c2VuZCgnU2hvdWxkIG5vdCB3b3JrJykp OwoJfQovKioKICogdGVzdFNtdHBTZW5kIG1ldGhvZAogKgogKiBAYWNjZXNzIHB1YmxpYwogKiBA cmV0dXJuIHZvaWQKICovCglmdW5jdGlvbiB0ZXN0U210cFNlbmQoKSB7CgkJaWYgKCR0aGlzLT5z a2lwSWYoIUBmc29ja29wZW4oU01UUF9TRVJWRVIsIDI1KSwgJyVzIE5vIFNNVFAgc2VydmVyIHJ1 bm5pbmcgb24gJyAuIFNNVFBfU0VSVkVSKSkgewoJCQlyZXR1cm47CgkJfQoJCSR0aGlzLT5Db250 cm9sbGVyLT5FbWFpbFRlc3QtPnJlc2V0KCk7CgkJJHRoaXMtPkNvbnRyb2xsZXItPkVtYWlsVGVz dC0+dG8gPSAncG9zdG1hc3RlckBsb2NhbGhvc3QnOwoJCSR0aGlzLT5Db250cm9sbGVyLT5FbWFp bFRlc3QtPmZyb20gPSAnbm9yZXBseUBleGFtcGxlLmNvbSc7CgkJJHRoaXMtPkNvbnRyb2xsZXIt PkVtYWlsVGVzdC0+c3ViamVjdCA9ICdDYWtlIFNNVFAgdGVzdCc7CgkJJHRoaXMtPkNvbnRyb2xs ZXItPkVtYWlsVGVzdC0+cmVwbHlUbyA9ICdub3JlcGx5QGV4YW1wbGUuY29tJzsKCQkkdGhpcy0+ Q29udHJvbGxlci0+RW1haWxUZXN0LT50ZW1wbGF0ZSA9IG51bGw7CgoJCSR0aGlzLT5Db250cm9s bGVyLT5FbWFpbFRlc3QtPmRlbGl2ZXJ5ID0gJ3NtdHAnOwoJCSR0aGlzLT5hc3NlcnRUcnVlKCR0 aGlzLT5Db250cm9sbGVyLT5FbWFpbFRlc3QtPnNlbmQoJ1RoaXMgaXMgdGhlIGJvZHkgb2YgdGhl IG1lc3NhZ2UnKSk7CgoJCSR0aGlzLT5Db250cm9sbGVyLT5FbWFpbFRlc3QtPl9kZWJ1ZyA9IHRy dWU7CgkJJHRoaXMtPkNvbnRyb2xsZXItPkVtYWlsVGVzdC0+c2VuZEFzID0gJ3RleHQnOwoJCSRz bXRwU2VydmVyID0gU01UUF9TRVJWRVI7CgkJJGV4cGVjdCA9IDw8PFRFTVBET0MKPHByZT5Ib3N0 OiAkc210cFNlcnZlcgpQb3J0OiAyNQpUaW1lb3V0OiAzMApUbzogcG9zdG1hc3RlckBsb2NhbGhv c3QKRnJvbTogbm9yZXBseUBleGFtcGxlLmNvbQpTdWJqZWN0OiBDYWtlIFNNVFAgdGVzdApIZWFk ZXI6CgpUbzogcG9zdG1hc3RlckBsb2NhbGhvc3QKRnJvbTogbm9yZXBseUBleGFtcGxlLmNvbQpS ZXBseS1Ubzogbm9yZXBseUBleGFtcGxlLmNvbQpTdWJqZWN0OiBDYWtlIFNNVFAgdGVzdApYLU1h aWxlcjogQ2FrZVBIUCBFbWFpbCBDb21wb25lbnQKTUlNRS1WZXJzaW9uOiAxLjAKQ29udGVudC1U eXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6 IGJhc2U2NFBhcmFtZXRlcnM6CgpNZXNzYWdlOgoKVGhpcyBpcyB0aGUgYm9keSBvZiB0aGUgbWVz c2FnZQoKPC9wcmU+ClRFTVBET0M7CgkJJHRoaXMtPmFzc2VydFRydWUoJHRoaXMtPkNvbnRyb2xs ZXItPkVtYWlsVGVzdC0+c2VuZCgnVGhpcyBpcyB0aGUgYm9keSBvZiB0aGUgbWVzc2FnZScpKTsK CQkkdGhpcy0+YXNzZXJ0RXF1YWwoJHRoaXMtPkNvbnRyb2xsZXItPlNlc3Npb24tPnJlYWQoJ01l c3NhZ2UuZW1haWwubWVzc2FnZScpLCAkdGhpcy0+X19vc0ZpeCgkZXhwZWN0KSk7Cgl9Ci8qKgog KiB0ZXN0QXV0aGVudGljYXRlZFNtdHBTZW5kIG1ldGhvZAogKgogKiBAYWNjZXNzIHB1YmxpYwog KiBAcmV0dXJuIHZvaWQKICovCglmdW5jdGlvbiB0ZXN0QXV0aGVudGljYXRlZFNtdHBTZW5kKCkg ewoJCSR0aGlzLT5za2lwSWYoIUBmc29ja29wZW4oU01UUF9TRVJWRVIsIDI1KSwgJyVzIE5vIFNN VFAgc2VydmVyIHJ1bm5pbmcgb24gJyAuIFNNVFBfU0VSVkVSKTsKCQkKCQkkdGhpcy0+Q29udHJv bGxlci0+RW1haWxUZXN0LT5yZXNldCgpOwoJCSR0aGlzLT5Db250cm9sbGVyLT5FbWFpbFRlc3Qt PnRvID0gJ3Bvc3RtYXN0ZXJAbG9jYWxob3N0JzsKCQkkdGhpcy0+Q29udHJvbGxlci0+RW1haWxU ZXN0LT5mcm9tID0gJ25vcmVwbHlAZXhhbXBsZS5jb20nOwoJCSR0aGlzLT5Db250cm9sbGVyLT5F bWFpbFRlc3QtPnN1YmplY3QgPSAnQ2FrZSBTTVRQIHRlc3QnOwoJCSR0aGlzLT5Db250cm9sbGVy LT5FbWFpbFRlc3QtPnJlcGx5VG8gPSAnbm9yZXBseUBleGFtcGxlLmNvbSc7CgkJJHRoaXMtPkNv bnRyb2xsZXItPkVtYWlsVGVzdC0+dGVtcGxhdGUgPSBudWxsOwoJCSR0aGlzLT5Db250cm9sbGVy LT5FbWFpbFRlc3QtPnNtdHBPcHRpb25zWyd1c2VybmFtZSddID0gJ3Rlc3QnOwoJCSR0aGlzLT5D b250cm9sbGVyLT5FbWFpbFRlc3QtPnNtdHBPcHRpb25zWydwYXNzd29yZCddID0gJ3Rlc3Rpbmcn OwoKCQkkdGhpcy0+Q29udHJvbGxlci0+RW1haWxUZXN0LT5kZWxpdmVyeSA9ICdzbXRwJzsKCQkk cmVzdWx0ID0gJHRoaXMtPkNvbnRyb2xsZXItPkVtYWlsVGVzdC0+c2VuZCgnVGhpcyBpcyB0aGUg Ym9keSBvZiB0aGUgbWVzc2FnZScpOwoJCSRjb2RlID0gc3Vic3RyKCR0aGlzLT5Db250cm9sbGVy LT5FbWFpbFRlc3QtPnNtdHBFcnJvciwgMCwgMyk7CgkJJHRoaXMtPnNraXBJZighJGNvZGUsICcl cyBBdXRoZW50aWNhdGlvbiBub3QgZW5hYmxlZCBvbiBzZXJ2ZXInKTsKCgkJJHRoaXMtPmFzc2Vy dEZhbHNlKCRyZXN1bHQpOwoJCS8vJHRoaXMtPmFzc2VydEVxdWFsKCRjb2RlLCAnNTM1Jyk7IC8v R290IFNNVFAgNTAyIENvbW1hbmQgTm90IGltcGxlbWVudGVkCgl9Ci8qKgogKiB0ZXN0U2VuZEZv cm1hdHMgbWV0aG9kCiAqCiAqIEBhY2Nlc3MgcHVibGljCiAqIEByZXR1cm4gdm9pZAogKi8KCWZ1 bmN0aW9uIHRlc3RTZW5kRm9ybWF0cygpIHsKCQkkdGhpcy0+Q29udHJvbGxlci0+RW1haWxUZXN0 LT5yZXNldCgpOwoJCSR0aGlzLT5Db250cm9sbGVyLT5FbWFpbFRlc3QtPnRvID0gJ3Bvc3RtYXN0 ZXJAbG9jYWxob3N0JzsKCQkkdGhpcy0+Q29udHJvbGxlci0+RW1haWxUZXN0LT5mcm9tID0gJ25v cmVwbHlAZXhhbXBsZS5jb20nOwoJCSR0aGlzLT5Db250cm9sbGVyLT5FbWFpbFRlc3QtPnN1Ympl Y3QgPSAnQ2FrZSBTTVRQIHRlc3QnOwoJCSR0aGlzLT5Db250cm9sbGVyLT5FbWFpbFRlc3QtPnJl cGx5VG8gPSAnbm9yZXBseUBleGFtcGxlLmNvbSc7CgkJJHRoaXMtPkNvbnRyb2xsZXItPkVtYWls VGVzdC0+dGVtcGxhdGUgPSBudWxsOwoJCSR0aGlzLT5Db250cm9sbGVyLT5FbWFpbFRlc3QtPmRl bGl2ZXJ5ID0gJ2RlYnVnJzsKCgkJJG1lc3NhZ2UgPSA8PDxNU0dCTE9DCjxwcmU+VG86IHBvc3Rt YXN0ZXJAbG9jYWxob3N0CkZyb206IG5vcmVwbHlAZXhhbXBsZS5jb20KU3ViamVjdDogQ2FrZSBT TVRQIHRlc3QKSGVhZGVyOgoKRnJvbTogbm9yZXBseUBleGFtcGxlLmNvbQpSZXBseS1Ubzogbm9y ZXBseUBleGFtcGxlLmNvbQpYLU1haWxlcjogQ2FrZVBIUCBFbWFpbCBDb21wb25lbnQKTUlNRS1W ZXJzaW9uOiAxLjAKQ29udGVudC1UeXBlOiB7Q09OVEVOVFRZUEV9CkNvbnRlbnQtVHJhbnNmZXIt RW5jb2Rpbmc6IGJhc2U2NFBhcmFtZXRlcnM6CgpNZXNzYWdlOgoKVGhpcyBpcyB0aGUgYm9keSBv ZiB0aGUgbWVzc2FnZQoKPC9wcmU+Ck1TR0JMT0M7CgkJJHRoaXMtPkNvbnRyb2xsZXItPkVtYWls VGVzdC0+c2VuZEFzID0gJ3RleHQnOwoJCSRleHBlY3QgPSBzdHJfcmVwbGFjZSgne0NPTlRFTlRU WVBFfScsICd0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04JywgJG1lc3NhZ2UpOwoJCSR0aGlzLT5h c3NlcnRUcnVlKCR0aGlzLT5Db250cm9sbGVyLT5FbWFpbFRlc3QtPnNlbmQoJ1RoaXMgaXMgdGhl IGJvZHkgb2YgdGhlIG1lc3NhZ2UnKSk7CgkJJHRoaXMtPmFzc2VydEVxdWFsKCR0aGlzLT5Db250 cm9sbGVyLT5TZXNzaW9uLT5yZWFkKCdNZXNzYWdlLmVtYWlsLm1lc3NhZ2UnKSwgJHRoaXMtPl9f b3NGaXgoJGV4cGVjdCkpOwoKCQkkdGhpcy0+Q29udHJvbGxlci0+RW1haWxUZXN0LT5zZW5kQXMg PSAnaHRtbCc7CgkJJGV4cGVjdCA9IHN0cl9yZXBsYWNlKCd7Q09OVEVOVFRZUEV9JywgJ3RleHQv aHRtbDsgY2hhcnNldD1VVEYtOCcsICRtZXNzYWdlKTsKCQkkdGhpcy0+YXNzZXJ0VHJ1ZSgkdGhp cy0+Q29udHJvbGxlci0+RW1haWxUZXN0LT5zZW5kKCdUaGlzIGlzIHRoZSBib2R5IG9mIHRoZSBt ZXNzYWdlJykpOwoJCSR0aGlzLT5hc3NlcnRFcXVhbCgkdGhpcy0+Q29udHJvbGxlci0+U2Vzc2lv bi0+cmVhZCgnTWVzc2FnZS5lbWFpbC5tZXNzYWdlJyksICR0aGlzLT5fX29zRml4KCRleHBlY3Qp KTsKCgkJLy8gVE9ETzogYmV0dGVyIHRlc3QgZm9yIGZvcm1hdCBvZiBtZXNzYWdlIHNlbnQ/CgkJ JHRoaXMtPkNvbnRyb2xsZXItPkVtYWlsVGVzdC0+c2VuZEFzID0gJ2JvdGgnOwoKCQkkdGhpcy0+ YXNzZXJ0VHJ1ZSgkdGhpcy0+Q29udHJvbGxlci0+RW1haWxUZXN0LT5zZW5kKCdUaGlzIGlzIHRo ZSBib2R5IG9mIHRoZSBtZXNzYWdlJykpOwoJCS8vJGV4cGVjdCA9IHN0cl9yZXBsYWNlKCd7Q09O VEVOVFRZUEV9JywgJ211bHRpcGFydC9hbHRlcm5hdGl2ZTsgYm91bmRhcnk9ImFsdC0nLiR0aGlz LT5Db250cm9sbGVyLT5FbWFpbFRlc3QtPl9fYm91bmRhcnkuJyInLCAkbWVzc2FnZSk7CgkJLy8k dGhpcy0+YXNzZXJ0RXF1YWwoJHRoaXMtPkNvbnRyb2xsZXItPlNlc3Npb24tPnJlYWQoJ01lc3Nh Z2UuZW1haWwubWVzc2FnZScpLCAkdGhpcy0+X19vc0ZpeCgkZXhwZWN0KSk7Cgl9Ci8qKgogKiB0 ZXN0VGVtcGxhdGVzIG1ldGhvZAogKgogKiBAYWNjZXNzIHB1YmxpYwogKiBAcmV0dXJuIHZvaWQK ICovCglmdW5jdGlvbiB0ZXN0VGVtcGxhdGVzKCkgewoJCSR0aGlzLT5Db250cm9sbGVyLT5FbWFp bFRlc3QtPnJlc2V0KCk7CgkJJHRoaXMtPkNvbnRyb2xsZXItPkVtYWlsVGVzdC0+dG8gPSAncG9z dG1hc3RlckBsb2NhbGhvc3QnOwoJCSR0aGlzLT5Db250cm9sbGVyLT5FbWFpbFRlc3QtPmZyb20g PSAnbm9yZXBseUBleGFtcGxlLmNvbSc7CgkJJHRoaXMtPkNvbnRyb2xsZXItPkVtYWlsVGVzdC0+ c3ViamVjdCA9ICdDYWtlIFNNVFAgdGVzdCc7CgkJJHRoaXMtPkNvbnRyb2xsZXItPkVtYWlsVGVz dC0+cmVwbHlUbyA9ICdub3JlcGx5QGV4YW1wbGUuY29tJzsKCgkJJHRoaXMtPkNvbnRyb2xsZXIt PkVtYWlsVGVzdC0+ZGVsaXZlcnkgPSAnZGVidWcnOwoKCQkkaGVhZGVyID0gPDw8SEVBREJMT0MK VG86IHBvc3RtYXN0ZXJAbG9jYWxob3N0CkZyb206IG5vcmVwbHlAZXhhbXBsZS5jb20KU3ViamVj dDogQ2FrZSBTTVRQIHRlc3QKSGVhZGVyOgoKRnJvbTogbm9yZXBseUBleGFtcGxlLmNvbQpSZXBs eS1Ubzogbm9yZXBseUBleGFtcGxlLmNvbQpYLU1haWxlcjogQ2FrZVBIUCBFbWFpbCBDb21wb25l bnQKTUlNRS1WZXJzaW9uOiAxLjAKQ29udGVudC1UeXBlOiB7Q09OVEVOVFRZUEV9CkNvbnRlbnQt VHJhbnNmZXItRW5jb2Rpbmc6IGJhc2U2NFBhcmFtZXRlcnM6CgpNZXNzYWdlOgoKCkhFQURCTE9D OwoKCQkkdGhpcy0+Q29udHJvbGxlci0+RW1haWxUZXN0LT5sYXlvdXQgPSAnZGVmYXVsdCc7CgkJ JHRoaXMtPkNvbnRyb2xsZXItPkVtYWlsVGVzdC0+dGVtcGxhdGUgPSAnZGVmYXVsdCc7CgoJCSR0 ZXh0ID0gPDw8VEVYVEJMT0MKClRoaXMgaXMgdGhlIGJvZHkgb2YgdGhlIG1lc3NhZ2UKClRoaXMg ZW1haWwgd2FzIHNlbnQgdXNpbmcgdGhlIENha2VQSFAgRnJhbWV3b3JrLCBodHRwOi8vY2FrZXBo cC5vcmcuCgpURVhUQkxPQzsKCgkJJGh0bWwgPSA8PDxIVE1MQkxPQwo8IURPQ1RZUEUgaHRtbCBQ VUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMS8vRU4iPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+ RW1haWxUZXN0PC90aXRsZT4KPC9oZWFkPgo8Ym9keT4KCTxwPiBUaGlzIGlzIHRoZSBib2R5IG9m IHRoZSBtZXNzYWdlPC9wPjxwPiA8L3A+Cgk8cD5UaGlzIGVtYWlsIHdhcyBzZW50IHVzaW5nIHRo ZSA8YSBocmVmPSJodHRwOi8vY2FrZXBocC5vcmciPkNha2VQSFAgRnJhbWV3b3JrPC9hPjwvcD4K PC9ib2R5Pgo8L2h0bWw+CkhUTUxCTE9DOwoKCQkkdGhpcy0+Q29udHJvbGxlci0+RW1haWxUZXN0 LT5zZW5kQXMgPSAndGV4dCc7CgkJLy9jYWxsIHRoZSBMb3R1c0xpdmUgY3VzdG9temllZCBmdW5j dGlvbiB0byBiYXNlNjRfZW5jb2RlIHRoZSBlbWFpbCBib2R5CgkJJHRleHQgPSAkdGhpcy0+Q29u dHJvbGxlci0+RW1haWxUZXN0LT5fX3dyYXBsaW5lZmVlZHMoJHRleHQpOwoJCSRleHBlY3QgPSAn PHByZT4nIC4gc3RyX3JlcGxhY2UoJ3tDT05URU5UVFlQRX0nLCAndGV4dC9wbGFpbjsgY2hhcnNl dD1VVEYtOCcsICRoZWFkZXIpIC4gJHRleHQgLiAiXG4iIC4gJzwvcHJlPic7CgkJJHRoaXMtPmFz c2VydFRydWUoJHRoaXMtPkNvbnRyb2xsZXItPkVtYWlsVGVzdC0+c2VuZCgnVGhpcyBpcyB0aGUg Ym9keSBvZiB0aGUgbWVzc2FnZScpKTsKCQkvL25vIG5lZWQgdG8gY2FsbCAkdGhpcy0+X19vc0Zp eCgkZXhwZWN0KSwgYmVjYXVzZSBfX3dyYXBsaW5lZmVlZHMoKSBhbHJlYWR5IGRlYWxzIHdpdGgg YmFyZSBsaW5lIGZlZWRzCgkJJHRoaXMtPmFzc2VydEVxdWFsKCR0aGlzLT5Db250cm9sbGVyLT5T ZXNzaW9uLT5yZWFkKCdNZXNzYWdlLmVtYWlsLm1lc3NhZ2UnKSwgJGV4cGVjdCk7CgoJCSR0aGlz LT5Db250cm9sbGVyLT5FbWFpbFRlc3QtPnNlbmRBcyA9ICdodG1sJzsKCQkvL2NhbGwgdGhlIExv dHVzTGl2ZSBjdXN0b216aWVkIGZ1bmN0aW9uIHRvIGJhc2U2NF9lbmNvZGUgdGhlIGVtYWlsIGJv ZHkKCQkkaHRtbCA9ICR0aGlzLT5Db250cm9sbGVyLT5FbWFpbFRlc3QtPl9fd3JhcGxpbmVmZWVk cygkaHRtbCk7CgkJJGV4cGVjdCA9ICc8cHJlPicgLiBzdHJfcmVwbGFjZSgne0NPTlRFTlRUWVBF fScsICd0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgnLCAkaGVhZGVyKSAuICRodG1sIC4gIlxuIiAu ICc8L3ByZT4nOwoJCSR0aGlzLT5hc3NlcnRUcnVlKCR0aGlzLT5Db250cm9sbGVyLT5FbWFpbFRl c3QtPnNlbmQoJ1RoaXMgaXMgdGhlIGJvZHkgb2YgdGhlIG1lc3NhZ2UnKSk7CgkJLy9ubyBuZWVk IHRvIGNhbGwgJHRoaXMtPl9fb3NGaXgoJGV4cGVjdCksIGJlY2F1c2UgX3dyYXBsaW5lZmVlZHMo KSBhbHJlYWR5IGRlYWxzIHdpdGggYmFyZSBsaW5lIGZlZWRzCgkJJHRoaXMtPmFzc2VydEVxdWFs KCR0aGlzLT5Db250cm9sbGVyLT5TZXNzaW9uLT5yZWFkKCdNZXNzYWdlLmVtYWlsLm1lc3NhZ2Un KSwgJGV4cGVjdCk7CgoJCSR0aGlzLT5Db250cm9sbGVyLT5FbWFpbFRlc3QtPnNlbmRBcyA9ICdi b3RoJzsKCQkkdGhpcy0+YXNzZXJ0VHJ1ZSgkdGhpcy0+Q29udHJvbGxlci0+RW1haWxUZXN0LT5z ZW5kKCdUaGlzIGlzIHRoZSBib2R5IG9mIHRoZSBtZXNzYWdlJykpOwoJCQoJCSRleHBlY3QgPSBz dHJfcmVwbGFjZSgne0NPTlRFTlRUWVBFfScsICdtdWx0aXBhcnQvYWx0ZXJuYXRpdmU7IGJvdW5k YXJ5PSJhbHQtJy4kdGhpcy0+Q29udHJvbGxlci0+RW1haWxUZXN0LT5fX2JvdW5kYXJ5LiciJywg JGhlYWRlcik7CgkJJGV4cGVjdCAuPSAnLS1hbHQtJy4kdGhpcy0+Q29udHJvbGxlci0+RW1haWxU ZXN0LT5fX2JvdW5kYXJ5LicnIC4gIlxuIiAuICdDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNo YXJzZXQ9VVRGLTgnIC4gIlxuIiAuICdDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiYXNlNjQn IC4gIlxuXG4iIC4gJHRleHQgLiAiXG5cbiI7CgkJJGV4cGVjdCAuPSAnLS1hbHQtJy4kdGhpcy0+ Q29udHJvbGxlci0+RW1haWxUZXN0LT5fX2JvdW5kYXJ5LicnIC4gIlxuIiAuICdDb250ZW50LVR5 cGU6IHRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCcgLiAiXG4iIC4gJ0NvbnRlbnQtVHJhbnNmZXIt RW5jb2Rpbmc6IGJhc2U2NCcgLiAiXG5cbiIgLiAkaHRtbCAuICJcblxuIjsKCQkkZXhwZWN0IC49 ICctLWFsdC0nLiAkdGhpcy0+Q29udHJvbGxlci0+RW1haWxUZXN0LT5fX2JvdW5kYXJ5IC4gIi0t XG5cblxuXG4tLSIgLiAkdGhpcy0+Q29udHJvbGxlci0+RW1haWxUZXN0LT5fX2JvdW5kYXJ5IC4g Ii0tXG4iOwoJCSRleHBlY3QgPSAnPHByZT4nIC4gJGV4cGVjdCAuICc8L3ByZT4nOwoKCQkvLyRl eHBlY3QgY29udGFpbnMgZW1haWwgYm9keSBpbiBib3RoIGh0bWwgYW5kIHRleHQgZm9ybWF0LCBh bHJlYWR5IGJhc2U2NF9lbmNvZGVkIGJ5IF93cmFwbGluZWZlZWRzKCkKCQkkdGhpcy0+YXNzZXJ0 RXF1YWwoJHRoaXMtPkNvbnRyb2xsZXItPlNlc3Npb24tPnJlYWQoJ01lc3NhZ2UuZW1haWwubWVz c2FnZScpLCAkZXhwZWN0KTsKCX0KLyoqCiAqIHRlc3RTbXRwU2VuZFNvY2tldCBtZXRob2QKICoK ICogQGFjY2VzcyBwdWJsaWMKICogQHJldHVybiB2b2lkCiAqLwoJZnVuY3Rpb24gdGVzdFNtdHBT ZW5kU29ja2V0KCkgewoJCSR0aGlzLT5za2lwSWYoIUBmc29ja29wZW4oU01UUF9TRVJWRVIsIDI1 KSwgJyVzIE5vIFNNVFAgc2VydmVyIHJ1bm5pbmcgb24gJyAuIFNNVFBfU0VSVkVSKTsKCQkKCQkk dGhpcy0+Q29udHJvbGxlci0+RW1haWxUZXN0LT5yZXNldCgpOwoJCSRzb2NrZXQgPSYgbmV3IENh a2VTb2NrZXQoYXJyYXlfbWVyZ2UoYXJyYXkoJ3Byb3RvY29sJz0+J3NtdHAnKSwgJHRoaXMtPkNv bnRyb2xsZXItPkVtYWlsVGVzdC0+c210cE9wdGlvbnMpKTsKCQkkdGhpcy0+Q29udHJvbGxlci0+ RW1haWxUZXN0LT5zZXRDb25uZWN0aW9uU29ja2V0KCRzb2NrZXQpOwoKCQkkdGhpcy0+YXNzZXJ0 VHJ1ZSgkdGhpcy0+Q29udHJvbGxlci0+RW1haWxUZXN0LT5nZXRDb25uZWN0aW9uU29ja2V0KCkp OwoKCQkvLyRyZXNwb25zZSA9ICR0aGlzLT5Db250cm9sbGVyLT5FbWFpbFRlc3QtPnNtdHBTZW5k KCdIRUxPJywgJzI1MCcpOwoJCS8vJHRoaXMtPmFzc2VydFBhdHRlcm4oJy81MDEgU3ludGF4OiBI RUxPIGhvc3RuYW1lLycsICR0aGlzLT5Db250cm9sbGVyLT5FbWFpbFRlc3QtPnNtdHBFcnJvcik7 CgoJCSR0aGlzLT5Db250cm9sbGVyLT5FbWFpbFRlc3QtPnJlc2V0KCk7CgkJJHJlc3BvbnNlID0g JHRoaXMtPkNvbnRyb2xsZXItPkVtYWlsVGVzdC0+c210cFNlbmQoJ0hFTE8gc29tZWhvc3RuYW1l JywgJzI1MCcpOwoJCSR0aGlzLT5hc3NlcnROb1BhdHRlcm4oJy81MDEgU3ludGF4OiBIRUxPIGhv c3RuYW1lLycsICR0aGlzLT5Db250cm9sbGVyLT5FbWFpbFRlc3QtPnNtdHBFcnJvcik7Cgl9Ci8q KgogKiB0ZXN0U2VuZERlYnVnIG1ldGhvZAogKgogKiBAYWNjZXNzIHB1YmxpYwogKiBAcmV0dXJu IHZvaWQKICovCglmdW5jdGlvbiB0ZXN0U2VuZERlYnVnKCkgewoJCSR0aGlzLT5Db250cm9sbGVy LT5FbWFpbFRlc3QtPnJlc2V0KCk7CgkJJHRoaXMtPkNvbnRyb2xsZXItPkVtYWlsVGVzdC0+dG8g PSAncG9zdG1hc3RlckBsb2NhbGhvc3QnOwoJCSR0aGlzLT5Db250cm9sbGVyLT5FbWFpbFRlc3Qt PmZyb20gPSAnbm9yZXBseUBleGFtcGxlLmNvbSc7CgkJJHRoaXMtPkNvbnRyb2xsZXItPkVtYWls VGVzdC0+c3ViamVjdCA9ICdDYWtlIFNNVFAgdGVzdCc7CgkJJHRoaXMtPkNvbnRyb2xsZXItPkVt YWlsVGVzdC0+cmVwbHlUbyA9ICdub3JlcGx5QGV4YW1wbGUuY29tJzsKCQkkdGhpcy0+Q29udHJv bGxlci0+RW1haWxUZXN0LT50ZW1wbGF0ZSA9IG51bGw7CgoJCSR0aGlzLT5Db250cm9sbGVyLT5F bWFpbFRlc3QtPmRlbGl2ZXJ5ID0gJ2RlYnVnJzsKCQkkdGhpcy0+YXNzZXJ0VHJ1ZSgkdGhpcy0+ Q29udHJvbGxlci0+RW1haWxUZXN0LT5zZW5kKCdUaGlzIGlzIHRoZSBib2R5IG9mIHRoZSBtZXNz YWdlJykpOwoJfQovKioKICogdGVzdENvbnRlbnRTdHJpcHBpbmcgbWV0aG9kCiAqCiAqIEBhY2Nl c3MgcHVibGljCiAqIEByZXR1cm4gdm9pZAogKi8KCWZ1bmN0aW9uIHRlc3RDb250ZW50U3RyaXBw aW5nKCkgewoJCSRjb250ZW50ID0gIlByZXZpb3VzIGNvbnRlbnRcbi0tYWx0LVxuQ29udGVudC1U eXBlQ29udGVudC1UeXBlOjogdGV4dC9odG1sOyBjaGFyc2V0Y2hhcnNldD09dXRmLThcbkNvbnRl bnQtVHJhbnNmZXItRW5jb2Rpbmc6IDdiaXQiOwoJCSRjb250ZW50IC49ICJcblxuPHA+TXkgb3du IGh0bWwgY29udGVudDwvcD4iOwoKCQkkcmVzdWx0ID0gJHRoaXMtPkNvbnRyb2xsZXItPkVtYWls VGVzdC0+c3RyaXAoJGNvbnRlbnQsIHRydWUpOwoJCSRleHBlY3RlZCA9ICJQcmV2aW91cyBjb250 ZW50XG4tLWFsdC1cbiB0ZXh0L2h0bWw7IHV0Zi04XG4gN2JpdFxuXG48cD5NeSBvd24gaHRtbCBj b250ZW50PC9wPiI7CgkJJHRoaXMtPmFzc2VydEVxdWFsKCRyZXN1bHQsICRleHBlY3RlZCk7CgoJ CSRjb250ZW50ID0gJzxwPlNvbWUgSFRNTCBjb250ZW50IHdpdGggYW4gPGEgaHJlZj0ibWFpbHRv OnRlc3RAZXhhbXBsZS5jb20iPmVtYWlsIGxpbms8L2E+JzsKCQkkcmVzdWx0ICA9ICR0aGlzLT5D b250cm9sbGVyLT5FbWFpbFRlc3QtPnN0cmlwKCRjb250ZW50LCB0cnVlKTsKCQkkZXhwZWN0ZWQg PSAkY29udGVudDsKCQkkdGhpcy0+YXNzZXJ0RXF1YWwoJHJlc3VsdCwgJGV4cGVjdGVkKTsKCgkJ JGNvbnRlbnQgID0gJzxwPlNvbWUgSFRNTCBjb250ZW50IHdpdGggYW4gJzsKCQkkY29udGVudCAu PSAnPGEgaHJlZj0ibWFpbHRvOnRlc3RAZXhhbXBsZS5jb20sdGVzdDJAZXhhbXBsZS5jb20iPmVt YWlsIGxpbms8L2E+JzsKCQkkcmVzdWx0ICA9ICR0aGlzLT5Db250cm9sbGVyLT5FbWFpbFRlc3Qt PnN0cmlwKCRjb250ZW50LCB0cnVlKTsKCQkkZXhwZWN0ZWQgPSAkY29udGVudDsKCQkkdGhpcy0+ YXNzZXJ0RXF1YWwoJHJlc3VsdCwgJGV4cGVjdGVkKTsKCgl9Ci8qKgogKiB0ZXN0TXVsdGlieXRl IG1ldGhvZAogKgogKiBAYWNjZXNzIHB1YmxpYwogKiBAcmV0dXJuIHZvaWQKICovCglmdW5jdGlv biB0ZXN0TXVsdGlieXRlKCkgewoJCSR0aGlzLT5Db250cm9sbGVyLT5FbWFpbFRlc3QtPnJlc2V0 KCk7CgkJJHRoaXMtPkNvbnRyb2xsZXItPkVtYWlsVGVzdC0+dG8gPSAncG9zdG1hc3RlckBsb2Nh bGhvc3QnOwoJCSR0aGlzLT5Db250cm9sbGVyLT5FbWFpbFRlc3QtPmZyb20gPSAnbm9yZXBseUBl eGFtcGxlLmNvbSc7CgkJJHRoaXMtPkNvbnRyb2xsZXItPkVtYWlsVGVzdC0+c3ViamVjdCA9ICfZ h9iw2Ycg2LHYs9in2YTYqSDYqNi52YbZiNin2YYg2LfZiNmK2YQg2YXYsdiz2YQg2YTZhNmF2LPY qtmE2YUnOwoJCSR0aGlzLT5Db250cm9sbGVyLT5FbWFpbFRlc3QtPnJlcGx5VG8gPSAnbm9yZXBs eUBleGFtcGxlLmNvbSc7CgkJJHRoaXMtPkNvbnRyb2xsZXItPkVtYWlsVGVzdC0+dGVtcGxhdGUg PSBudWxsOwoJCSR0aGlzLT5Db250cm9sbGVyLT5FbWFpbFRlc3QtPmRlbGl2ZXJ5ID0gJ2RlYnVn JzsKCgkJJHN1YmplY3QgPSAnPT9VVEYtOD9CPzJZZllzTm1ISU5peDJMUFlwOW1FMktrZzJLall1 ZG1HMllqWXA5bUdJTmkzMllqWml0bUVJTm1GMkxFPT89JyAuICJcclxuIiAuICcgPT9VVEYtOD9C PzJMUFpoQ0RaaE5tRTJZWFlzOWlxMllUWmhRPT0/PSc7CgoJCSR0aGlzLT5Db250cm9sbGVyLT5F bWFpbFRlc3QtPnNlbmRBcyA9ICd0ZXh0JzsKCQkkdGhpcy0+YXNzZXJ0VHJ1ZSgkdGhpcy0+Q29u dHJvbGxlci0+RW1haWxUZXN0LT5zZW5kKCdUaGlzIGlzIHRoZSBib2R5IG9mIHRoZSBtZXNzYWdl JykpOwovLwkJcHJlZ19tYXRjaCgnL1N1YmplY3Q6ICguKilIZWFkZXI6L3MnLCAkdGhpcy0+Q29u dHJvbGxlci0+U2Vzc2lvbi0+cmVhZCgnTWVzc2FnZS5lbWFpbC5tZXNzYWdlJyksICRtYXRjaGVz KTsKLy8JCSR0aGlzLT5hc3NlcnRFcXVhbCh0cmltKCRtYXRjaGVzWzFdKSwgJHN1YmplY3QpOwoK CQkkdGhpcy0+Q29udHJvbGxlci0+RW1haWxUZXN0LT5zZW5kQXMgPSAnaHRtbCc7CgkJJHRoaXMt PmFzc2VydFRydWUoJHRoaXMtPkNvbnRyb2xsZXItPkVtYWlsVGVzdC0+c2VuZCgnVGhpcyBpcyB0 aGUgYm9keSBvZiB0aGUgbWVzc2FnZScpKTsKLy8JCXByZWdfbWF0Y2goJy9TdWJqZWN0OiAoLiop SGVhZGVyOi9zJywgJHRoaXMtPkNvbnRyb2xsZXItPlNlc3Npb24tPnJlYWQoJ01lc3NhZ2UuZW1h aWwubWVzc2FnZScpLCAkbWF0Y2hlcyk7Ci8vCQkkdGhpcy0+YXNzZXJ0RXF1YWwodHJpbSgkbWF0 Y2hlc1sxXSksICRzdWJqZWN0KTsKCgkJJHRoaXMtPkNvbnRyb2xsZXItPkVtYWlsVGVzdC0+c2Vu ZEFzID0gJ2JvdGgnOwoJCSR0aGlzLT5hc3NlcnRUcnVlKCR0aGlzLT5Db250cm9sbGVyLT5FbWFp bFRlc3QtPnNlbmQoJ1RoaXMgaXMgdGhlIGJvZHkgb2YgdGhlIG1lc3NhZ2UnKSk7Ci8vCQlwcmVn X21hdGNoKCcvU3ViamVjdDogKC4qKUhlYWRlcjovcycsICR0aGlzLT5Db250cm9sbGVyLT5TZXNz aW9uLT5yZWFkKCdNZXNzYWdlLmVtYWlsLm1lc3NhZ2UnKSwgJG1hdGNoZXMpOwovLwkJJHRoaXMt PmFzc2VydEVxdWFsKHRyaW0oJG1hdGNoZXNbMV0pLCAkc3ViamVjdCk7Cgl9Ci8qKgogKiB1bmRv Y3VtZW50ZWQgZnVuY3Rpb24KICoKICogQHJldHVybiB2b2lkCiAqIEBhY2Nlc3MgcHVibGljCiAq LwoJZnVuY3Rpb24gdGVzdFNlbmRBc0lzTm90SWdub3JlZElmQXR0YWNobWVudHNQcmVzZW50KCkg ewoJCWlmICgkdGhpcy0+c2tpcElmKCFAZnNvY2tvcGVuKFNNVFBfU0VSVkVSLCAyNSksICclcyBO byBTTVRQIHNlcnZlciBydW5uaW5nIG9uICcgLiBTTVRQX1NFUlZFUikpIHsKCQkJCQlyZXR1cm47 CgkJfQoJCQoJCSR0aGlzLT5Db250cm9sbGVyLT5FbWFpbFRlc3QtPnJlc2V0KCk7CgkJJHRoaXMt PkNvbnRyb2xsZXItPkVtYWlsVGVzdC0+dG8gPSAncG9zdG1hc3RlckBsb2NhbGhvc3QnOwoJCSR0 aGlzLT5Db250cm9sbGVyLT5FbWFpbFRlc3QtPmZyb20gPSAnbm9yZXBseUBleGFtcGxlLmNvbSc7 CgkJJHRoaXMtPkNvbnRyb2xsZXItPkVtYWlsVGVzdC0+c3ViamVjdCA9ICdBdHRhY2htZW50IFRl c3QnOwoJCSR0aGlzLT5Db250cm9sbGVyLT5FbWFpbFRlc3QtPnJlcGx5VG8gPSAnbm9yZXBseUBl eGFtcGxlLmNvbSc7CgkJJHRoaXMtPkNvbnRyb2xsZXItPkVtYWlsVGVzdC0+dGVtcGxhdGUgPSBu dWxsOwoJCSR0aGlzLT5Db250cm9sbGVyLT5FbWFpbFRlc3QtPmRlbGl2ZXJ5ID0gJ3NtdHAnOwkv LydkZWJ1Zycgb3IgJ21haWwnIHdvdWxkIGZhaWwKCQkkdGhpcy0+Q29udHJvbGxlci0+RW1haWxU ZXN0LT5hdHRhY2htZW50cyA9IGFycmF5KF9fRklMRV9fKTsKCQkkYm9keSA9ICc8cD5UaGlzIGlz IHRoZSBib2R5IG9mIHRoZSBtZXNzYWdlPC9wPic7CgoJCSR0aGlzLT5Db250cm9sbGVyLT5FbWFp bFRlc3QtPnNlbmRBcyA9ICdodG1sJzsKCQkkdGhpcy0+YXNzZXJ0VHJ1ZSgkdGhpcy0+Q29udHJv bGxlci0+RW1haWxUZXN0LT5zZW5kKCRib2R5KSk7Ci8vCQkkbXNnID0gJHRoaXMtPkNvbnRyb2xs ZXItPlNlc3Npb24tPnJlYWQoJ01lc3NhZ2UuZW1haWwubWVzc2FnZScpOwovLwkJJHRoaXMtPmFz c2VydE5vUGF0dGVybignL3RleHRcL3BsYWluLycsICRtc2cpOwovLwkJJHRoaXMtPmFzc2VydFBh dHRlcm4oJy90ZXh0XC9odG1sLycsICRtc2cpOwoKCQkkdGhpcy0+Q29udHJvbGxlci0+RW1haWxU ZXN0LT5zZW5kQXMgPSAndGV4dCc7CgkJJHRoaXMtPmFzc2VydFRydWUoJHRoaXMtPkNvbnRyb2xs ZXItPkVtYWlsVGVzdC0+c2VuZCgkYm9keSkpOwovLwkJJG1zZyA9ICR0aGlzLT5Db250cm9sbGVy LT5TZXNzaW9uLT5yZWFkKCdNZXNzYWdlLmVtYWlsLm1lc3NhZ2UnKTsKLy8JCSR0aGlzLT5hc3Nl cnRQYXR0ZXJuKCcvdGV4dFwvcGxhaW4vJywgJG1zZyk7Ci8vCQkkdGhpcy0+YXNzZXJ0Tm9QYXR0 ZXJuKCcvdGV4dFwvaHRtbC8nLCAkbXNnKTsKCgkJJHRoaXMtPkNvbnRyb2xsZXItPkVtYWlsVGVz dC0+c2VuZEFzID0gJ2JvdGgnOwoJCSR0aGlzLT5hc3NlcnRUcnVlKCR0aGlzLT5Db250cm9sbGVy LT5FbWFpbFRlc3QtPnNlbmQoJGJvZHkpKTsKLy8JCSRtc2cgPSAkdGhpcy0+Q29udHJvbGxlci0+ U2Vzc2lvbi0+cmVhZCgnTWVzc2FnZS5lbWFpbC5tZXNzYWdlJyk7Ci8vCi8vCQkkdGhpcy0+YXNz ZXJ0Tm9QYXR0ZXJuKCcvdGV4dFwvcGxhaW4vJywgJG1zZyk7Ci8vCQkkdGhpcy0+YXNzZXJ0Tm9Q YXR0ZXJuKCcvdGV4dFwvaHRtbC8nLCAkbXNnKTsKLy8JCSR0aGlzLT5hc3NlcnRQYXR0ZXJuKCcv bXVsdGlwYXJ0XC9hbHRlcm5hdGl2ZS8nLCAkbXNnKTsKCX0KLyoqCiAqIHRlc3RSZXNldCBtZXRo b2QKICoKICogQGFjY2VzcyBwdWJsaWMKICogQHJldHVybiB2b2lkCiAqLwoJZnVuY3Rpb24gdGVz dFJlc2V0KCkgewoJCSR0aGlzLT5Db250cm9sbGVyLT5FbWFpbFRlc3QtPnRlbXBsYXRlID0gJ3Rl c3RfdGVtcGxhdGUnOwoJCSR0aGlzLT5Db250cm9sbGVyLT5FbWFpbFRlc3QtPnRvID0gJ3Rlc3Qu cmVjaXBpZW50QGV4YW1wbGUuY29tJzsKCQkkdGhpcy0+Q29udHJvbGxlci0+RW1haWxUZXN0LT5m cm9tID0gJ3Rlc3Quc2VuZGVyQGV4YW1wbGUuY29tJzsKCQkkdGhpcy0+Q29udHJvbGxlci0+RW1h aWxUZXN0LT5yZXBseVRvID0gJ3Rlc3QucmVwbHl0b0BleGFtcGxlLmNvbSc7CgkJJHRoaXMtPkNv bnRyb2xsZXItPkVtYWlsVGVzdC0+cmV0dXJuID0gJ3Rlc3QucmV0dXJuQGV4YW1wbGUuY29tJzsK CQkkdGhpcy0+Q29udHJvbGxlci0+RW1haWxUZXN0LT5jYyA9IGFycmF5KCdjYzFAZXhhbXBsZS5j b20nLCAnY2MyQGV4YW1wbGUuY29tJyk7CgkJJHRoaXMtPkNvbnRyb2xsZXItPkVtYWlsVGVzdC0+ YmNjID0gYXJyYXkoJ2JjYzFAZXhhbXBsZS5jb20nLCAnYmNjMkBleGFtcGxlLmNvbScpOwoJCSR0 aGlzLT5Db250cm9sbGVyLT5FbWFpbFRlc3QtPnN1YmplY3QgPSAnVGVzdCBzdWJqZWN0JzsKCQkk dGhpcy0+Q29udHJvbGxlci0+RW1haWxUZXN0LT5hZGRpdGlvbmFsUGFyYW1zID0gJ1gtYWRkaXRp b25hbC1oZWFkZXInOwoJCSR0aGlzLT5Db250cm9sbGVyLT5FbWFpbFRlc3QtPmRlbGl2ZXJ5ID0g J3NtdHAnOwoJCSR0aGlzLT5Db250cm9sbGVyLT5FbWFpbFRlc3QtPnNtdHBPcHRpb25zWydob3N0 J10gPSAnYmxhaCc7CgkJJHRoaXMtPkNvbnRyb2xsZXItPkVtYWlsVGVzdC0+YXR0YWNobWVudHMg PSBhcnJheSgnYXR0YWNobWVudDEnLCAnYXR0YWNobWVudDInKTsKCgkJJHRoaXMtPmFzc2VydEZh bHNlKCR0aGlzLT5Db250cm9sbGVyLT5FbWFpbFRlc3QtPnNlbmQoJ1Nob3VsZCBub3Qgd29yaycp KTsKCgkJJHRoaXMtPkNvbnRyb2xsZXItPkVtYWlsVGVzdC0+cmVzZXQoKTsKCgkJJHRoaXMtPmFz c2VydE51bGwoJHRoaXMtPkNvbnRyb2xsZXItPkVtYWlsVGVzdC0+dGVtcGxhdGUpOwoJCSR0aGlz LT5hc3NlcnROdWxsKCR0aGlzLT5Db250cm9sbGVyLT5FbWFpbFRlc3QtPnRvKTsKCQkkdGhpcy0+ YXNzZXJ0TnVsbCgkdGhpcy0+Q29udHJvbGxlci0+RW1haWxUZXN0LT5mcm9tKTsKCQkkdGhpcy0+ YXNzZXJ0TnVsbCgkdGhpcy0+Q29udHJvbGxlci0+RW1haWxUZXN0LT5yZXBseVRvKTsKCQkkdGhp cy0+YXNzZXJ0TnVsbCgkdGhpcy0+Q29udHJvbGxlci0+RW1haWxUZXN0LT5yZXR1cm4pOwoJCSR0 aGlzLT5hc3NlcnRJZGVudGljYWwoJHRoaXMtPkNvbnRyb2xsZXItPkVtYWlsVGVzdC0+Y2MsIGFy cmF5KCkpOwoJCSR0aGlzLT5hc3NlcnRJZGVudGljYWwoJHRoaXMtPkNvbnRyb2xsZXItPkVtYWls VGVzdC0+YmNjLCBhcnJheSgpKTsKCQkkdGhpcy0+YXNzZXJ0TnVsbCgkdGhpcy0+Q29udHJvbGxl ci0+RW1haWxUZXN0LT5zdWJqZWN0KTsKCQkkdGhpcy0+YXNzZXJ0TnVsbCgkdGhpcy0+Q29udHJv bGxlci0+RW1haWxUZXN0LT5hZGRpdGlvbmFsUGFyYW1zKTsKCQkkdGhpcy0+YXNzZXJ0SWRlbnRp Y2FsKCR0aGlzLT5Db250cm9sbGVyLT5FbWFpbFRlc3QtPmdldEhlYWRlcnMoKSwgYXJyYXkoKSk7 CgkJJHRoaXMtPmFzc2VydE51bGwoJHRoaXMtPkNvbnRyb2xsZXItPkVtYWlsVGVzdC0+Z2V0Qm91 bmRhcnkoKSk7CgkJJHRoaXMtPmFzc2VydElkZW50aWNhbCgkdGhpcy0+Q29udHJvbGxlci0+RW1h aWxUZXN0LT5nZXRNZXNzYWdlKCksIGFycmF5KCkpOwoJCSR0aGlzLT5hc3NlcnROdWxsKCR0aGlz LT5Db250cm9sbGVyLT5FbWFpbFRlc3QtPnNtdHBFcnJvcik7CgkJJHRoaXMtPmFzc2VydElkZW50 aWNhbCgkdGhpcy0+Q29udHJvbGxlci0+RW1haWxUZXN0LT5hdHRhY2htZW50cywgYXJyYXkoKSk7 Cgl9Ci8qKgogKiBvc0ZpeCBtZXRob2QKICoKICogQHBhcmFtIHN0cmluZyAkc3RyaW5nCiAqIEBh Y2Nlc3MgcHJpdmF0ZQogKiBAcmV0dXJuIHN0cmluZwogKi8KCWZ1bmN0aW9uIF9fb3NGaXgoJHN0 cmluZykgewoJCXJldHVybiBzdHJfcmVwbGFjZShhcnJheSgiXHJcbiIsICJcciIpLCAiXG4iLCAk c3RyaW5nKTsKCX0KfQo/Pg== --026a2bea167826bf111c47c4213d68b1-- > java.lang.OutOfMemoryError: Java heap space while parsing Mime part > ------------------------------------------------------------------- > > Key: EMAIL-110 > URL: https://issues.apache.org/jira/browse/EMAIL-110 > Project: Commons Email > Issue Type: Bug > Affects Versions: 1.2 > Environment: Windows, Linux > Reporter: Stephen Kruger > Priority: Blocker > Attachments: crashfix.eml > > > I have a particular eml message which appears to cause a complete memory overflow deep within commons-email. > A look at the source code does reveal a suspect "while" loop which appears to never exit properly, and should be rewritten so that bad data could not give us this situation. > The stack trace is : > java.lang.OutOfMemoryError: Java heap space > at java.util.Arrays.copyOf(Arrays.java:2786) > at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:71) > at javax.mail.internet.MimeMultipart.readTillFirstBoundary(MimeMultipart.java:316) > at javax.mail.internet.MimeMultipart.parse(MimeMultipart.java:186) > at javax.mail.internet.MimeMultipart.updateHeaders(MimeMultipart.java:130) > at javax.mail.internet.MimeBodyPart.updateHeaders(MimeBodyPart.java:539) > at javax.mail.internet.MimeMultipart.updateHeaders(MimeMultipart.java:133) > at javax.mail.internet.MimeMessage.updateHeaders(MimeMessage.java:1393) > at javax.mail.internet.MimeMessage.saveChanges(MimeMessage.java:1366) > at javax.mail.Transport.send(Transport.java:76) > at javax.mail.Transport.send(Transport.java:48) > There are many public threads illustrating this same error, but they never pinpoint the code to Commons Email, I'm guessing I'm using the code in a way which exhibits this behaviour : > http://stackoverflow.com/questions/3177092/uploading-to-blobstore-gives-a-java-heap-outofmemoryerror > http://stackoverflow.com/questions/2994031/outofmemoryerror-trying-to-upload-to-blobstore-locally -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa For more information on JIRA, see: http://www.atlassian.com/software/jira