blob: b460f891b9b6bf1a4ca2030d92949912a1e70be4 [file] [log] [blame]
#include <cc++/common.h>
// This was a test base64 stuff
#ifdef CCXX_NAMESPACES
using namespace std;
using namespace ost;
#endif
#define BUFLEN 512
char buf1[BUFLEN];
char buf2[BUFLEN];
bool errorOccurred = false;
char status[256] = "";
void printBug(const char*msg)
{
errorOccurred = true;
printf("status = %s\n%s!\n",status,msg);
}
const char fillChar='&';
void initBuf(char* buf)
{
memset(buf,fillChar,BUFLEN);
}
void checkBuf(char* buf,int prev,int size)
{
int i;
for(i=0;i<prev;++i)
if (buf[i] != fillChar) {
printBug("buffer overflow founded");
return;
}
for(i=prev+size;i<BUFLEN;++i)
if (buf[i] != fillChar) {
printBug("buffer overflow founded");
return;
}
}
// check with binary functions
void check1(unsigned char* s,size_t len,size_t buflen1,size_t buflen2,bool checkEqual=false)
{
initBuf(buf1);
b64Encode(s,len,buf1+16,buflen1);
checkBuf(buf1,16,buflen1);
initBuf(buf2);
b64Decode(buf1+16,(unsigned char*)buf2+16,buflen2);
checkBuf(buf2,16,buflen2);
if (checkEqual && memcmp(s,buf2+16,len) != 0)
printBug ("buffer different");
}
// check with old string
void check2(const char* s,size_t buflen,bool checkEqual=false)
{
if (!buflen) return;
initBuf(buf1);
b64Encode(s,buf1+16,buflen);
checkBuf(buf1,16,buflen);
initBuf(buf2);
size_t buflen2 = strlen(buf1+16)+1;
b64Decode(buf1+16,buf2+16);
checkBuf(buf2,16,buflen2);
if (checkEqual && strcmp(s,buf2+16) != 0) {
printBug ("buffer different");
printf("'%s' != '%s'\n'%s'\n",s,buf2+16,buf1+16);
}
}
// check buffer overflow on string
void checkStringOverflow(char* s,unsigned int len)
{
bool execCheck2 = (strlen(s) == len);
for(unsigned int l1=0;l1<32;++l1) {
sprintf(status,"%s %d",s,l1);
if (execCheck2)
check2(s,l1,l1 >= (len+2)/3*4+1);
for(unsigned int l2=0;l2<32;++l2)
check1((unsigned char*)s,len,l1,l2,
(l1 >= (len+2)/3*4+1)
&& (l2 >= len) );
}
}
int main()
{
checkStringOverflow((char *)"",0);
checkStringOverflow((char *)"aaa",3);
if (!errorOccurred)
printf("All seem ok\n");
return 0;
}