Re: [PATCH 1/4] Add base64 encoder and decoder

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Feb 9, 2010 at 1:09 PM, Hitoshi Mitake
<mitake@xxxxxxxxxxxxxxxxxxxxx> wrote:
> +void base64_encode(char *out, const char *in, int inlen)
> +{
> +       const char *inp = in;
> +       char *outp = out;

...Why? It's copying the pointers to pointers of identical type with
different names, and never using the originals again... Looks like a
sloppy extraction from another code-base to me.

> +
> +       while (inlen >= 3) {
> +               *outp++ = base64char[(inp[0] >> 2) & 0x3f];
> +               *outp++ = base64char[((inp[0] & 0x03) << 4) |
> +                                    ((inp[1] >> 4) & 0x0f)];
> +               *outp++ = base64char[((inp[1] & 0x0f) << 2) |
> +                                    ((inp[2] >> 6) & 0x03)];
> +               *outp++ = base64char[inp[2] & 0x3f];
> +
> +               inp += 3;
> +               inlen -= 3;
> +       }
> +
> +       if (inlen > 0) {
> +               *outp++ = base64char[(inp[0] >> 2) & 0x3f];
> +               if (inlen == 1) {
> +                       *outp++ = base64char[(inp[0] & 0x03) << 4];
> +                       *outp++ = '=';
> +               } else {
> +                       *outp++ = base64char[((inp[0] & 0x03) << 4) |
> +                                            ((inp[1] >> 4) & 0x0f)];
> +                       *outp++ = base64char[((inp[1] & 0x0f) << 2)];
> +               }
> +               *outp++ = '=';
> +       }
> +
> +       *outp = '\0';
> +}

If inlen is 0, a single '=' should be emitted (plus the obvious zero
termination). It could be that the code deals with that by making sure
that inlen never is zero, though.

-- 
Erik "kusma" Faye-Lund
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]