LCOV - code coverage report
Current view: top level - src - alloc.c (source / functions) Hit Total Coverage
Test: burp-coverage-clean.info Lines: 45 45 100.0 %
Date: 2025-12-23 21:59:50 Functions: 7 7 100.0 %

          Line data    Source code
       1             : #include "burp.h"
       2             : #include "alloc.h"
       3             : #include "log.h"
       4             : 
       5             : #ifdef UTEST
       6             : int alloc_debug=0;
       7             : /*
       8             :    To use alloc_debug:
       9             :    CK_FORK=no ./runner > /tmp/out
      10             :    grep freed /tmp/out | cut -f 1 -d ' ' | sort > /tmp/freed && grep alloced /tmp/out | cut -f 1 -d ' ' | sort > /tmp/alloced && diff -u /tmp/alloced /tmp/freed
      11             : */
      12             : int alloc_errors=0;
      13             : uint64_t alloc_count=0;
      14             : uint64_t free_count=0;
      15          42 : void alloc_counters_reset(void)
      16             : {
      17          42 :         alloc_count=0;
      18          42 :         free_count=0;
      19          42 : }
      20             : 
      21           3 : static char *errored(const char *func)
      22             : {
      23           3 :         log_oom_w(__func__, func);
      24           3 :         return NULL;
      25             : }
      26             : #endif
      27             : 
      28       90984 : char *strdup_w(const char *s, const char *func)
      29             : {
      30       90984 :         char *ret;
      31             : #ifdef UTEST
      32       90984 :         if(alloc_errors) return errored(func);
      33             : #endif
      34       90983 :         if(!(ret=strdup(s))) log_oom_w(__func__, func);
      35             : #ifdef UTEST
      36             :         else
      37             :         {
      38       90983 :                 alloc_count++;
      39       90983 :                 if(alloc_debug) printf("%p alloced s\n", ret);
      40             :         }
      41             : #endif
      42             :         return ret;
      43             : }
      44             : 
      45       51977 : void *realloc_w(void *ptr, size_t size, const char *func)
      46             : {
      47       51977 :         void *ret;
      48             : #ifdef UTEST
      49       51977 :         int already_alloced=0;
      50       51977 :         if(alloc_errors) return errored(func);
      51       51977 :         if(ptr)
      52             :         {
      53       45192 :                 already_alloced=1;
      54       45192 :                 if(alloc_debug) printf("%p freed r\n", ptr);
      55             :         }
      56             : #endif
      57       51977 :         if(!(ret=realloc(ptr, size))) log_oom_w(__func__, func);
      58             : #ifdef UTEST
      59       51977 :         else if(!already_alloced)
      60        6785 :                 alloc_count++;
      61       51977 :         if(alloc_debug) printf("%p alloced r\n", ret);
      62             : #endif
      63             :         return ret;
      64             : }
      65             : 
      66       92917 : void *malloc_w(size_t size, const char *func)
      67             : {
      68       92917 :         void *ret;
      69             : #ifdef UTEST
      70       92917 :         if(alloc_errors) return errored(func);
      71             : #endif
      72       92917 :         if(!(ret=malloc(size))) log_oom_w(__func__, func);
      73             : #ifdef UTEST
      74             :         else
      75             :         {
      76       92917 :                 alloc_count++;
      77       92917 :                 if(alloc_debug) printf("%p alloced m\n", ret);
      78             :         }
      79             : #endif
      80             :         return ret;
      81             : }
      82             : 
      83      100006 : void *calloc_w(size_t nmem, size_t size, const char *func)
      84             : {
      85      100006 :         void *ret;
      86             : #ifdef UTEST
      87      100006 :         if(alloc_errors) return errored(func);
      88             : #endif
      89      100004 :         if(!(ret=calloc(nmem, size))) log_oom_w(__func__, func);
      90             : #ifdef UTEST
      91             :         else
      92             :         {
      93      100004 :                 alloc_count++;
      94      100004 :                 if(alloc_debug) printf("%p alloced c\n", ret);
      95             :         }
      96             : #endif
      97             :         return ret;
      98             : }
      99             : 
     100      641567 : void free_v(void **ptr)
     101             : {
     102      641567 :         if(!ptr || !*ptr) return;
     103             : #ifdef UTEST
     104      290687 :         if(alloc_debug) printf("%p freed\n", *ptr);
     105             : #endif
     106      290687 :         free(*ptr);
     107      290687 :         *ptr=NULL;
     108             : #ifdef UTEST
     109      290687 :         free_count++;
     110             : #endif
     111             : }
     112             : 
     113      537431 : void free_w(char **str)
     114             : {
     115      537431 :         free_v((void **)str);
     116      537431 : }

Generated by: LCOV version 1.16