Return-Path: Delivered-To: apmail-commons-user-archive@www.apache.org Received: (qmail 33823 invoked from network); 4 Dec 2009 16:25:28 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.3) by minotaur.apache.org with SMTP; 4 Dec 2009 16:25:28 -0000 Received: (qmail 31352 invoked by uid 500); 4 Dec 2009 16:25:26 -0000 Delivered-To: apmail-commons-user-archive@commons.apache.org Received: (qmail 31170 invoked by uid 500); 4 Dec 2009 16:25:25 -0000 Mailing-List: contact user-help@commons.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: "Commons Users List" Delivered-To: mailing list user@commons.apache.org Received: (qmail 31160 invoked by uid 99); 4 Dec 2009 16:25:25 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 04 Dec 2009 16:25:25 +0000 X-ASF-Spam-Status: No, hits=-0.0 required=10.0 tests=SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (nike.apache.org: domain of adamrabung@gmail.com designates 209.85.223.185 as permitted sender) Received: from [209.85.223.185] (HELO mail-iw0-f185.google.com) (209.85.223.185) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 04 Dec 2009 16:25:14 +0000 Received: by iwn15 with SMTP id 15so1578210iwn.10 for ; Fri, 04 Dec 2009 08:24:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:in-reply-to:references :date:message-id:subject:from:to:content-type; bh=XesQsHmJW34SwBEScKZwOZrx6Dzl2++0T8wbjfJXzSA=; b=UB48WYc/tLqfJtf57PgL0rO5alV6GaD4MMDf2+l0lEXjXspe1Sw0xWSc7p3ACJe5Zl ky7LVQSUHMvdGw0wqFhS5vqFMpGFwJlcI9C/LntmraFdxTmHyCrRN++sz50yvlYJZo/x y/hGYqpLkFpCpbKr7SXb4oDdmRZf5WqovjKzU= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type; b=c1LnYvWo/HK9l1Xuq9uWDvxLLlHFhzci3e9ATFj5lukaKauZngglTmeqPUaDyL3EMs QQ6VqK+ll3/GOEbddclfoTmLzGqZbaBQGOwvJt+kVk75BAsa4No2aNu/l0rnofrODYZz KiK/9p6EVWZ6Dw98ZNypp/i9A5CX+Be47UB0w= MIME-Version: 1.0 Received: by 10.231.10.16 with SMTP id n16mr6193406ibn.24.1259943892515; Fri, 04 Dec 2009 08:24:52 -0800 (PST) In-Reply-To: References: <598ad5b50912031338s7d6767e1ked61a5467ce565f6@mail.gmail.com> Date: Fri, 4 Dec 2009 11:24:52 -0500 Message-ID: Subject: Re: Commons Codec: base64 "strict" mode? From: Adam Rabung To: Commons Users List Content-Type: multipart/mixed; boundary=000325575d12267d2a0479e98cd4 X-Virus-Checked: Checked by ClamAV on apache.org --000325575d12267d2a0479e98cd4 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Julius, My particular problem was the client was not encoding url-safe, and then sending over http. The result was I was trying to decode " " where the client had encoded "+" - so I wasn't get a "+" OR a "-". A strict Base64 would have caught this immediately. I'm not very familiar w/ the base 64 spec, so your #1 concerns me a little. Would it be reasonable for strict mode to reject "abc def", where that space is literally ascii 32 space? Paul, Sounds good. It would be great if this ability were exposed to the Base64 input/output streams as well. I threw together a quick patch (attached). Not sure how much it will really help, as I don't know much about the base 64 spec or Apache coding guidelines (adding checked exceptions to existing methods?), but it's a start. Thanks! Adam On Thu, Dec 3, 2009 at 4:44 PM, Paul Benedict wrote: > Base64 could also be given a protected method that allows subclasses > to handle un-decodable characters. Default op is to do nothing. > > protected void handleBadChar(char[] c, int position, other-stuff ); > > Paul > > On Thu, Dec 3, 2009 at 3:38 PM, Julius Davies wr= ote: >> Hi, Adam, >> >> It doesn't currently do that. =A0Also, Base64 seamlessly decodes >> URL_SAFE and REGULAR encodings, as well as mixes of the two, even >> though a mix or URL_SAFE and REGULAR would technically be invalid. >> >> I'm not a committer, but I could certainly put together a patch for a >> strict mode. =A0Something like this? >> >> 1. =A0If character is not whitespace, and is not valid, throw exception. >> >> 2. =A0If character is inappropriate for our current mode (URL_SAFE or >> REGULAR), throw exception. >> >> 3. =A0Note: =A0Personally I think it's too much trouble to detect weird >> things like =3D=3D=3D (technically only at most =3D=3D should ever exist= ), or >> characters after =3D=3D. =A0What do you think? >> >> >> ps. =A0I'd probably do it as a subclass: =A0Base64Strict extends Base64 >> >> >> yours, >> >> Julius >> >> >> On Thu, Dec 3, 2009 at 9:05 AM, Adam Rabung wrote= : >>> Hello, >>> Currently, Codec skips base64 characters that are outside of the >>> encode table. =A0I realize this is perfectly to spec, but I wonder if >>> other users might appreciate a "strict" mode that throws an exception >>> when one of these illegal characters are encountered. =A0For example, I >>> would love an exception to be thrown here: >>> new Base64().decode("!@#$ iHaveIllegalCharsAtBeginningAndEnd %^&")); >>> >>> My apologies if I'm missing the point or if this functionality already = exists, >>> Adam >>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: user-unsubscribe@commons.apache.org >>> For additional commands, e-mail: user-help@commons.apache.org >>> >>> >> >> >> >> -- >> yours, >> >> Julius Davies >> 250-592-2284 (Home) >> 250-893-4579 (Mobile) >> http://juliusdavies.ca/logging.html >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: user-unsubscribe@commons.apache.org >> For additional commands, e-mail: user-help@commons.apache.org >> >> > > --------------------------------------------------------------------- > To unsubscribe, e-mail: user-unsubscribe@commons.apache.org > For additional commands, e-mail: user-help@commons.apache.org > > --000325575d12267d2a0479e98cd4 Content-Type: application/zip; name="strictMode.zip" Content-Disposition: attachment; filename="strictMode.zip" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g2t5zsph0 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 --000325575d12267d2a0479e98cd4 Content-Type: text/plain; charset=us-ascii --------------------------------------------------------------------- To unsubscribe, e-mail: user-unsubscribe@commons.apache.org For additional commands, e-mail: user-help@commons.apache.org --000325575d12267d2a0479e98cd4--