diff options
Diffstat (limited to 'src/encode')
| -rw-r--r-- | src/encode/base64.c | 10 | ||||
| -rw-r--r-- | src/encode/base64.h | 2 |
2 files changed, 6 insertions, 6 deletions
diff --git a/src/encode/base64.c b/src/encode/base64.c index d6b3474..9f95cb6 100644 --- a/src/encode/base64.c +++ b/src/encode/base64.c @@ -48,10 +48,8 @@ int de_base64(char* in, char* out){ } return 0; } -int en_base64(char* in, char* out){ - int len = 0; - for(int i = 0; in[i]!='\0'; i++) len++; +int en_base64(char* in, uint64_t len, char* out){ //char out[(len+1)*3]; for(int i = 0; i < len; i+=3){ uint8_t f = i>len?0:in[i]; @@ -63,8 +61,8 @@ int en_base64(char* in, char* out){ uint8_t i3 = (uint8_t)(s<<4)>>2 | (t>>6); uint8_t i4 = t & 0x3f; - if(t==0)i4 = 64; - if(s==0)i3 = 64; + if(i+1>=len)i3 = 64; + if(i+2>=len)i4 = 64; sprintf(out,"%s%c%c%c%c",out,char_index(i1),char_index(i2), char_index(i3),char_index(i4)); } @@ -78,7 +76,7 @@ int l_base64encode(lua_State* L){ memcpy(a, _a, len); char* encode = calloc(len * 3,sizeof * encode); - en_base64(a, encode); + en_base64(a, len, encode); lua_pushstring(L, encode); free(a); diff --git a/src/encode/base64.h b/src/encode/base64.h index 216d5e2..a58f503 100644 --- a/src/encode/base64.h +++ b/src/encode/base64.h @@ -2,3 +2,5 @@ int l_base64encode(lua_State*); int l_base64decode(lua_State*); + +int en_base64(char* in, uint64_t, char* out); |
