@@ -115,23 +115,47 @@ inline void *malloc(__CPROVER_size_t malloc_size)
115
115
// realistically, malloc may return NULL,
116
116
// and __CPROVER_allocate doesn't, but no one cares
117
117
__CPROVER_HIDE :;
118
- void * malloc_res ;
119
- malloc_res = __CPROVER_allocate (malloc_size , 0 );
120
118
121
- // make sure it's not recorded as deallocated
122
- __CPROVER_deallocated = (malloc_res == __CPROVER_deallocated )?0 :__CPROVER_deallocated ;
119
+ if (
120
+ __CPROVER_malloc_failure_mode ==
121
+ __CPROVER_malloc_failure_mode_return_null )
122
+ {
123
+ if (malloc_size > __CPROVER_max_malloc_size )
124
+ {
125
+ return (void * )0 ;
126
+ }
127
+ }
128
+ else if (
129
+ __CPROVER_malloc_failure_mode ==
130
+ __CPROVER_malloc_failure_mode_assert_then_assume )
131
+ {
132
+ __CPROVER_assert (
133
+ malloc_size <= __CPROVER_max_malloc_size ,
134
+ "max allocation size exceeded" );
135
+ __CPROVER_assume (malloc_size <= __CPROVER_max_malloc_size );
136
+ }
123
137
124
- // record the object size for non-determistic bounds checking
125
- __CPROVER_bool record_malloc = __VERIFIER_nondet___CPROVER_bool ();
126
- __CPROVER_malloc_object = record_malloc ?malloc_res :__CPROVER_malloc_object ;
127
- __CPROVER_malloc_size = record_malloc ?malloc_size :__CPROVER_malloc_size ;
128
- __CPROVER_malloc_is_new_array = record_malloc ?0 :__CPROVER_malloc_is_new_array ;
138
+ void * malloc_res ;
139
+ malloc_res = __CPROVER_allocate (malloc_size , 0 );
129
140
130
- // detect memory leaks
131
- __CPROVER_bool record_may_leak = __VERIFIER_nondet___CPROVER_bool ();
132
- __CPROVER_memory_leak = record_may_leak ? malloc_res : __CPROVER_memory_leak ;
141
+ // make sure it's not recorded as deallocated
142
+ __CPROVER_deallocated =
143
+ ( malloc_res == __CPROVER_deallocated ) ? 0 : __CPROVER_deallocated ;
133
144
134
- return malloc_res ;
145
+ // record the object size for non-determistic bounds checking
146
+ __CPROVER_bool record_malloc = __VERIFIER_nondet___CPROVER_bool ();
147
+ __CPROVER_malloc_object =
148
+ record_malloc ? malloc_res : __CPROVER_malloc_object ;
149
+ __CPROVER_malloc_size = record_malloc ? malloc_size : __CPROVER_malloc_size ;
150
+ __CPROVER_malloc_is_new_array =
151
+ record_malloc ? 0 : __CPROVER_malloc_is_new_array ;
152
+
153
+ // detect memory leaks
154
+ __CPROVER_bool record_may_leak = __VERIFIER_nondet___CPROVER_bool ();
155
+ __CPROVER_memory_leak =
156
+ record_may_leak ? malloc_res : __CPROVER_memory_leak ;
157
+
158
+ return malloc_res ;
135
159
}
136
160
137
161
/* FUNCTION: __builtin_alloca */
0 commit comments