https://issues.apache.org/bugzilla/show_bug.cgi?id=49317

           Summary: org.apache.catalina.util.Base64 interface needs
                    refactoring
           Product: Tomcat 7
           Version: trunk
          Platform: PC
        OS/Version: Windows Server 2003
            Status: NEW
          Severity: normal
          Priority: P2
         Component: Catalina
        AssignedTo: dev@tomcat.apache.org
        ReportedBy: dbl...@dblock.org


The interface in org.apache.catalina.util.Base64 is not symmetrical. Base64 
always returns a valid string from encoding and bytes when decoding. So it
should look like this:

String encode(byte[])
byte[] decode(String)

similarly, if you need chunks

void encode(ByteChunk, CharChunk)
void decode(CharChunk, ByteChunk)

You can write this interface with the current code:

    public static String encode(byte[] value) {
        return new String(encode(value));
    }

    private byte[] decode(String value) throws IOException {
        ByteChunk encoded = new ByteChunk();
        encoded.append(value.getBytes(), 0, value.length());
        CharChunk decoded = new CharChunk();         
        decode(encoded, decoded);
        byte[] result = new byte[decoded.getLength()];
        for(int i = 0; i < decoded.getLength(); i++) {
            result[i] = (byte) decoded.getBuffer()[i];
        }
        return result;
    }

(see how nasty decode looks now)

Better, refactor the class to have the interface I suggest.

Attached is an implementation that is much more elegant, although it's probably
less efficient (now how many times do we really do base64 encode/decode - 1-2
per request).

-- 
Configure bugmail: https://issues.apache.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to