@@ -272,45 +272,52 @@ initialize_IotResponseHandle(IotHttpsResponseHandle_t pResponseHandle) {
272
272
}
273
273
274
274
int is_valid_IotResponseHandle (IotHttpsResponseHandle_t pResponseHandle ) {
275
- int required1 =
275
+ int valid_headers =
276
+ pResponseHandle -> pHeaders != NULL ;
277
+ int valid_body =
278
+ pResponseHandle -> pBody != NULL ;
279
+
280
+ int valid_parserdata =
281
+ pResponseHandle -> httpParserInfo .readHeaderParser .data == pResponseHandle ;
282
+
283
+ size_t header_size = __CPROVER_OBJECT_SIZE (pResponseHandle -> pHeaders );
284
+ bool valid_header_pointers =
285
+ header_size < CBMC_MAX_OBJECT_SIZE &&
286
+
287
+ __CPROVER_POINTER_OFFSET (pResponseHandle -> pHeaders ) <= header_size &&
288
+ __CPROVER_POINTER_OFFSET (pResponseHandle -> pHeadersCur ) <= header_size &&
289
+ __CPROVER_POINTER_OFFSET (pResponseHandle -> pHeadersEnd ) <= header_size &&
290
+
276
291
__CPROVER_same_object (pResponseHandle -> pHeaders ,
277
292
pResponseHandle -> pHeadersCur ) &&
278
293
__CPROVER_same_object (pResponseHandle -> pHeaders ,
279
- pResponseHandle -> pHeadersEnd );
280
- int required2 =
294
+ pResponseHandle -> pHeadersEnd ) &&
295
+
296
+ pResponseHandle -> pHeaders <= pResponseHandle -> pHeadersCur &&
297
+ pResponseHandle -> pHeadersCur <= pResponseHandle -> pHeadersEnd ;
298
+
299
+ size_t body_size = __CPROVER_OBJECT_SIZE (pResponseHandle -> pBody );
300
+ bool valid_body_pointers =
301
+ body_size < CBMC_MAX_OBJECT_SIZE &&
302
+
303
+ __CPROVER_POINTER_OFFSET (pResponseHandle -> pBody ) <= body_size &&
304
+ __CPROVER_POINTER_OFFSET (pResponseHandle -> pBodyCur ) <= body_size &&
305
+ __CPROVER_POINTER_OFFSET (pResponseHandle -> pBodyEnd ) <= body_size &&
306
+
281
307
__CPROVER_same_object (pResponseHandle -> pBody ,
282
308
pResponseHandle -> pBodyCur ) &&
283
309
__CPROVER_same_object (pResponseHandle -> pBody ,
284
- pResponseHandle -> pBodyEnd );
285
- if (!required1 || !required2 ) return 0 ;
310
+ pResponseHandle -> pBodyEnd ) &&
286
311
287
- int valid_headers =
288
- pResponseHandle -> pHeaders != NULL ;
289
- int valid_header_order =
290
- pResponseHandle -> pHeaders <= pResponseHandle -> pHeadersCur &&
291
- pResponseHandle -> pHeadersCur <= pResponseHandle -> pHeadersEnd ;
292
- int valid_body =
293
- pResponseHandle -> pBody != NULL ;
294
- int valid_body_order =
295
312
pResponseHandle -> pBody <= pResponseHandle -> pBodyCur &&
296
313
pResponseHandle -> pBodyCur <= pResponseHandle -> pBodyEnd ;
297
- int valid_parserdata =
298
- pResponseHandle -> httpParserInfo .readHeaderParser .data == pResponseHandle ;
314
+
299
315
return
300
316
valid_headers &&
301
- valid_header_order &&
302
317
valid_body &&
303
- valid_body_order &&
304
318
valid_parserdata &&
305
- // valid_order and short circuit evaluation prevents integer overflow
306
- __CPROVER_r_ok (pResponseHandle -> pHeaders ,
307
- pResponseHandle -> pHeadersEnd - pResponseHandle -> pHeaders ) &&
308
- __CPROVER_w_ok (pResponseHandle -> pHeaders ,
309
- pResponseHandle -> pHeadersEnd - pResponseHandle -> pHeaders ) &&
310
- __CPROVER_r_ok (pResponseHandle -> pBody ,
311
- pResponseHandle -> pBodyEnd - pResponseHandle -> pBody ) &&
312
- __CPROVER_w_ok (pResponseHandle -> pBody ,
313
- pResponseHandle -> pBodyEnd - pResponseHandle -> pBody );
319
+ valid_header_pointers &&
320
+ valid_body_pointers ;
314
321
}
315
322
316
323
/****************************************************************
@@ -333,32 +340,30 @@ IotHttpsRequestHandle_t allocate_IotRequestHandle() {
333
340
}
334
341
335
342
int is_valid_IotRequestHandle (IotHttpsRequestHandle_t pRequestHandle ) {
336
- int required =
343
+ int valid_headers = pRequestHandle -> pHeaders != NULL ;
344
+ int valid_body = pRequestHandle -> pBody != NULL ;
345
+
346
+ size_t header_size = __CPROVER_OBJECT_SIZE (pRequestHandle -> pHeaders );
347
+
348
+ bool valid_header_pointers =
349
+ header_size < CBMC_MAX_OBJECT_SIZE &&
350
+
351
+ __CPROVER_POINTER_OFFSET (pRequestHandle -> pHeaders ) <= header_size &&
352
+ __CPROVER_POINTER_OFFSET (pRequestHandle -> pHeadersCur ) <= header_size &&
353
+ __CPROVER_POINTER_OFFSET (pRequestHandle -> pHeadersEnd ) <= header_size &&
354
+
337
355
__CPROVER_same_object (pRequestHandle -> pHeaders ,
338
356
pRequestHandle -> pHeadersCur ) &&
339
357
__CPROVER_same_object (pRequestHandle -> pHeaders ,
340
- pRequestHandle -> pHeadersEnd );
341
- if (!required ) return 0 ;
358
+ pRequestHandle -> pHeadersEnd ) &&
342
359
343
- int valid_headers =
344
- pRequestHandle -> pHeaders != NULL ;
345
- int valid_order =
346
360
pRequestHandle -> pHeaders <= pRequestHandle -> pHeadersCur &&
347
361
pRequestHandle -> pHeadersCur <= pRequestHandle -> pHeadersEnd ;
348
- int valid_body =
349
- pRequestHandle -> pBody != NULL ;
350
- int bounded_header_buffer =
351
- __CPROVER_OBJECT_SIZE (pRequestHandle -> pHeaders ) < CBMC_MAX_OBJECT_SIZE ;
362
+
352
363
return
353
364
valid_headers &&
354
- valid_order &&
355
365
valid_body &&
356
- bounded_header_buffer &&
357
- // valid_order and short circuit evaluation prevents integer overflow
358
- __CPROVER_r_ok (pRequestHandle -> pHeaders ,
359
- pRequestHandle -> pHeadersEnd - pRequestHandle -> pHeaders ) &&
360
- __CPROVER_w_ok (pRequestHandle -> pHeaders ,
361
- pRequestHandle -> pHeadersEnd - pRequestHandle -> pHeaders );
366
+ valid_header_pointers ;
362
367
}
363
368
364
369
/****************************************************************
0 commit comments