blob: b460f891b9b6bf1a4ca2030d92949912a1e70be4 [file] [log] [blame]
Emeric Vigier2f625822012-08-06 11:09:52 -04001#include <cc++/common.h>
2
3// This was a test base64 stuff
4
5#ifdef CCXX_NAMESPACES
6using namespace std;
7using namespace ost;
8#endif
9
10#define BUFLEN 512
11char buf1[BUFLEN];
12char buf2[BUFLEN];
13
14bool errorOccurred = false;
15char status[256] = "";
16
17void printBug(const char*msg)
18{
19 errorOccurred = true;
20 printf("status = %s\n%s!\n",status,msg);
21}
22
23const char fillChar='&';
24
25void initBuf(char* buf)
26{
27 memset(buf,fillChar,BUFLEN);
28}
29
30void checkBuf(char* buf,int prev,int size)
31{
32 int i;
33 for(i=0;i<prev;++i)
34 if (buf[i] != fillChar) {
35 printBug("buffer overflow founded");
36 return;
37 }
38 for(i=prev+size;i<BUFLEN;++i)
39 if (buf[i] != fillChar) {
40 printBug("buffer overflow founded");
41 return;
42 }
43}
44
45// check with binary functions
46void check1(unsigned char* s,size_t len,size_t buflen1,size_t buflen2,bool checkEqual=false)
47{
48 initBuf(buf1);
49 b64Encode(s,len,buf1+16,buflen1);
50 checkBuf(buf1,16,buflen1);
51 initBuf(buf2);
52 b64Decode(buf1+16,(unsigned char*)buf2+16,buflen2);
53 checkBuf(buf2,16,buflen2);
54 if (checkEqual && memcmp(s,buf2+16,len) != 0)
55 printBug ("buffer different");
56}
57
58// check with old string
59void check2(const char* s,size_t buflen,bool checkEqual=false)
60{
61 if (!buflen) return;
62 initBuf(buf1);
63 b64Encode(s,buf1+16,buflen);
64 checkBuf(buf1,16,buflen);
65 initBuf(buf2);
66 size_t buflen2 = strlen(buf1+16)+1;
67 b64Decode(buf1+16,buf2+16);
68 checkBuf(buf2,16,buflen2);
69 if (checkEqual && strcmp(s,buf2+16) != 0) {
70 printBug ("buffer different");
71 printf("'%s' != '%s'\n'%s'\n",s,buf2+16,buf1+16);
72 }
73}
74
75// check buffer overflow on string
76void checkStringOverflow(char* s,unsigned int len)
77{
78 bool execCheck2 = (strlen(s) == len);
79 for(unsigned int l1=0;l1<32;++l1) {
80 sprintf(status,"%s %d",s,l1);
81 if (execCheck2)
82 check2(s,l1,l1 >= (len+2)/3*4+1);
83 for(unsigned int l2=0;l2<32;++l2)
84 check1((unsigned char*)s,len,l1,l2,
85 (l1 >= (len+2)/3*4+1)
86 && (l2 >= len) );
87 }
88}
89
90int main()
91{
92 checkStringOverflow((char *)"",0);
93 checkStringOverflow((char *)"aaa",3);
94 if (!errorOccurred)
95 printf("All seem ok\n");
96 return 0;
97}
98
99