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 435809CC6 for ; Tue, 20 Mar 2012 11:46:06 +0000 (UTC) Received: (qmail 62868 invoked by uid 500); 20 Mar 2012 11:46:06 -0000 Delivered-To: apmail-commons-issues-archive@commons.apache.org Received: (qmail 62689 invoked by uid 500); 20 Mar 2012 11:46:05 -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 62433 invoked by uid 99); 20 Mar 2012 11:46:01 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 20 Mar 2012 11:46:01 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED,T_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; Tue, 20 Mar 2012 11:46: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 4BB1A537C3 for ; Tue, 20 Mar 2012 11:45:40 +0000 (UTC) Date: Tue, 20 Mar 2012 11:45:40 +0000 (UTC) From: "Sebb (Commented) (JIRA)" To: issues@commons.apache.org Message-ID: <995053134.36117.1332243940311.JavaMail.tomcat@hel.zones.apache.org> Subject: [jira] [Commented] (CODEC-96) Base64 encode() method is no longer thread-safe, breaking clients using it as a shared BinaryEncoder MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394 X-Virus-Checked: Checked by ClamAV on apache.org [ https://issues.apache.org/jira/browse/CODEC-96?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13233362#comment-13233362 ] Sebb commented on CODEC-96: --------------------------- I think it might be possible to move the mutable fields out of the lower level classes and back into the streaming classes which are the ones that actually need them. Whether it is possible to do this in a compatible way, I don't yet know, but I'd like to give it a try over then next week or so. > Base64 encode() method is no longer thread-safe, breaking clients using it as a shared BinaryEncoder > ---------------------------------------------------------------------------------------------------- > > Key: CODEC-96 > URL: https://issues.apache.org/jira/browse/CODEC-96 > Project: Commons Codec > Issue Type: Bug > Affects Versions: 1.4 > Reporter: Matt Ryall > Assignee: Julius Davies > Fix For: 1.x > > Attachments: codec-96-3rd-attempt.patch > > > Streaming support was added to Base64 in commons-codec 1.4 with CODEC-69. This introduced instance variables to Base64 which means the class can no longer be used as a shared BinaryEncoder instance. > For example, BinaryEncoder has an interface which could be (and was) used like this with Base64: > {code:java} > class Example { > private BinaryEncoder encoder = new Base64(); > byte[] someMethod(byte[] data) { > try { > return encoder.encode(data); > } > catch (EncoderException e) { > throw new RuntimeException(e); > } > } > } > {code} > Base64 is no longer thread-safe in commons-codec 1.4, so code like the above which is accessed by multiple threads can throw NullPointerException: > {noformat} > java.lang.NullPointerException > at org.apache.commons.codec.binary.Base64.encode(Base64.java:469) > at org.apache.commons.codec.binary.Base64.encode(Base64.java:937) > at ... (application code) > {noformat} > Looking at the implementation of Base64, I think making it thread-safe for this kind of usage would be quite tricky. I haven't attempted to prepare a patch. > I would be happy if it was indicated in the Javadoc that Base64 is not thread-safe and should not be shared. However, some other users of commons-codec might be more worried about this regression. -- 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