1+ #define size_t int
2+ #define NULL ((void*)0)
3+
4+
5+ unsigned char * badResize0 (unsigned char * buffer ,size_t currentSize ,size_t newSize )
6+ {
7+ // BAD: on unsuccessful call to realloc, we will lose a pointer to a valid memory block
8+ if (currentSize < newSize )
9+ {
10+ buffer = (unsigned char * )realloc (buffer , newSize );
11+ }
12+ return buffer ;
13+ }
14+
15+ unsigned char * goodResize0 (unsigned char * buffer ,size_t currentSize ,size_t newSize )
16+ {
17+ // GOOD: this way we will exclude possible memory leak
18+ unsigned char * tmp ;
19+ if (currentSize < newSize )
20+ {
21+ tmp = (unsigned char * )realloc (buffer , newSize );
22+ }
23+ if (tmp == NULL )
24+ {
25+ free (buffer );
26+ return NULL ;
27+ }
28+ else
29+ buffer = tmp ;
30+ return buffer ;
31+ }
32+ unsigned char * badResize1 (unsigned char * buffer ,size_t currentSize ,size_t newSize )
33+ {
34+ if (!buffer )
35+ exit (0 );
36+ // BAD: on unsuccessful call to realloc, we will lose a pointer to a valid memory block
37+ if (currentSize < newSize )
38+ {
39+ buffer = (unsigned char * )realloc (buffer , newSize );
40+ }
41+ return buffer ;
42+ }
43+
44+ unsigned char * noBadResize1 (unsigned char * buffer ,size_t currentSize ,size_t newSize )
45+ {
46+ // GOOD: program to end
47+ if (currentSize < newSize )
48+ {
49+ buffer = (unsigned char * )realloc (buffer , newSize );
50+ }
51+ if (!buffer )
52+ exit (0 );
53+ return buffer ;
54+ }
55+ unsigned char * noBadResize1e (unsigned char * buffer ,size_t currentSize ,size_t newSize )
56+ {
57+ // GOOD: program to end
58+ if (currentSize < newSize )
59+ {
60+ buffer = (unsigned char * )realloc (buffer , newSize );
61+ }
62+ if (buffer )
63+ return buffer ;
64+ else
65+ exit (0 );
66+ }
67+ unsigned char * noBadResize1o (unsigned char * buffer ,size_t currentSize ,size_t newSize )
68+ {
69+ // GOOD: program to end
70+ if (currentSize < newSize )
71+ {
72+ if (buffer = (unsigned char * )realloc (buffer , newSize ))
73+ exit (0 );
74+ }
75+ return buffer ;
76+ }
77+ unsigned char * badResize2 (unsigned char * buffer ,size_t currentSize ,size_t newSize )
78+ {
79+ assert (buffer != 0 );
80+ // BAD: on unsuccessful call to realloc, we will lose a pointer to a valid memory block
81+ if (currentSize < newSize )
82+ {
83+ buffer = (unsigned char * )realloc (buffer , newSize );
84+ }
85+ return buffer ;
86+ }
87+
88+ unsigned char * noBadResize2 (unsigned char * buffer ,size_t currentSize ,size_t newSize )
89+ {
90+ // GOOD: program to end
91+ if (currentSize < newSize )
92+ {
93+ buffer = (unsigned char * )realloc (buffer , newSize );
94+ assert (buffer != 0 );
95+ }
96+ return buffer ;
97+ }
98+
99+ unsigned char * noBadResize2e (unsigned char * buffer ,size_t currentSize ,size_t newSize )
100+ {
101+ // GOOD: program to end
102+ if (currentSize < newSize )
103+ {
104+ buffer = (unsigned char * )realloc (buffer , newSize );
105+ }
106+ assert (buffer != 0 );
107+ return buffer ;
108+ }
0 commit comments