@@ -27,6 +27,7 @@ UNIFEX_TERM handle_read_error(State *state, int ret);
27
27
UNIFEX_TERM handle_handshake_in_progress (State * state , int ret );
28
28
UNIFEX_TERM handle_handshake_finished (State * state );
29
29
static UnifexPayload * * to_payload_array (struct Datagram * dgram_list , int len );
30
+ static void free_payload_array (UnifexPayload * * payloads , int len );
30
31
31
32
int handle_load (UnifexEnv * env , void * * priv_data ) {
32
33
UNIFEX_UNUSED (env );
@@ -258,9 +259,8 @@ UNIFEX_TERM do_handshake(UnifexEnv *env, State *state) {
258
259
int timeout = get_timeout (state -> ssl );
259
260
UNIFEX_TERM res_term =
260
261
do_handshake_result (env , gen_packets , gen_packets_size , timeout );
261
- for (int i = 0 ; i < gen_packets_size ; i ++ ) {
262
- unifex_payload_release (gen_packets [i ]);
263
- }
262
+ free_payload_array (gen_packets , gen_packets_size );
263
+
264
264
return res_term ;
265
265
}
266
266
}
@@ -298,9 +298,7 @@ UNIFEX_TERM write_data(UnifexEnv *env, State *state, UnifexPayload *payload) {
298
298
UNIFEX_TERM res_term =
299
299
write_data_result_ok (env , gen_packets , gen_packets_size );
300
300
301
- for (int i = 0 ; i < gen_packets_size ; i ++ ) {
302
- unifex_payload_release (gen_packets [i ]);
303
- }
301
+ free_payload_array (gen_packets , gen_packets_size );
304
302
305
303
return res_term ;
306
304
}
@@ -338,13 +336,12 @@ UNIFEX_TERM handle_data(UnifexEnv *env, State *state, UnifexPayload *payload) {
338
336
UNIFEX_TERM handle_regular_read (State * state , char data [], int ret ) {
339
337
if (ret > 0 ) {
340
338
UnifexPayload * * packets = calloc (1 , sizeof (UnifexPayload * ));
341
- UnifexPayload packet ;
342
- packets [0 ] = & packet ;
339
+ packets [0 ] = calloc (1 , sizeof (UnifexPayload ));
343
340
unifex_payload_alloc (state -> env , UNIFEX_PAYLOAD_BINARY , ret , packets [0 ]);
344
341
memcpy (packets [0 ]-> data , data , ret );
345
342
packets [0 ]-> size = (unsigned int )ret ;
346
343
UNIFEX_TERM res_term = handle_data_result_ok (state -> env , packets , 1 );
347
- unifex_payload_release (packets [ 0 ] );
344
+ free_payload_array (packets , 1 );
348
345
return res_term ;
349
346
}
350
347
@@ -426,9 +423,7 @@ UNIFEX_TERM handle_handshake_finished(State *state) {
426
423
427
424
cleanup :
428
425
429
- for (int i = 0 ; i < gen_packets_size ; i ++ ) {
430
- unifex_payload_release (gen_packets [i ]);
431
- }
426
+ free_payload_array (gen_packets , gen_packets_size );
432
427
433
428
unifex_payload_release (& client_keying_material );
434
429
unifex_payload_release (& server_keying_material );
@@ -454,9 +449,7 @@ UNIFEX_TERM handle_handshake_in_progress(State *state, int ret) {
454
449
UNIFEX_TERM res_term = handle_data_result_handshake_packets (
455
450
state -> env , gen_packets , gen_packets_size , timeout );
456
451
457
- for (int i = 0 ; i < gen_packets_size ; i ++ ) {
458
- unifex_payload_release (gen_packets [i ]);
459
- }
452
+ free_payload_array (gen_packets , gen_packets_size );
460
453
461
454
return res_term ;
462
455
} else {
@@ -483,11 +476,7 @@ UNIFEX_TERM handle_timeout(UnifexEnv *env, State *state) {
483
476
int timeout = get_timeout (state -> ssl );
484
477
UNIFEX_TERM res_term = handle_timeout_result_retransmit (
485
478
env , gen_packets , gen_packets_size , timeout );
486
-
487
- for (int i = 0 ; i < gen_packets_size ; i ++ ) {
488
- unifex_payload_release (gen_packets [i ]);
489
- }
490
-
479
+ free_payload_array (gen_packets , gen_packets_size );
491
480
return res_term ;
492
481
}
493
482
}
@@ -539,28 +528,23 @@ static UnifexPayload **to_payload_array(struct Datagram *dgram_list, int len) {
539
528
struct Datagram * itr = dgram_list ;
540
529
541
530
for (int i = 0 ; i < len ; i ++ ) {
542
- DEBUG ("size, %d" , itr -> packet -> size );
543
531
itr = itr -> next ;
544
532
}
545
533
546
534
itr = dgram_list ;
547
535
for (int i = 0 ; i < len ; i ++ ) {
548
- DEBUG ("to payload array 3, %d" , len );
549
536
payloads [i ] = itr -> packet ;
550
537
itr = itr -> next ;
551
538
}
552
539
553
- DEBUG ("to payload array" );
554
-
555
- // itr = dgram_list;
556
- // struct Datagram *next = dgram_list->next;
540
+ itr = dgram_list ;
541
+ struct Datagram * next = dgram_list -> next ;
557
542
558
- // for (int i = 0; i < len; i++) {
559
- // free(itr);
560
- // itr = next;
561
- // next = itr->next;
562
- // DEBUG("dupa2");
563
- // }
543
+ while (next != NULL ) {
544
+ free (itr );
545
+ itr = next ;
546
+ next = itr -> next ;
547
+ }
564
548
565
549
return payloads ;
566
550
}
@@ -625,6 +609,14 @@ static void pkey_to_payload(UnifexEnv *env, EVP_PKEY *pkey,
625
609
payload -> size = len ;
626
610
}
627
611
612
+ static void free_payload_array (UnifexPayload * * payloads , int len ) {
613
+ for (int i = 0 ; i < len ; i ++ ) {
614
+ unifex_payload_release (payloads [i ]);
615
+ free (payloads [i ]);
616
+ }
617
+ free (payloads );
618
+ }
619
+
628
620
void handle_destroy_state (UnifexEnv * env , State * state ) {
629
621
UNIFEX_UNUSED (env );
630
622
DEBUG ("Destroying state" );
0 commit comments