为什么这个base64功能在增加最大长度时停止工作?

时间:2010-05-26 03:32:28

标签: c++ visual-c++ base64 decode

我使用this class将文本编码/解码为base64。 MAX_LEN最高可达512,但如果我将其增加到1024,则解码函数返回并清空var。

这是功能:

char* Base64::decode(char *src)
{
    unsigned six, dix;
    unsigned int d_len = MAX_LEN;

    memset(dst,'\0', MAX_LEN); 

    unsigned s_len = strlen(src);
    dix = 0;

    for (six = 0; six < s_len; six += 4)
    {
        unsigned long sr;
        unsigned ix;

        sr = 0;
        for (ix = 0; ix < 4; ++ix)
        {
            int sextet;

            if (six+ix >= s_len)
                return NULL;
            if ((sextet = tlu(*(src+six+ix))) < 0)
                break;
            sr <<= 6;
            sr |= (sextet & 0x3f);
        }

        switch (ix)
        {
            case 0: // end of data, no padding
                return 0;

            case 1: // can't happen
                return NULL;

            case 2: // 1 result byte 
                sr >>= 4;
                if (dix > d_len) return NULL;
                *(dst+dix) = (sr & 0xff);
                ++dix;
                break;
            case 3: // 2 result bytes 
                sr >>= 2;
                if (dix+1 > d_len) return NULL;
                *(dst+dix+1) = (sr & 0xff);
                sr >>= 8;
                *(dst+dix) = (sr & 0xff);
                dix += 2;
                break;
            case 4: // 3 result bytes 
                if (dix+2 > d_len) return NULL;
                *(dst+dix+2) = (sr & 0xff);
                sr >>= 8;
                *(dst+dix+1) = (sr & 0xff);
                sr >>= 8;
                *(dst+dix) = (sr & 0xff);
                dix += 3;
                break;
        }
    }

    return dst;
}

为什么会造成这种情况?

1 个答案:

答案 0 :(得分:0)

赔率dst的大小不正确,无法容纳所有1024个字节。没有看到dst的声明,就无法确定。