2010-05-26 2 views
0

this class을 사용하여 텍스트를 base64로 인코딩/디코딩합니다. 최대 512 개의 MAX_LEN에서 정상적으로 작동하지만 1024로 늘리면 디코드 함수가 반환되고 빈 var가 반환됩니다. 왜이 원인이 될 수최대 길이를 늘리면이 base64 기능이 작동하지 않는 이유는 무엇입니까?

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

변수 dst는 표시되지 않습니다. 어느 쪽도 디코드 기능이 아닙니다. 우리는 이것보다 더 많은 정보가 필요합니다. –

+0

dst가 어디에 설정되어 있는지 알 수는 없지만 MAX_LENGTH <512 인 경우 잘 작동하지만 1024는 그렇지 않습니다. 나는 여기에 왜 그것을 게시 할 것인지에 대한 강조를하지 않는다. – flyout

+0

dst는 전역입니다. eeeeeeek! –

답변

0

확률이 dst은 1024 바이트를 모두 담을 수 있도록 정확하게 크기가 지정되지 않았습니다. dst의 선언을 보지 않고는 확신 할 길이 없습니다.