Curl_altsvc_init:
  325|  4.73k|{
  326|  4.73k|  struct altsvcinfo *asi = curlx_calloc(1, sizeof(struct altsvcinfo));
  ------------------
  |  | 1485|  4.73k|  curl_dbg_calloc(nbelem, size, __LINE__, __FILE__)
  ------------------
  327|  4.73k|  if(!asi)
  ------------------
  |  Branch (327:6): [True: 0, False: 4.73k]
  ------------------
  328|      0|    return NULL;
  329|  4.73k|  Curl_llist_init(&asi->list, NULL);
  330|       |
  331|       |  /* set default behavior */
  332|  4.73k|  asi->flags = CURLALTSVC_H1
  ------------------
  |  | 1035|  4.73k|#define CURLALTSVC_H1           (1L << 3)
  ------------------
  333|  4.73k|#ifdef USE_HTTP2
  334|  4.73k|    | CURLALTSVC_H2
  ------------------
  |  | 1036|  4.73k|#define CURLALTSVC_H2           (1L << 4)
  ------------------
  335|  4.73k|#endif
  336|       |#ifdef USE_HTTP3
  337|       |    | CURLALTSVC_H3
  338|       |#endif
  339|  4.73k|    ;
  340|  4.73k|  return asi;
  341|  4.73k|}
Curl_altsvc_load:
  347|  4.73k|{
  348|  4.73k|  DEBUGASSERT(asi);
  ------------------
  |  | 1077|  4.73k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (348:3): [True: 0, False: 4.73k]
  |  Branch (348:3): [True: 4.73k, False: 0]
  ------------------
  349|  4.73k|  return altsvc_load(asi, file);
  350|  4.73k|}
Curl_altsvc_ctrl:
  356|     36|{
  357|     36|  DEBUGASSERT(data);
  ------------------
  |  | 1077|     36|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (357:3): [True: 0, False: 36]
  |  Branch (357:3): [True: 36, False: 0]
  ------------------
  358|     36|  if(!ctrl)
  ------------------
  |  Branch (358:6): [True: 1, False: 35]
  ------------------
  359|      1|    return CURLE_BAD_FUNCTION_ARGUMENT;
  360|       |
  361|     35|  if(!data->asi) {
  ------------------
  |  Branch (361:6): [True: 35, False: 0]
  ------------------
  362|     35|    data->asi = Curl_altsvc_init();
  363|     35|    if(!data->asi)
  ------------------
  |  Branch (363:8): [True: 0, False: 35]
  ------------------
  364|      0|      return CURLE_OUT_OF_MEMORY;
  365|     35|  }
  366|     35|  data->asi->flags = ctrl;
  367|     35|  return CURLE_OK;
  368|     35|}
Curl_altsvc_cleanup:
  375|  6.82k|{
  376|  6.82k|  if(*asi) {
  ------------------
  |  Branch (376:6): [True: 4.73k, False: 2.08k]
  ------------------
  377|  4.73k|    struct Curl_llist_node *e;
  378|  4.73k|    struct Curl_llist_node *n;
  379|  4.73k|    struct altsvcinfo *altsvc = *asi;
  380|  4.73k|    for(e = Curl_llist_head(&altsvc->list); e; e = n) {
  ------------------
  |  Branch (380:45): [True: 0, False: 4.73k]
  ------------------
  381|      0|      struct altsvc *as = Curl_node_elem(e);
  382|      0|      n = Curl_node_next(e);
  383|      0|      altsvc_free(as);
  ------------------
  |  |   87|      0|#define altsvc_free(x) curlx_free(x)
  |  |  ------------------
  |  |  |  | 1488|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  ------------------
  384|      0|    }
  385|  4.73k|    curlx_free(altsvc->filename);
  ------------------
  |  | 1488|  4.73k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  386|  4.73k|    curlx_free(altsvc);
  ------------------
  |  | 1488|  4.73k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  387|       |    *asi = NULL; /* clear the pointer */
  388|  4.73k|  }
  389|  6.82k|}
Curl_altsvc_save:
  396|  6.82k|{
  397|  6.82k|  CURLcode result = CURLE_OK;
  398|  6.82k|  FILE *out;
  399|  6.82k|  char *tempstore = NULL;
  400|       |
  401|  6.82k|  if(!asi)
  ------------------
  |  Branch (401:6): [True: 2.08k, False: 4.73k]
  ------------------
  402|       |    /* no cache activated */
  403|  2.08k|    return CURLE_OK;
  404|       |
  405|       |  /* if not new name is given, use the one we stored from the load */
  406|  4.73k|  if(!file && asi->filename)
  ------------------
  |  Branch (406:6): [True: 4, False: 4.73k]
  |  Branch (406:15): [True: 0, False: 4]
  ------------------
  407|      0|    file = asi->filename;
  408|       |
  409|  4.73k|  if((asi->flags & CURLALTSVC_READONLYFILE) || !file || !file[0])
  ------------------
  |  | 1034|  4.73k|#define CURLALTSVC_READONLYFILE (1L << 2)
  ------------------
  |  Branch (409:6): [True: 24, False: 4.71k]
  |  Branch (409:48): [True: 2, False: 4.71k]
  |  Branch (409:57): [True: 0, False: 4.71k]
  ------------------
  410|       |    /* marked as read-only, no file or zero length filename */
  411|     26|    return CURLE_OK;
  412|       |
  413|  4.71k|  result = Curl_fopen(data, file, &out, &tempstore);
  414|  4.71k|  if(!result) {
  ------------------
  |  Branch (414:6): [True: 4.71k, False: 0]
  ------------------
  415|  4.71k|    struct Curl_llist_node *e;
  416|  4.71k|    struct Curl_llist_node *n;
  417|  4.71k|    fputs("# Your alt-svc cache. https://curl.se/docs/alt-svc.html\n"
  418|  4.71k|          "# This file was generated by libcurl! Edit at your own risk.\n",
  419|  4.71k|          out);
  420|  4.71k|    for(e = Curl_llist_head(&asi->list); e; e = n) {
  ------------------
  |  Branch (420:42): [True: 0, False: 4.71k]
  ------------------
  421|      0|      struct altsvc *as = Curl_node_elem(e);
  422|      0|      n = Curl_node_next(e);
  423|      0|      result = altsvc_out(as, out);
  424|      0|      if(result)
  ------------------
  |  Branch (424:10): [True: 0, False: 0]
  ------------------
  425|      0|        break;
  426|      0|    }
  427|  4.71k|    curlx_fclose(out);
  ------------------
  |  |   79|  4.71k|#define curlx_fclose(file)      curl_dbg_fclose(file, __LINE__, __FILE__)
  ------------------
  428|  4.71k|    if(!result && tempstore && curlx_rename(tempstore, file))
  ------------------
  |  |   70|      0|#define curlx_rename            rename
  ------------------
  |  Branch (428:8): [True: 4.71k, False: 0]
  |  Branch (428:19): [True: 0, False: 4.71k]
  |  Branch (428:32): [True: 0, False: 0]
  ------------------
  429|      0|      result = CURLE_WRITE_ERROR;
  430|       |
  431|  4.71k|    if(result && tempstore)
  ------------------
  |  Branch (431:8): [True: 0, False: 4.71k]
  |  Branch (431:18): [True: 0, False: 0]
  ------------------
  432|      0|      unlink(tempstore);
  433|  4.71k|  }
  434|  4.71k|  curlx_free(tempstore);
  ------------------
  |  | 1488|  4.71k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  435|  4.71k|  return result;
  436|  4.73k|}
altsvc.c:altsvc_load:
  238|  4.73k|{
  239|  4.73k|  CURLcode result = CURLE_OK;
  240|  4.73k|  FILE *fp;
  241|       |
  242|       |  /* we need a private copy of the filename so that the altsvc cache file
  243|       |     name survives an easy handle reset */
  244|  4.73k|  curlx_free(asi->filename);
  ------------------
  |  | 1488|  4.73k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  245|  4.73k|  asi->filename = curlx_strdup(file);
  ------------------
  |  | 1482|  4.73k|#define curlx_strdup(ptr)          curl_dbg_strdup(ptr, __LINE__, __FILE__)
  ------------------
  246|  4.73k|  if(!asi->filename)
  ------------------
  |  Branch (246:6): [True: 0, False: 4.73k]
  ------------------
  247|      0|    return CURLE_OUT_OF_MEMORY;
  248|       |
  249|  4.73k|  fp = curlx_fopen(file, FOPEN_READTEXT);
  ------------------
  |  |   74|  4.73k|#define curlx_fopen(file, mode) curl_dbg_fopen(file, mode, __LINE__, __FILE__)
  ------------------
  250|  4.73k|  if(fp) {
  ------------------
  |  Branch (250:6): [True: 4.73k, False: 0]
  ------------------
  251|  4.73k|    curlx_struct_stat stat;
  ------------------
  |  |   63|  4.73k|#define curlx_struct_stat       struct stat
  ------------------
  252|  4.73k|    if((curlx_fstat(fileno(fp), &stat) == -1) || !S_ISDIR(stat.st_mode)) {
  ------------------
  |  |   62|  4.73k|#define curlx_fstat             fstat
  ------------------
  |  Branch (252:8): [True: 0, False: 4.73k]
  |  Branch (252:50): [True: 4.73k, False: 0]
  ------------------
  253|  4.73k|      bool eof = FALSE;
  ------------------
  |  | 1054|  4.73k|#define FALSE false
  ------------------
  254|  4.73k|      struct dynbuf buf;
  255|  4.73k|      curlx_dyn_init(&buf, MAX_ALTSVC_LINE);
  ------------------
  |  |   41|  4.73k|#define MAX_ALTSVC_LINE    4095
  ------------------
  256|  4.73k|      do {
  257|  4.73k|        result = Curl_get_line(&buf, fp, &eof);
  258|  4.73k|        if(!result) {
  ------------------
  |  Branch (258:12): [True: 4.73k, False: 0]
  ------------------
  259|  4.73k|          const char *lineptr = curlx_dyn_ptr(&buf);
  260|  4.73k|          curlx_str_passblanks(&lineptr);
  261|  4.73k|          if(curlx_str_single(&lineptr, '#'))
  ------------------
  |  Branch (261:14): [True: 4.73k, False: 0]
  ------------------
  262|  4.73k|            altsvc_add(asi, lineptr);
  263|  4.73k|        }
  264|  4.73k|      } while(!result && !eof);
  ------------------
  |  Branch (264:15): [True: 4.73k, False: 0]
  |  Branch (264:26): [True: 0, False: 4.73k]
  ------------------
  265|  4.73k|      curlx_dyn_free(&buf); /* free the line buffer */
  266|  4.73k|    }
  267|  4.73k|    curlx_fclose(fp);
  ------------------
  |  |   79|  4.73k|#define curlx_fclose(file)      curl_dbg_fclose(file, __LINE__, __FILE__)
  ------------------
  268|  4.73k|  }
  269|  4.73k|  return result;
  270|  4.73k|}
altsvc.c:altsvc_add:
  169|  4.73k|{
  170|       |  /* Example line:
  171|       |     h2 example.com 443 h3 shiny.example.com 8443 "20191231 10:00:00" 1
  172|       |   */
  173|  4.73k|  struct Curl_str srchost;
  174|  4.73k|  struct Curl_str dsthost;
  175|  4.73k|  struct Curl_str srcalpn;
  176|  4.73k|  struct Curl_str dstalpn;
  177|  4.73k|  struct Curl_str date;
  178|  4.73k|  curl_off_t srcport;
  179|  4.73k|  curl_off_t dstport;
  180|  4.73k|  curl_off_t persist;
  181|  4.73k|  curl_off_t prio;
  182|       |
  183|  4.73k|  if(curlx_str_word(&line, &srcalpn, MAX_ALTSVC_ALPNLEN) ||
  ------------------
  |  |   44|  4.73k|#define MAX_ALTSVC_ALPNLEN 10
  ------------------
  |  Branch (183:6): [True: 0, False: 4.73k]
  ------------------
  184|  4.73k|     curlx_str_singlespace(&line) ||
  ------------------
  |  Branch (184:6): [True: 4.73k, False: 0]
  ------------------
  185|      0|     curlx_str_word(&line, &srchost, MAX_ALTSVC_HOSTLEN) ||
  ------------------
  |  |   43|      0|#define MAX_ALTSVC_HOSTLEN 2048
  ------------------
  |  Branch (185:6): [True: 0, False: 0]
  ------------------
  186|      0|     curlx_str_singlespace(&line) ||
  ------------------
  |  Branch (186:6): [True: 0, False: 0]
  ------------------
  187|      0|     curlx_str_number(&line, &srcport, 65535) ||
  ------------------
  |  Branch (187:6): [True: 0, False: 0]
  ------------------
  188|      0|     curlx_str_singlespace(&line) ||
  ------------------
  |  Branch (188:6): [True: 0, False: 0]
  ------------------
  189|      0|     curlx_str_word(&line, &dstalpn, MAX_ALTSVC_ALPNLEN) ||
  ------------------
  |  |   44|      0|#define MAX_ALTSVC_ALPNLEN 10
  ------------------
  |  Branch (189:6): [True: 0, False: 0]
  ------------------
  190|      0|     curlx_str_singlespace(&line) ||
  ------------------
  |  Branch (190:6): [True: 0, False: 0]
  ------------------
  191|      0|     curlx_str_word(&line, &dsthost, MAX_ALTSVC_HOSTLEN) ||
  ------------------
  |  |   43|      0|#define MAX_ALTSVC_HOSTLEN 2048
  ------------------
  |  Branch (191:6): [True: 0, False: 0]
  ------------------
  192|      0|     curlx_str_singlespace(&line) ||
  ------------------
  |  Branch (192:6): [True: 0, False: 0]
  ------------------
  193|      0|     curlx_str_number(&line, &dstport, 65535) ||
  ------------------
  |  Branch (193:6): [True: 0, False: 0]
  ------------------
  194|      0|     curlx_str_singlespace(&line) ||
  ------------------
  |  Branch (194:6): [True: 0, False: 0]
  ------------------
  195|      0|     curlx_str_quotedword(&line, &date, MAX_ALTSVC_DATELEN) ||
  ------------------
  |  |   42|      0|#define MAX_ALTSVC_DATELEN 17
  ------------------
  |  Branch (195:6): [True: 0, False: 0]
  ------------------
  196|      0|     curlx_str_singlespace(&line) ||
  ------------------
  |  Branch (196:6): [True: 0, False: 0]
  ------------------
  197|      0|     curlx_str_number(&line, &persist, 1) ||
  ------------------
  |  Branch (197:6): [True: 0, False: 0]
  ------------------
  198|      0|     curlx_str_singlespace(&line) ||
  ------------------
  |  Branch (198:6): [True: 0, False: 0]
  ------------------
  199|      0|     curlx_str_number(&line, &prio, 0) ||
  ------------------
  |  Branch (199:6): [True: 0, False: 0]
  ------------------
  200|      0|     curlx_str_newline(&line))
  ------------------
  |  Branch (200:6): [True: 0, False: 0]
  ------------------
  201|  4.73k|    ;
  202|      0|  else {
  203|      0|    char dbuf[MAX_ALTSVC_DATELEN + 1];
  204|      0|    time_t expires = 0;
  205|      0|    time_t now = time(NULL);
  ------------------
  |  |   63|      0|#define time(x) altsvc_debugtime(x)
  ------------------
  206|       |
  207|       |    /* The date parser works on a null-terminated string. The maximum length
  208|       |       is upheld by curlx_str_quotedword(). */
  209|      0|    memcpy(dbuf, curlx_str(&date), curlx_strlen(&date));
  ------------------
  |  |   49|      0|#define curlx_str(x)    ((x)->str)
  ------------------
                  memcpy(dbuf, curlx_str(&date), curlx_strlen(&date));
  ------------------
  |  |   50|      0|#define curlx_strlen(x) ((x)->len)
  ------------------
  210|      0|    dbuf[curlx_strlen(&date)] = 0;
  ------------------
  |  |   50|      0|#define curlx_strlen(x) ((x)->len)
  ------------------
  211|      0|    Curl_getdate_capped(dbuf, &expires);
  212|       |
  213|      0|    if(now < expires) {
  ------------------
  |  Branch (213:8): [True: 0, False: 0]
  ------------------
  214|      0|      struct altsvc *as = altsvc_create(&srchost, &dsthost, &srcalpn, &dstalpn,
  215|      0|                                        (size_t)srcport, (size_t)dstport);
  216|      0|      if(as) {
  ------------------
  |  Branch (216:10): [True: 0, False: 0]
  ------------------
  217|      0|        as->expires = expires;
  218|      0|        as->persist = persist ? 1 : 0;
  ------------------
  |  Branch (218:23): [True: 0, False: 0]
  ------------------
  219|      0|        altsvc_append(asi, as);
  220|      0|      }
  221|      0|      else
  222|      0|        return CURLE_OUT_OF_MEMORY;
  223|      0|    }
  224|      0|  }
  225|       |
  226|  4.73k|  return CURLE_OK;
  227|  4.73k|}

Curl_async_global_init:
   81|      1|{
   82|       |#if defined(USE_ARES) && defined(CARES_HAVE_ARES_LIBRARY_INIT)
   83|       |  if(ares_library_init(ARES_LIB_INIT_ALL)) {
   84|       |    return CURLE_FAILED_INIT;
   85|       |  }
   86|       |#endif
   87|      1|  return CURLE_OK;
   88|      1|}

Curl_bufref_init:
   38|  13.6k|{
   39|  13.6k|  DEBUGASSERT(br);
  ------------------
  |  | 1077|  13.6k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (39:3): [True: 0, False: 13.6k]
  |  Branch (39:3): [True: 13.6k, False: 0]
  ------------------
   40|  13.6k|  br->dtor = NULL;
   41|  13.6k|  br->ptr = NULL;
   42|  13.6k|  br->len = 0;
   43|       |
   44|  13.6k|#ifdef DEBUGBUILD
   45|  13.6k|  br->signature = SIGNATURE;
  ------------------
  |  |   31|  13.6k|#define SIGNATURE 0x5c48e9b2    /* Random pattern. */
  ------------------
   46|  13.6k|#endif
   47|  13.6k|}
Curl_bufref_free:
   55|  20.5k|{
   56|  20.5k|  DEBUGASSERT(br);
  ------------------
  |  | 1077|  20.5k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (56:3): [True: 0, False: 20.5k]
  |  Branch (56:3): [True: 20.5k, False: 0]
  ------------------
   57|  20.5k|  DEBUGASSERT(br->signature == SIGNATURE);
  ------------------
  |  | 1077|  20.5k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (57:3): [True: 0, False: 20.5k]
  |  Branch (57:3): [True: 20.5k, False: 0]
  ------------------
   58|  20.5k|  DEBUGASSERT(br->ptr || !br->len);
  ------------------
  |  | 1077|  20.5k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (58:3): [True: 20.5k, False: 0]
  |  Branch (58:3): [True: 0, False: 0]
  |  Branch (58:3): [True: 43, False: 20.5k]
  |  Branch (58:3): [True: 20.5k, False: 0]
  ------------------
   59|       |
   60|  20.5k|  if(br->ptr && br->dtor)
  ------------------
  |  Branch (60:6): [True: 43, False: 20.5k]
  |  Branch (60:17): [True: 0, False: 43]
  ------------------
   61|      0|    br->dtor(CURL_UNCONST(br->ptr));
  ------------------
  |  |  862|      0|#define CURL_UNCONST(p) ((void *)(uintptr_t)(const void *)(p))
  ------------------
   62|       |
   63|  20.5k|  br->dtor = NULL;
   64|       |  br->ptr = NULL;
   65|  20.5k|  br->len = 0;
   66|  20.5k|}
Curl_bufref_set:
   74|     67|{
   75|     67|  DEBUGASSERT(ptr || !len);
  ------------------
  |  | 1077|     67|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (75:3): [True: 67, False: 0]
  |  Branch (75:3): [True: 0, False: 0]
  |  Branch (75:3): [True: 67, False: 0]
  |  Branch (75:3): [True: 0, False: 0]
  ------------------
   76|     67|  DEBUGASSERT(len <= CURL_MAX_INPUT_LENGTH);
  ------------------
  |  | 1077|     67|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (76:3): [True: 0, False: 67]
  |  Branch (76:3): [True: 67, False: 0]
  ------------------
   77|       |
   78|     67|  Curl_bufref_free(br);
   79|     67|  br->ptr = (const unsigned char *)ptr;
   80|     67|  br->len = len;
   81|     67|  br->dtor = dtor;
   82|     67|}
Curl_bufref_ptr:
  100|    144|{
  101|    144|  DEBUGASSERT(br);
  ------------------
  |  | 1077|    144|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (101:3): [True: 0, False: 144]
  |  Branch (101:3): [True: 144, False: 0]
  ------------------
  102|    144|  DEBUGASSERT(br->signature == SIGNATURE);
  ------------------
  |  | 1077|    144|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (102:3): [True: 0, False: 144]
  |  Branch (102:3): [True: 144, False: 0]
  ------------------
  103|    144|  DEBUGASSERT(br->ptr || !br->len);
  ------------------
  |  | 1077|    144|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (103:3): [True: 144, False: 0]
  |  Branch (103:3): [True: 0, False: 0]
  |  Branch (103:3): [True: 84, False: 60]
  |  Branch (103:3): [True: 60, False: 0]
  ------------------
  104|       |
  105|    144|  return (const char *)br->ptr;
  106|    144|}
Curl_bufref_memdup0:
  121|     12|{
  122|     12|  unsigned char *cpy = NULL;
  123|       |
  124|     12|  DEBUGASSERT(br);
  ------------------
  |  | 1077|     12|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (124:3): [True: 0, False: 12]
  |  Branch (124:3): [True: 12, False: 0]
  ------------------
  125|     12|  DEBUGASSERT(br->signature == SIGNATURE);
  ------------------
  |  | 1077|     12|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (125:3): [True: 0, False: 12]
  |  Branch (125:3): [True: 12, False: 0]
  ------------------
  126|     12|  DEBUGASSERT(br->ptr || !br->len);
  ------------------
  |  | 1077|     12|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (126:3): [True: 12, False: 0]
  |  Branch (126:3): [True: 0, False: 0]
  |  Branch (126:3): [True: 12, False: 0]
  |  Branch (126:3): [True: 0, False: 0]
  ------------------
  127|     12|  DEBUGASSERT(ptr || !len);
  ------------------
  |  | 1077|     12|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (127:3): [True: 12, False: 0]
  |  Branch (127:3): [True: 0, False: 0]
  |  Branch (127:3): [True: 12, False: 0]
  |  Branch (127:3): [True: 0, False: 0]
  ------------------
  128|     12|  DEBUGASSERT(len <= CURL_MAX_INPUT_LENGTH);
  ------------------
  |  | 1077|     12|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (128:3): [True: 0, False: 12]
  |  Branch (128:3): [True: 12, False: 0]
  ------------------
  129|       |
  130|     12|  if(ptr) {
  ------------------
  |  Branch (130:6): [True: 12, False: 0]
  ------------------
  131|     12|    cpy = curlx_memdup0(ptr, len);
  132|     12|    if(!cpy)
  ------------------
  |  Branch (132:8): [True: 0, False: 12]
  ------------------
  133|      0|      return CURLE_OUT_OF_MEMORY;
  134|     12|  }
  135|       |
  136|     12|  Curl_bufref_set(br, cpy, len, curl_free);
  137|     12|  return CURLE_OK;
  138|     12|}

Curl_parse_interface:
  579|    130|{
  580|    130|  static const char if_prefix[] = "if!";
  581|    130|  static const char host_prefix[] = "host!";
  582|    130|  static const char if_host_prefix[] = "ifhost!";
  583|    130|  size_t len;
  584|       |
  585|    130|  DEBUGASSERT(dev);
  ------------------
  |  | 1077|    130|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (585:3): [True: 0, False: 130]
  |  Branch (585:3): [True: 130, False: 0]
  ------------------
  586|    130|  DEBUGASSERT(iface);
  ------------------
  |  | 1077|    130|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (586:3): [True: 0, False: 130]
  |  Branch (586:3): [True: 130, False: 0]
  ------------------
  587|    130|  DEBUGASSERT(host);
  ------------------
  |  | 1077|    130|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (587:3): [True: 0, False: 130]
  |  Branch (587:3): [True: 130, False: 0]
  ------------------
  588|       |
  589|    130|  len = strlen(input);
  590|    130|  if(len > 512)
  ------------------
  |  Branch (590:6): [True: 1, False: 129]
  ------------------
  591|      1|    return CURLE_BAD_FUNCTION_ARGUMENT;
  592|       |
  593|    129|  if(!strncmp(if_prefix, input, strlen(if_prefix))) {
  ------------------
  |  Branch (593:6): [True: 8, False: 121]
  ------------------
  594|      8|    input += strlen(if_prefix);
  595|      8|    if(!*input)
  ------------------
  |  Branch (595:8): [True: 1, False: 7]
  ------------------
  596|      1|      return CURLE_BAD_FUNCTION_ARGUMENT;
  597|      7|    *iface = curlx_memdup0(input, len - strlen(if_prefix));
  598|      7|    return *iface ? CURLE_OK : CURLE_OUT_OF_MEMORY;
  ------------------
  |  Branch (598:12): [True: 7, False: 0]
  ------------------
  599|      8|  }
  600|    121|  else if(!strncmp(host_prefix, input, strlen(host_prefix))) {
  ------------------
  |  Branch (600:11): [True: 4, False: 117]
  ------------------
  601|      4|    input += strlen(host_prefix);
  602|      4|    if(!*input)
  ------------------
  |  Branch (602:8): [True: 1, False: 3]
  ------------------
  603|      1|      return CURLE_BAD_FUNCTION_ARGUMENT;
  604|      3|    *host = curlx_memdup0(input, len - strlen(host_prefix));
  605|      3|    return *host ? CURLE_OK : CURLE_OUT_OF_MEMORY;
  ------------------
  |  Branch (605:12): [True: 3, False: 0]
  ------------------
  606|      4|  }
  607|    117|  else if(!strncmp(if_host_prefix, input, strlen(if_host_prefix))) {
  ------------------
  |  Branch (607:11): [True: 8, False: 109]
  ------------------
  608|      8|    const char *host_part;
  609|      8|    input += strlen(if_host_prefix);
  610|      8|    len -= strlen(if_host_prefix);
  611|      8|    host_part = memchr(input, '!', len);
  612|      8|    if(!host_part || !*(host_part + 1))
  ------------------
  |  Branch (612:8): [True: 1, False: 7]
  |  Branch (612:22): [True: 1, False: 6]
  ------------------
  613|      2|      return CURLE_BAD_FUNCTION_ARGUMENT;
  614|      6|    *iface = curlx_memdup0(input, host_part - input);
  615|      6|    if(!*iface)
  ------------------
  |  Branch (615:8): [True: 0, False: 6]
  ------------------
  616|      0|      return CURLE_OUT_OF_MEMORY;
  617|      6|    ++host_part;
  618|      6|    *host = curlx_memdup0(host_part, len - (host_part - input));
  619|      6|    if(!*host) {
  ------------------
  |  Branch (619:8): [True: 0, False: 6]
  ------------------
  620|      0|      curlx_safefree(*iface);
  ------------------
  |  | 1332|      0|  do {                      \
  |  | 1333|      0|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1488|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|      0|    (ptr) = NULL;           \
  |  | 1335|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  621|      0|      return CURLE_OUT_OF_MEMORY;
  622|      0|    }
  623|      6|    return CURLE_OK;
  624|      6|  }
  625|       |
  626|    109|  if(!*input)
  ------------------
  |  Branch (626:6): [True: 1, False: 108]
  ------------------
  627|      1|    return CURLE_BAD_FUNCTION_ARGUMENT;
  628|    108|  *dev = curlx_memdup0(input, len);
  629|    108|  return *dev ? CURLE_OK : CURLE_OUT_OF_MEMORY;
  ------------------
  |  Branch (629:10): [True: 108, False: 0]
  ------------------
  630|    109|}

Curl_get_content_encodings:
  654|      9|{
  655|      9|  struct dynbuf enc;
  656|      9|  const struct Curl_cwtype * const *cep;
  657|      9|  CURLcode result = CURLE_OK;
  658|      9|  curlx_dyn_init(&enc, 255);
  659|       |
  660|     45|  for(cep = general_unencoders; *cep && !result; cep++) {
  ------------------
  |  Branch (660:33): [True: 36, False: 9]
  |  Branch (660:41): [True: 36, False: 0]
  ------------------
  661|     36|    const struct Curl_cwtype *ce = *cep;
  662|     36|    if(!curl_strequal(ce->name, CONTENT_ENCODING_DEFAULT)) {
  ------------------
  |  |   54|     36|#define CONTENT_ENCODING_DEFAULT  "identity"
  ------------------
  |  Branch (662:8): [True: 27, False: 9]
  ------------------
  663|     27|      if(curlx_dyn_len(&enc))
  ------------------
  |  Branch (663:10): [True: 18, False: 9]
  ------------------
  664|     18|        result = curlx_dyn_addn(&enc, ", ", 2);
  665|     27|      if(!result)
  ------------------
  |  Branch (665:10): [True: 27, False: 0]
  ------------------
  666|     27|        result = curlx_dyn_add(&enc, ce->name);
  667|     27|    }
  668|     36|  }
  669|      9|  if(!result && !curlx_dyn_len(&enc))
  ------------------
  |  Branch (669:6): [True: 9, False: 0]
  |  Branch (669:17): [True: 0, False: 9]
  ------------------
  670|      0|    result = curlx_dyn_add(&enc, CONTENT_ENCODING_DEFAULT);
  ------------------
  |  |   54|      0|#define CONTENT_ENCODING_DEFAULT  "identity"
  ------------------
  671|       |
  672|      9|  if(!result)
  ------------------
  |  Branch (672:6): [True: 9, False: 0]
  ------------------
  673|      9|    return curlx_dyn_ptr(&enc);
  674|      0|  return NULL;
  675|      9|}

Curl_cookie_add:
  984|  1.94k|{
  985|  1.94k|  struct Cookie comem;
  986|  1.94k|  struct Cookie *co;
  987|  1.94k|  size_t myhash;
  988|  1.94k|  CURLcode result;
  989|  1.94k|  bool replaces = FALSE;
  ------------------
  |  | 1054|  1.94k|#define FALSE false
  ------------------
  990|  1.94k|  bool okay;
  991|       |
  992|  1.94k|  DEBUGASSERT(data);
  ------------------
  |  | 1077|  1.94k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (992:3): [True: 0, False: 1.94k]
  |  Branch (992:3): [True: 1.94k, False: 0]
  ------------------
  993|  1.94k|  DEBUGASSERT(MAX_SET_COOKIE_AMOUNT <= 255); /* counter is an unsigned char */
  ------------------
  |  | 1077|  1.94k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (993:3): [True: 0, Folded]
  |  Branch (993:3): [True: 1.94k, Folded]
  ------------------
  994|  1.94k|  if(data->req.setcookies >= MAX_SET_COOKIE_AMOUNT)
  ------------------
  |  |   90|  1.94k|#define MAX_SET_COOKIE_AMOUNT 50
  ------------------
  |  Branch (994:6): [True: 0, False: 1.94k]
  ------------------
  995|      0|    return CURLE_OK; /* silently ignore */
  996|       |
  997|  1.94k|  co = &comem;
  998|  1.94k|  memset(co, 0, sizeof(comem));
  999|       |
 1000|  1.94k|  if(httpheader)
  ------------------
  |  Branch (1000:6): [True: 1.25k, False: 689]
  ------------------
 1001|  1.25k|    result = parse_cookie_header(data, co, ci, &okay,
 1002|  1.25k|                                 lineptr, domain, path, secure);
 1003|    689|  else
 1004|    689|    result = parse_netscape(co, ci, &okay, lineptr, secure);
 1005|       |
 1006|  1.94k|  if(result || !okay)
  ------------------
  |  Branch (1006:6): [True: 0, False: 1.94k]
  |  Branch (1006:16): [True: 453, False: 1.48k]
  ------------------
 1007|    453|    goto fail;
 1008|       |
 1009|  1.48k|  if(co->prefix_secure && !co->secure)
  ------------------
  |  Branch (1009:6): [True: 10, False: 1.47k]
  |  Branch (1009:27): [True: 8, False: 2]
  ------------------
 1010|       |    /* The __Secure- prefix only requires that the cookie be set secure */
 1011|      8|    goto fail;
 1012|       |
 1013|  1.47k|  if(co->prefix_host) {
  ------------------
  |  Branch (1013:6): [True: 13, False: 1.46k]
  ------------------
 1014|       |    /*
 1015|       |     * The __Host- prefix requires the cookie to be secure, have a "/" path
 1016|       |     * and not have a domain set.
 1017|       |     */
 1018|     13|    if(co->secure && co->path && !strcmp(co->path, "/") && !co->tailmatch)
  ------------------
  |  Branch (1018:8): [True: 4, False: 9]
  |  Branch (1018:22): [True: 3, False: 1]
  |  Branch (1018:34): [True: 2, False: 1]
  |  Branch (1018:60): [True: 1, False: 1]
  ------------------
 1019|      1|      ;
 1020|     12|    else
 1021|     12|      goto fail;
 1022|     13|  }
 1023|       |
 1024|  1.46k|  if(!ci->running &&    /* read from a file */
  ------------------
  |  Branch (1024:6): [True: 1.46k, False: 0]
  ------------------
 1025|  1.46k|     ci->newsession &&  /* clean session cookies */
  ------------------
  |  Branch (1025:6): [True: 0, False: 1.46k]
  ------------------
 1026|      0|     !co->expires)      /* this is a session cookie */
  ------------------
  |  Branch (1026:6): [True: 0, False: 0]
  ------------------
 1027|      0|    goto fail;
 1028|       |
 1029|  1.46k|  co->livecookie = ci->running;
 1030|  1.46k|  co->creationtime = ++ci->lastct;
 1031|       |
 1032|       |  /*
 1033|       |   * Now we have parsed the incoming line, we must now check if this supersedes
 1034|       |   * an already existing cookie, which it may if the previous have the same
 1035|       |   * domain and path as this.
 1036|       |   */
 1037|       |
 1038|       |  /* remove expired cookies */
 1039|  1.46k|  if(!noexpire)
  ------------------
  |  Branch (1039:6): [True: 1.46k, False: 0]
  ------------------
 1040|  1.46k|    remove_expired(ci);
 1041|       |
 1042|  1.46k|  if(is_public_suffix(data, co, domain))
  ------------------
  |  Branch (1042:6): [True: 0, False: 1.46k]
  ------------------
 1043|      0|    goto fail;
 1044|       |
 1045|  1.46k|  if(!replace_existing(data, co, ci, secure, &replaces))
  ------------------
  |  Branch (1045:6): [True: 0, False: 1.46k]
  ------------------
 1046|      0|    goto fail;
 1047|       |
 1048|       |  /* clone the stack struct into heap */
 1049|  1.46k|  co = curlx_memdup(&comem, sizeof(comem));
 1050|  1.46k|  if(!co) {
  ------------------
  |  Branch (1050:6): [True: 0, False: 1.46k]
  ------------------
 1051|      0|    co = &comem;
 1052|      0|    result = CURLE_OUT_OF_MEMORY;
 1053|      0|    goto fail; /* bail out if we are this low on memory */
 1054|      0|  }
 1055|       |
 1056|       |  /* add this cookie to the list */
 1057|  1.46k|  myhash = cookiehash(co->domain);
 1058|  1.46k|  Curl_llist_append(&ci->cookielist[myhash], co, &co->node);
 1059|       |
 1060|  1.46k|  if(ci->running)
  ------------------
  |  Branch (1060:6): [True: 0, False: 1.46k]
  ------------------
 1061|       |    /* Only show this when NOT reading the cookies from a file */
 1062|      0|    infof(data, "%s cookie %s=\"%s\" for domain %s, path %s, "
  ------------------
  |  |  143|      0|  do {                               \
  |  |  144|      0|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  319|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (319:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (319:14): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  320|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (320:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  321|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (321:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|      0|      Curl_infof(data, __VA_ARGS__); \
  |  |  ------------------
  |  |  |  Branch (145:24): [True: 0, False: 0]
  |  |  ------------------
  |  |  146|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1063|  1.46k|          "expire %" FMT_OFF_T,
 1064|  1.46k|          replaces ? "Replaced" : "Added", co->name, co->value,
 1065|  1.46k|          co->domain, co->path, co->expires);
 1066|       |
 1067|  1.46k|  if(!replaces)
  ------------------
  |  Branch (1067:6): [True: 1.46k, False: 0]
  ------------------
 1068|  1.46k|    ci->numcookies++; /* one more cookie in the jar */
 1069|       |
 1070|       |  /*
 1071|       |   * Now that we have added a new cookie to the jar, update the expiration
 1072|       |   * tracker in case it is the next one to expire.
 1073|       |   */
 1074|  1.46k|  if(co->expires && (co->expires < ci->next_expiration))
  ------------------
  |  Branch (1074:6): [True: 475, False: 992]
  |  Branch (1074:21): [True: 474, False: 1]
  ------------------
 1075|    474|    ci->next_expiration = co->expires;
 1076|       |
 1077|  1.46k|  if(httpheader)
  ------------------
  |  Branch (1077:6): [True: 1.15k, False: 316]
  ------------------
 1078|  1.15k|    data->req.setcookies++;
 1079|       |
 1080|  1.46k|  return result;
 1081|    473|fail:
 1082|       |  freecookie(co, FALSE);
  ------------------
  |  | 1054|    473|#define FALSE false
  ------------------
 1083|    473|  return result;
 1084|  1.46k|}
Curl_cookie_init:
 1101|  4.78k|{
 1102|  4.78k|  int i;
 1103|  4.78k|  struct CookieInfo *ci = curlx_calloc(1, sizeof(struct CookieInfo));
  ------------------
  |  | 1485|  4.78k|  curl_dbg_calloc(nbelem, size, __LINE__, __FILE__)
  ------------------
 1104|  4.78k|  if(!ci)
  ------------------
  |  Branch (1104:6): [True: 0, False: 4.78k]
  ------------------
 1105|      0|    return NULL;
 1106|       |
 1107|       |  /* This does not use the destructor callback since we want to add
 1108|       |     and remove to lists while keeping the cookie struct intact */
 1109|   306k|  for(i = 0; i < COOKIE_HASH_SIZE; i++)
  ------------------
  |  |   54|   306k|#define COOKIE_HASH_SIZE 63
  ------------------
  |  Branch (1109:14): [True: 301k, False: 4.78k]
  ------------------
 1110|   301k|    Curl_llist_init(&ci->cookielist[i], NULL);
 1111|       |  /*
 1112|       |   * Initialize the next_expiration time to signal that we do not have enough
 1113|       |   * information yet.
 1114|       |   */
 1115|  4.78k|  ci->next_expiration = CURL_OFF_T_MAX;
  ------------------
  |  |  590|  4.78k|#  define CURL_OFF_T_MAX 0x7FFFFFFFFFFFFFFF
  ------------------
 1116|       |
 1117|  4.78k|  return ci;
 1118|  4.78k|}
Curl_cookie_loadfiles:
 1206|      1|{
 1207|      1|  CURLcode result = CURLE_OK;
 1208|      1|  struct curl_slist *list = data->state.cookielist;
 1209|      1|  if(list) {
  ------------------
  |  Branch (1209:6): [True: 0, False: 1]
  ------------------
 1210|      0|    Curl_share_lock(data, CURL_LOCK_DATA_COOKIE, CURL_LOCK_ACCESS_SINGLE);
 1211|      0|    if(!data->cookies)
  ------------------
  |  Branch (1211:8): [True: 0, False: 0]
  ------------------
 1212|      0|      data->cookies = Curl_cookie_init();
 1213|      0|    if(!data->cookies)
  ------------------
  |  Branch (1213:8): [True: 0, False: 0]
  ------------------
 1214|      0|      result = CURLE_OUT_OF_MEMORY;
 1215|      0|    else {
 1216|      0|      data->state.cookie_engine = TRUE;
  ------------------
  |  | 1051|      0|#define TRUE true
  ------------------
 1217|      0|      while(list) {
  ------------------
  |  Branch (1217:13): [True: 0, False: 0]
  ------------------
 1218|      0|        result = cookie_load(data, list->data, data->cookies,
 1219|      0|                             (bool)data->set.cookiesession);
 1220|      0|        if(result)
  ------------------
  |  Branch (1220:12): [True: 0, False: 0]
  ------------------
 1221|      0|          break;
 1222|      0|        list = list->next;
 1223|      0|      }
 1224|      0|    }
 1225|      0|    Curl_share_unlock(data, CURL_LOCK_DATA_COOKIE);
 1226|      0|  }
 1227|      1|  return result;
 1228|      1|}
Curl_cookie_clearall:
 1408|  4.79k|{
 1409|  4.79k|  if(ci) {
  ------------------
  |  Branch (1409:6): [True: 4.78k, False: 1]
  ------------------
 1410|  4.78k|    unsigned int i;
 1411|   306k|    for(i = 0; i < COOKIE_HASH_SIZE; i++) {
  ------------------
  |  |   54|   306k|#define COOKIE_HASH_SIZE 63
  ------------------
  |  Branch (1411:16): [True: 301k, False: 4.78k]
  ------------------
 1412|   301k|      struct Curl_llist_node *n;
 1413|   303k|      for(n = Curl_llist_head(&ci->cookielist[i]); n;) {
  ------------------
  |  Branch (1413:52): [True: 1.46k, False: 301k]
  ------------------
 1414|  1.46k|        struct Cookie *c = Curl_node_elem(n);
 1415|  1.46k|        struct Curl_llist_node *e = Curl_node_next(n);
 1416|  1.46k|        Curl_node_remove(n);
 1417|       |        freecookie(c, TRUE);
  ------------------
  |  | 1051|  1.46k|#define TRUE true
  ------------------
 1418|  1.46k|        n = e;
 1419|  1.46k|      }
 1420|   301k|    }
 1421|  4.78k|    ci->numcookies = 0;
 1422|  4.78k|  }
 1423|  4.79k|}
Curl_cookie_clearsess:
 1431|      1|{
 1432|      1|  unsigned int i;
 1433|       |
 1434|      1|  if(!ci)
  ------------------
  |  Branch (1434:6): [True: 1, False: 0]
  ------------------
 1435|      1|    return;
 1436|       |
 1437|      0|  for(i = 0; i < COOKIE_HASH_SIZE; i++) {
  ------------------
  |  |   54|      0|#define COOKIE_HASH_SIZE 63
  ------------------
  |  Branch (1437:14): [True: 0, False: 0]
  ------------------
 1438|      0|    struct Curl_llist_node *n = Curl_llist_head(&ci->cookielist[i]);
 1439|      0|    struct Curl_llist_node *e = NULL;
 1440|       |
 1441|      0|    for(; n; n = e) {
  ------------------
  |  Branch (1441:11): [True: 0, False: 0]
  ------------------
 1442|      0|      struct Cookie *curr = Curl_node_elem(n);
 1443|      0|      e = Curl_node_next(n); /* in case the node is removed, get it early */
 1444|      0|      if(!curr->expires) {
  ------------------
  |  Branch (1444:10): [True: 0, False: 0]
  ------------------
 1445|      0|        Curl_node_remove(n);
 1446|       |        freecookie(curr, TRUE);
  ------------------
  |  | 1051|      0|#define TRUE true
  ------------------
 1447|      0|        ci->numcookies--;
 1448|      0|      }
 1449|      0|    }
 1450|      0|  }
 1451|      0|}
Curl_cookie_cleanup:
 1459|  4.78k|{
 1460|  4.78k|  if(ci) {
  ------------------
  |  Branch (1460:6): [True: 4.78k, False: 0]
  ------------------
 1461|  4.78k|    Curl_cookie_clearall(ci);
 1462|  4.78k|    curlx_free(ci); /* free the base struct as well */
  ------------------
  |  | 1488|  4.78k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
 1463|  4.78k|  }
 1464|  4.78k|}
Curl_flush_cookies:
 1652|  6.82k|{
 1653|  6.82k|  Curl_share_lock(data, CURL_LOCK_DATA_COOKIE, CURL_LOCK_ACCESS_SINGLE);
 1654|       |  /* only save the cookie file if a transfer was started (cookies->running is
 1655|       |     set), as otherwise the cookies were not completely initialized and there
 1656|       |     might be cookie files that were not loaded so saving the file is the
 1657|       |     wrong thing. */
 1658|  6.82k|  if(data->cookies) {
  ------------------
  |  Branch (1658:6): [True: 4.78k, False: 2.03k]
  ------------------
 1659|  4.78k|    if(data->set.str[STRING_COOKIEJAR] && data->cookies->running) {
  ------------------
  |  Branch (1659:8): [True: 4.73k, False: 54]
  |  Branch (1659:43): [True: 0, False: 4.73k]
  ------------------
 1660|       |      /* if we have a destination file for all the cookies to get dumped to */
 1661|      0|      CURLcode result = cookie_output(data, data->cookies,
 1662|      0|                                      data->set.str[STRING_COOKIEJAR]);
 1663|      0|      if(result)
  ------------------
  |  Branch (1663:10): [True: 0, False: 0]
  ------------------
 1664|      0|        infof(data, "WARNING: failed to save cookies in %s: %s",
  ------------------
  |  |  143|      0|  do {                               \
  |  |  144|      0|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  319|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (319:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (319:14): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  320|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (320:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  321|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (321:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|      0|      Curl_infof(data, __VA_ARGS__); \
  |  |  146|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1665|      0|              data->set.str[STRING_COOKIEJAR], curl_easy_strerror(result));
 1666|      0|    }
 1667|       |
 1668|  4.78k|    if(cleanup && (!data->share || (data->cookies != data->share->cookies))) {
  ------------------
  |  Branch (1668:8): [True: 4.78k, False: 0]
  |  Branch (1668:20): [True: 4.78k, False: 0]
  |  Branch (1668:36): [True: 0, False: 0]
  ------------------
 1669|  4.78k|      Curl_cookie_cleanup(data->cookies);
 1670|       |      data->cookies = NULL;
 1671|  4.78k|    }
 1672|  4.78k|  }
 1673|  6.82k|  Curl_share_unlock(data, CURL_LOCK_DATA_COOKIE);
 1674|  6.82k|}
cookie.c:parse_cookie_header:
  600|  1.25k|{
  601|       |  /* This line was read off an HTTP-header */
  602|  1.25k|  time_t now = 0;
  603|  1.25k|  size_t linelength = strlen(ptr);
  604|  1.25k|  CURLcode result = CURLE_OK;
  605|  1.25k|  struct Curl_str cookie[COOKIE_PIECES];
  606|  1.25k|  *okay = FALSE;
  ------------------
  |  | 1054|  1.25k|#define FALSE false
  ------------------
  607|  1.25k|  if(linelength > MAX_COOKIE_LINE)
  ------------------
  |  |   81|  1.25k|#define MAX_COOKIE_LINE 5000
  ------------------
  |  Branch (607:6): [True: 1, False: 1.25k]
  ------------------
  608|       |    /* discard overly long lines at once */
  609|      1|    return CURLE_OK;
  610|       |
  611|       |  /* memset instead of initializer because gcc 4.8.1 is silly */
  612|  1.25k|  memset(cookie, 0, sizeof(cookie));
  613|  21.5k|  do {
  614|  21.5k|    struct Curl_str name;
  615|       |
  616|       |    /* we have a <name>=<value> pair or a stand-alone word here */
  617|  21.5k|    if(!curlx_str_cspn(&ptr, &name, ";\t\r\n=")) {
  ------------------
  |  Branch (617:8): [True: 20.2k, False: 1.30k]
  ------------------
  618|  20.2k|      struct Curl_str val;
  619|  20.2k|      bool sep = FALSE;
  ------------------
  |  | 1054|  20.2k|#define FALSE false
  ------------------
  620|  20.2k|      curlx_str_trimblanks(&name);
  621|       |
  622|  20.2k|      if(invalid_octets(curlx_str(&name), curlx_strlen(&name))) {
  ------------------
  |  |   49|  20.2k|#define curlx_str(x)    ((x)->str)
  ------------------
                    if(invalid_octets(curlx_str(&name), curlx_strlen(&name))) {
  ------------------
  |  |   50|  20.2k|#define curlx_strlen(x) ((x)->len)
  ------------------
  |  Branch (622:10): [True: 26, False: 20.1k]
  ------------------
  623|     26|        infof(data, "invalid octets in name, cookie dropped");
  ------------------
  |  |  143|     26|  do {                               \
  |  |  144|     26|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  319|     26|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (319:4): [True: 26, False: 0]
  |  |  |  |  |  Branch (319:14): [True: 0, False: 26]
  |  |  |  |  ------------------
  |  |  |  |  320|     26|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (320:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  321|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (321:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|     26|      Curl_infof(data, __VA_ARGS__); \
  |  |  146|     26|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 26]
  |  |  ------------------
  ------------------
  624|     26|        return CURLE_OK;
  625|     26|      }
  626|       |
  627|  20.1k|      if(!curlx_str_single(&ptr, '=')) {
  ------------------
  |  Branch (627:10): [True: 16.5k, False: 3.64k]
  ------------------
  628|  16.5k|        sep = TRUE; /* a '=' was used */
  ------------------
  |  | 1051|  16.5k|#define TRUE true
  ------------------
  629|  16.5k|        if(!curlx_str_cspn(&ptr, &val, ";\r\n"))
  ------------------
  |  Branch (629:12): [True: 14.3k, False: 2.22k]
  ------------------
  630|  14.3k|          curlx_str_trimblanks(&val);
  631|       |
  632|  16.5k|        if(invalid_octets(curlx_str(&val), curlx_strlen(&val))) {
  ------------------
  |  |   49|  16.5k|#define curlx_str(x)    ((x)->str)
  ------------------
                      if(invalid_octets(curlx_str(&val), curlx_strlen(&val))) {
  ------------------
  |  |   50|  16.5k|#define curlx_strlen(x) ((x)->len)
  ------------------
  |  Branch (632:12): [True: 22, False: 16.5k]
  ------------------
  633|     22|          infof(data, "invalid octets in value, cookie dropped");
  ------------------
  |  |  143|     22|  do {                               \
  |  |  144|     22|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  319|     22|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (319:4): [True: 22, False: 0]
  |  |  |  |  |  Branch (319:14): [True: 0, False: 22]
  |  |  |  |  ------------------
  |  |  |  |  320|     22|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (320:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  321|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (321:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|     22|      Curl_infof(data, __VA_ARGS__); \
  |  |  146|     22|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 22]
  |  |  ------------------
  ------------------
  634|     22|          return CURLE_OK;
  635|     22|        }
  636|  16.5k|      }
  637|  3.64k|      else
  638|  3.64k|        curlx_str_init(&val);
  639|       |
  640|  20.1k|      if(!curlx_strlen(&cookie[COOKIE_NAME])) {
  ------------------
  |  |   50|  20.1k|#define curlx_strlen(x) ((x)->len)
  ------------------
  |  Branch (640:10): [True: 1.23k, False: 18.9k]
  ------------------
  641|  1.23k|        if(!parse_first_pair(data, co, cookie, &name, &val, sep))
  ------------------
  |  Branch (641:12): [True: 27, False: 1.20k]
  ------------------
  642|     27|          return CURLE_OK;
  643|  1.23k|      }
  644|  18.9k|      else if(!sep) {
  ------------------
  |  Branch (644:15): [True: 3.62k, False: 15.3k]
  ------------------
  645|  3.62k|        if(!parse_flag(data, co, ci, &name, secure_origin))
  ------------------
  |  Branch (645:12): [True: 0, False: 3.62k]
  ------------------
  646|      0|          return CURLE_OK;
  647|  3.62k|      }
  648|  15.3k|      else if(curlx_str_casecompare(&name, "path"))
  ------------------
  |  Branch (648:15): [True: 369, False: 14.9k]
  ------------------
  649|    369|        cookie[COOKIE_PATH] = val;
  ------------------
  |  |  369|    369|#define COOKIE_PATH   3
  ------------------
  650|  14.9k|      else if(curlx_str_casecompare(&name, "domain") && curlx_strlen(&val)) {
  ------------------
  |  |   50|      0|#define curlx_strlen(x) ((x)->len)
  |  |  ------------------
  |  |  |  Branch (50:25): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (650:15): [True: 0, False: 14.9k]
  ------------------
  651|      0|        if(!parse_domain(data, co, &cookie[COOKIE_DOMAIN], &val, &domain))
  ------------------
  |  |  368|      0|#define COOKIE_DOMAIN 2
  ------------------
  |  Branch (651:12): [True: 0, False: 0]
  ------------------
  652|      0|          return CURLE_OK;
  653|      0|      }
  654|  14.9k|      else if(curlx_str_casecompare(&name, "max-age") && curlx_strlen(&val))
  ------------------
  |  |   50|      0|#define curlx_strlen(x) ((x)->len)
  |  |  ------------------
  |  |  |  Branch (50:25): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (654:15): [True: 0, False: 14.9k]
  ------------------
  655|      0|        parse_maxage(co, &val, &now);
  656|  14.9k|      else if(curlx_str_casecompare(&name, "expires") && curlx_strlen(&val))
  ------------------
  |  |   50|  11.8k|#define curlx_strlen(x) ((x)->len)
  |  |  ------------------
  |  |  |  Branch (50:25): [True: 11.5k, False: 264]
  |  |  ------------------
  ------------------
  |  Branch (656:15): [True: 11.8k, False: 3.11k]
  ------------------
  657|  11.5k|        parse_expires(co, &val, &now);
  658|  20.1k|    }
  659|  21.5k|  } while(!curlx_str_single(&ptr, ';'));
  ------------------
  |  Branch (659:11): [True: 20.2k, False: 1.17k]
  ------------------
  660|       |
  661|  1.17k|  if(curlx_strlen(&cookie[COOKIE_NAME])) {
  ------------------
  |  |   50|  1.17k|#define curlx_strlen(x) ((x)->len)
  |  |  ------------------
  |  |  |  Branch (50:25): [True: 1.16k, False: 7]
  |  |  ------------------
  ------------------
  662|       |    /* the header was fine, now store the data */
  663|  1.16k|    result = storecookie(co, &cookie[0], path, domain);
  664|  1.16k|    if(!result)
  ------------------
  |  Branch (664:8): [True: 1.16k, False: 0]
  ------------------
  665|  1.16k|      *okay = TRUE;
  ------------------
  |  | 1051|  1.16k|#define TRUE true
  ------------------
  666|  1.16k|  }
  667|  1.17k|  return result;
  668|  1.25k|}
cookie.c:invalid_octets:
  348|  37.4k|{
  349|  37.4k|  const unsigned char *p = (const unsigned char *)ptr;
  350|       |  /* Reject all bytes \x01 - \x1f + \x7f */
  351|   398k|  while(len && *p) {
  ------------------
  |  Branch (351:9): [True: 361k, False: 37.3k]
  |  Branch (351:16): [True: 361k, False: 0]
  ------------------
  352|   361k|    if((*p < 0x20) || (*p == 0x7f))
  ------------------
  |  Branch (352:8): [True: 69, False: 361k]
  |  Branch (352:23): [True: 3, False: 361k]
  ------------------
  353|     72|      return TRUE;
  ------------------
  |  | 1051|     72|#define TRUE true
  ------------------
  354|   361k|    p++;
  355|   361k|    len--;
  356|   361k|  }
  357|  37.3k|  return FALSE;
  ------------------
  |  | 1054|  37.3k|#define FALSE false
  ------------------
  358|  37.4k|}
cookie.c:parse_first_pair:
  426|  1.23k|{
  427|       |  /* The first name/value pair is the actual cookie name */
  428|  1.23k|  if(!sep || !curlx_strlen(name)) {
  ------------------
  |  |   50|  1.21k|#define curlx_strlen(x) ((x)->len)
  ------------------
  |  Branch (428:6): [True: 20, False: 1.21k]
  |  Branch (428:14): [True: 6, False: 1.20k]
  ------------------
  429|     26|    infof(data, "invalid cookie, dropped");
  ------------------
  |  |  143|     26|  do {                               \
  |  |  144|     26|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  319|     26|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (319:4): [True: 26, False: 0]
  |  |  |  |  |  Branch (319:14): [True: 0, False: 26]
  |  |  |  |  ------------------
  |  |  |  |  320|     26|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (320:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  321|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (321:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|     26|      Curl_infof(data, __VA_ARGS__); \
  |  |  146|     26|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 26]
  |  |  ------------------
  ------------------
  430|     26|    return FALSE;
  ------------------
  |  | 1054|     26|#define FALSE false
  ------------------
  431|     26|  }
  432|       |
  433|       |  /*
  434|       |   * Check for too long individual name or contents. Chrome and Firefox
  435|       |   * support 4095 or 4096 bytes combo
  436|       |   */
  437|  1.20k|  if((curlx_strlen(name) + curlx_strlen(val)) > MAX_NAME) {
  ------------------
  |  |   50|  1.20k|#define curlx_strlen(x) ((x)->len)
  ------------------
                if((curlx_strlen(name) + curlx_strlen(val)) > MAX_NAME) {
  ------------------
  |  |   50|  1.20k|#define curlx_strlen(x) ((x)->len)
  ------------------
                if((curlx_strlen(name) + curlx_strlen(val)) > MAX_NAME) {
  ------------------
  |  |   85|  1.20k|#define MAX_NAME 4096
  ------------------
  |  Branch (437:6): [True: 1, False: 1.20k]
  ------------------
  438|      1|    infof(data, "oversized cookie dropped, name/val %zu + %zu bytes",
  ------------------
  |  |  143|      1|  do {                               \
  |  |  144|      1|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  319|      1|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (319:4): [True: 1, False: 0]
  |  |  |  |  |  Branch (319:14): [True: 0, False: 1]
  |  |  |  |  ------------------
  |  |  |  |  320|      1|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (320:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  321|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (321:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|      1|      Curl_infof(data, __VA_ARGS__); \
  |  |  146|      1|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 1]
  |  |  ------------------
  ------------------
  439|      1|          curlx_strlen(name), curlx_strlen(val));
  440|      1|    return FALSE;
  ------------------
  |  | 1054|      1|#define FALSE false
  ------------------
  441|      1|  }
  442|       |
  443|       |  /* Check if we have a reserved prefix set. */
  444|  1.20k|  if(!strncmp("__Secure-", curlx_str(name), 9))
  ------------------
  |  |   49|  1.20k|#define curlx_str(x)    ((x)->str)
  ------------------
  |  Branch (444:6): [True: 10, False: 1.19k]
  ------------------
  445|     10|    co->prefix_secure = TRUE;
  ------------------
  |  | 1051|     10|#define TRUE true
  ------------------
  446|  1.19k|  else if(!strncmp("__Host-", curlx_str(name), 7))
  ------------------
  |  |   49|  1.19k|#define curlx_str(x)    ((x)->str)
  ------------------
  |  Branch (446:11): [True: 10, False: 1.18k]
  ------------------
  447|     10|    co->prefix_host = TRUE;
  ------------------
  |  | 1051|     10|#define TRUE true
  ------------------
  448|       |
  449|  1.20k|  cookie[COOKIE_NAME] = *name;
  ------------------
  |  |  366|  1.20k|#define COOKIE_NAME   0
  ------------------
  450|  1.20k|  cookie[COOKIE_VALUE] = *val;
  ------------------
  |  |  367|  1.20k|#define COOKIE_VALUE  1
  ------------------
  451|       |  return TRUE;
  ------------------
  |  | 1051|  1.20k|#define TRUE true
  ------------------
  452|  1.20k|}
cookie.c:parse_flag:
  457|  3.62k|{
  458|       |  /*
  459|       |   * secure cookies are only allowed to be set when the connection is
  460|       |   * using a secure protocol, or when the cookie is being set by
  461|       |   * reading from file
  462|       |   */
  463|  3.62k|  if(curlx_str_casecompare(name, "secure")) {
  ------------------
  |  Branch (463:6): [True: 210, False: 3.41k]
  ------------------
  464|    210|    if(secure || !ci->running)
  ------------------
  |  Branch (464:8): [True: 210, False: 0]
  |  Branch (464:18): [True: 0, False: 0]
  ------------------
  465|    210|      co->secure = TRUE;
  ------------------
  |  | 1051|    210|#define TRUE true
  ------------------
  466|      0|    else {
  467|      0|      infof(data, "skipped cookie because not 'secure'");
  ------------------
  |  |  143|      0|  do {                               \
  |  |  144|      0|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  319|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (319:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (319:14): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  320|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (320:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  321|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (321:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|      0|      Curl_infof(data, __VA_ARGS__); \
  |  |  146|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  468|      0|      return FALSE;
  ------------------
  |  | 1054|      0|#define FALSE false
  ------------------
  469|      0|    }
  470|    210|  }
  471|  3.41k|  else if(curlx_str_casecompare(name, "httponly"))
  ------------------
  |  Branch (471:11): [True: 66, False: 3.34k]
  ------------------
  472|     66|    co->httponly = TRUE;
  ------------------
  |  | 1051|     66|#define TRUE true
  ------------------
  473|       |
  474|  3.62k|  return TRUE;
  ------------------
  |  | 1051|  3.62k|#define TRUE true
  ------------------
  475|  3.62k|}
cookie.c:cap_expires:
   54|  11.2k|{
   55|  11.2k|  if(co->expires && (TIME_T_MAX - COOKIES_MAXAGE - 30) > now) {
  ------------------
  |  |  610|    224|#  define TIME_T_MAX 0x7FFFFFFFFFFFFFFF
  ------------------
                if(co->expires && (TIME_T_MAX - COOKIES_MAXAGE - 30) > now) {
  ------------------
  |  |   45|    224|#define COOKIES_MAXAGE (400 * 24 * 3600)
  ------------------
  |  Branch (55:6): [True: 224, False: 11.0k]
  |  Branch (55:21): [True: 224, False: 0]
  ------------------
   56|    224|    timediff_t cap = now + COOKIES_MAXAGE;
  ------------------
  |  |   45|    224|#define COOKIES_MAXAGE (400 * 24 * 3600)
  ------------------
   57|    224|    if(co->expires > cap) {
  ------------------
  |  Branch (57:8): [True: 78, False: 146]
  ------------------
   58|     78|      cap += 30;
   59|     78|      co->expires = (cap / 60) * 60;
   60|     78|    }
   61|    224|  }
   62|  11.2k|}
cookie.c:parse_expires:
  564|  11.5k|{
  565|       |  /*
  566|       |   * Let max-age have priority.
  567|       |   *
  568|       |   * If the date cannot get parsed for whatever reason, the cookie
  569|       |   * will be treated as a session cookie
  570|       |   */
  571|  11.5k|  if(!co->expires && (curlx_strlen(val) < MAX_DATE_LENGTH)) {
  ------------------
  |  |   50|  11.3k|#define curlx_strlen(x) ((x)->len)
  ------------------
                if(!co->expires && (curlx_strlen(val) < MAX_DATE_LENGTH)) {
  ------------------
  |  |  364|  11.3k|#define MAX_DATE_LENGTH 80
  ------------------
  |  Branch (571:6): [True: 11.3k, False: 244]
  |  Branch (571:22): [True: 11.2k, False: 78]
  ------------------
  572|  11.2k|    char dbuf[MAX_DATE_LENGTH + 1];
  573|  11.2k|    time_t date = 0;
  574|  11.2k|    memcpy(dbuf, curlx_str(val), curlx_strlen(val));
  ------------------
  |  |   49|  11.2k|#define curlx_str(x)    ((x)->str)
  ------------------
                  memcpy(dbuf, curlx_str(val), curlx_strlen(val));
  ------------------
  |  |   50|  11.2k|#define curlx_strlen(x) ((x)->len)
  ------------------
  575|  11.2k|    dbuf[curlx_strlen(val)] = 0;
  ------------------
  |  |   50|  11.2k|#define curlx_strlen(x) ((x)->len)
  ------------------
  576|  11.2k|    if(!Curl_getdate_capped(dbuf, &date)) {
  ------------------
  |  Branch (576:8): [True: 224, False: 11.0k]
  ------------------
  577|    224|      if(!date)
  ------------------
  |  Branch (577:10): [True: 1, False: 223]
  ------------------
  578|      1|        date++;
  579|    224|      co->expires = (curl_off_t)date;
  580|    224|    }
  581|  11.0k|    else
  582|  11.0k|      co->expires = 0;
  583|  11.2k|    if(!*nowp)
  ------------------
  |  Branch (583:8): [True: 930, False: 10.3k]
  ------------------
  584|    930|      *nowp = time(NULL);
  585|  11.2k|    cap_expires(*nowp, co);
  586|  11.2k|  }
  587|  11.5k|}
cookie.c:storecookie:
  375|  1.16k|{
  376|  1.16k|  CURLcode result;
  377|  1.16k|  result = strstore(&co->name, curlx_str(&cp[COOKIE_NAME]),
  ------------------
  |  |   49|  1.16k|#define curlx_str(x)    ((x)->str)
  ------------------
  378|  1.16k|                    curlx_strlen(&cp[COOKIE_NAME]));
  ------------------
  |  |   50|  1.16k|#define curlx_strlen(x) ((x)->len)
  ------------------
  379|  1.16k|  if(!result)
  ------------------
  |  Branch (379:6): [True: 1.16k, False: 0]
  ------------------
  380|  1.16k|    result = strstore(&co->value, curlx_str(&cp[COOKIE_VALUE]),
  ------------------
  |  |   49|  1.16k|#define curlx_str(x)    ((x)->str)
  ------------------
  381|  1.16k|                      curlx_strlen(&cp[COOKIE_VALUE]));
  ------------------
  |  |   50|  1.16k|#define curlx_strlen(x) ((x)->len)
  ------------------
  382|  1.16k|  if(!result) {
  ------------------
  |  Branch (382:6): [True: 1.16k, False: 0]
  ------------------
  383|  1.16k|    size_t plen = 0;
  384|  1.16k|    if(curlx_strlen(&cp[COOKIE_PATH])) {
  ------------------
  |  |   50|  1.16k|#define curlx_strlen(x) ((x)->len)
  |  |  ------------------
  |  |  |  Branch (50:25): [True: 56, False: 1.11k]
  |  |  ------------------
  ------------------
  385|     56|      path = curlx_str(&cp[COOKIE_PATH]);
  ------------------
  |  |   49|     56|#define curlx_str(x)    ((x)->str)
  ------------------
  386|     56|      plen = curlx_strlen(&cp[COOKIE_PATH]);
  ------------------
  |  |   50|     56|#define curlx_strlen(x) ((x)->len)
  ------------------
  387|     56|    }
  388|  1.11k|    else if(path) {
  ------------------
  |  Branch (388:13): [True: 0, False: 1.11k]
  ------------------
  389|       |      /* No path was given in the header line, set the default */
  390|      0|      const char *endslash = strrchr(path, '/');
  391|      0|      if(endslash)
  ------------------
  |  Branch (391:10): [True: 0, False: 0]
  ------------------
  392|      0|        plen = endslash - path + 1; /* include end slash */
  393|      0|      else
  394|      0|        plen = strlen(path);
  395|      0|    }
  396|       |
  397|  1.16k|    if(path) {
  ------------------
  |  Branch (397:8): [True: 56, False: 1.11k]
  ------------------
  398|     56|      co->path = sanitize_cookie_path(path, plen);
  399|     56|      if(!co->path)
  ------------------
  |  Branch (399:10): [True: 0, False: 56]
  ------------------
  400|      0|        result = CURLE_OUT_OF_MEMORY;
  401|     56|    }
  402|  1.16k|  }
  403|  1.16k|  if(!result) {
  ------------------
  |  Branch (403:6): [True: 1.16k, False: 0]
  ------------------
  404|  1.16k|    if(curlx_strlen(&cp[COOKIE_DOMAIN]))
  ------------------
  |  |   50|  1.16k|#define curlx_strlen(x) ((x)->len)
  |  |  ------------------
  |  |  |  Branch (50:25): [True: 0, False: 1.16k]
  |  |  ------------------
  ------------------
  405|      0|      result = strstore(&co->domain, curlx_str(&cp[COOKIE_DOMAIN]),
  ------------------
  |  |   49|      0|#define curlx_str(x)    ((x)->str)
  ------------------
  406|      0|                        curlx_strlen(&cp[COOKIE_DOMAIN]));
  ------------------
  |  |   50|      0|#define curlx_strlen(x) ((x)->len)
  ------------------
  407|  1.16k|    else if(domain) {
  ------------------
  |  Branch (407:13): [True: 0, False: 1.16k]
  ------------------
  408|       |      /* no domain was given in the header line, set the default */
  409|      0|      co->domain = curlx_strdup(domain);
  ------------------
  |  | 1482|      0|#define curlx_strdup(ptr)          curl_dbg_strdup(ptr, __LINE__, __FILE__)
  ------------------
  410|      0|      if(!co->domain)
  ------------------
  |  Branch (410:10): [True: 0, False: 0]
  ------------------
  411|      0|        result = CURLE_OUT_OF_MEMORY;
  412|      0|    }
  413|  1.16k|  }
  414|  1.16k|  return result;
  415|  1.16k|}
cookie.c:strstore:
  257|  2.33k|{
  258|  2.33k|  DEBUGASSERT(str);
  ------------------
  |  | 1077|  2.33k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (258:3): [True: 0, False: 2.33k]
  |  Branch (258:3): [True: 2.33k, False: 0]
  ------------------
  259|  2.33k|  *str = curlx_memdup0(newstr, len);
  260|  2.33k|  if(!*str)
  ------------------
  |  Branch (260:6): [True: 0, False: 2.33k]
  ------------------
  261|      0|    return CURLE_OUT_OF_MEMORY;
  262|  2.33k|  return CURLE_OK;
  263|  2.33k|}
cookie.c:sanitize_cookie_path:
  228|    163|{
  229|       |  /* some sites send path attribute within '"'. */
  230|    163|  if(len && (cookie_path[0] == '\"')) {
  ------------------
  |  Branch (230:6): [True: 163, False: 0]
  |  Branch (230:13): [True: 37, False: 126]
  ------------------
  231|     37|    cookie_path++;
  232|     37|    len--;
  233|       |
  234|     37|    if(len && (cookie_path[len - 1] == '\"'))
  ------------------
  |  Branch (234:8): [True: 31, False: 6]
  |  Branch (234:15): [True: 2, False: 29]
  ------------------
  235|      2|      len--;
  236|     37|  }
  237|       |
  238|       |  /* RFC6265 5.2.4 The Path Attribute */
  239|    163|  if(!len || (cookie_path[0] != '/'))
  ------------------
  |  Branch (239:6): [True: 8, False: 155]
  |  Branch (239:14): [True: 112, False: 43]
  ------------------
  240|       |    /* Let cookie-path be the default-path. */
  241|    120|    return curlx_strdup("/");
  ------------------
  |  | 1482|    120|#define curlx_strdup(ptr)          curl_dbg_strdup(ptr, __LINE__, __FILE__)
  ------------------
  242|       |
  243|       |  /* remove trailing slash when path is non-empty */
  244|       |  /* convert /hoge/ to /hoge */
  245|     43|  if(len > 1 && cookie_path[len - 1] == '/')
  ------------------
  |  Branch (245:6): [True: 39, False: 4]
  |  Branch (245:17): [True: 2, False: 37]
  ------------------
  246|      2|    len--;
  247|       |
  248|     43|  return curlx_memdup0(cookie_path, len);
  249|    163|}
cookie.c:parse_netscape:
  675|    689|{
  676|       |  /*
  677|       |   * This line is NOT an HTTP header style line, we do offer support for
  678|       |   * reading the odd netscape cookies-file format here
  679|       |   */
  680|    689|  const char *ptr, *next;
  681|    689|  int fields;
  682|    689|  size_t len;
  683|    689|  *okay = FALSE;
  ------------------
  |  | 1054|    689|#define FALSE false
  ------------------
  684|       |
  685|       |  /*
  686|       |   * In 2008, Internet Explorer introduced HTTP-only cookies to prevent XSS
  687|       |   * attacks. Cookies marked httpOnly are not accessible to JavaScript. In
  688|       |   * Firefox's cookie files, they are prefixed #HttpOnly_ and the rest
  689|       |   * remains as usual, so we skip 10 characters of the line.
  690|       |   */
  691|    689|  if(!strncmp(lineptr, "#HttpOnly_", 10)) {
  ------------------
  |  Branch (691:6): [True: 1, False: 688]
  ------------------
  692|      1|    lineptr += 10;
  693|      1|    co->httponly = TRUE;
  ------------------
  |  | 1051|      1|#define TRUE true
  ------------------
  694|      1|  }
  695|       |
  696|    689|  if(lineptr[0] == '#')
  ------------------
  |  Branch (696:6): [True: 81, False: 608]
  ------------------
  697|       |    /* do not even try the comments */
  698|     81|    return CURLE_OK;
  699|       |
  700|       |  /*
  701|       |   * Now loop through the fields and init the struct we already have
  702|       |   * allocated
  703|       |   */
  704|    608|  fields = 0;
  705|  4.78k|  for(next = lineptr; next; fields++) {
  ------------------
  |  Branch (705:23): [True: 4.25k, False: 537]
  ------------------
  706|  4.25k|    ptr = next;
  707|  4.25k|    len = strcspn(ptr, "\t\r\n");
  708|  4.25k|    next = (ptr[len] == '\t' ? &ptr[len + 1] : NULL);
  ------------------
  |  Branch (708:13): [True: 3.65k, False: 599]
  ------------------
  709|  4.25k|    switch(fields) {
  ------------------
  |  Branch (709:12): [True: 2.62k, False: 1.63k]
  ------------------
  710|    608|    case 0:
  ------------------
  |  Branch (710:5): [True: 608, False: 3.64k]
  ------------------
  711|    608|      if(ptr[0] == '.') { /* skip preceding dots */
  ------------------
  |  Branch (711:10): [True: 7, False: 601]
  ------------------
  712|      7|        ptr++;
  713|      7|        len--;
  714|      7|      }
  715|    608|      co->domain = curlx_memdup0(ptr, len);
  716|    608|      if(!co->domain)
  ------------------
  |  Branch (716:10): [True: 0, False: 608]
  ------------------
  717|      0|        return CURLE_OUT_OF_MEMORY;
  718|    608|      break;
  719|    608|    case 1:
  ------------------
  |  Branch (719:5): [True: 562, False: 3.69k]
  ------------------
  720|       |      /*
  721|       |       * flag: A TRUE/FALSE value indicating if all machines within a given
  722|       |       * domain can access the variable. Set TRUE when the cookie says
  723|       |       * .example.com and to false when the domain is complete www.example.com
  724|       |       */
  725|    562|      co->tailmatch = !!curl_strnequal(ptr, "TRUE", len);
  726|    562|      break;
  727|    558|    case 2:
  ------------------
  |  Branch (727:5): [True: 558, False: 3.69k]
  ------------------
  728|       |      /* The file format allows the path field to remain not filled in */
  729|    558|      if(strncmp("TRUE", ptr, len) && strncmp("FALSE", ptr, len)) {
  ------------------
  |  Branch (729:10): [True: 110, False: 448]
  |  Branch (729:39): [True: 107, False: 3]
  ------------------
  730|       |        /* only if the path does not look like a boolean option! */
  731|    107|        co->path = sanitize_cookie_path(ptr, len);
  732|    107|        if(!co->path)
  ------------------
  |  Branch (732:12): [True: 0, False: 107]
  ------------------
  733|      0|          return CURLE_OUT_OF_MEMORY;
  734|    107|        break;
  735|    107|      }
  736|    451|      else {
  737|       |        /* this does not look like a path, make one up! */
  738|    451|        co->path = curlx_strdup("/");
  ------------------
  |  | 1482|    451|#define curlx_strdup(ptr)          curl_dbg_strdup(ptr, __LINE__, __FILE__)
  ------------------
  739|    451|        if(!co->path)
  ------------------
  |  Branch (739:12): [True: 0, False: 451]
  ------------------
  740|      0|          return CURLE_OUT_OF_MEMORY;
  741|    451|      }
  742|    451|      fields++; /* add a field and fall down to secure */
  743|    451|      FALLTHROUGH();
  ------------------
  |  |  817|    451|#  define FALLTHROUGH()  __attribute__((fallthrough))
  ------------------
  744|    470|    case 3:
  ------------------
  |  Branch (744:5): [True: 19, False: 4.23k]
  ------------------
  745|    470|      co->secure = FALSE;
  ------------------
  |  | 1054|    470|#define FALSE false
  ------------------
  746|    470|      if(curl_strnequal(ptr, "TRUE", len)) {
  ------------------
  |  Branch (746:10): [True: 459, False: 11]
  ------------------
  747|    459|        if(secure_origin || ci->running)
  ------------------
  |  Branch (747:12): [True: 459, False: 0]
  |  Branch (747:29): [True: 0, False: 0]
  ------------------
  748|    459|          co->secure = TRUE;
  ------------------
  |  | 1051|    459|#define TRUE true
  ------------------
  749|      0|        else
  750|      0|          return CURLE_OK;
  751|    459|      }
  752|    470|      break;
  753|    470|    case 4:
  ------------------
  |  Branch (753:5): [True: 463, False: 3.78k]
  ------------------
  754|    463|      if(curlx_str_number(&ptr, &co->expires, CURL_OFF_T_MAX))
  ------------------
  |  |  590|    463|#  define CURL_OFF_T_MAX 0x7FFFFFFFFFFFFFFF
  ------------------
  |  Branch (754:10): [True: 71, False: 392]
  ------------------
  755|     71|        return CURLE_OK;
  756|    392|      break;
  757|    392|    case 5:
  ------------------
  |  Branch (757:5): [True: 360, False: 3.89k]
  ------------------
  758|    360|      co->name = curlx_memdup0(ptr, len);
  759|    360|      if(!co->name)
  ------------------
  |  Branch (759:10): [True: 0, False: 360]
  ------------------
  760|      0|        return CURLE_OUT_OF_MEMORY;
  761|    360|      else {
  762|       |        /* For Netscape file format cookies we check prefix on the name.
  763|       |           These prefixes are matched case sensitively, same as on the
  764|       |           header path and as the 6265bis document specifies. */
  765|    360|        if(!strncmp("__Secure-", co->name, 9))
  ------------------
  |  Branch (765:12): [True: 1, False: 359]
  ------------------
  766|      1|          co->prefix_secure = TRUE;
  ------------------
  |  | 1051|      1|#define TRUE true
  ------------------
  767|    359|        else if(!strncmp("__Host-", co->name, 7))
  ------------------
  |  Branch (767:17): [True: 4, False: 355]
  ------------------
  768|      4|          co->prefix_host = TRUE;
  ------------------
  |  | 1051|      4|#define TRUE true
  ------------------
  769|    360|      }
  770|    360|      break;
  771|    360|    case 6:
  ------------------
  |  Branch (771:5): [True: 52, False: 4.20k]
  ------------------
  772|     52|      co->value = curlx_memdup0(ptr, len);
  773|     52|      if(!co->value)
  ------------------
  |  Branch (773:10): [True: 0, False: 52]
  ------------------
  774|      0|        return CURLE_OUT_OF_MEMORY;
  775|     52|      break;
  776|  4.25k|    }
  777|  4.25k|  }
  778|    537|  if(fields == 6) {
  ------------------
  |  Branch (778:6): [True: 308, False: 229]
  ------------------
  779|       |    /* we got a cookie with blank contents, fix it */
  780|    308|    co->value = curlx_strdup("");
  ------------------
  |  | 1482|    308|#define curlx_strdup(ptr)          curl_dbg_strdup(ptr, __LINE__, __FILE__)
  ------------------
  781|    308|    if(!co->value)
  ------------------
  |  Branch (781:8): [True: 0, False: 308]
  ------------------
  782|      0|      return CURLE_OUT_OF_MEMORY;
  783|    308|    else
  784|    308|      fields++;
  785|    308|  }
  786|       |
  787|    537|  if(fields != 7)
  ------------------
  |  Branch (787:6): [True: 194, False: 343]
  ------------------
  788|       |    /* we did not find the sufficient number of fields */
  789|    194|    return CURLE_OK;
  790|       |
  791|       |  /* Reject control octets in the name or value, matching the filtering done
  792|       |     for cookies set over HTTP. A cookie loaded from a file is later sent in
  793|       |     request headers, so the same bytes that make a server reject a request
  794|       |     must not slip in through the file. */
  795|    343|  if(invalid_octets(co->name, strlen(co->name)) ||
  ------------------
  |  Branch (795:6): [True: 16, False: 327]
  ------------------
  796|    327|     invalid_octets(co->value, strlen(co->value)))
  ------------------
  |  Branch (796:6): [True: 8, False: 319]
  ------------------
  797|     24|    return CURLE_OK;
  798|       |
  799|    319|  *okay = TRUE;
  ------------------
  |  | 1051|    319|#define TRUE true
  ------------------
  800|    319|  return CURLE_OK;
  801|    343|}
cookie.c:remove_expired:
  275|  1.46k|{
  276|  1.46k|  struct Cookie *co;
  277|  1.46k|  curl_off_t now = (curl_off_t)time(NULL);
  278|  1.46k|  unsigned int i;
  279|       |
  280|       |  /*
  281|       |   * If the earliest expiration timestamp in the jar is in the future we can
  282|       |   * skip scanning the whole jar and instead exit early as there will not be
  283|       |   * any cookies to evict. If we need to evict, reset the next_expiration
  284|       |   * counter in order to track the next one. In case the recorded first
  285|       |   * expiration is the max offset, then perform the safe fallback of checking
  286|       |   * all cookies.
  287|       |   */
  288|  1.46k|  if(now < ci->next_expiration &&
  ------------------
  |  Branch (288:6): [True: 1.46k, False: 0]
  ------------------
  289|  1.46k|     ci->next_expiration != CURL_OFF_T_MAX)
  ------------------
  |  |  590|  1.46k|#  define CURL_OFF_T_MAX 0x7FFFFFFFFFFFFFFF
  ------------------
  |  Branch (289:6): [True: 0, False: 1.46k]
  ------------------
  290|      0|    return;
  291|  1.46k|  else
  292|  1.46k|    ci->next_expiration = CURL_OFF_T_MAX;
  ------------------
  |  |  590|  1.46k|#  define CURL_OFF_T_MAX 0x7FFFFFFFFFFFFFFF
  ------------------
  293|       |
  294|  93.8k|  for(i = 0; i < COOKIE_HASH_SIZE; i++) {
  ------------------
  |  |   54|  93.8k|#define COOKIE_HASH_SIZE 63
  ------------------
  |  Branch (294:14): [True: 92.4k, False: 1.46k]
  ------------------
  295|  92.4k|    struct Curl_llist_node *n;
  296|  92.4k|    struct Curl_llist_node *e = NULL;
  297|       |
  298|  92.4k|    for(n = Curl_llist_head(&ci->cookielist[i]); n; n = e) {
  ------------------
  |  Branch (298:50): [True: 0, False: 92.4k]
  ------------------
  299|      0|      co = Curl_node_elem(n);
  300|      0|      e = Curl_node_next(n);
  301|      0|      if(co->expires) {
  ------------------
  |  Branch (301:10): [True: 0, False: 0]
  ------------------
  302|      0|        if(co->expires < now) {
  ------------------
  |  Branch (302:12): [True: 0, False: 0]
  ------------------
  303|      0|          Curl_node_remove(n);
  304|      0|          freecookie(co, TRUE);
  ------------------
  |  | 1051|      0|#define TRUE true
  ------------------
  305|      0|          ci->numcookies--;
  306|      0|        }
  307|      0|        else if(co->expires < ci->next_expiration)
  ------------------
  |  Branch (307:17): [True: 0, False: 0]
  ------------------
  308|       |          /*
  309|       |           * If this cookie has an expiration timestamp earlier than what we
  310|       |           * have seen so far then record it for the next round of expirations.
  311|       |           */
  312|      0|          ci->next_expiration = co->expires;
  313|      0|      }
  314|      0|    }
  315|  92.4k|  }
  316|  1.46k|}
cookie.c:is_public_suffix:
  806|  1.46k|{
  807|       |#ifdef USE_LIBPSL
  808|       |  /*
  809|       |   * Check if the domain is a Public Suffix and if yes, ignore the cookie. We
  810|       |   * must also check that the data handle is not NULL since the psl code will
  811|       |   * dereference it.
  812|       |   */
  813|       |  DEBUGF(infof(data, "PSL check set-cookie '%s' for domain=%s in %s",
  814|       |               co->name, co->domain, domain));
  815|       |  if(data && (domain && co->domain && !Curl_host_is_ipnum(co->domain))) {
  816|       |    bool acceptable = FALSE;
  817|       |    char lcase[256];
  818|       |    char lcookie[256];
  819|       |    size_t dlen = strlen(domain);
  820|       |    size_t clen = strlen(co->domain);
  821|       |
  822|       |    /* trim trailing dots */
  823|       |    if(dlen && (domain[dlen - 1] == '.'))
  824|       |      dlen--;
  825|       |    if(clen && (co->domain[clen - 1] == '.'))
  826|       |      clen--;
  827|       |
  828|       |    if((dlen < sizeof(lcase)) && (clen < sizeof(lcookie))) {
  829|       |      const psl_ctx_t *psl = Curl_psl_use(data);
  830|       |      if(psl) {
  831|       |        /* the PSL check requires lowercase domain name and pattern */
  832|       |        Curl_strntolower(lcase, domain, dlen);
  833|       |        lcase[dlen] = 0;
  834|       |        Curl_strntolower(lcookie, co->domain, clen);
  835|       |        lcookie[clen] = 0;
  836|       |        acceptable = psl_is_cookie_domain_acceptable(psl, lcase, lcookie);
  837|       |        Curl_psl_release(data);
  838|       |      }
  839|       |      else
  840|       |        infof(data, "libpsl problem, rejecting cookie for safety");
  841|       |    }
  842|       |
  843|       |    if(!acceptable) {
  844|       |      infof(data, "cookie '%s' dropped, domain '%s' must not "
  845|       |            "set cookies for '%s'", co->name, domain, co->domain);
  846|       |      return TRUE;
  847|       |    }
  848|       |  }
  849|       |#else
  850|  1.46k|  (void)data;
  851|  1.46k|  (void)co;
  852|  1.46k|  (void)domain;
  853|  1.46k|  DEBUGF(infof(data, "NO PSL to check set-cookie '%s' for domain=%s in %s",
  ------------------
  |  | 1063|  10.2k|#define DEBUGF(x) x
  |  |  ------------------
  |  |  |  Branch (1063:19): [True: 1.46k, False: 0]
  |  |  |  Branch (1063:19): [True: 0, False: 1.46k]
  |  |  |  Branch (1063:19): [True: 0, False: 0]
  |  |  |  Branch (1063:19): [True: 0, False: 0]
  |  |  |  Branch (1063:19): [Folded, False: 1.46k]
  |  |  ------------------
  ------------------
  854|  1.46k|               co->name, co->domain, domain));
  855|  1.46k|#endif
  856|       |  return FALSE;
  ------------------
  |  | 1054|  1.46k|#define FALSE false
  ------------------
  857|  1.46k|}
cookie.c:replace_existing:
  865|  1.46k|{
  866|  1.46k|  bool replace_old = FALSE;
  ------------------
  |  | 1054|  1.46k|#define FALSE false
  ------------------
  867|  1.46k|  struct Curl_llist_node *replace_n = NULL;
  868|  1.46k|  struct Curl_llist_node *n;
  869|  1.46k|  size_t myhash = cookiehash(co->domain);
  870|  1.46k|  for(n = Curl_llist_head(&ci->cookielist[myhash]); n; n = Curl_node_next(n)) {
  ------------------
  |  Branch (870:53): [True: 0, False: 1.46k]
  ------------------
  871|      0|    struct Cookie *clist = Curl_node_elem(n);
  872|      0|    if(!strcmp(clist->name, co->name)) {
  ------------------
  |  Branch (872:8): [True: 0, False: 0]
  ------------------
  873|       |      /* the names are identical */
  874|      0|      bool matching_domains = FALSE;
  ------------------
  |  | 1054|      0|#define FALSE false
  ------------------
  875|       |
  876|      0|      if(clist->domain && co->domain) {
  ------------------
  |  Branch (876:10): [True: 0, False: 0]
  |  Branch (876:27): [True: 0, False: 0]
  ------------------
  877|      0|        if(cookie_tailmatch(clist->domain, strlen(clist->domain),
  ------------------
  |  Branch (877:12): [True: 0, False: 0]
  ------------------
  878|      0|                            co->domain) ||
  879|      0|           cookie_tailmatch(co->domain, strlen(co->domain), clist->domain))
  ------------------
  |  Branch (879:12): [True: 0, False: 0]
  ------------------
  880|       |          /* The existing one is a tail of the new or vice versa */
  881|      0|          matching_domains = TRUE;
  ------------------
  |  | 1051|      0|#define TRUE true
  ------------------
  882|      0|      }
  883|      0|      else if(!clist->domain && !co->domain)
  ------------------
  |  Branch (883:15): [True: 0, False: 0]
  |  Branch (883:33): [True: 0, False: 0]
  ------------------
  884|      0|        matching_domains = TRUE;
  ------------------
  |  | 1051|      0|#define TRUE true
  ------------------
  885|       |
  886|      0|      if(matching_domains && /* the domains were identical */
  ------------------
  |  Branch (886:10): [True: 0, False: 0]
  ------------------
  887|      0|         clist->path && co->path && /* both have paths */
  ------------------
  |  Branch (887:10): [True: 0, False: 0]
  |  Branch (887:25): [True: 0, False: 0]
  ------------------
  888|      0|         clist->secure && !co->secure && !secure) {
  ------------------
  |  Branch (888:10): [True: 0, False: 0]
  |  Branch (888:27): [True: 0, False: 0]
  |  Branch (888:42): [True: 0, False: 0]
  ------------------
  889|      0|        size_t cllen;
  890|      0|        const char *sep = NULL;
  891|       |
  892|       |        /*
  893|       |         * A non-secure cookie may not overlay an existing secure cookie.
  894|       |         * For an existing cookie "a" with path "/login", refuse a new
  895|       |         * cookie "a" with for example path "/login/en", while the path
  896|       |         * "/loginhelper" is ok.
  897|       |         */
  898|       |
  899|      0|        DEBUGASSERT(clist->path[0]);
  ------------------
  |  | 1077|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (899:9): [True: 0, False: 0]
  |  Branch (899:9): [True: 0, False: 0]
  ------------------
  900|      0|        if(clist->path[0])
  ------------------
  |  Branch (900:12): [True: 0, False: 0]
  ------------------
  901|      0|          sep = strchr(clist->path + 1, '/');
  902|      0|        if(sep)
  ------------------
  |  Branch (902:12): [True: 0, False: 0]
  ------------------
  903|      0|          cllen = sep - clist->path;
  904|      0|        else
  905|      0|          cllen = strlen(clist->path);
  906|       |
  907|      0|        if(!strncmp(clist->path, co->path, cllen)) {
  ------------------
  |  Branch (907:12): [True: 0, False: 0]
  ------------------
  908|      0|          infof(data, "cookie '%s' for domain '%s' dropped, would "
  ------------------
  |  |  143|      0|  do {                               \
  |  |  144|      0|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  319|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (319:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (319:14): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  320|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (320:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  321|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (321:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|      0|      Curl_infof(data, __VA_ARGS__); \
  |  |  146|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  909|      0|                "overlay an existing cookie", co->name, co->domain);
  910|      0|          return FALSE;
  ------------------
  |  | 1054|      0|#define FALSE false
  ------------------
  911|      0|        }
  912|      0|      }
  913|      0|    }
  914|       |
  915|      0|    if(!replace_n && !strcmp(clist->name, co->name)) {
  ------------------
  |  Branch (915:8): [True: 0, False: 0]
  |  Branch (915:22): [True: 0, False: 0]
  ------------------
  916|       |      /* the names are identical */
  917|       |
  918|      0|      if(clist->domain && co->domain) {
  ------------------
  |  Branch (918:10): [True: 0, False: 0]
  |  Branch (918:27): [True: 0, False: 0]
  ------------------
  919|      0|        if(curl_strequal(clist->domain, co->domain) &&
  ------------------
  |  Branch (919:12): [True: 0, False: 0]
  ------------------
  920|      0|           (clist->tailmatch == co->tailmatch))
  ------------------
  |  Branch (920:12): [True: 0, False: 0]
  ------------------
  921|       |          /* The domains are identical */
  922|      0|          replace_old = TRUE;
  ------------------
  |  | 1051|      0|#define TRUE true
  ------------------
  923|      0|      }
  924|      0|      else if(!clist->domain && !co->domain)
  ------------------
  |  Branch (924:15): [True: 0, False: 0]
  |  Branch (924:33): [True: 0, False: 0]
  ------------------
  925|      0|        replace_old = TRUE;
  ------------------
  |  | 1051|      0|#define TRUE true
  ------------------
  926|       |
  927|      0|      if(replace_old) {
  ------------------
  |  Branch (927:10): [True: 0, False: 0]
  ------------------
  928|       |        /* the domains were identical */
  929|       |
  930|      0|        if(clist->path && co->path &&
  ------------------
  |  Branch (930:12): [True: 0, False: 0]
  |  Branch (930:27): [True: 0, False: 0]
  ------------------
  931|      0|           strcmp(clist->path, co->path))
  ------------------
  |  Branch (931:12): [True: 0, False: 0]
  ------------------
  932|      0|          replace_old = FALSE;
  ------------------
  |  | 1054|      0|#define FALSE false
  ------------------
  933|      0|        else if(!clist->path != !co->path)
  ------------------
  |  Branch (933:17): [True: 0, False: 0]
  ------------------
  934|      0|          replace_old = FALSE;
  ------------------
  |  | 1054|      0|#define FALSE false
  ------------------
  935|      0|      }
  936|       |
  937|      0|      if(replace_old && !co->livecookie && clist->livecookie) {
  ------------------
  |  Branch (937:10): [True: 0, False: 0]
  |  Branch (937:25): [True: 0, False: 0]
  |  Branch (937:44): [True: 0, False: 0]
  ------------------
  938|       |        /*
  939|       |         * Both cookies matched fine, except that the already present cookie
  940|       |         * is "live", which means it was set from a header, while the new one
  941|       |         * was read from a file and thus is not "live". "live" cookies are
  942|       |         * preferred so the new cookie is freed.
  943|       |         */
  944|      0|        return FALSE;
  ------------------
  |  | 1054|      0|#define FALSE false
  ------------------
  945|      0|      }
  946|      0|      if(replace_old)
  ------------------
  |  Branch (946:10): [True: 0, False: 0]
  ------------------
  947|      0|        replace_n = n;
  948|      0|    }
  949|      0|  }
  950|  1.46k|  if(replace_n) {
  ------------------
  |  Branch (950:6): [True: 0, False: 1.46k]
  ------------------
  951|      0|    struct Cookie *repl = Curl_node_elem(replace_n);
  952|       |
  953|       |    /* when replacing, creationtime is kept from old */
  954|      0|    co->creationtime = repl->creationtime;
  955|       |
  956|       |    /* unlink the old */
  957|      0|    Curl_node_remove(replace_n);
  958|       |
  959|       |    /* free the old cookie */
  960|      0|    freecookie(repl, TRUE);
  ------------------
  |  | 1051|      0|#define TRUE true
  ------------------
  961|      0|  }
  962|  1.46k|  *replacep = replace_old;
  963|       |  return TRUE;
  ------------------
  |  | 1051|  1.46k|#define TRUE true
  ------------------
  964|  1.46k|}
cookie.c:cookiehash:
  213|  2.93k|{
  214|  2.93k|  const char *top;
  215|  2.93k|  size_t len;
  216|       |
  217|  2.93k|  if(!domain || Curl_host_is_ipnum(domain))
  ------------------
  |  Branch (217:6): [True: 2.30k, False: 632]
  |  Branch (217:17): [True: 20, False: 612]
  ------------------
  218|  2.32k|    return 0;
  219|       |
  220|    612|  top = get_top_domain(domain, &len);
  221|    612|  return cookie_hash_domain(top, len);
  222|  2.93k|}
cookie.c:get_top_domain:
  163|    612|{
  164|    612|  size_t len = 0;
  165|    612|  const char *first = NULL, *last;
  166|       |
  167|    612|  if(domain) {
  ------------------
  |  Branch (167:6): [True: 612, False: 0]
  ------------------
  168|    612|    len = strlen(domain);
  169|    612|    last = memrchr(domain, '.', len);
  170|    612|    if(last) {
  ------------------
  |  Branch (170:8): [True: 98, False: 514]
  ------------------
  171|     98|      first = memrchr(domain, '.', (last - domain));
  172|     98|      if(first)
  ------------------
  |  Branch (172:10): [True: 30, False: 68]
  ------------------
  173|     30|        len -= (++first - domain);
  174|     98|    }
  175|    612|  }
  176|       |
  177|    612|  if(outlen)
  ------------------
  |  Branch (177:6): [True: 612, False: 0]
  ------------------
  178|    612|    *outlen = len;
  179|       |
  180|    612|  return first ? first : domain;
  ------------------
  |  Branch (180:10): [True: 30, False: 582]
  ------------------
  181|    612|}
cookie.c:cookie_hash_domain:
  192|    612|{
  193|    612|  const char *end = domain + len;
  194|    612|  size_t h = 5381;
  195|       |
  196|  18.3k|  while(domain < end) {
  ------------------
  |  Branch (196:9): [True: 17.7k, False: 612]
  ------------------
  197|  17.7k|    size_t j = (size_t)Curl_raw_toupper(*domain++);
  198|  17.7k|    h += h << 5;
  199|  17.7k|    h ^= j;
  200|  17.7k|  }
  201|       |
  202|    612|  return (h % COOKIE_HASH_SIZE);
  ------------------
  |  |   54|    612|#define COOKIE_HASH_SIZE 63
  ------------------
  203|    612|}
cookie.c:freecookie:
   65|  1.94k|{
   66|  1.94k|  curlx_free(co->domain);
  ------------------
  |  | 1488|  1.94k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
   67|  1.94k|  curlx_free(co->path);
  ------------------
  |  | 1488|  1.94k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
   68|  1.94k|  curlx_free(co->name);
  ------------------
  |  | 1488|  1.94k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
   69|  1.94k|  curlx_free(co->value);
  ------------------
  |  | 1488|  1.94k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
   70|  1.94k|  if(maintoo)
  ------------------
  |  Branch (70:6): [True: 1.46k, False: 473]
  ------------------
   71|  1.46k|    curlx_free(co);
  ------------------
  |  | 1488|  1.46k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
   72|  1.94k|}

Curl_creds_unlink:
  141|  20.5k|{
  142|  20.5k|  if(*pcreds) {
  ------------------
  |  Branch (142:6): [True: 0, False: 20.5k]
  ------------------
  143|      0|    struct Curl_creds *creds = *pcreds;
  144|       |
  145|      0|    DEBUGASSERT(creds->refcount);
  ------------------
  |  | 1077|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (145:5): [True: 0, False: 0]
  |  Branch (145:5): [True: 0, False: 0]
  ------------------
  146|      0|    *pcreds = NULL;
  147|      0|    if(creds->refcount)
  ------------------
  |  Branch (147:8): [True: 0, False: 0]
  ------------------
  148|      0|      creds->refcount--;
  149|      0|    if(!creds->refcount) {
  ------------------
  |  Branch (149:8): [True: 0, False: 0]
  ------------------
  150|      0|      curlx_free(creds);
  ------------------
  |  | 1488|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  151|      0|    }
  152|      0|  }
  153|  20.5k|}

Curl_fopen:
   87|  9.44k|{
   88|  9.44k|  CURLcode result = CURLE_WRITE_ERROR;
   89|  9.44k|  unsigned char randbuf[41];
   90|  9.44k|  char *tempstore = NULL;
   91|  9.44k|#ifndef _WIN32
   92|  9.44k|  curlx_struct_stat sb;
  ------------------
  |  |   63|  9.44k|#define curlx_struct_stat       struct stat
  ------------------
   93|  9.44k|#endif
   94|  9.44k|  int fd = -1;
   95|  9.44k|  char *dir = NULL;
   96|  9.44k|  *tempname = NULL;
   97|       |
   98|  9.44k|#ifndef _WIN32
   99|  9.44k|  *fh = curlx_fopen(filename, FOPEN_WRITETEXT);
  ------------------
  |  |   74|  9.44k|#define curlx_fopen(file, mode) curl_dbg_fopen(file, mode, __LINE__, __FILE__)
  ------------------
  100|  9.44k|  if(!*fh)
  ------------------
  |  Branch (100:6): [True: 0, False: 9.44k]
  ------------------
  101|      0|    goto fail;
  102|  9.44k|  if(curlx_fstat(fileno(*fh), &sb) == -1 || !S_ISREG(sb.st_mode)) {
  ------------------
  |  |   62|  9.44k|#define curlx_fstat             fstat
  ------------------
  |  Branch (102:6): [True: 0, False: 9.44k]
  |  Branch (102:45): [True: 9.44k, False: 0]
  ------------------
  103|  9.44k|    return CURLE_OK;
  104|  9.44k|  }
  105|      0|  curlx_fclose(*fh);
  ------------------
  |  |   79|      0|#define curlx_fclose(file)      curl_dbg_fclose(file, __LINE__, __FILE__)
  ------------------
  106|      0|#ifdef HAVE_GETEUID
  107|       |  /* If the existing file is not owned by the user, do not inherit
  108|       |   * its permissions at the temp file created below. The permissions
  109|       |   * might be unsuitable for holding user private data. */
  110|      0|  if(sb.st_uid != geteuid())
  ------------------
  |  Branch (110:6): [True: 0, False: 0]
  ------------------
  111|      0|    sb.st_mode = 0;
  112|      0|#endif
  113|      0|#endif /* !_WIN32 */
  114|      0|  *fh = NULL;
  115|       |
  116|      0|  result = Curl_rand_alnum(data, randbuf, sizeof(randbuf));
  117|      0|  if(result)
  ------------------
  |  Branch (117:6): [True: 0, False: 0]
  ------------------
  118|      0|    goto fail;
  119|       |
  120|      0|  dir = dirslash(filename);
  121|      0|  if(dir) {
  ------------------
  |  Branch (121:6): [True: 0, False: 0]
  ------------------
  122|       |    /* The temp filename should not end up too long for the target file
  123|       |       system */
  124|      0|    tempstore = curl_maprintf("%s%s.tmp", dir, randbuf);
  125|      0|    curlx_free(dir);
  ------------------
  |  | 1488|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  126|      0|  }
  127|       |
  128|      0|  if(!tempstore) {
  ------------------
  |  Branch (128:6): [True: 0, False: 0]
  ------------------
  129|      0|    result = CURLE_OUT_OF_MEMORY;
  130|      0|    goto fail;
  131|      0|  }
  132|       |
  133|      0|  result = CURLE_WRITE_ERROR;
  134|       |#ifdef _WIN32
  135|       |  fd = curlx_open(tempstore, _O_WRONLY | _O_CREAT | _O_EXCL,
  136|       |                  _S_IREAD | _S_IWRITE);
  137|       |#elif (defined(ANDROID) || defined(__ANDROID__)) && \
  138|       |  (defined(__i386__) || defined(__arm__))
  139|       |  fd = curlx_open(tempstore, O_WRONLY | O_CREAT | O_EXCL,
  140|       |                  (mode_t)(S_IRUSR | S_IWUSR | sb.st_mode));
  141|       |#else
  142|      0|  fd = curlx_open(tempstore, O_WRONLY | O_CREAT | O_EXCL,
  ------------------
  |  |   68|      0|#define curlx_open              open
  ------------------
  143|      0|                  S_IRUSR | S_IWUSR | sb.st_mode);
  144|      0|#endif
  145|      0|  if(fd == -1)
  ------------------
  |  Branch (145:6): [True: 0, False: 0]
  ------------------
  146|      0|    goto fail;
  147|       |
  148|      0|  *fh = curlx_fdopen(fd, FOPEN_WRITETEXT);
  ------------------
  |  |   78|      0|  curl_dbg_fdopen(file, mode, __LINE__, __FILE__)
  ------------------
  149|      0|  if(!*fh)
  ------------------
  |  Branch (149:6): [True: 0, False: 0]
  ------------------
  150|      0|    goto fail;
  151|       |
  152|      0|  *tempname = tempstore;
  153|      0|  return CURLE_OK;
  154|       |
  155|      0|fail:
  156|      0|  if(fd != -1) {
  ------------------
  |  Branch (156:6): [True: 0, False: 0]
  ------------------
  157|      0|    curlx_close(fd);
  ------------------
  |  |   69|      0|#define curlx_close             close
  ------------------
  158|      0|    unlink(tempstore);
  159|      0|  }
  160|       |
  161|      0|  curlx_free(tempstore);
  ------------------
  |  | 1488|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  162|      0|  return result;
  163|      0|}

Curl_get_line:
   36|  4.73k|{
   37|  4.73k|  CURLcode result;
   38|  4.73k|  char buffer[128];
   39|  4.73k|  curlx_dyn_reset(buf);
   40|  4.73k|  while(1) {
  ------------------
  |  Branch (40:9): [True: 4.73k, Folded]
  ------------------
   41|  4.73k|    size_t rlen;
   42|  4.73k|    const char *b = fgets(buffer, sizeof(buffer), input);
   43|  4.73k|    if(!b && ferror(input))
  ------------------
  |  Branch (43:8): [True: 4.73k, False: 0]
  |  Branch (43:14): [True: 0, False: 4.73k]
  ------------------
   44|      0|      return CURLE_READ_ERROR;
   45|       |
   46|  4.73k|    *eof = feof(input);
   47|       |
   48|  4.73k|    rlen = b ? strlen(b) : 0;
  ------------------
  |  Branch (48:12): [True: 0, False: 4.73k]
  ------------------
   49|  4.73k|    if(rlen) {
  ------------------
  |  Branch (49:8): [True: 0, False: 4.73k]
  ------------------
   50|      0|      result = curlx_dyn_addn(buf, b, rlen);
   51|      0|      if(result)
  ------------------
  |  Branch (51:10): [True: 0, False: 0]
  ------------------
   52|       |        /* too long line or out of memory */
   53|      0|        return result;
   54|      0|    }
   55|       |    /* now check the full line */
   56|  4.73k|    rlen = curlx_dyn_len(buf);
   57|  4.73k|    b = curlx_dyn_ptr(buf);
   58|  4.73k|    if(rlen && (b[rlen - 1] == '\n'))
  ------------------
  |  Branch (58:8): [True: 0, False: 4.73k]
  |  Branch (58:16): [True: 0, False: 0]
  ------------------
   59|       |      /* LF at end of the line */
   60|      0|      return CURLE_OK; /* all good */
   61|  4.73k|    if(*eof)
  ------------------
  |  Branch (61:8): [True: 4.73k, False: 0]
  ------------------
   62|       |      /* append a newline */
   63|  4.73k|      return curlx_dyn_addn(buf, "\n", 1);
   64|       |    /* otherwise get next line to append */
   65|  4.73k|  }
   66|       |  /* UNREACHABLE */
   67|  4.73k|}

Curl_share_lock:
  373|  8.76k|{
  374|  8.76k|  struct Curl_share *share = data->share;
  375|       |
  376|  8.76k|  if(!share)
  ------------------
  |  Branch (376:6): [True: 8.76k, False: 0]
  ------------------
  377|  8.76k|    return CURLSHE_INVALID;
  378|       |
  379|      0|  if(share->specifier & (unsigned int)(1 << type)) {
  ------------------
  |  Branch (379:6): [True: 0, False: 0]
  ------------------
  380|      0|    if(share->lockfunc) /* only call this if set! */
  ------------------
  |  Branch (380:8): [True: 0, False: 0]
  ------------------
  381|      0|      share->lockfunc(data, type, accesstype, share->clientdata);
  382|      0|  }
  383|       |  /* else if we do not share this, pretend successful lock */
  384|       |
  385|      0|  return CURLSHE_OK;
  386|  8.76k|}
Curl_share_unlock:
  389|  8.76k|{
  390|  8.76k|  struct Curl_share *share = data->share;
  391|       |
  392|  8.76k|  if(!share)
  ------------------
  |  Branch (392:6): [True: 8.76k, False: 0]
  ------------------
  393|  8.76k|    return CURLSHE_INVALID;
  394|       |
  395|      0|  if(share->specifier & (unsigned int)(1 << type)) {
  ------------------
  |  Branch (395:6): [True: 0, False: 0]
  ------------------
  396|      0|    if(share->unlockfunc) /* only call this if set! */
  ------------------
  |  Branch (396:8): [True: 0, False: 0]
  ------------------
  397|      0|      share->unlockfunc(data, type, share->clientdata);
  398|      0|  }
  399|       |
  400|      0|  return CURLSHE_OK;
  401|  8.76k|}
Curl_share_easy_unlink:
  404|  6.82k|{
  405|  6.82k|  struct Curl_share *share = data->share;
  406|       |
  407|  6.82k|  if(share) {
  ------------------
  |  Branch (407:6): [True: 0, False: 6.82k]
  ------------------
  408|      0|    bool locked = share_lock_acquire(share, data);
  409|       |
  410|       |    /* If data has a connection from this share, detach it. */
  411|      0|    if(data->conn && (share->specifier & (1 << CURL_LOCK_DATA_CONNECT)))
  ------------------
  |  Branch (411:8): [True: 0, False: 0]
  |  Branch (411:22): [True: 0, False: 0]
  ------------------
  412|      0|      Curl_detach_connection(data);
  413|       |
  414|      0|#if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_COOKIES)
  415|      0|    if(share->cookies == data->cookies)
  ------------------
  |  Branch (415:8): [True: 0, False: 0]
  ------------------
  416|      0|      data->cookies = NULL;
  417|      0|#endif
  418|       |
  419|      0|#ifndef CURL_DISABLE_HSTS
  420|      0|    if(share->hsts == data->hsts)
  ------------------
  |  Branch (420:8): [True: 0, False: 0]
  ------------------
  421|      0|      data->hsts = NULL;
  422|      0|#endif
  423|       |#ifdef USE_LIBPSL
  424|       |    if(&share->psl == data->psl)
  425|       |      data->psl = data->multi ? &data->multi->psl : NULL;
  426|       |#endif
  427|       |
  428|      0|    share_unlink(&data->share, data, locked);
  429|      0|  }
  430|  6.82k|  return CURLE_OK;
  431|  6.82k|}

Curl_failf:
  179|    731|{
  180|    731|  DEBUGASSERT(!strchr(fmt, '\n'));
  ------------------
  |  | 1077|    731|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (180:3): [True: 0, False: 731]
  |  Branch (180:3): [True: 731, False: 0]
  ------------------
  181|    731|  if(data->set.verbose || data->set.errorbuffer) {
  ------------------
  |  Branch (181:6): [True: 0, False: 731]
  |  Branch (181:27): [True: 0, False: 731]
  ------------------
  182|      0|    va_list ap;
  183|      0|    size_t len;
  184|      0|    char error[CURL_ERROR_SIZE + 2];
  185|      0|    va_start(ap, fmt);
  186|      0|    len = curl_mvsnprintf(error, CURL_ERROR_SIZE, fmt, ap);
  ------------------
  |  |  867|      0|#define CURL_ERROR_SIZE 256
  ------------------
  187|       |
  188|      0|    if(data->set.errorbuffer && !data->state.errorbuf) {
  ------------------
  |  Branch (188:8): [True: 0, False: 0]
  |  Branch (188:33): [True: 0, False: 0]
  ------------------
  189|      0|      curlx_strcopy(data->set.errorbuffer, CURL_ERROR_SIZE, error, len);
  ------------------
  |  |  867|      0|#define CURL_ERROR_SIZE 256
  ------------------
  190|      0|      data->state.errorbuf = TRUE; /* wrote error string */
  ------------------
  |  | 1051|      0|#define TRUE true
  ------------------
  191|      0|    }
  192|      0|    error[len++] = '\n';
  193|      0|    error[len] = '\0';
  194|      0|    trc_write(data, CURLINFO_TEXT, error, len);
  195|       |    va_end(ap);
  196|      0|  }
  197|    731|}
Curl_trc_opt:
  670|      1|{
  671|      1|  CURLcode result = config ? trc_opt(config) : CURLE_OK;
  ------------------
  |  Branch (671:21): [True: 0, False: 1]
  ------------------
  672|      1|#ifdef DEBUGBUILD
  673|       |  /* CURL_DEBUG can override anything */
  674|      1|  if(!result) {
  ------------------
  |  Branch (674:6): [True: 1, False: 0]
  ------------------
  675|      1|    const char *dbg_config = getenv("CURL_DEBUG");
  676|      1|    if(dbg_config)
  ------------------
  |  Branch (676:8): [True: 0, False: 1]
  ------------------
  677|      0|      result = trc_opt(dbg_config);
  678|      1|  }
  679|      1|#endif /* DEBUGBUILD */
  680|      1|  return result;
  681|      1|}
Curl_trc_init:
  684|      1|{
  685|      1|#ifdef DEBUGBUILD
  686|      1|  return Curl_trc_opt(NULL);
  687|       |#else
  688|       |  return CURLE_OK;
  689|       |#endif
  690|      1|}

curlx_dyn_init:
   39|  18.3k|{
   40|  18.3k|  DEBUGASSERT(s);
  ------------------
  |  | 1077|  18.3k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (40:3): [True: 0, False: 18.3k]
  |  Branch (40:3): [True: 18.3k, False: 0]
  ------------------
   41|  18.3k|  DEBUGASSERT(toobig);
  ------------------
  |  | 1077|  18.3k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (41:3): [True: 0, False: 18.3k]
  |  Branch (41:3): [True: 18.3k, False: 0]
  ------------------
   42|  18.3k|  DEBUGASSERT(toobig <= MAX_DYNBUF_SIZE); /* catch crazy mistakes */
  ------------------
  |  | 1077|  18.3k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (42:3): [True: 0, False: 18.3k]
  |  Branch (42:3): [True: 18.3k, False: 0]
  ------------------
   43|  18.3k|  s->bufr = NULL;
   44|  18.3k|  s->leng = 0;
   45|  18.3k|  s->allc = 0;
   46|  18.3k|  s->toobig = toobig;
   47|  18.3k|#ifdef DEBUGBUILD
   48|  18.3k|  s->init = DYNINIT;
  ------------------
  |  |   32|  18.3k|#define DYNINIT 0xbee51da /* random pattern */
  ------------------
   49|  18.3k|#endif
   50|  18.3k|}
curlx_dyn_free:
   57|  18.3k|{
   58|  18.3k|  DEBUGASSERT(s);
  ------------------
  |  | 1077|  18.3k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (58:3): [True: 0, False: 18.3k]
  |  Branch (58:3): [True: 18.3k, False: 0]
  ------------------
   59|  18.3k|  DEBUGASSERT(s->init == DYNINIT);
  ------------------
  |  | 1077|  18.3k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (59:3): [True: 0, False: 18.3k]
  |  Branch (59:3): [True: 18.3k, False: 0]
  ------------------
   60|  18.3k|  curlx_safefree(s->bufr);
  ------------------
  |  | 1332|  18.3k|  do {                      \
  |  | 1333|  18.3k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1488|  18.3k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  18.3k|    (ptr) = NULL;           \
  |  | 1335|  18.3k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 18.3k]
  |  |  ------------------
  ------------------
   61|  18.3k|  s->leng = s->allc = 0;
   62|  18.3k|}
curlx_dyn_reset:
  126|  4.73k|{
  127|  4.73k|  DEBUGASSERT(s);
  ------------------
  |  | 1077|  4.73k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (127:3): [True: 0, False: 4.73k]
  |  Branch (127:3): [True: 4.73k, False: 0]
  ------------------
  128|  4.73k|  DEBUGASSERT(s->init == DYNINIT);
  ------------------
  |  | 1077|  4.73k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (128:3): [True: 0, False: 4.73k]
  |  Branch (128:3): [True: 4.73k, False: 0]
  ------------------
  129|  4.73k|  DEBUGASSERT(!s->leng || s->bufr);
  ------------------
  |  | 1077|  4.73k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (129:3): [True: 4.73k, False: 0]
  |  Branch (129:3): [True: 0, False: 0]
  |  Branch (129:3): [True: 4.73k, False: 0]
  |  Branch (129:3): [True: 0, False: 0]
  ------------------
  130|  4.73k|  if(s->leng)
  ------------------
  |  Branch (130:6): [True: 0, False: 4.73k]
  ------------------
  131|      0|    s->bufr[0] = 0;
  132|  4.73k|  s->leng = 0;
  133|  4.73k|}
curlx_dyn_addn:
  163|  4.75k|{
  164|  4.75k|  DEBUGASSERT(s);
  ------------------
  |  | 1077|  4.75k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (164:3): [True: 0, False: 4.75k]
  |  Branch (164:3): [True: 4.75k, False: 0]
  ------------------
  165|  4.75k|  DEBUGASSERT(s->init == DYNINIT);
  ------------------
  |  | 1077|  4.75k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (165:3): [True: 0, False: 4.75k]
  |  Branch (165:3): [True: 4.75k, False: 0]
  ------------------
  166|  4.75k|  DEBUGASSERT(!s->leng || s->bufr);
  ------------------
  |  | 1077|  4.75k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (166:3): [True: 4.75k, False: 0]
  |  Branch (166:3): [True: 0, False: 0]
  |  Branch (166:3): [True: 4.73k, False: 18]
  |  Branch (166:3): [True: 18, False: 0]
  ------------------
  167|  4.75k|  return dyn_nappend(s, mem, len);
  168|  4.75k|}
curlx_dyn_add:
  174|     27|{
  175|     27|  size_t n;
  176|     27|  DEBUGASSERT(str);
  ------------------
  |  | 1077|     27|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (176:3): [True: 0, False: 27]
  |  Branch (176:3): [True: 27, False: 0]
  ------------------
  177|     27|  DEBUGASSERT(s);
  ------------------
  |  | 1077|     27|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (177:3): [True: 0, False: 27]
  |  Branch (177:3): [True: 27, False: 0]
  ------------------
  178|     27|  DEBUGASSERT(s->init == DYNINIT);
  ------------------
  |  | 1077|     27|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (178:3): [True: 0, False: 27]
  |  Branch (178:3): [True: 27, False: 0]
  ------------------
  179|     27|  DEBUGASSERT(!s->leng || s->bufr);
  ------------------
  |  | 1077|     27|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (179:3): [True: 27, False: 0]
  |  Branch (179:3): [True: 0, False: 0]
  |  Branch (179:3): [True: 9, False: 18]
  |  Branch (179:3): [True: 18, False: 0]
  ------------------
  180|     27|  n = strlen(str);
  181|     27|  return dyn_nappend(s, (const unsigned char *)str, n);
  182|     27|}
curlx_dyn_ptr:
  238|  9.47k|{
  239|  9.47k|  DEBUGASSERT(s);
  ------------------
  |  | 1077|  9.47k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (239:3): [True: 0, False: 9.47k]
  |  Branch (239:3): [True: 9.47k, False: 0]
  ------------------
  240|  9.47k|  DEBUGASSERT(s->init == DYNINIT);
  ------------------
  |  | 1077|  9.47k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (240:3): [True: 0, False: 9.47k]
  |  Branch (240:3): [True: 9.47k, False: 0]
  ------------------
  241|  9.47k|  DEBUGASSERT(!s->leng || s->bufr);
  ------------------
  |  | 1077|  9.47k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (241:3): [True: 9.47k, False: 0]
  |  Branch (241:3): [True: 0, False: 0]
  |  Branch (241:3): [True: 4.73k, False: 4.74k]
  |  Branch (241:3): [True: 4.74k, False: 0]
  ------------------
  242|  9.47k|  return s->bufr;
  243|  9.47k|}
curlx_dyn_len:
  272|  4.77k|{
  273|  4.77k|  DEBUGASSERT(s);
  ------------------
  |  | 1077|  4.77k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (273:3): [True: 0, False: 4.77k]
  |  Branch (273:3): [True: 4.77k, False: 0]
  ------------------
  274|  4.77k|  DEBUGASSERT(s->init == DYNINIT);
  ------------------
  |  | 1077|  4.77k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (274:3): [True: 0, False: 4.77k]
  |  Branch (274:3): [True: 4.77k, False: 0]
  ------------------
  275|  4.77k|  DEBUGASSERT(!s->leng || s->bufr);
  ------------------
  |  | 1077|  4.77k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (275:3): [True: 4.77k, False: 0]
  |  Branch (275:3): [True: 0, False: 0]
  |  Branch (275:3): [True: 4.74k, False: 27]
  |  Branch (275:3): [True: 27, False: 0]
  ------------------
  276|  4.77k|  return s->leng;
  277|  4.77k|}
dynbuf.c:dyn_nappend:
   69|  4.78k|{
   70|  4.78k|  size_t idx = s->leng;
   71|  4.78k|  size_t a = s->allc;
   72|  4.78k|  size_t fit = len + idx + 1; /* new string + old string + zero byte */
   73|       |
   74|       |  /* try to detect if there is rubbish in the struct */
   75|  4.78k|  DEBUGASSERT(s->init == DYNINIT);
  ------------------
  |  | 1077|  4.78k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (75:3): [True: 0, False: 4.78k]
  |  Branch (75:3): [True: 4.78k, False: 0]
  ------------------
   76|  4.78k|  DEBUGASSERT(s->toobig);
  ------------------
  |  | 1077|  4.78k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (76:3): [True: 0, False: 4.78k]
  |  Branch (76:3): [True: 4.78k, False: 0]
  ------------------
   77|  4.78k|  DEBUGASSERT(idx < s->toobig);
  ------------------
  |  | 1077|  4.78k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (77:3): [True: 0, False: 4.78k]
  |  Branch (77:3): [True: 4.78k, False: 0]
  ------------------
   78|  4.78k|  DEBUGASSERT(!s->leng || s->bufr);
  ------------------
  |  | 1077|  4.78k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (78:3): [True: 4.78k, False: 0]
  |  Branch (78:3): [True: 0, False: 0]
  |  Branch (78:3): [True: 4.74k, False: 36]
  |  Branch (78:3): [True: 36, False: 0]
  ------------------
   79|  4.78k|  DEBUGASSERT(a <= s->toobig);
  ------------------
  |  | 1077|  4.78k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (79:3): [True: 0, False: 4.78k]
  |  Branch (79:3): [True: 4.78k, False: 0]
  ------------------
   80|  4.78k|  DEBUGASSERT(!len || mem);
  ------------------
  |  | 1077|  4.78k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (80:3): [True: 4.78k, False: 0]
  |  Branch (80:3): [True: 0, False: 0]
  |  Branch (80:3): [True: 0, False: 4.78k]
  |  Branch (80:3): [True: 4.78k, False: 0]
  ------------------
   81|       |
   82|  4.78k|  if(fit > s->toobig) {
  ------------------
  |  Branch (82:6): [True: 0, False: 4.78k]
  ------------------
   83|      0|    curlx_dyn_free(s);
   84|      0|    return CURLE_TOO_LARGE;
   85|      0|  }
   86|  4.78k|  else if(!a) {
  ------------------
  |  Branch (86:11): [True: 4.74k, False: 36]
  ------------------
   87|  4.74k|    DEBUGASSERT(!idx);
  ------------------
  |  | 1077|  4.74k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (87:5): [True: 0, False: 4.74k]
  |  Branch (87:5): [True: 4.74k, False: 0]
  ------------------
   88|       |    /* first invoke */
   89|  4.74k|    if(MIN_FIRST_ALLOC > s->toobig)
  ------------------
  |  |   29|  4.74k|#define MIN_FIRST_ALLOC 32
  ------------------
  |  Branch (89:8): [True: 0, False: 4.74k]
  ------------------
   90|      0|      a = s->toobig;
   91|  4.74k|    else if(fit < MIN_FIRST_ALLOC)
  ------------------
  |  |   29|  4.74k|#define MIN_FIRST_ALLOC 32
  ------------------
  |  Branch (91:13): [True: 4.74k, False: 0]
  ------------------
   92|  4.74k|      a = MIN_FIRST_ALLOC;
  ------------------
  |  |   29|  4.74k|#define MIN_FIRST_ALLOC 32
  ------------------
   93|      0|    else
   94|      0|      a = fit;
   95|  4.74k|  }
   96|     36|  else {
   97|     36|    while(a < fit)
  ------------------
  |  Branch (97:11): [True: 0, False: 36]
  ------------------
   98|      0|      a *= 2;
   99|     36|    if(a > s->toobig)
  ------------------
  |  Branch (99:8): [True: 0, False: 36]
  ------------------
  100|       |      /* no point in allocating a larger buffer than this is allowed to use */
  101|      0|      a = s->toobig;
  102|     36|  }
  103|       |
  104|  4.78k|  if(a != s->allc) {
  ------------------
  |  Branch (104:6): [True: 4.74k, False: 36]
  ------------------
  105|  4.74k|    void *p = curlx_realloc(s->bufr, a);
  ------------------
  |  | 1487|  4.74k|  curl_dbg_realloc(ptr, size, __LINE__, __FILE__)
  ------------------
  106|  4.74k|    if(!p) {
  ------------------
  |  Branch (106:8): [True: 0, False: 4.74k]
  ------------------
  107|      0|      curlx_dyn_free(s);
  108|      0|      return CURLE_OUT_OF_MEMORY;
  109|      0|    }
  110|  4.74k|    s->bufr = p;
  111|  4.74k|    s->allc = a;
  112|  4.74k|  }
  113|       |
  114|  4.78k|  if(len)
  ------------------
  |  Branch (114:6): [True: 4.78k, False: 0]
  ------------------
  115|  4.78k|    memcpy(&s->bufr[idx], mem, len);
  116|  4.78k|  s->leng = idx + len;
  117|  4.78k|  s->bufr[s->leng] = 0;
  118|  4.78k|  return CURLE_OK;
  119|  4.78k|}

curlx_inet_pton:
  207|  1.26k|{
  208|  1.26k|  switch(af) {
  209|    632|  case AF_INET:
  ------------------
  |  Branch (209:3): [True: 632, False: 628]
  ------------------
  210|    632|    return inet_pton4(src, (unsigned char *)dst);
  211|    628|  case AF_INET6:
  ------------------
  |  Branch (211:3): [True: 628, False: 632]
  ------------------
  212|    628|    return inet_pton6(src, (unsigned char *)dst);
  213|      0|  default:
  ------------------
  |  Branch (213:3): [True: 0, False: 1.26k]
  ------------------
  214|      0|    errno = SOCKEAFNOSUPPORT;
  ------------------
  |  | 1120|      0|#define SOCKEAFNOSUPPORT  EAFNOSUPPORT
  ------------------
  215|      0|    return -1;
  216|  1.26k|  }
  217|       |  /* NOTREACHED */
  218|  1.26k|}
inet_pton.c:inet_pton4:
   63|    720|{
   64|    720|  int saw_digit, octets, ch;
   65|    720|  unsigned char tmp[INADDRSZ], *tp;
   66|       |
   67|    720|  saw_digit = 0;
   68|    720|  octets = 0;
   69|    720|  tp = tmp;
   70|    720|  *tp = 0;
   71|  1.51k|  while((ch = (unsigned char)*src++) != '\0') {
  ------------------
  |  Branch (71:9): [True: 1.13k, False: 382]
  ------------------
   72|  1.13k|    if(ISDIGIT(ch)) {
  ------------------
  |  |   44|  1.13k|#define ISDIGIT(x)  (((x) >= '0') && ((x) <= '9'))
  |  |  ------------------
  |  |  |  Branch (44:22): [True: 842, False: 294]
  |  |  |  Branch (44:38): [True: 636, False: 206]
  |  |  ------------------
  ------------------
   73|    636|      unsigned int val = (*tp * 10) + (ch - '0');
   74|       |
   75|    636|      if(saw_digit && *tp == 0)
  ------------------
  |  Branch (75:10): [True: 260, False: 376]
  |  Branch (75:23): [True: 12, False: 248]
  ------------------
   76|     12|        return 0;
   77|    624|      if(val > 255)
  ------------------
  |  Branch (77:10): [True: 40, False: 584]
  ------------------
   78|     40|        return 0;
   79|    584|      *tp = (unsigned char)val;
   80|    584|      if(!saw_digit) {
  ------------------
  |  Branch (80:10): [True: 376, False: 208]
  ------------------
   81|    376|        if(++octets > 4)
  ------------------
  |  Branch (81:12): [True: 0, False: 376]
  ------------------
   82|      0|          return 0;
   83|    376|        saw_digit = 1;
   84|    376|      }
   85|    584|    }
   86|    500|    else if(ch == '.' && saw_digit) {
  ------------------
  |  Branch (86:13): [True: 230, False: 270]
  |  Branch (86:26): [True: 218, False: 12]
  ------------------
   87|    218|      if(octets == 4)
  ------------------
  |  Branch (87:10): [True: 4, False: 214]
  ------------------
   88|      4|        return 0;
   89|    214|      *++tp = 0;
   90|    214|      saw_digit = 0;
   91|    214|    }
   92|    282|    else
   93|    282|      return 0;
   94|  1.13k|  }
   95|    382|  if(octets < 4)
  ------------------
  |  Branch (95:6): [True: 376, False: 6]
  ------------------
   96|    376|    return 0;
   97|      6|  memcpy(dst, tmp, INADDRSZ);
  ------------------
  |  |   36|      6|#define INADDRSZ         4
  ------------------
   98|      6|  return 1;
   99|    382|}
inet_pton.c:inet_pton6:
  114|    628|{
  115|    628|  unsigned char tmp[IN6ADDRSZ], *tp, *endp, *colonp;
  116|    628|  const char *curtok;
  117|    628|  int ch, saw_xdigit;
  118|    628|  size_t val;
  119|       |
  120|    628|  memset((tp = tmp), 0, IN6ADDRSZ);
  ------------------
  |  |   35|    628|#define IN6ADDRSZ       16
  ------------------
  121|    628|  endp = tp + IN6ADDRSZ;
  ------------------
  |  |   35|    628|#define IN6ADDRSZ       16
  ------------------
  122|    628|  colonp = NULL;
  123|       |  /* Leading :: requires some special handling. */
  124|    628|  if(*src == ':')
  ------------------
  |  Branch (124:6): [True: 18, False: 610]
  ------------------
  125|     18|    if(*++src != ':')
  ------------------
  |  Branch (125:8): [True: 4, False: 14]
  ------------------
  126|      4|      return 0;
  127|    624|  curtok = src;
  128|    624|  saw_xdigit = 0;
  129|    624|  val = 0;
  130|  1.50k|  while((ch = (unsigned char)*src++) != '\0') {
  ------------------
  |  Branch (130:9): [True: 1.13k, False: 372]
  ------------------
  131|  1.13k|    if(ISXDIGIT(ch)) {
  ------------------
  |  |   39|  1.13k|#define ISXDIGIT(x) (ISDIGIT(x) || ISLOWHEXALPHA(x) || ISUPHEXALPHA(x))
  |  |  ------------------
  |  |  |  |   44|  2.26k|#define ISDIGIT(x)  (((x) >= '0') && ((x) <= '9'))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (44:22): [True: 1.00k, False: 128]
  |  |  |  |  |  Branch (44:38): [True: 348, False: 658]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define ISXDIGIT(x) (ISDIGIT(x) || ISLOWHEXALPHA(x) || ISUPHEXALPHA(x))
  |  |  ------------------
  |  |  |  |   27|  1.92k|#define ISLOWHEXALPHA(x) (((x) >= 'a') && ((x) <= 'f'))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (27:27): [True: 208, False: 578]
  |  |  |  |  |  Branch (27:43): [True: 136, False: 72]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define ISXDIGIT(x) (ISDIGIT(x) || ISLOWHEXALPHA(x) || ISUPHEXALPHA(x))
  |  |  ------------------
  |  |  |  |   28|    650|#define ISUPHEXALPHA(x)  (((x) >= 'A') && ((x) <= 'F'))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (28:27): [True: 298, False: 352]
  |  |  |  |  |  Branch (28:43): [True: 190, False: 108]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  132|    674|      val <<= 4;
  133|    674|      val |= curlx_hexval(ch);
  ------------------
  |  |  112|    674|#define curlx_hexval(x) (unsigned char)(curlx_hexasciitable[(x) - '0'] & 0x0f)
  ------------------
  134|    674|      if(++saw_xdigit > 4)
  ------------------
  |  Branch (134:10): [True: 6, False: 668]
  ------------------
  135|      6|        return 0;
  136|    668|      continue;
  137|    674|    }
  138|    460|    if(ch == ':') {
  ------------------
  |  Branch (138:8): [True: 218, False: 242]
  ------------------
  139|    218|      curtok = src;
  140|    218|      if(!saw_xdigit) {
  ------------------
  |  Branch (140:10): [True: 28, False: 190]
  ------------------
  141|     28|        if(colonp)
  ------------------
  |  Branch (141:12): [True: 2, False: 26]
  ------------------
  142|      2|          return 0;
  143|     26|        colonp = tp;
  144|     26|        continue;
  145|     28|      }
  146|    190|      if(tp + INT16SZ > endp)
  ------------------
  |  |   37|    190|#define INT16SZ          2
  ------------------
  |  Branch (146:10): [True: 2, False: 188]
  ------------------
  147|      2|        return 0;
  148|    188|      *tp++ = (unsigned char)((val >> 8) & 0xff);
  149|    188|      *tp++ = (unsigned char)(val & 0xff);
  150|    188|      saw_xdigit = 0;
  151|    188|      val = 0;
  152|    188|      continue;
  153|    190|    }
  154|    242|    if(ch == '.' && ((tp + INADDRSZ) <= endp) &&
  ------------------
  |  |   36|     90|#define INADDRSZ         4
  ------------------
  |  Branch (154:8): [True: 90, False: 152]
  |  Branch (154:21): [True: 88, False: 2]
  ------------------
  155|     88|       inet_pton4(curtok, tp) > 0) {
  ------------------
  |  Branch (155:8): [True: 2, False: 86]
  ------------------
  156|      2|      tp += INADDRSZ;
  ------------------
  |  |   36|      2|#define INADDRSZ         4
  ------------------
  157|      2|      saw_xdigit = 0;
  158|      2|      break;    /* '\0' was seen by inet_pton4(). */
  159|      2|    }
  160|    240|    return 0;
  161|    242|  }
  162|    374|  if(saw_xdigit) {
  ------------------
  |  Branch (162:6): [True: 56, False: 318]
  ------------------
  163|     56|    if(tp + INT16SZ > endp)
  ------------------
  |  |   37|     56|#define INT16SZ          2
  ------------------
  |  Branch (163:8): [True: 2, False: 54]
  ------------------
  164|      2|      return 0;
  165|     54|    *tp++ = (unsigned char)((val >> 8) & 0xff);
  166|     54|    *tp++ = (unsigned char)(val & 0xff);
  167|     54|  }
  168|    372|  if(colonp) {
  ------------------
  |  Branch (168:6): [True: 18, False: 354]
  ------------------
  169|       |    /*
  170|       |     * Since some memmove()'s erroneously fail to handle
  171|       |     * overlapping regions, we do the shift by hand.
  172|       |     */
  173|     18|    const ssize_t n = tp - colonp;
  174|     18|    ssize_t i;
  175|       |
  176|     18|    if(tp == endp)
  ------------------
  |  Branch (176:8): [True: 2, False: 16]
  ------------------
  177|      2|      return 0;
  178|     88|    for(i = 1; i <= n; i++) {
  ------------------
  |  Branch (178:16): [True: 72, False: 16]
  ------------------
  179|     72|      *(endp - i) = *(colonp + n - i);
  180|     72|      *(colonp + n - i) = 0;
  181|     72|    }
  182|     16|    tp = endp;
  183|     16|  }
  184|    370|  if(tp != endp)
  ------------------
  |  Branch (184:6): [True: 354, False: 16]
  ------------------
  185|    354|    return 0;
  186|     16|  memcpy(dst, tmp, IN6ADDRSZ);
  ------------------
  |  |   35|     16|#define IN6ADDRSZ       16
  ------------------
  187|     16|  return 1;
  188|    370|}

curlx_strcopy:
   42|  5.91k|{
   43|  5.91k|  DEBUGASSERT(slen < dsize);
  ------------------
  |  | 1077|  5.91k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (43:3): [True: 0, False: 5.91k]
  |  Branch (43:3): [True: 5.91k, False: 0]
  ------------------
   44|  5.91k|  if(slen < dsize) {
  ------------------
  |  Branch (44:6): [True: 5.91k, False: 0]
  ------------------
   45|  5.91k|    memcpy(dest, src, slen);
   46|  5.91k|    dest[slen] = 0;
   47|  5.91k|  }
   48|      0|  else if(dsize)
  ------------------
  |  Branch (48:11): [True: 0, False: 0]
  ------------------
   49|      0|    dest[0] = 0;
   50|  5.91k|}

curlx_memdup:
   65|  1.46k|{
   66|  1.46k|  void *buffer = curlx_malloc(length);
  ------------------
  |  | 1483|  1.46k|#define curlx_malloc(size)         curl_dbg_malloc(size, __LINE__, __FILE__)
  ------------------
   67|  1.46k|  if(!buffer)
  ------------------
  |  Branch (67:6): [True: 0, False: 1.46k]
  ------------------
   68|      0|    return NULL; /* fail */
   69|       |
   70|  1.46k|  memcpy(buffer, src, length);
   71|       |
   72|  1.46k|  return buffer;
   73|  1.46k|}
curlx_memdup0:
   86|  4.54k|{
   87|  4.54k|  char *buf = (length < SIZE_MAX) ? curlx_malloc(length + 1) : NULL;
  ------------------
  |  | 1483|  4.54k|#define curlx_malloc(size)         curl_dbg_malloc(size, __LINE__, __FILE__)
  ------------------
  |  Branch (87:15): [True: 4.54k, False: 0]
  ------------------
   88|  4.54k|  if(!buf)
  ------------------
  |  Branch (88:6): [True: 0, False: 4.54k]
  ------------------
   89|      0|    return NULL;
   90|  4.54k|  if(length) {
  ------------------
  |  Branch (90:6): [True: 2.51k, False: 2.03k]
  ------------------
   91|  2.51k|    DEBUGASSERT(src); /* must never be NULL */
  ------------------
  |  | 1077|  2.51k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (91:5): [True: 0, False: 2.51k]
  |  Branch (91:5): [True: 2.51k, False: 0]
  ------------------
   92|  2.51k|    memcpy(buf, src, length);
   93|  2.51k|  }
   94|  4.54k|  buf[length] = 0;
   95|  4.54k|  return buf;
   96|  4.54k|}

curlx_str_init:
   27|  12.0k|{
   28|       |  out->str = NULL;
   29|  12.0k|  out->len = 0;
   30|  12.0k|}
curlx_str_until:
   51|  4.84k|{
   52|  4.84k|  const char *s;
   53|  4.84k|  size_t len = 0;
   54|  4.84k|  DEBUGASSERT(linep);
  ------------------
  |  | 1077|  4.84k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (54:3): [True: 0, False: 4.84k]
  |  Branch (54:3): [True: 4.84k, False: 0]
  ------------------
   55|  4.84k|  DEBUGASSERT(*linep);
  ------------------
  |  | 1077|  4.84k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (55:3): [True: 0, False: 4.84k]
  |  Branch (55:3): [True: 4.84k, False: 0]
  ------------------
   56|  4.84k|  DEBUGASSERT(out);
  ------------------
  |  | 1077|  4.84k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (56:3): [True: 0, False: 4.84k]
  |  Branch (56:3): [True: 4.84k, False: 0]
  ------------------
   57|  4.84k|  DEBUGASSERT(delim);
  ------------------
  |  | 1077|  4.84k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (57:3): [True: 0, False: 4.84k]
  |  Branch (57:3): [True: 4.84k, False: 0]
  ------------------
   58|  4.84k|  s = *linep;
   59|       |
   60|  4.84k|  curlx_str_init(out);
   61|  10.6k|  while(*s && (*s != delim)) {
  ------------------
  |  Branch (61:9): [True: 5.85k, False: 4.83k]
  |  Branch (61:15): [True: 5.84k, False: 7]
  ------------------
   62|  5.84k|    s++;
   63|  5.84k|    if(++len > max) {
  ------------------
  |  Branch (63:8): [True: 2, False: 5.84k]
  ------------------
   64|      2|      return STRE_BIG;
  ------------------
  |  |   29|      2|#define STRE_BIG      1
  ------------------
   65|      2|    }
   66|  5.84k|  }
   67|  4.84k|  if(!len)
  ------------------
  |  Branch (67:6): [True: 1, False: 4.84k]
  ------------------
   68|      1|    return STRE_SHORT;
  ------------------
  |  |   30|      1|#define STRE_SHORT    2
  ------------------
   69|  4.84k|  out->str = *linep;
   70|  4.84k|  out->len = len;
   71|  4.84k|  *linep = s; /* point to the first byte after the word */
   72|  4.84k|  return STRE_OK;
  ------------------
  |  |   28|  4.84k|#define STRE_OK       0
  ------------------
   73|  4.84k|}
curlx_str_word:
   78|  4.73k|{
   79|  4.73k|  return curlx_str_until(linep, out, max, ' ');
   80|  4.73k|}
curlx_str_single:
  139|  51.2k|{
  140|  51.2k|  DEBUGASSERT(linep && *linep);
  ------------------
  |  | 1077|  51.2k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (140:3): [True: 0, False: 51.2k]
  |  Branch (140:3): [True: 0, False: 0]
  |  Branch (140:3): [True: 51.2k, False: 0]
  |  Branch (140:3): [True: 51.2k, False: 0]
  ------------------
  141|  51.2k|  if(**linep != byte)
  ------------------
  |  Branch (141:6): [True: 14.3k, False: 36.8k]
  ------------------
  142|  14.3k|    return STRE_BYTE;
  ------------------
  |  |   33|  14.3k|#define STRE_BYTE     5
  ------------------
  143|  36.8k|  (*linep)++; /* move over it */
  144|  36.8k|  return STRE_OK;
  ------------------
  |  |   28|  36.8k|#define STRE_OK       0
  ------------------
  145|  51.2k|}
curlx_str_singlespace:
  150|  4.73k|{
  151|  4.73k|  return curlx_str_single(linep, ' ');
  152|  4.73k|}
curlx_str_number:
  209|  14.3k|{
  210|  14.3k|  return str_num_base(linep, nump, max, 10);
  211|  14.3k|}
curlx_str_casecompare:
  253|  67.2k|{
  254|  67.2k|  size_t clen = check ? strlen(check) : 0;
  ------------------
  |  Branch (254:17): [True: 67.2k, False: 0]
  ------------------
  255|  67.2k|  return ((str->len == clen) && curl_strnequal(str->str, check, clen));
  ------------------
  |  Branch (255:11): [True: 25.9k, False: 41.2k]
  |  Branch (255:33): [True: 12.4k, False: 13.5k]
  ------------------
  256|  67.2k|}
curlx_str_nudge:
  272|  1.94k|{
  273|  1.94k|  if(num <= str->len) {
  ------------------
  |  Branch (273:6): [True: 1.94k, False: 0]
  ------------------
  274|  1.94k|    str->str += num;
  275|  1.94k|    str->len -= num;
  276|  1.94k|    return STRE_OK;
  ------------------
  |  |   28|  1.94k|#define STRE_OK       0
  ------------------
  277|  1.94k|  }
  278|      0|  return STRE_OVERFLOW;
  ------------------
  |  |   35|      0|#define STRE_OVERFLOW 7
  ------------------
  279|  1.94k|}
curlx_str_cspn:
  285|  38.0k|{
  286|  38.0k|  const char *s = *linep;
  287|  38.0k|  size_t len;
  288|  38.0k|  DEBUGASSERT(linep && *linep);
  ------------------
  |  | 1077|  38.0k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (288:3): [True: 0, False: 38.0k]
  |  Branch (288:3): [True: 0, False: 0]
  |  Branch (288:3): [True: 38.0k, False: 0]
  |  Branch (288:3): [True: 38.0k, False: 0]
  ------------------
  289|       |
  290|  38.0k|  len = strcspn(s, reject);
  291|  38.0k|  if(len) {
  ------------------
  |  Branch (291:6): [True: 34.5k, False: 3.52k]
  ------------------
  292|  34.5k|    out->str = s;
  293|  34.5k|    out->len = len;
  294|  34.5k|    *linep = &s[len];
  295|  34.5k|    return STRE_OK;
  ------------------
  |  |   28|  34.5k|#define STRE_OK       0
  ------------------
  296|  34.5k|  }
  297|  3.52k|  curlx_str_init(out);
  298|  3.52k|  return STRE_SHORT;
  ------------------
  |  |   30|  3.52k|#define STRE_SHORT    2
  ------------------
  299|  38.0k|}
curlx_str_trimblanks:
  303|  34.5k|{
  304|  36.4k|  while(out->len && ISBLANK(*out->str))
  ------------------
  |  |   45|  36.1k|#define ISBLANK(x)  (((x) == ' ') || ((x) == '\t'))
  |  |  ------------------
  |  |  |  Branch (45:22): [True: 1.71k, False: 34.3k]
  |  |  |  Branch (45:38): [True: 227, False: 34.1k]
  |  |  ------------------
  ------------------
  |  Branch (304:9): [True: 36.1k, False: 382]
  ------------------
  305|  1.94k|    curlx_str_nudge(out, 1);
  306|       |
  307|       |  /* trim trailing spaces and tabs */
  308|  35.2k|  while(out->len && ISBLANK(out->str[out->len - 1]))
  ------------------
  |  |   45|  34.8k|#define ISBLANK(x)  (((x) == ' ') || ((x) == '\t'))
  |  |  ------------------
  |  |  |  Branch (45:22): [True: 531, False: 34.3k]
  |  |  |  Branch (45:38): [True: 187, False: 34.1k]
  |  |  ------------------
  ------------------
  |  Branch (308:9): [True: 34.8k, False: 382]
  ------------------
  309|    718|    out->len--;
  310|  34.5k|}
curlx_str_passblanks:
  314|  4.73k|{
  315|  4.73k|  while(ISBLANK(**linep))
  ------------------
  |  |   45|  4.73k|#define ISBLANK(x)  (((x) == ' ') || ((x) == '\t'))
  |  |  ------------------
  |  |  |  Branch (45:22): [True: 0, False: 4.73k]
  |  |  |  Branch (45:38): [True: 0, False: 4.73k]
  |  |  ------------------
  ------------------
  316|      0|    (*linep)++; /* move over it */
  317|  4.73k|}
strparse.c:str_num_base:
  172|  14.3k|{
  173|  14.3k|  curl_off_t num = 0;
  174|  14.3k|  const char *p;
  175|  14.3k|  int m = (base == 10) ? '9' :   /* the largest digit possible */
  ------------------
  |  Branch (175:11): [True: 14.3k, False: 0]
  ------------------
  176|  14.3k|    (base == 16) ? 'f' : '7';
  ------------------
  |  Branch (176:5): [True: 0, False: 0]
  ------------------
  177|  14.3k|  DEBUGASSERT(linep && *linep && nump);
  ------------------
  |  | 1077|  14.3k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (177:3): [True: 0, False: 14.3k]
  |  Branch (177:3): [True: 0, False: 0]
  |  Branch (177:3): [True: 0, False: 0]
  |  Branch (177:3): [True: 14.3k, False: 0]
  |  Branch (177:3): [True: 14.3k, False: 0]
  |  Branch (177:3): [True: 14.3k, False: 0]
  ------------------
  178|  14.3k|  DEBUGASSERT((base == 8) || (base == 10) || (base == 16));
  ------------------
  |  | 1077|  14.3k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (178:3): [True: 14.3k, False: 0]
  |  Branch (178:3): [True: 0, False: 0]
  |  Branch (178:3): [True: 0, False: 0]
  |  Branch (178:3): [True: 0, False: 14.3k]
  |  Branch (178:3): [True: 14.3k, False: 0]
  |  Branch (178:3): [True: 0, False: 0]
  ------------------
  179|  14.3k|  DEBUGASSERT(max >= 0); /* mostly to catch SIZE_MAX, which is too large */
  ------------------
  |  | 1077|  14.3k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (179:3): [True: 0, False: 14.3k]
  |  Branch (179:3): [True: 14.3k, False: 0]
  ------------------
  180|  14.3k|  *nump = 0;
  181|  14.3k|  p = *linep;
  182|  14.3k|  if(!valid_digit(*p, m))
  ------------------
  |  |  156|  14.3k|  (((x) >= '0') && ((x) <= (m)) && curlx_hexasciitable[(x) - '0'])
  |  |  ------------------
  |  |  |  Branch (156:4): [True: 14.3k, False: 8]
  |  |  |  Branch (156:20): [True: 14.2k, False: 107]
  |  |  |  Branch (156:36): [True: 14.2k, False: 0]
  |  |  ------------------
  ------------------
  183|    115|    return STRE_NO_NUM;
  ------------------
  |  |   36|    115|#define STRE_NO_NUM   8
  ------------------
  184|  14.2k|  if(max < base) {
  ------------------
  |  Branch (184:6): [True: 0, False: 14.2k]
  ------------------
  185|       |    /* special-case low max scenario because check needs to be different */
  186|      0|    do {
  187|      0|      int n = curlx_hexval(*p++);
  ------------------
  |  |  112|      0|#define curlx_hexval(x) (unsigned char)(curlx_hexasciitable[(x) - '0'] & 0x0f)
  ------------------
  188|      0|      num = (num * base) + n;
  189|      0|      if(num > max)
  ------------------
  |  Branch (189:10): [True: 0, False: 0]
  ------------------
  190|      0|        return STRE_OVERFLOW;
  ------------------
  |  |   35|      0|#define STRE_OVERFLOW 7
  ------------------
  191|      0|    } while(valid_digit(*p, m));
  ------------------
  |  |  156|      0|  (((x) >= '0') && ((x) <= (m)) && curlx_hexasciitable[(x) - '0'])
  |  |  ------------------
  |  |  |  Branch (156:4): [True: 0, False: 0]
  |  |  |  Branch (156:20): [True: 0, False: 0]
  |  |  |  Branch (156:36): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  192|      0|  }
  193|  14.2k|  else {
  194|  36.2k|    do {
  195|  36.2k|      int n = curlx_hexval(*p++);
  ------------------
  |  |  112|  36.2k|#define curlx_hexval(x) (unsigned char)(curlx_hexasciitable[(x) - '0'] & 0x0f)
  ------------------
  196|  36.2k|      if(num > ((max - n) / base))
  ------------------
  |  Branch (196:10): [True: 169, False: 36.0k]
  ------------------
  197|    169|        return STRE_OVERFLOW;
  ------------------
  |  |   35|    169|#define STRE_OVERFLOW 7
  ------------------
  198|  36.0k|      num = (num * base) + n;
  199|  36.0k|    } while(valid_digit(*p, m));
  ------------------
  |  |  156|  36.0k|  (((x) >= '0') && ((x) <= (m)) && curlx_hexasciitable[(x) - '0'])
  |  |  ------------------
  |  |  |  Branch (156:4): [True: 29.6k, False: 6.36k]
  |  |  |  Branch (156:20): [True: 21.9k, False: 7.74k]
  |  |  |  Branch (156:36): [True: 21.9k, False: 0]
  |  |  ------------------
  ------------------
  200|  14.2k|  }
  201|  14.1k|  *nump = num;
  202|  14.1k|  *linep = p;
  203|  14.1k|  return STRE_OK;
  ------------------
  |  |   28|  14.1k|#define STRE_OK       0
  ------------------
  204|  14.2k|}

curlx_pnow:
   54|    103|{
   55|       |  /*
   56|       |   * clock_gettime() is granted to be increased monotonically when the
   57|       |   * monotonic clock is queried. Time starting point is unspecified, it
   58|       |   * could be the system start-up time, the Epoch, or something else,
   59|       |   * in any case the time starting point does not change once that the
   60|       |   * system has started up.
   61|       |   */
   62|    103|  struct timespec tsnow;
   63|       |
   64|       |  /*
   65|       |   * clock_gettime() may be defined by Apple's SDK as weak symbol thus
   66|       |   * code compiles but fails during runtime if clock_gettime() is
   67|       |   * called on unsupported OS version.
   68|       |   */
   69|       |#if defined(__APPLE__) && defined(HAVE_BUILTIN_AVAILABLE) && \
   70|       |  (HAVE_BUILTIN_AVAILABLE == 1)
   71|       |  bool have_clock_gettime = FALSE;
   72|       |  if(__builtin_available(macOS 10.12, iOS 10, tvOS 10, watchOS 3, *))
   73|       |    have_clock_gettime = TRUE;
   74|       |#endif
   75|       |
   76|    103|#ifdef HAVE_CLOCK_GETTIME_MONOTONIC_RAW
   77|    103|  if(
   78|       |#if defined(__APPLE__) && defined(HAVE_BUILTIN_AVAILABLE) && \
   79|       |  (HAVE_BUILTIN_AVAILABLE == 1)
   80|       |    have_clock_gettime &&
   81|       |#endif
   82|    103|    (clock_gettime(CLOCK_MONOTONIC_RAW, &tsnow) == 0)) {
  ------------------
  |  Branch (82:5): [True: 103, False: 0]
  ------------------
   83|    103|    pnow->tv_sec = tsnow.tv_sec;
   84|    103|    pnow->tv_usec = (int)(tsnow.tv_nsec / 1000);
   85|    103|  }
   86|      0|  else
   87|      0|#endif
   88|       |
   89|      0|  if(
   90|       |#if defined(__APPLE__) && defined(HAVE_BUILTIN_AVAILABLE) && \
   91|       |  (HAVE_BUILTIN_AVAILABLE == 1)
   92|       |    have_clock_gettime &&
   93|       |#endif
   94|      0|    (clock_gettime(CLOCK_MONOTONIC, &tsnow) == 0)) {
  ------------------
  |  Branch (94:5): [True: 0, False: 0]
  ------------------
   95|      0|    pnow->tv_sec = tsnow.tv_sec;
   96|      0|    pnow->tv_usec = (int)(tsnow.tv_nsec / 1000);
   97|      0|  }
   98|       |  /*
   99|       |   * Even when the configure process has truly detected monotonic clock
  100|       |   * availability, it might happen that it is not actually available at
  101|       |   * runtime. When this occurs, fallback to other time source.
  102|       |   */
  103|      0|#ifdef HAVE_GETTIMEOFDAY
  104|      0|  else {
  105|      0|    struct timeval now;
  106|      0|    (void)gettimeofday(&now, NULL);
  107|      0|    pnow->tv_sec = now.tv_sec;
  108|      0|    pnow->tv_usec = (int)now.tv_usec;
  109|      0|  }
  110|       |#else
  111|       |  else {
  112|       |    pnow->tv_sec = time(NULL);
  113|       |    pnow->tv_usec = 0;
  114|       |  }
  115|       |#endif
  116|    103|}

curlx_uztosi:
   73|  6.53k|{
   74|       |#ifdef __INTEL_COMPILER
   75|       |#pragma warning(push)
   76|       |#pragma warning(disable:810) /* conversion may lose significant bits */
   77|       |#endif
   78|       |
   79|  6.53k|  DEBUGASSERT(uznum <= (size_t)CURL_MASK_SINT);
  ------------------
  |  | 1077|  6.53k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (79:3): [True: 0, False: 6.53k]
  |  Branch (79:3): [True: 6.53k, False: 0]
  ------------------
   80|  6.53k|  return (int)(uznum & (size_t)CURL_MASK_SINT);
  ------------------
  |  |   44|  6.53k|#define CURL_MASK_SINT    (CURL_MASK_UINT >> 1)
  |  |  ------------------
  |  |  |  |   43|  6.53k|#define CURL_MASK_UINT    ((unsigned int)~0)
  |  |  ------------------
  ------------------
   81|       |
   82|       |#ifdef __INTEL_COMPILER
   83|       |#pragma warning(pop)
   84|       |#endif
   85|  6.53k|}
curlx_sltous:
  173|     46|{
  174|       |#ifdef __INTEL_COMPILER
  175|       |#pragma warning(push)
  176|       |#pragma warning(disable:810) /* conversion may lose significant bits */
  177|       |#endif
  178|       |
  179|     46|  DEBUGASSERT(slnum >= 0);
  ------------------
  |  | 1077|     46|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (179:3): [True: 0, False: 46]
  |  Branch (179:3): [True: 46, False: 0]
  ------------------
  180|     46|  DEBUGASSERT((unsigned long)slnum <= (unsigned long)CURL_MASK_USHORT);
  ------------------
  |  | 1077|     46|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (180:3): [True: 0, False: 46]
  |  Branch (180:3): [True: 46, False: 0]
  ------------------
  181|     46|  return (unsigned short)(slnum & (long)CURL_MASK_USHORT);
  ------------------
  |  |   41|     46|#define CURL_MASK_USHORT  ((unsigned short)~0)
  ------------------
  182|       |
  183|       |#ifdef __INTEL_COMPILER
  184|       |#pragma warning(pop)
  185|       |#endif
  186|     46|}

curl_easy_init:
  331|  6.82k|{
  332|  6.82k|  CURLcode result;
  333|  6.82k|  struct Curl_easy *data;
  334|       |
  335|       |  /* Make sure we inited the global SSL stuff */
  336|  6.82k|  global_init_lock();
  ------------------
  |  |   87|  6.82k|#define global_init_lock()   curl_simple_lock_lock(&s_lock)
  ------------------
  337|       |
  338|  6.82k|  if(!initialized) {
  ------------------
  |  Branch (338:6): [True: 1, False: 6.82k]
  ------------------
  339|      1|    result = global_init(CURL_GLOBAL_DEFAULT, TRUE);
  ------------------
  |  | 3028|      1|#define CURL_GLOBAL_DEFAULT CURL_GLOBAL_ALL
  |  |  ------------------
  |  |  |  | 3026|      1|#define CURL_GLOBAL_ALL (CURL_GLOBAL_SSL | CURL_GLOBAL_WIN32)
  |  |  |  |  ------------------
  |  |  |  |  |  | 3024|      1|#define CURL_GLOBAL_SSL (1 << 0) /* no purpose since 7.57.0 */
  |  |  |  |  ------------------
  |  |  |  |               #define CURL_GLOBAL_ALL (CURL_GLOBAL_SSL | CURL_GLOBAL_WIN32)
  |  |  |  |  ------------------
  |  |  |  |  |  | 3025|      1|#define CURL_GLOBAL_WIN32 (1 << 1)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  result = global_init(CURL_GLOBAL_DEFAULT, TRUE);
  ------------------
  |  | 1051|      1|#define TRUE true
  ------------------
  340|      1|    if(result) {
  ------------------
  |  Branch (340:8): [True: 0, False: 1]
  ------------------
  341|       |      /* something in the global init failed, return nothing */
  342|      0|      DEBUGF(curl_mfprintf(stderr, "Error: curl_global_init failed\n"));
  ------------------
  |  | 1063|      0|#define DEBUGF(x) x
  ------------------
  343|      0|      global_init_unlock();
  ------------------
  |  |   88|      0|#define global_init_unlock() curl_simple_lock_unlock(&s_lock)
  ------------------
  344|      0|      return NULL;
  345|      0|    }
  346|      1|  }
  347|  6.82k|  global_init_unlock();
  ------------------
  |  |   88|  6.82k|#define global_init_unlock() curl_simple_lock_unlock(&s_lock)
  ------------------
  348|       |
  349|       |  /* We use Curl_open() with undefined URL so far */
  350|  6.82k|  result = Curl_open(&data);
  351|  6.82k|  if(result) {
  ------------------
  |  Branch (351:6): [True: 0, False: 6.82k]
  ------------------
  352|      0|    DEBUGF(curl_mfprintf(stderr, "Error: Curl_open failed\n"));
  ------------------
  |  | 1063|      0|#define DEBUGF(x) x
  ------------------
  353|      0|    return NULL;
  354|      0|  }
  355|       |
  356|  6.82k|  return data;
  357|  6.82k|}
curl_easy_cleanup:
  839|  6.82k|{
  840|  6.82k|  struct Curl_easy *data = curl;
  841|  6.82k|  if(GOOD_EASY_HANDLE(data)) {
  ------------------
  |  |  141|  6.82k|  (((x) && ((x)->magic == CURLEASY_MAGIC_NUMBER)) ? TRUE : \
  |  |  ------------------
  |  |  |  |  135|  6.82k|#define CURLEASY_MAGIC_NUMBER 0xc0dedbadU
  |  |  ------------------
  |  |                 (((x) && ((x)->magic == CURLEASY_MAGIC_NUMBER)) ? TRUE : \
  |  |  ------------------
  |  |  |  | 1051|  6.82k|#define TRUE true
  |  |  ------------------
  |  |  |  Branch (141:3): [True: 6.82k, False: 0]
  |  |  |  Branch (141:5): [True: 6.82k, False: 0]
  |  |  |  Branch (141:12): [True: 6.82k, False: 0]
  |  |  ------------------
  |  |  142|  6.82k|   (DEBUGASSERT(!(x)), FALSE))
  |  |  ------------------
  |  |  |  | 1077|      0|#define DEBUGASSERT(x) assert(x)
  |  |  ------------------
  |  |                  (DEBUGASSERT(!(x)), FALSE))
  |  |  ------------------
  |  |  |  | 1054|      0|#define FALSE false
  |  |  ------------------
  ------------------
  |  Branch (841:6): [True: 0, False: 0]
  |  Branch (841:6): [True: 0, False: 0]
  ------------------
  842|  6.82k|    struct Curl_sigpipe_ctx sigpipe_ctx;
  843|  6.82k|    sigpipe_ignore(data, &sigpipe_ctx);
  844|  6.82k|    Curl_close(&data);
  845|  6.82k|    sigpipe_restore(&sigpipe_ctx);
  846|  6.82k|  }
  847|  6.82k|}
easy.c:global_init:
  125|      1|{
  126|      1|  if(initialized++)
  ------------------
  |  Branch (126:6): [True: 0, False: 1]
  ------------------
  127|      0|    return CURLE_OK;
  128|       |
  129|      1|  if(memoryfuncs) {
  ------------------
  |  Branch (129:6): [True: 1, False: 0]
  ------------------
  130|       |    /* Setup the default memory functions here (again) */
  131|      1|    Curl_cmalloc = (curl_malloc_callback)malloc;
  132|      1|    Curl_cfree = (curl_free_callback)free;
  133|      1|    Curl_crealloc = (curl_realloc_callback)realloc;
  134|      1|    Curl_cstrdup = (curl_strdup_callback)CURLX_STRDUP_LOW;
  ------------------
  |  | 1477|      1|#define CURLX_STRDUP_LOW strdup
  ------------------
  135|      1|    Curl_ccalloc = (curl_calloc_callback)calloc;
  136|      1|  }
  137|       |
  138|      1|  if(Curl_trc_init()) {
  ------------------
  |  Branch (138:6): [True: 0, False: 1]
  ------------------
  139|      0|    DEBUGF(curl_mfprintf(stderr, "Error: Curl_trc_init failed\n"));
  ------------------
  |  | 1063|      0|#define DEBUGF(x) x
  ------------------
  140|      0|    goto fail;
  141|      0|  }
  142|       |
  143|      1|  if(!Curl_ssl_init()) {
  ------------------
  |  Branch (143:6): [True: 0, False: 1]
  ------------------
  144|      0|    DEBUGF(curl_mfprintf(stderr, "Error: Curl_ssl_init failed\n"));
  ------------------
  |  | 1063|      0|#define DEBUGF(x) x
  ------------------
  145|      0|    goto fail;
  146|      0|  }
  147|       |
  148|      1|  if(!Curl_vquic_init()) {
  ------------------
  |  |   82|      1|#define Curl_vquic_init() 1
  ------------------
  |  Branch (148:6): [Folded, False: 1]
  ------------------
  149|      0|    DEBUGF(curl_mfprintf(stderr, "Error: Curl_vquic_init failed\n"));
  ------------------
  |  | 1063|      0|#define DEBUGF(x) x
  ------------------
  150|      0|    goto fail;
  151|      0|  }
  152|       |
  153|      1|  if(Curl_win32_init(flags)) {
  ------------------
  |  |   34|      1|#define Curl_win32_init(x) CURLE_OK
  |  |  ------------------
  |  |  |  Branch (34:28): [Folded, False: 1]
  |  |  ------------------
  ------------------
  154|      0|    DEBUGF(curl_mfprintf(stderr, "Error: win32_init failed\n"));
  ------------------
  |  | 1063|      0|#define DEBUGF(x) x
  ------------------
  155|      0|    goto fail;
  156|      0|  }
  157|       |
  158|      1|  if(Curl_amiga_init()) {
  ------------------
  |  |   36|      1|#define Curl_amiga_init()    CURLE_OK
  |  |  ------------------
  |  |  |  Branch (36:30): [Folded, False: 1]
  |  |  ------------------
  ------------------
  159|      0|    DEBUGF(curl_mfprintf(stderr, "Error: Curl_amiga_init failed\n"));
  ------------------
  |  | 1063|      0|#define DEBUGF(x) x
  ------------------
  160|      0|    goto fail;
  161|      0|  }
  162|       |
  163|      1|  if(Curl_macos_init()) {
  ------------------
  |  |   31|      1|#define Curl_macos_init() CURLE_OK
  |  |  ------------------
  |  |  |  Branch (31:27): [Folded, False: 1]
  |  |  ------------------
  ------------------
  164|      0|    DEBUGF(curl_mfprintf(stderr, "Error: Curl_macos_init failed\n"));
  ------------------
  |  | 1063|      0|#define DEBUGF(x) x
  ------------------
  165|      0|    goto fail;
  166|      0|  }
  167|       |
  168|      1|  if(Curl_async_global_init()) {
  ------------------
  |  Branch (168:6): [True: 0, False: 1]
  ------------------
  169|      0|    DEBUGF(curl_mfprintf(stderr, "Error: resolver_global_init failed\n"));
  ------------------
  |  | 1063|      0|#define DEBUGF(x) x
  ------------------
  170|      0|    goto fail;
  171|      0|  }
  172|       |
  173|      1|  if(Curl_ssh_init()) {
  ------------------
  |  |  259|      1|#define Curl_ssh_init() 0
  |  |  ------------------
  |  |  |  Branch (259:25): [Folded, False: 1]
  |  |  ------------------
  ------------------
  174|      0|    DEBUGF(curl_mfprintf(stderr, "Error: Curl_ssh_init failed\n"));
  ------------------
  |  | 1063|      0|#define DEBUGF(x) x
  ------------------
  175|      0|    goto fail;
  176|      0|  }
  177|       |
  178|      1|  easy_init_flags = flags;
  179|       |
  180|      1|#ifdef DEBUGBUILD
  181|      1|  if(getenv("CURL_GLOBAL_INIT"))
  ------------------
  |  Branch (181:6): [True: 0, False: 1]
  ------------------
  182|       |    /* alloc data that will leak if *cleanup() is not called! */
  183|      0|    leakpointer = curlx_malloc(1);
  ------------------
  |  | 1483|      0|#define curlx_malloc(size)         curl_dbg_malloc(size, __LINE__, __FILE__)
  ------------------
  184|      1|#endif
  185|       |
  186|      1|  return CURLE_OK;
  187|       |
  188|      0|fail:
  189|      0|  initialized--; /* undo the increase */
  190|      0|  return CURLE_FAILED_INIT;
  191|      1|}

easy.c:curl_simple_lock_lock:
   64|  6.82k|{
   65|  6.82k|  for(;;) {
   66|  6.82k|    if(!atomic_exchange_explicit(lock, true, memory_order_acquire))
  ------------------
  |  Branch (66:8): [True: 6.82k, False: 0]
  ------------------
   67|  6.82k|      break;
   68|       |    /* Reduce cache coherency traffic */
   69|      0|    while(atomic_load_explicit(lock, memory_order_relaxed)) {
  ------------------
  |  Branch (69:11): [True: 0, False: 0]
  ------------------
   70|       |      /* Reduce load (not mandatory) */
   71|      0|#ifdef HAVE_BUILTIN_IA32_PAUSE
   72|      0|      __builtin_ia32_pause();
   73|       |#elif defined(__aarch64__)
   74|       |      __asm__ volatile("yield" ::: "memory");
   75|       |#elif defined(HAVE_SCHED_YIELD)
   76|       |      sched_yield();
   77|       |#endif
   78|      0|    }
   79|      0|  }
   80|  6.82k|}
easy.c:curl_simple_lock_unlock:
   83|  6.82k|{
   84|  6.82k|  atomic_store_explicit(lock, false, memory_order_release);
   85|  6.82k|}

Curl_urldecode:
  108|    189|{
  109|    189|  size_t alloc;
  110|    189|  char *ns;
  111|       |
  112|    189|  DEBUGASSERT(string);
  ------------------
  |  | 1077|    189|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (112:3): [True: 0, False: 189]
  |  Branch (112:3): [True: 189, False: 0]
  ------------------
  113|    189|  DEBUGASSERT(ctrl >= REJECT_NADA); /* crash on TRUE/FALSE */
  ------------------
  |  | 1077|    189|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (113:3): [True: 0, False: 189]
  |  Branch (113:3): [True: 189, False: 0]
  ------------------
  114|       |
  115|    189|  alloc = (length ? length : strlen(string));
  ------------------
  |  Branch (115:12): [True: 0, False: 189]
  ------------------
  116|    189|  ns = curlx_malloc(alloc + 1);
  ------------------
  |  | 1483|    189|#define curlx_malloc(size)         curl_dbg_malloc(size, __LINE__, __FILE__)
  ------------------
  117|       |
  118|    189|  if(!ns)
  ------------------
  |  Branch (118:6): [True: 0, False: 189]
  ------------------
  119|      0|    return CURLE_OUT_OF_MEMORY;
  120|       |
  121|       |  /* store output string */
  122|    189|  *ostring = ns;
  123|       |
  124|  39.9k|  while(alloc) {
  ------------------
  |  Branch (124:9): [True: 39.7k, False: 186]
  ------------------
  125|  39.7k|    unsigned char in = (unsigned char)*string;
  126|  39.7k|    if(('%' == in) && (alloc > 2) &&
  ------------------
  |  Branch (126:8): [True: 10.8k, False: 28.9k]
  |  Branch (126:23): [True: 10.7k, False: 43]
  ------------------
  127|  10.7k|       ISXDIGIT(string[1]) && ISXDIGIT(string[2])) {
  ------------------
  |  |   39|  50.5k|#define ISXDIGIT(x) (ISDIGIT(x) || ISLOWHEXALPHA(x) || ISUPHEXALPHA(x))
  |  |  ------------------
  |  |  |  |   44|  21.5k|#define ISDIGIT(x)  (((x) >= '0') && ((x) <= '9'))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (44:22): [True: 4.78k, False: 5.98k]
  |  |  |  |  |  Branch (44:38): [True: 429, False: 4.35k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define ISXDIGIT(x) (ISDIGIT(x) || ISLOWHEXALPHA(x) || ISUPHEXALPHA(x))
  |  |  ------------------
  |  |  |  |   27|  21.1k|#define ISLOWHEXALPHA(x) (((x) >= 'a') && ((x) <= 'f'))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (27:27): [True: 1.96k, False: 8.38k]
  |  |  |  |  |  Branch (27:43): [True: 1.52k, False: 434]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define ISXDIGIT(x) (ISDIGIT(x) || ISLOWHEXALPHA(x) || ISUPHEXALPHA(x))
  |  |  ------------------
  |  |  |  |   28|  8.81k|#define ISUPHEXALPHA(x)  (((x) >= 'A') && ((x) <= 'F'))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (28:27): [True: 2.78k, False: 6.02k]
  |  |  |  |  |  Branch (28:43): [True: 2.20k, False: 578]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                     ISXDIGIT(string[1]) && ISXDIGIT(string[2])) {
  ------------------
  |  |   39|  4.16k|#define ISXDIGIT(x) (ISDIGIT(x) || ISLOWHEXALPHA(x) || ISUPHEXALPHA(x))
  |  |  ------------------
  |  |  |  |   44|  8.33k|#define ISDIGIT(x)  (((x) >= '0') && ((x) <= '9'))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (44:22): [True: 3.01k, False: 1.14k]
  |  |  |  |  |  Branch (44:38): [True: 462, False: 2.55k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define ISXDIGIT(x) (ISDIGIT(x) || ISLOWHEXALPHA(x) || ISUPHEXALPHA(x))
  |  |  ------------------
  |  |  |  |   27|  7.87k|#define ISLOWHEXALPHA(x) (((x) >= 'a') && ((x) <= 'f'))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (27:27): [True: 1.47k, False: 2.23k]
  |  |  |  |  |  Branch (27:43): [True: 622, False: 850]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define ISXDIGIT(x) (ISDIGIT(x) || ISLOWHEXALPHA(x) || ISUPHEXALPHA(x))
  |  |  ------------------
  |  |  |  |   28|  3.08k|#define ISUPHEXALPHA(x)  (((x) >= 'A') && ((x) <= 'F'))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (28:27): [True: 1.88k, False: 1.19k]
  |  |  |  |  |  Branch (28:43): [True: 742, False: 1.14k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  128|       |      /* this is two hexadecimal digits following a '%' */
  129|  1.82k|      in = (unsigned char)((curlx_hexval(string[1]) << 4) |
  ------------------
  |  |  112|  1.82k|#define curlx_hexval(x) (unsigned char)(curlx_hexasciitable[(x) - '0'] & 0x0f)
  ------------------
  130|  1.82k|                           curlx_hexval(string[2]));
  ------------------
  |  |  112|  1.82k|#define curlx_hexval(x) (unsigned char)(curlx_hexasciitable[(x) - '0'] & 0x0f)
  ------------------
  131|  1.82k|      string += 3;
  132|  1.82k|      alloc -= 3;
  133|  1.82k|    }
  134|  37.9k|    else {
  135|  37.9k|      string++;
  136|  37.9k|      alloc--;
  137|  37.9k|    }
  138|       |
  139|  39.7k|    if(((ctrl == REJECT_CTRL) && (in < 0x20)) ||
  ------------------
  |  Branch (139:9): [True: 0, False: 39.7k]
  |  Branch (139:34): [True: 0, False: 0]
  ------------------
  140|  39.7k|       ((ctrl == REJECT_ZERO) && (in == 0))) {
  ------------------
  |  Branch (140:9): [True: 39.7k, False: 0]
  |  Branch (140:34): [True: 3, False: 39.7k]
  ------------------
  141|      3|      curlx_safefree(*ostring);
  ------------------
  |  | 1332|      3|  do {                      \
  |  | 1333|      3|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1488|      3|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|      3|    (ptr) = NULL;           \
  |  | 1335|      3|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 3]
  |  |  ------------------
  ------------------
  142|      3|      return CURLE_URL_MALFORMAT;
  143|      3|    }
  144|       |
  145|  39.7k|    *ns++ = (char)in;
  146|  39.7k|  }
  147|    186|  *ns = 0; /* terminate it */
  148|       |
  149|    186|  if(olen)
  ------------------
  |  Branch (149:6): [True: 0, False: 186]
  ------------------
  150|       |    /* store output size */
  151|      0|    *olen = ns - *ostring;
  152|       |
  153|    186|  return CURLE_OK;
  154|    189|}

curl_formadd:
  610|     12|{
  611|     12|  va_list arg;
  612|     12|  CURLFORMcode form;
  613|     12|  va_start(arg, last_post);
  614|     12|  form = formadd(httppost, last_post, arg);
  615|       |  va_end(arg);
  616|     12|  return form;
  617|     12|}
curl_formfree:
  665|     24|{
  666|     24|  struct curl_httppost *next;
  667|       |
  668|     24|  if(!form)
  ------------------
  |  Branch (668:6): [True: 12, False: 12]
  ------------------
  669|       |    /* no form to free, get out of this */
  670|     12|    return;
  671|       |
  672|     12|  do {
  673|     12|    next = form->next;  /* the following form line */
  674|       |
  675|       |    /* recurse to sub-contents */
  676|     12|    curl_formfree(form->more);
  677|       |
  678|     12|    if(!(form->flags & HTTPPOST_PTRNAME))
  ------------------
  |  |   39|     12|#define HTTPPOST_PTRNAME     CURL_HTTPPOST_PTRNAME
  |  |  ------------------
  |  |  |  |  209|     12|#define CURL_HTTPPOST_PTRNAME (1 << 2)
  |  |  ------------------
  ------------------
  |  Branch (678:8): [True: 12, False: 0]
  ------------------
  679|     12|      curlx_free(form->name); /* free the name */
  ------------------
  |  | 1488|     12|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  680|     12|    if(!(form->flags &
  ------------------
  |  Branch (680:8): [True: 0, False: 12]
  ------------------
  681|     12|         (HTTPPOST_PTRCONTENTS | HTTPPOST_BUFFER | HTTPPOST_CALLBACK)))
  ------------------
  |  |   41|     12|#define HTTPPOST_PTRCONTENTS CURL_HTTPPOST_PTRCONTENTS
  |  |  ------------------
  |  |  |  |  211|     12|#define CURL_HTTPPOST_PTRCONTENTS (1 << 3)
  |  |  ------------------
  ------------------
                       (HTTPPOST_PTRCONTENTS | HTTPPOST_BUFFER | HTTPPOST_CALLBACK)))
  ------------------
  |  |   45|     12|#define HTTPPOST_BUFFER      CURL_HTTPPOST_BUFFER
  |  |  ------------------
  |  |  |  |  213|     12|#define CURL_HTTPPOST_BUFFER (1 << 4)
  |  |  ------------------
  ------------------
                       (HTTPPOST_PTRCONTENTS | HTTPPOST_BUFFER | HTTPPOST_CALLBACK)))
  ------------------
  |  |   44|     12|#define HTTPPOST_CALLBACK    CURL_HTTPPOST_CALLBACK
  |  |  ------------------
  |  |  |  |  218|     12|#define CURL_HTTPPOST_CALLBACK (1 << 6)
  |  |  ------------------
  ------------------
  682|      0|      curlx_free(form->contents); /* free the contents */
  ------------------
  |  | 1488|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  683|     12|    curlx_free(form->contenttype); /* free the content type */
  ------------------
  |  | 1488|     12|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  684|     12|    curlx_free(form->showfilename); /* free the faked filename */
  ------------------
  |  | 1488|     12|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  685|     12|    curlx_free(form);       /* free the struct */
  ------------------
  |  | 1488|     12|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  686|     12|    form = next;
  687|     12|  } while(form); /* continue */
  ------------------
  |  Branch (687:11): [True: 0, False: 12]
  ------------------
  688|     12|}
formdata.c:formadd:
  302|     12|{
  303|     12|  struct FormInfo *first_form, *curr, *form = NULL;
  304|     12|  CURLFORMcode retval = CURL_FORMADD_OK;
  305|     12|  CURLformoption option;
  306|     12|  const struct curl_forms *forms = NULL;
  307|     12|  char *avalue = NULL;
  308|     12|  struct curl_httppost *newchain = NULL;
  309|     12|  struct curl_httppost *lastnode = NULL;
  310|       |
  311|     12|#define form_ptr_arg(t) (forms ? (t)(void *)avalue : va_arg(params, t))
  312|     12|#ifdef HAVE_UINTPTR_T
  313|     12|#define form_int_arg(t) (forms ? (t)(uintptr_t)avalue : va_arg(params, t))
  314|       |#else
  315|       |#define form_int_arg(t) (forms ? (t)(void *)avalue : va_arg(params, t))
  316|       |#endif
  317|       |
  318|       |  /*
  319|       |   * We need to allocate the first struct to fill in.
  320|       |   */
  321|     12|  first_form = forminfo_new();
  322|     12|  if(!first_form)
  ------------------
  |  Branch (322:6): [True: 0, False: 12]
  ------------------
  323|      0|    return CURL_FORMADD_MEMORY;
  324|       |
  325|     12|  curr = first_form;
  326|       |
  327|       |  /*
  328|       |   * Loop through all the options set. Break if we have an error to report.
  329|       |   */
  330|     48|  while(retval == CURL_FORMADD_OK) {
  ------------------
  |  Branch (330:9): [True: 48, False: 0]
  ------------------
  331|       |
  332|       |    /* first see if we have more parts of the array param */
  333|     48|    if(forms) {
  ------------------
  |  Branch (333:8): [True: 0, False: 48]
  ------------------
  334|       |      /* get the upcoming option from the given array */
  335|      0|      option = forms->option;
  336|      0|      avalue = (char *)CURL_UNCONST(forms->value);
  ------------------
  |  |  862|      0|#define CURL_UNCONST(p) ((void *)(uintptr_t)(const void *)(p))
  ------------------
  337|       |
  338|      0|      forms++; /* advance this to next entry */
  339|      0|      if(CURLFORM_END == option) {
  ------------------
  |  Branch (339:10): [True: 0, False: 0]
  ------------------
  340|       |        /* end of array state */
  341|      0|        forms = NULL;
  342|      0|        continue;
  343|      0|      }
  344|      0|    }
  345|     48|    else {
  346|       |      /* This is not array-state, get next option. This gets an 'int' with
  347|       |         va_arg() because CURLformoption might be a smaller type than int and
  348|       |         might cause compiler warnings and wrong behavior. */
  349|     48|      option = (CURLformoption)va_arg(params, int);
  350|     48|      if(CURLFORM_END == option)
  ------------------
  |  Branch (350:10): [True: 12, False: 36]
  ------------------
  351|     12|        break;
  352|     48|    }
  353|       |
  354|     36|    switch(option) {
  355|      0|    case CURLFORM_ARRAY:
  ------------------
  |  Branch (355:5): [True: 0, False: 36]
  ------------------
  356|      0|      if(forms)
  ------------------
  |  Branch (356:10): [True: 0, False: 0]
  ------------------
  357|       |        /* we do not support an array from within an array */
  358|      0|        retval = CURL_FORMADD_ILLEGAL_ARRAY;
  359|      0|      else {
  360|      0|        forms = va_arg(params, struct curl_forms *);
  361|      0|        if(!forms)
  ------------------
  |  Branch (361:12): [True: 0, False: 0]
  ------------------
  362|      0|          retval = CURL_FORMADD_NULL;
  363|      0|      }
  364|      0|      break;
  365|       |
  366|       |      /*
  367|       |       * Set the Name property.
  368|       |       */
  369|      0|    case CURLFORM_PTRNAME:
  ------------------
  |  Branch (369:5): [True: 0, False: 36]
  ------------------
  370|      0|      curr->flags |= HTTPPOST_PTRNAME;
  ------------------
  |  |   39|      0|#define HTTPPOST_PTRNAME     CURL_HTTPPOST_PTRNAME
  |  |  ------------------
  |  |  |  |  209|      0|#define CURL_HTTPPOST_PTRNAME (1 << 2)
  |  |  ------------------
  ------------------
  371|      0|      FALLTHROUGH();
  ------------------
  |  |  817|      0|#  define FALLTHROUGH()  __attribute__((fallthrough))
  ------------------
  372|     12|    case CURLFORM_COPYNAME:
  ------------------
  |  Branch (372:5): [True: 12, False: 24]
  ------------------
  373|     12|      if(Curl_bufref_ptr(&curr->name))
  ------------------
  |  Branch (373:10): [True: 0, False: 12]
  ------------------
  374|      0|        retval = CURL_FORMADD_OPTION_TWICE;
  375|     12|      else {
  376|     12|        avalue = form_ptr_arg(char *);
  ------------------
  |  |  311|     12|#define form_ptr_arg(t) (forms ? (t)(void *)avalue : va_arg(params, t))
  |  |  ------------------
  |  |  |  Branch (311:26): [True: 0, False: 12]
  |  |  ------------------
  ------------------
  377|     12|        if(avalue)
  ------------------
  |  Branch (377:12): [True: 12, False: 0]
  ------------------
  378|     12|          Curl_bufref_set(&curr->name, avalue, 0, NULL); /* No copy yet. */
  379|      0|        else
  380|      0|          retval = CURL_FORMADD_NULL;
  381|     12|      }
  382|     12|      break;
  383|      0|    case CURLFORM_NAMELENGTH:
  ------------------
  |  Branch (383:5): [True: 0, False: 36]
  ------------------
  384|      0|      if(curr->namelength)
  ------------------
  |  Branch (384:10): [True: 0, False: 0]
  ------------------
  385|      0|        retval = CURL_FORMADD_OPTION_TWICE;
  386|      0|      else
  387|      0|        curr->namelength = (size_t)form_int_arg(long);
  ------------------
  |  |  313|      0|#define form_int_arg(t) (forms ? (t)(uintptr_t)avalue : va_arg(params, t))
  |  |  ------------------
  |  |  |  Branch (313:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  388|      0|      break;
  389|       |
  390|       |      /*
  391|       |       * Set the contents property.
  392|       |       */
  393|     12|    case CURLFORM_PTRCONTENTS:
  ------------------
  |  Branch (393:5): [True: 12, False: 24]
  ------------------
  394|     12|      curr->flags |= HTTPPOST_PTRCONTENTS;
  ------------------
  |  |   41|     12|#define HTTPPOST_PTRCONTENTS CURL_HTTPPOST_PTRCONTENTS
  |  |  ------------------
  |  |  |  |  211|     12|#define CURL_HTTPPOST_PTRCONTENTS (1 << 3)
  |  |  ------------------
  ------------------
  395|     12|      FALLTHROUGH();
  ------------------
  |  |  817|     12|#  define FALLTHROUGH()  __attribute__((fallthrough))
  ------------------
  396|     12|    case CURLFORM_COPYCONTENTS:
  ------------------
  |  Branch (396:5): [True: 0, False: 36]
  ------------------
  397|     12|      if(Curl_bufref_ptr(&curr->value))
  ------------------
  |  Branch (397:10): [True: 0, False: 12]
  ------------------
  398|      0|        retval = CURL_FORMADD_OPTION_TWICE;
  399|     12|      else {
  400|     12|        avalue = form_ptr_arg(char *);
  ------------------
  |  |  311|     12|#define form_ptr_arg(t) (forms ? (t)(void *)avalue : va_arg(params, t))
  |  |  ------------------
  |  |  |  Branch (311:26): [True: 0, False: 12]
  |  |  ------------------
  ------------------
  401|     12|        if(avalue)
  ------------------
  |  Branch (401:12): [True: 12, False: 0]
  ------------------
  402|     12|          Curl_bufref_set(&curr->value, avalue, 0, NULL); /* No copy yet. */
  403|      0|        else
  404|      0|          retval = CURL_FORMADD_NULL;
  405|     12|      }
  406|     12|      break;
  407|      0|    case CURLFORM_CONTENTSLENGTH:
  ------------------
  |  Branch (407:5): [True: 0, False: 36]
  ------------------
  408|      0|      curr->contentslength = (curl_off_t)(size_t)form_int_arg(long);
  ------------------
  |  |  313|      0|#define form_int_arg(t) (forms ? (t)(uintptr_t)avalue : va_arg(params, t))
  |  |  ------------------
  |  |  |  Branch (313:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  409|      0|      break;
  410|       |
  411|     12|    case CURLFORM_CONTENTLEN:
  ------------------
  |  Branch (411:5): [True: 12, False: 24]
  ------------------
  412|     12|      curr->flags |= CURL_HTTPPOST_LARGE;
  ------------------
  |  |  220|     12|#define CURL_HTTPPOST_LARGE (1 << 7)
  ------------------
  413|     12|      curr->contentslength = form_int_arg(curl_off_t);
  ------------------
  |  |  313|     12|#define form_int_arg(t) (forms ? (t)(uintptr_t)avalue : va_arg(params, t))
  |  |  ------------------
  |  |  |  Branch (313:26): [True: 0, False: 12]
  |  |  ------------------
  ------------------
  414|     12|      break;
  415|       |
  416|       |      /* Get contents from a given filename */
  417|      0|    case CURLFORM_FILECONTENT:
  ------------------
  |  Branch (417:5): [True: 0, False: 36]
  ------------------
  418|      0|      if(curr->flags & (HTTPPOST_PTRCONTENTS | HTTPPOST_READFILE))
  ------------------
  |  |   41|      0|#define HTTPPOST_PTRCONTENTS CURL_HTTPPOST_PTRCONTENTS
  |  |  ------------------
  |  |  |  |  211|      0|#define CURL_HTTPPOST_PTRCONTENTS (1 << 3)
  |  |  ------------------
  ------------------
                    if(curr->flags & (HTTPPOST_PTRCONTENTS | HTTPPOST_READFILE))
  ------------------
  |  |   42|      0|#define HTTPPOST_READFILE    CURL_HTTPPOST_READFILE
  |  |  ------------------
  |  |  |  |  207|      0|#define CURL_HTTPPOST_READFILE (1 << 1)
  |  |  ------------------
  ------------------
  |  Branch (418:10): [True: 0, False: 0]
  ------------------
  419|      0|        retval = CURL_FORMADD_OPTION_TWICE;
  420|      0|      else {
  421|      0|        avalue = form_ptr_arg(char *);
  ------------------
  |  |  311|      0|#define form_ptr_arg(t) (forms ? (t)(void *)avalue : va_arg(params, t))
  |  |  ------------------
  |  |  |  Branch (311:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  422|      0|        if(avalue) {
  ------------------
  |  Branch (422:12): [True: 0, False: 0]
  ------------------
  423|      0|          if(Curl_bufref_memdup0(&curr->value, avalue, strlen(avalue)))
  ------------------
  |  Branch (423:14): [True: 0, False: 0]
  ------------------
  424|      0|            retval = CURL_FORMADD_MEMORY;
  425|      0|          else
  426|      0|            curr->flags |= HTTPPOST_READFILE;
  ------------------
  |  |   42|      0|#define HTTPPOST_READFILE    CURL_HTTPPOST_READFILE
  |  |  ------------------
  |  |  |  |  207|      0|#define CURL_HTTPPOST_READFILE (1 << 1)
  |  |  ------------------
  ------------------
  427|      0|        }
  428|      0|        else
  429|      0|          retval = CURL_FORMADD_NULL;
  430|      0|      }
  431|      0|      break;
  432|       |
  433|       |      /* We upload a file */
  434|      0|    case CURLFORM_FILE:
  ------------------
  |  Branch (434:5): [True: 0, False: 36]
  ------------------
  435|      0|      avalue = form_ptr_arg(char *);
  ------------------
  |  |  311|      0|#define form_ptr_arg(t) (forms ? (t)(void *)avalue : va_arg(params, t))
  |  |  ------------------
  |  |  |  Branch (311:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  436|      0|      if(Curl_bufref_ptr(&curr->value)) {
  ------------------
  |  Branch (436:10): [True: 0, False: 0]
  ------------------
  437|      0|        if(curr->flags & HTTPPOST_FILENAME) {
  ------------------
  |  |   40|      0|#define HTTPPOST_FILENAME    CURL_HTTPPOST_FILENAME
  |  |  ------------------
  |  |  |  |  205|      0|#define CURL_HTTPPOST_FILENAME (1 << 0)
  |  |  ------------------
  ------------------
  |  Branch (437:12): [True: 0, False: 0]
  ------------------
  438|      0|          if(avalue) {
  ------------------
  |  Branch (438:14): [True: 0, False: 0]
  ------------------
  439|      0|            form = forminfo_new();
  440|      0|            if(!form ||
  ------------------
  |  Branch (440:16): [True: 0, False: 0]
  ------------------
  441|      0|               Curl_bufref_memdup0(&form->value, avalue, strlen(avalue))) {
  ------------------
  |  Branch (441:16): [True: 0, False: 0]
  ------------------
  442|      0|              curlx_free(form);
  ------------------
  |  | 1488|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  443|      0|              retval = CURL_FORMADD_MEMORY;
  444|      0|            }
  445|      0|            else {
  446|      0|              forminfo_add(form, curr);
  447|      0|              curr = form;
  448|      0|              form = NULL;
  449|      0|            }
  450|      0|          }
  451|      0|          else
  452|      0|            retval = CURL_FORMADD_NULL;
  453|      0|        }
  454|      0|        else
  455|      0|          retval = CURL_FORMADD_OPTION_TWICE;
  456|      0|      }
  457|      0|      else {
  458|      0|        if(avalue) {
  ------------------
  |  Branch (458:12): [True: 0, False: 0]
  ------------------
  459|      0|          if(Curl_bufref_memdup0(&curr->value, avalue, strlen(avalue)))
  ------------------
  |  Branch (459:14): [True: 0, False: 0]
  ------------------
  460|      0|            retval = CURL_FORMADD_MEMORY;
  461|      0|          else
  462|      0|            curr->flags |= HTTPPOST_FILENAME;
  ------------------
  |  |   40|      0|#define HTTPPOST_FILENAME    CURL_HTTPPOST_FILENAME
  |  |  ------------------
  |  |  |  |  205|      0|#define CURL_HTTPPOST_FILENAME (1 << 0)
  |  |  ------------------
  ------------------
  463|      0|        }
  464|      0|        else
  465|      0|          retval = CURL_FORMADD_NULL;
  466|      0|      }
  467|      0|      break;
  468|       |
  469|      0|    case CURLFORM_BUFFERPTR:
  ------------------
  |  Branch (469:5): [True: 0, False: 36]
  ------------------
  470|      0|      curr->flags |= HTTPPOST_PTRBUFFER | HTTPPOST_BUFFER;
  ------------------
  |  |   43|      0|#define HTTPPOST_PTRBUFFER   CURL_HTTPPOST_PTRBUFFER
  |  |  ------------------
  |  |  |  |  215|      0|#define CURL_HTTPPOST_PTRBUFFER (1 << 5)
  |  |  ------------------
  ------------------
                    curr->flags |= HTTPPOST_PTRBUFFER | HTTPPOST_BUFFER;
  ------------------
  |  |   45|      0|#define HTTPPOST_BUFFER      CURL_HTTPPOST_BUFFER
  |  |  ------------------
  |  |  |  |  213|      0|#define CURL_HTTPPOST_BUFFER (1 << 4)
  |  |  ------------------
  ------------------
  471|      0|      if(curr->buffer)
  ------------------
  |  Branch (471:10): [True: 0, False: 0]
  ------------------
  472|      0|        retval = CURL_FORMADD_OPTION_TWICE;
  473|      0|      else {
  474|      0|        avalue = form_ptr_arg(char *);
  ------------------
  |  |  311|      0|#define form_ptr_arg(t) (forms ? (t)(void *)avalue : va_arg(params, t))
  |  |  ------------------
  |  |  |  Branch (311:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  475|      0|        if(avalue) {
  ------------------
  |  Branch (475:12): [True: 0, False: 0]
  ------------------
  476|      0|          curr->buffer = avalue; /* store for the moment */
  477|       |          /* Make value non-NULL to be accepted as fine */
  478|      0|          Curl_bufref_set(&curr->value, avalue, 0, NULL);
  479|      0|        }
  480|      0|        else
  481|      0|          retval = CURL_FORMADD_NULL;
  482|      0|      }
  483|      0|      break;
  484|       |
  485|      0|    case CURLFORM_BUFFERLENGTH:
  ------------------
  |  Branch (485:5): [True: 0, False: 36]
  ------------------
  486|      0|      if(curr->bufferlength)
  ------------------
  |  Branch (486:10): [True: 0, False: 0]
  ------------------
  487|      0|        retval = CURL_FORMADD_OPTION_TWICE;
  488|      0|      else
  489|      0|        curr->bufferlength = (size_t)form_int_arg(long);
  ------------------
  |  |  313|      0|#define form_int_arg(t) (forms ? (t)(uintptr_t)avalue : va_arg(params, t))
  |  |  ------------------
  |  |  |  Branch (313:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  490|      0|      break;
  491|       |
  492|      0|    case CURLFORM_STREAM:
  ------------------
  |  Branch (492:5): [True: 0, False: 36]
  ------------------
  493|      0|      curr->flags |= HTTPPOST_CALLBACK;
  ------------------
  |  |   44|      0|#define HTTPPOST_CALLBACK    CURL_HTTPPOST_CALLBACK
  |  |  ------------------
  |  |  |  |  218|      0|#define CURL_HTTPPOST_CALLBACK (1 << 6)
  |  |  ------------------
  ------------------
  494|      0|      if(curr->userp)
  ------------------
  |  Branch (494:10): [True: 0, False: 0]
  ------------------
  495|      0|        retval = CURL_FORMADD_OPTION_TWICE;
  496|      0|      else {
  497|      0|        avalue = form_ptr_arg(char *);
  ------------------
  |  |  311|      0|#define form_ptr_arg(t) (forms ? (t)(void *)avalue : va_arg(params, t))
  |  |  ------------------
  |  |  |  Branch (311:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  498|      0|        if(avalue) {
  ------------------
  |  Branch (498:12): [True: 0, False: 0]
  ------------------
  499|      0|          curr->userp = avalue;
  500|       |          /* The following line is not strictly true but we derive a value
  501|       |             from this later on and we need this non-NULL to be accepted as
  502|       |             a fine form part */
  503|      0|          Curl_bufref_set(&curr->value, avalue, 0, NULL);
  504|      0|        }
  505|      0|        else
  506|      0|          retval = CURL_FORMADD_NULL;
  507|      0|      }
  508|      0|      break;
  509|       |
  510|      0|    case CURLFORM_CONTENTTYPE:
  ------------------
  |  Branch (510:5): [True: 0, False: 36]
  ------------------
  511|      0|      avalue = form_ptr_arg(char *);
  ------------------
  |  |  311|      0|#define form_ptr_arg(t) (forms ? (t)(void *)avalue : va_arg(params, t))
  |  |  ------------------
  |  |  |  Branch (311:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  512|      0|      if(Curl_bufref_ptr(&curr->contenttype)) {
  ------------------
  |  Branch (512:10): [True: 0, False: 0]
  ------------------
  513|      0|        if(curr->flags & HTTPPOST_FILENAME) {
  ------------------
  |  |   40|      0|#define HTTPPOST_FILENAME    CURL_HTTPPOST_FILENAME
  |  |  ------------------
  |  |  |  |  205|      0|#define CURL_HTTPPOST_FILENAME (1 << 0)
  |  |  ------------------
  ------------------
  |  Branch (513:12): [True: 0, False: 0]
  ------------------
  514|      0|          if(avalue) {
  ------------------
  |  Branch (514:14): [True: 0, False: 0]
  ------------------
  515|      0|            form = forminfo_new();
  516|      0|            if(!form || Curl_bufref_memdup0(&form->contenttype, avalue,
  ------------------
  |  Branch (516:16): [True: 0, False: 0]
  |  Branch (516:25): [True: 0, False: 0]
  ------------------
  517|      0|                                            strlen(avalue))) {
  518|      0|              curlx_free(form);
  ------------------
  |  | 1488|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  519|      0|              retval = CURL_FORMADD_MEMORY;
  520|      0|            }
  521|      0|            else {
  522|      0|              forminfo_add(form, curr);
  523|      0|              curr = form;
  524|      0|              form = NULL;
  525|      0|            }
  526|      0|          }
  527|      0|          else
  528|      0|            retval = CURL_FORMADD_NULL;
  529|      0|        }
  530|      0|        else
  531|      0|          retval = CURL_FORMADD_OPTION_TWICE;
  532|      0|      }
  533|      0|      else if(avalue) {
  ------------------
  |  Branch (533:15): [True: 0, False: 0]
  ------------------
  534|      0|        if(Curl_bufref_memdup0(&curr->contenttype, avalue, strlen(avalue)))
  ------------------
  |  Branch (534:12): [True: 0, False: 0]
  ------------------
  535|      0|          retval = CURL_FORMADD_MEMORY;
  536|      0|      }
  537|      0|      else
  538|      0|        retval = CURL_FORMADD_NULL;
  539|      0|      break;
  540|       |
  541|      0|    case CURLFORM_CONTENTHEADER: {
  ------------------
  |  Branch (541:5): [True: 0, False: 36]
  ------------------
  542|       |      /* this "cast increases required alignment of target type" but
  543|       |         we consider it OK anyway */
  544|      0|      struct curl_slist *list = form_ptr_arg(struct curl_slist *);
  ------------------
  |  |  311|      0|#define form_ptr_arg(t) (forms ? (t)(void *)avalue : va_arg(params, t))
  |  |  ------------------
  |  |  |  Branch (311:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  545|       |
  546|      0|      if(curr->contentheader)
  ------------------
  |  Branch (546:10): [True: 0, False: 0]
  ------------------
  547|      0|        retval = CURL_FORMADD_OPTION_TWICE;
  548|      0|      else
  549|      0|        curr->contentheader = list;
  550|       |
  551|      0|      break;
  552|     12|    }
  553|      0|    case CURLFORM_FILENAME:
  ------------------
  |  Branch (553:5): [True: 0, False: 36]
  ------------------
  554|      0|    case CURLFORM_BUFFER:
  ------------------
  |  Branch (554:5): [True: 0, False: 36]
  ------------------
  555|      0|      avalue = form_ptr_arg(char *);
  ------------------
  |  |  311|      0|#define form_ptr_arg(t) (forms ? (t)(void *)avalue : va_arg(params, t))
  |  |  ------------------
  |  |  |  Branch (311:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  556|      0|      if(Curl_bufref_ptr(&curr->showfilename))
  ------------------
  |  Branch (556:10): [True: 0, False: 0]
  ------------------
  557|      0|        retval = CURL_FORMADD_OPTION_TWICE;
  558|      0|      else if(Curl_bufref_memdup0(&curr->showfilename, avalue, strlen(avalue)))
  ------------------
  |  Branch (558:15): [True: 0, False: 0]
  ------------------
  559|      0|        retval = CURL_FORMADD_MEMORY;
  560|      0|      break;
  561|       |
  562|      0|    default:
  ------------------
  |  Branch (562:5): [True: 0, False: 36]
  ------------------
  563|      0|      retval = CURL_FORMADD_UNKNOWN_OPTION;
  564|      0|      break;
  565|     36|    }
  566|     36|  }
  567|       |
  568|     12|  if(!retval)
  ------------------
  |  Branch (568:6): [True: 12, False: 0]
  ------------------
  569|     12|    retval = formadd_check(first_form, &newchain, &lastnode);
  570|       |
  571|     12|  if(retval)
  ------------------
  |  Branch (571:6): [True: 0, False: 12]
  ------------------
  572|       |    /* On error, free allocated fields for all nodes of the FormInfo linked
  573|       |       list without deallocating nodes. List nodes are deallocated later on */
  574|      0|    free_formlist(first_form);
  575|       |
  576|       |  /* Always deallocate FormInfo linked list nodes without touching node
  577|       |     fields given that these have either been deallocated or are owned
  578|       |     now by the httppost linked list */
  579|     24|  while(first_form) {
  ------------------
  |  Branch (579:9): [True: 12, False: 12]
  ------------------
  580|     12|    struct FormInfo *ptr = first_form->more;
  581|     12|    curlx_free(first_form);
  ------------------
  |  | 1488|     12|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  582|     12|    first_form = ptr;
  583|     12|  }
  584|       |
  585|     12|  if(!retval) {
  ------------------
  |  Branch (585:6): [True: 12, False: 0]
  ------------------
  586|       |    /* Only if all is fine, link the new chain into the provided list */
  587|     12|    if(*last_post)
  ------------------
  |  Branch (587:8): [True: 0, False: 12]
  ------------------
  588|      0|      (*last_post)->next = newchain;
  589|     12|    else
  590|     12|      (*httppost) = newchain;
  591|       |
  592|     12|    (*last_post) = lastnode;
  593|     12|  }
  594|      0|  else
  595|      0|    free_chain(newchain);
  596|       |
  597|     12|  return retval;
  598|     12|#undef form_ptr_arg
  599|     12|#undef form_int_arg
  600|     12|}
formdata.c:forminfo_new:
  107|     12|{
  108|     12|  struct FormInfo *form_info = curlx_calloc(1, sizeof(struct FormInfo));
  ------------------
  |  | 1485|     12|  curl_dbg_calloc(nbelem, size, __LINE__, __FILE__)
  ------------------
  109|       |
  110|     12|  if(form_info) {
  ------------------
  |  Branch (110:6): [True: 12, False: 0]
  ------------------
  111|     12|    Curl_bufref_init(&form_info->name);
  112|     12|    Curl_bufref_init(&form_info->value);
  113|     12|    Curl_bufref_init(&form_info->contenttype);
  114|     12|    Curl_bufref_init(&form_info->showfilename);
  115|     12|  }
  116|       |
  117|     12|  return form_info;
  118|     12|}
formdata.c:formadd_check:
  218|     12|{
  219|     12|  const char *prevtype = NULL;
  220|     12|  struct FormInfo *form = NULL;
  221|     12|  struct curl_httppost *post = NULL;
  222|       |
  223|       |  /* go through the list, check for completeness and if everything is
  224|       |   * alright add the HttpPost item otherwise set retval accordingly */
  225|       |
  226|     24|  for(form = first_form; form; form = form->more) {
  ------------------
  |  Branch (226:26): [True: 12, False: 12]
  ------------------
  227|     12|    const char *name = Curl_bufref_ptr(&form->name);
  228|       |
  229|     12|    if(((!name || !Curl_bufref_ptr(&form->value)) && !post) ||
  ------------------
  |  Branch (229:10): [True: 0, False: 12]
  |  Branch (229:19): [True: 0, False: 12]
  |  Branch (229:54): [True: 0, False: 0]
  ------------------
  230|     12|       (form->contentslength &&
  ------------------
  |  Branch (230:9): [True: 2, False: 10]
  ------------------
  231|      2|        (form->flags & HTTPPOST_FILENAME)) ||
  ------------------
  |  |   40|      2|#define HTTPPOST_FILENAME    CURL_HTTPPOST_FILENAME
  |  |  ------------------
  |  |  |  |  205|      2|#define CURL_HTTPPOST_FILENAME (1 << 0)
  |  |  ------------------
  ------------------
  |  Branch (231:9): [True: 0, False: 2]
  ------------------
  232|     12|       ((form->flags & HTTPPOST_FILENAME) &&
  ------------------
  |  |   40|     12|#define HTTPPOST_FILENAME    CURL_HTTPPOST_FILENAME
  |  |  ------------------
  |  |  |  |  205|     12|#define CURL_HTTPPOST_FILENAME (1 << 0)
  |  |  ------------------
  ------------------
  |  Branch (232:9): [True: 0, False: 12]
  ------------------
  233|      0|        (form->flags & HTTPPOST_PTRCONTENTS)) ||
  ------------------
  |  |   41|      0|#define HTTPPOST_PTRCONTENTS CURL_HTTPPOST_PTRCONTENTS
  |  |  ------------------
  |  |  |  |  211|      0|#define CURL_HTTPPOST_PTRCONTENTS (1 << 3)
  |  |  ------------------
  ------------------
  |  Branch (233:9): [True: 0, False: 0]
  ------------------
  234|       |
  235|     12|       (!form->buffer &&
  ------------------
  |  Branch (235:9): [True: 12, False: 0]
  ------------------
  236|     12|        (form->flags & HTTPPOST_BUFFER) &&
  ------------------
  |  |   45|     12|#define HTTPPOST_BUFFER      CURL_HTTPPOST_BUFFER
  |  |  ------------------
  |  |  |  |  213|     12|#define CURL_HTTPPOST_BUFFER (1 << 4)
  |  |  ------------------
  ------------------
  |  Branch (236:9): [True: 0, False: 12]
  ------------------
  237|      0|        (form->flags & HTTPPOST_PTRBUFFER)) ||
  ------------------
  |  |   43|      0|#define HTTPPOST_PTRBUFFER   CURL_HTTPPOST_PTRBUFFER
  |  |  ------------------
  |  |  |  |  215|      0|#define CURL_HTTPPOST_PTRBUFFER (1 << 5)
  |  |  ------------------
  ------------------
  |  Branch (237:9): [True: 0, False: 0]
  ------------------
  238|       |
  239|     12|       ((form->flags & HTTPPOST_READFILE) &&
  ------------------
  |  |   42|     12|#define HTTPPOST_READFILE    CURL_HTTPPOST_READFILE
  |  |  ------------------
  |  |  |  |  207|     12|#define CURL_HTTPPOST_READFILE (1 << 1)
  |  |  ------------------
  ------------------
  |  Branch (239:9): [True: 0, False: 12]
  ------------------
  240|      0|        (form->flags & HTTPPOST_PTRCONTENTS))
  ------------------
  |  |   41|      0|#define HTTPPOST_PTRCONTENTS CURL_HTTPPOST_PTRCONTENTS
  |  |  ------------------
  |  |  |  |  211|      0|#define CURL_HTTPPOST_PTRCONTENTS (1 << 3)
  |  |  ------------------
  ------------------
  |  Branch (240:9): [True: 0, False: 0]
  ------------------
  241|     12|      ) {
  242|      0|      return CURL_FORMADD_INCOMPLETE;
  243|      0|    }
  244|     12|    if(((form->flags & HTTPPOST_FILENAME) ||
  ------------------
  |  |   40|     12|#define HTTPPOST_FILENAME    CURL_HTTPPOST_FILENAME
  |  |  ------------------
  |  |  |  |  205|     12|#define CURL_HTTPPOST_FILENAME (1 << 0)
  |  |  ------------------
  ------------------
  |  Branch (244:9): [True: 0, False: 12]
  ------------------
  245|     12|        (form->flags & HTTPPOST_BUFFER)) &&
  ------------------
  |  |   45|     12|#define HTTPPOST_BUFFER      CURL_HTTPPOST_BUFFER
  |  |  ------------------
  |  |  |  |  213|     12|#define CURL_HTTPPOST_BUFFER (1 << 4)
  |  |  ------------------
  ------------------
  |  Branch (245:9): [True: 0, False: 12]
  ------------------
  246|      0|       !Curl_bufref_ptr(&form->contenttype)) {
  ------------------
  |  Branch (246:8): [True: 0, False: 0]
  ------------------
  247|      0|      const char *f = Curl_bufref_ptr((form->flags & HTTPPOST_BUFFER) ?
  ------------------
  |  |   45|      0|#define HTTPPOST_BUFFER      CURL_HTTPPOST_BUFFER
  |  |  ------------------
  |  |  |  |  213|      0|#define CURL_HTTPPOST_BUFFER (1 << 4)
  |  |  ------------------
  ------------------
  |  Branch (247:39): [True: 0, False: 0]
  ------------------
  248|      0|                                      &form->showfilename : &form->value);
  249|      0|      const char *type = Curl_mime_contenttype(f);
  250|      0|      if(!type)
  ------------------
  |  Branch (250:10): [True: 0, False: 0]
  ------------------
  251|      0|        type = prevtype;
  252|      0|      if(!type)
  ------------------
  |  Branch (252:10): [True: 0, False: 0]
  ------------------
  253|      0|        type = FILE_CONTENTTYPE_DEFAULT;
  ------------------
  |  |   38|      0|#define FILE_CONTENTTYPE_DEFAULT        "application/octet-stream"
  ------------------
  254|       |
  255|       |      /* our contenttype is missing */
  256|      0|      if(Curl_bufref_memdup0(&form->contenttype, type, strlen(type)))
  ------------------
  |  Branch (256:10): [True: 0, False: 0]
  ------------------
  257|      0|        return CURL_FORMADD_MEMORY;
  258|      0|    }
  259|     12|    if(name && form->namelength) {
  ------------------
  |  Branch (259:8): [True: 12, False: 0]
  |  Branch (259:16): [True: 0, False: 12]
  ------------------
  260|      0|      if(memchr(name, 0, form->namelength))
  ------------------
  |  Branch (260:10): [True: 0, False: 0]
  ------------------
  261|      0|        return CURL_FORMADD_NULL;
  262|      0|    }
  263|     12|    if(!(form->flags & HTTPPOST_PTRNAME)) {
  ------------------
  |  |   39|     12|#define HTTPPOST_PTRNAME     CURL_HTTPPOST_PTRNAME
  |  |  ------------------
  |  |  |  |  209|     12|#define CURL_HTTPPOST_PTRNAME (1 << 2)
  |  |  ------------------
  ------------------
  |  Branch (263:8): [True: 12, False: 0]
  ------------------
  264|       |      /* Note that there is small risk that form->name is NULL here if the app
  265|       |         passed in a bad combo, so we check for that. */
  266|     12|      if(forminfo_copyfield(&form->name, form->namelength))
  ------------------
  |  Branch (266:10): [True: 0, False: 12]
  ------------------
  267|      0|        return CURL_FORMADD_MEMORY;
  268|     12|    }
  269|     12|    if(!(form->flags & (HTTPPOST_FILENAME | HTTPPOST_READFILE |
  ------------------
  |  |   40|     12|#define HTTPPOST_FILENAME    CURL_HTTPPOST_FILENAME
  |  |  ------------------
  |  |  |  |  205|     12|#define CURL_HTTPPOST_FILENAME (1 << 0)
  |  |  ------------------
  ------------------
                  if(!(form->flags & (HTTPPOST_FILENAME | HTTPPOST_READFILE |
  ------------------
  |  |   42|     12|#define HTTPPOST_READFILE    CURL_HTTPPOST_READFILE
  |  |  ------------------
  |  |  |  |  207|     12|#define CURL_HTTPPOST_READFILE (1 << 1)
  |  |  ------------------
  ------------------
  |  Branch (269:8): [True: 0, False: 12]
  ------------------
  270|     12|                        HTTPPOST_PTRCONTENTS | HTTPPOST_PTRBUFFER |
  ------------------
  |  |   41|     12|#define HTTPPOST_PTRCONTENTS CURL_HTTPPOST_PTRCONTENTS
  |  |  ------------------
  |  |  |  |  211|     12|#define CURL_HTTPPOST_PTRCONTENTS (1 << 3)
  |  |  ------------------
  ------------------
                                      HTTPPOST_PTRCONTENTS | HTTPPOST_PTRBUFFER |
  ------------------
  |  |   43|     12|#define HTTPPOST_PTRBUFFER   CURL_HTTPPOST_PTRBUFFER
  |  |  ------------------
  |  |  |  |  215|     12|#define CURL_HTTPPOST_PTRBUFFER (1 << 5)
  |  |  ------------------
  ------------------
  271|     12|                        HTTPPOST_CALLBACK))) {
  ------------------
  |  |   44|     12|#define HTTPPOST_CALLBACK    CURL_HTTPPOST_CALLBACK
  |  |  ------------------
  |  |  |  |  218|     12|#define CURL_HTTPPOST_CALLBACK (1 << 6)
  |  |  ------------------
  ------------------
  272|      0|      if(forminfo_copyfield(&form->value, (size_t)form->contentslength))
  ------------------
  |  Branch (272:10): [True: 0, False: 0]
  ------------------
  273|      0|        return CURL_FORMADD_MEMORY;
  274|      0|    }
  275|     12|    post = httppost_add(form, post, httppost, last_post);
  276|       |
  277|     12|    if(!post)
  ------------------
  |  Branch (277:8): [True: 0, False: 12]
  ------------------
  278|      0|      return CURL_FORMADD_MEMORY;
  279|       |
  280|     12|    if(Curl_bufref_ptr(&form->contenttype))
  ------------------
  |  Branch (280:8): [True: 0, False: 12]
  ------------------
  281|      0|      prevtype = Curl_bufref_ptr(&form->contenttype);
  282|     12|  }
  283|       |
  284|     12|  return CURL_FORMADD_OK;
  285|     12|}
formdata.c:forminfo_copyfield:
  122|     12|{
  123|     12|  const char *value = Curl_bufref_ptr(field);
  124|     12|  CURLcode result = CURLE_OK;
  125|       |
  126|     12|  if(value) {
  ------------------
  |  Branch (126:6): [True: 12, False: 0]
  ------------------
  127|     12|    if(!len)
  ------------------
  |  Branch (127:8): [True: 12, False: 0]
  ------------------
  128|     12|      len = strlen(value);
  129|     12|    result = Curl_bufref_memdup0(field, value, len);
  130|     12|  }
  131|       |
  132|     12|  return result;
  133|     12|}
formdata.c:httppost_add:
   61|     12|{
   62|     12|  struct curl_httppost *post;
   63|     12|  size_t namelength = src->namelength;
   64|     12|  if(!namelength && Curl_bufref_ptr(&src->name))
  ------------------
  |  Branch (64:6): [True: 12, False: 0]
  |  Branch (64:21): [True: 12, False: 0]
  ------------------
   65|     12|    namelength = strlen(Curl_bufref_ptr(&src->name));
   66|     12|  if((src->bufferlength > LONG_MAX) || (namelength > LONG_MAX))
  ------------------
  |  Branch (66:6): [True: 0, False: 12]
  |  Branch (66:40): [True: 0, False: 12]
  ------------------
   67|       |    /* avoid overflow in typecasts below */
   68|      0|    return NULL;
   69|     12|  post = curlx_calloc(1, sizeof(struct curl_httppost));
  ------------------
  |  | 1485|     12|  curl_dbg_calloc(nbelem, size, __LINE__, __FILE__)
  ------------------
   70|     12|  if(post) {
  ------------------
  |  Branch (70:6): [True: 12, False: 0]
  ------------------
   71|     12|    post->name = CURL_UNCONST(Curl_bufref_ptr(&src->name));
  ------------------
  |  |  862|     12|#define CURL_UNCONST(p) ((void *)(uintptr_t)(const void *)(p))
  ------------------
   72|     12|    post->namelength = (long)namelength;
   73|     12|    post->contents = CURL_UNCONST(Curl_bufref_ptr(&src->value));
  ------------------
  |  |  862|     12|#define CURL_UNCONST(p) ((void *)(uintptr_t)(const void *)(p))
  ------------------
   74|     12|    post->contentlen = src->contentslength;
   75|     12|    post->buffer = src->buffer;
   76|     12|    post->bufferlength = (long)src->bufferlength;
   77|     12|    post->contenttype = CURL_UNCONST(Curl_bufref_ptr(&src->contenttype));
  ------------------
  |  |  862|     12|#define CURL_UNCONST(p) ((void *)(uintptr_t)(const void *)(p))
  ------------------
   78|     12|    post->flags = src->flags | CURL_HTTPPOST_LARGE;
  ------------------
  |  |  220|     12|#define CURL_HTTPPOST_LARGE (1 << 7)
  ------------------
   79|     12|    post->contentheader = src->contentheader;
   80|     12|    post->showfilename = CURL_UNCONST(Curl_bufref_ptr(&src->showfilename));
  ------------------
  |  |  862|     12|#define CURL_UNCONST(p) ((void *)(uintptr_t)(const void *)(p))
  ------------------
   81|     12|    post->userp = src->userp;
   82|     12|  }
   83|      0|  else
   84|      0|    return NULL;
   85|       |
   86|     12|  if(parent_post) {
  ------------------
  |  Branch (86:6): [True: 0, False: 12]
  ------------------
   87|       |    /* now, point our 'more' to the original 'more' */
   88|      0|    post->more = parent_post->more;
   89|       |
   90|       |    /* then move the original 'more' to point to ourselves */
   91|      0|    parent_post->more = post;
   92|      0|  }
   93|     12|  else {
   94|       |    /* make the previous point to this */
   95|     12|    if(*last_post)
  ------------------
  |  Branch (95:8): [True: 0, False: 12]
  ------------------
   96|      0|      (*last_post)->next = post;
   97|     12|    else
   98|     12|      (*httppost) = post;
   99|       |
  100|     12|    (*last_post) = post;
  101|     12|  }
  102|     12|  return post;
  103|     12|}

Curl_wildcard_dtor:
  189|  6.82k|{
  190|  6.82k|  struct WildcardData *wc = *wcp;
  191|  6.82k|  if(!wc)
  ------------------
  |  Branch (191:6): [True: 6.82k, False: 0]
  ------------------
  192|  6.82k|    return;
  193|       |
  194|      0|  if(wc->dtor) {
  ------------------
  |  Branch (194:6): [True: 0, False: 0]
  ------------------
  195|      0|    wc->dtor(wc->ftpwc);
  196|      0|    wc->dtor = ZERO_NULL;
  ------------------
  |  | 1160|      0|#define ZERO_NULL 0
  ------------------
  197|      0|    wc->ftpwc = NULL;
  198|      0|  }
  199|      0|  DEBUGASSERT(!wc->ftpwc);
  ------------------
  |  | 1077|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (199:3): [True: 0, False: 0]
  |  Branch (199:3): [True: 0, False: 0]
  ------------------
  200|       |
  201|      0|  Curl_llist_destroy(&wc->filelist, NULL);
  202|      0|  curlx_safefree(wc->path);
  ------------------
  |  | 1332|      0|  do {                      \
  |  | 1333|      0|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1488|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|      0|    (ptr) = NULL;           \
  |  | 1335|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  203|      0|  curlx_safefree(wc->pattern);
  ------------------
  |  | 1332|      0|  do {                      \
  |  | 1333|      0|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1488|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|      0|    (ptr) = NULL;           \
  |  | 1335|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  204|      0|  wc->state = CURLWC_INIT;
  205|      0|  curlx_free(wc);
  ------------------
  |  | 1488|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  206|       |  *wcp = NULL;
  207|      0|}

Curl_initinfo:
   42|  6.82k|{
   43|  6.82k|  struct Progress *pro = &data->progress;
   44|  6.82k|  struct PureInfo *info = &data->info;
   45|       |
   46|  6.82k|  pro->t_nslookup = 0;
   47|  6.82k|  pro->t_connect = 0;
   48|  6.82k|  pro->t_appconnect = 0;
   49|  6.82k|  pro->t_pretransfer = 0;
   50|  6.82k|  pro->t_posttransfer = 0;
   51|  6.82k|  pro->t_starttransfer = 0;
   52|  6.82k|  pro->timespent = 0;
   53|  6.82k|  pro->t_redirect = 0;
   54|  6.82k|  pro->is_t_startransfer_set = FALSE;
  ------------------
  |  | 1054|  6.82k|#define FALSE false
  ------------------
   55|       |
   56|  6.82k|  info->httpcode = 0;
   57|  6.82k|  info->httpproxycode = 0;
   58|  6.82k|  info->httpversion = 0;
   59|  6.82k|  info->filetime = -1; /* -1 is an illegal time and thus means unknown */
   60|  6.82k|  info->timecond = FALSE;
  ------------------
  |  | 1054|  6.82k|#define FALSE false
  ------------------
   61|       |
   62|  6.82k|  info->header_size = 0;
   63|  6.82k|  info->request_size = 0;
   64|  6.82k|  info->proxyauthavail = 0;
   65|  6.82k|  info->httpauthavail = 0;
   66|  6.82k|  info->proxyauthpicked = 0;
   67|  6.82k|  info->httpauthpicked = 0;
   68|  6.82k|  info->numconnects = 0;
   69|       |
   70|  6.82k|  curlx_safefree(info->contenttype);
  ------------------
  |  | 1332|  6.82k|  do {                      \
  |  | 1333|  6.82k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1488|  6.82k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  6.82k|    (ptr) = NULL;           \
  |  | 1335|  6.82k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 6.82k]
  |  |  ------------------
  ------------------
   71|  6.82k|  curlx_safefree(info->wouldredirect);
  ------------------
  |  | 1332|  6.82k|  do {                      \
  |  | 1333|  6.82k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1488|  6.82k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  6.82k|    (ptr) = NULL;           \
  |  | 1335|  6.82k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 6.82k]
  |  |  ------------------
  ------------------
   72|       |
   73|  6.82k|  memset(&info->primary, 0, sizeof(info->primary));
   74|  6.82k|  info->retry_after = 0;
   75|       |
   76|  6.82k|  info->conn_scheme = 0;
   77|  6.82k|  info->conn_protocol = 0;
   78|  6.82k|  info->used_proxy = 0;
   79|       |
   80|  6.82k|#ifdef USE_SSL
   81|  6.82k|  Curl_ssl_free_certinfo(data);
   82|  6.82k|#endif
   83|  6.82k|}

Curl_hash_init:
   82|  6.82k|{
   83|  6.82k|  DEBUGASSERT(h);
  ------------------
  |  | 1077|  6.82k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (83:3): [True: 0, False: 6.82k]
  |  Branch (83:3): [True: 6.82k, False: 0]
  ------------------
   84|  6.82k|  DEBUGASSERT(slots);
  ------------------
  |  | 1077|  6.82k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (84:3): [True: 0, False: 6.82k]
  |  Branch (84:3): [True: 6.82k, False: 0]
  ------------------
   85|  6.82k|  DEBUGASSERT(hfunc);
  ------------------
  |  | 1077|  6.82k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (85:3): [True: 0, False: 6.82k]
  |  Branch (85:3): [True: 6.82k, False: 0]
  ------------------
   86|  6.82k|  DEBUGASSERT(comparator);
  ------------------
  |  | 1077|  6.82k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (86:3): [True: 0, False: 6.82k]
  |  Branch (86:3): [True: 6.82k, False: 0]
  ------------------
   87|  6.82k|  DEBUGASSERT(dtor);
  ------------------
  |  | 1077|  6.82k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (87:3): [True: 0, False: 6.82k]
  |  Branch (87:3): [True: 6.82k, False: 0]
  ------------------
   88|       |
   89|  6.82k|  h->table = NULL;
   90|  6.82k|  h->hash_func = hfunc;
   91|  6.82k|  h->comp_func = comparator;
   92|  6.82k|  h->dtor = dtor;
   93|  6.82k|  h->size = 0;
   94|  6.82k|  h->slots = slots;
   95|  6.82k|#ifdef DEBUGBUILD
   96|  6.82k|  h->init = HASHINIT;
  ------------------
  |  |   30|  6.82k|#define HASHINIT 0x7017e781
  ------------------
   97|  6.82k|#endif
   98|  6.82k|}
Curl_hash_destroy:
  264|  6.82k|{
  265|  6.82k|  DEBUGASSERT(h->init == HASHINIT);
  ------------------
  |  | 1077|  6.82k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (265:3): [True: 0, False: 6.82k]
  |  Branch (265:3): [True: 6.82k, False: 0]
  ------------------
  266|  6.82k|  if(h->table) {
  ------------------
  |  Branch (266:6): [True: 0, False: 6.82k]
  ------------------
  267|      0|    Curl_hash_clean(h);
  268|      0|    curlx_safefree(h->table);
  ------------------
  |  | 1332|      0|  do {                      \
  |  | 1333|      0|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1488|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|      0|    (ptr) = NULL;           \
  |  | 1335|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  269|      0|  }
  270|  6.82k|  DEBUGASSERT(h->size == 0);
  ------------------
  |  | 1077|  6.82k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (270:3): [True: 0, False: 6.82k]
  |  Branch (270:3): [True: 6.82k, False: 0]
  ------------------
  271|  6.82k|  h->slots = 0;
  272|  6.82k|}

Curl_headers_cleanup:
  353|  6.82k|{
  354|  6.82k|  struct Curl_llist_node *e;
  355|  6.82k|  struct Curl_llist_node *n;
  356|       |
  357|  6.82k|  for(e = Curl_llist_head(&data->state.httphdrs); e; e = n) {
  ------------------
  |  Branch (357:51): [True: 0, False: 6.82k]
  ------------------
  358|      0|    struct Curl_header_store *hs = Curl_node_elem(e);
  359|      0|    n = Curl_node_next(e);
  360|      0|    curlx_free(hs);
  ------------------
  |  | 1488|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  361|      0|  }
  362|  6.82k|  headers_reset(data);
  363|  6.82k|  return CURLE_OK;
  364|  6.82k|}
headers.c:headers_reset:
  287|  6.82k|{
  288|  6.82k|  Curl_llist_init(&data->state.httphdrs, NULL);
  289|       |  data->state.prevhead = NULL;
  290|  6.82k|}

Curl_host_is_ipnum:
  321|    632|{
  322|    632|  struct in_addr in;
  323|    632|#ifdef USE_IPV6
  324|    632|  struct in6_addr in6;
  325|    632|#endif
  326|    632|  if(curlx_inet_pton(AF_INET, hostname, &in) > 0
  ------------------
  |  Branch (326:6): [True: 4, False: 628]
  ------------------
  327|    628|#ifdef USE_IPV6
  328|    628|     || curlx_inet_pton(AF_INET6, hostname, &in6) > 0
  ------------------
  |  Branch (328:9): [True: 16, False: 612]
  ------------------
  329|    632|#endif
  330|    632|    )
  331|     20|    return TRUE;
  ------------------
  |  | 1051|     20|#define TRUE true
  ------------------
  332|    612|  return FALSE;
  ------------------
  |  | 1054|    612|#define FALSE false
  ------------------
  333|    632|}
Curl_resolv_destroy_all:
 1146|  6.82k|{
 1147|  6.82k|  while(data->state.async) {
  ------------------
  |  Branch (1147:9): [True: 0, False: 6.82k]
  ------------------
 1148|      0|    struct Curl_resolv_async *async = data->state.async;
 1149|      0|    data->state.async = async->next;
 1150|      0|    Curl_async_destroy(data, async);
 1151|      0|  }
 1152|  6.82k|}

Curl_hsts_init:
   67|  4.73k|{
   68|  4.73k|  struct hsts *h = curlx_calloc(1, sizeof(struct hsts));
  ------------------
  |  | 1485|  4.73k|  curl_dbg_calloc(nbelem, size, __LINE__, __FILE__)
  ------------------
   69|  4.73k|  if(h) {
  ------------------
  |  Branch (69:6): [True: 4.73k, False: 0]
  ------------------
   70|       |    Curl_llist_init(&h->list, NULL);
   71|  4.73k|  }
   72|  4.73k|  return h;
   73|  4.73k|}
Curl_hsts_cleanup:
   78|  6.82k|{
   79|  6.82k|  struct hsts *h = *hp;
   80|  6.82k|  if(h) {
  ------------------
  |  Branch (80:6): [True: 4.73k, False: 2.08k]
  ------------------
   81|  4.73k|    struct Curl_llist_node *e;
   82|  4.73k|    struct Curl_llist_node *n;
   83|  4.73k|    for(e = Curl_llist_head(&h->list); e; e = n) {
  ------------------
  |  Branch (83:40): [True: 0, False: 4.73k]
  ------------------
   84|      0|      struct stsentry *sts = Curl_node_elem(e);
   85|      0|      n = Curl_node_next(e);
   86|      0|      hsts_free(sts);
  ------------------
  |  |   75|      0|#define hsts_free(x) curlx_free(x)
  |  |  ------------------
  |  |  |  | 1488|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  ------------------
   87|      0|    }
   88|  4.73k|    curlx_free(h->filename);
  ------------------
  |  | 1488|  4.73k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
   89|  4.73k|    curlx_free(h);
  ------------------
  |  | 1488|  4.73k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
   90|       |    *hp = NULL;
   91|  4.73k|  }
   92|  6.82k|}
Curl_hsts_save:
  368|  6.82k|{
  369|  6.82k|  struct Curl_llist_node *e;
  370|  6.82k|  struct Curl_llist_node *n;
  371|  6.82k|  CURLcode result = CURLE_OK;
  372|  6.82k|  FILE *out;
  373|  6.82k|  char *tempstore = NULL;
  374|       |
  375|  6.82k|  if(!h)
  ------------------
  |  Branch (375:6): [True: 2.08k, False: 4.73k]
  ------------------
  376|       |    /* no cache activated */
  377|  2.08k|    return CURLE_OK;
  378|       |
  379|       |  /* if no new name is given, use the one we stored from the load */
  380|  4.73k|  if(!file && h->filename)
  ------------------
  |  Branch (380:6): [True: 3, False: 4.73k]
  |  Branch (380:15): [True: 0, False: 3]
  ------------------
  381|      0|    file = h->filename;
  382|       |
  383|  4.73k|  if((h->flags & CURLHSTS_READONLYFILE) || !file || !file[0])
  ------------------
  |  | 1074|  4.73k|#define CURLHSTS_READONLYFILE (1L << 1)
  ------------------
  |  Branch (383:6): [True: 0, False: 4.73k]
  |  Branch (383:44): [True: 3, False: 4.73k]
  |  Branch (383:53): [True: 0, False: 4.73k]
  ------------------
  384|       |    /* marked as read-only, no file or zero length filename */
  385|      3|    goto skipsave;
  386|       |
  387|  4.73k|  result = Curl_fopen(data, file, &out, &tempstore);
  388|  4.73k|  if(!result) {
  ------------------
  |  Branch (388:6): [True: 4.73k, False: 0]
  ------------------
  389|  4.73k|    fputs("# Your HSTS cache. https://curl.se/docs/hsts.html\n"
  390|  4.73k|          "# This file was generated by libcurl! Edit at your own risk.\n",
  391|  4.73k|          out);
  392|  4.73k|    for(e = Curl_llist_head(&h->list); e; e = n) {
  ------------------
  |  Branch (392:40): [True: 0, False: 4.73k]
  ------------------
  393|      0|      struct stsentry *sts = Curl_node_elem(e);
  394|      0|      n = Curl_node_next(e);
  395|      0|      result = hsts_out(sts, out);
  396|      0|      if(result)
  ------------------
  |  Branch (396:10): [True: 0, False: 0]
  ------------------
  397|      0|        break;
  398|      0|    }
  399|  4.73k|    curlx_fclose(out);
  ------------------
  |  |   79|  4.73k|#define curlx_fclose(file)      curl_dbg_fclose(file, __LINE__, __FILE__)
  ------------------
  400|  4.73k|    if(!result && tempstore && curlx_rename(tempstore, file))
  ------------------
  |  |   70|      0|#define curlx_rename            rename
  ------------------
  |  Branch (400:8): [True: 4.73k, False: 0]
  |  Branch (400:19): [True: 0, False: 4.73k]
  |  Branch (400:32): [True: 0, False: 0]
  ------------------
  401|      0|      result = CURLE_WRITE_ERROR;
  402|       |
  403|  4.73k|    if(result && tempstore)
  ------------------
  |  Branch (403:8): [True: 0, False: 4.73k]
  |  Branch (403:18): [True: 0, False: 0]
  ------------------
  404|      0|      unlink(tempstore);
  405|  4.73k|  }
  406|  4.73k|  curlx_free(tempstore);
  ------------------
  |  | 1488|  4.73k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  407|  4.73k|skipsave:
  408|  4.73k|  if(data->set.hsts_write) {
  ------------------
  |  Branch (408:6): [True: 0, False: 4.73k]
  ------------------
  409|       |    /* if there is a write callback */
  410|      0|    struct curl_index i; /* count */
  411|      0|    i.total = Curl_llist_count(&h->list);
  412|      0|    i.index = 0;
  413|      0|    for(e = Curl_llist_head(&h->list); e; e = n) {
  ------------------
  |  Branch (413:40): [True: 0, False: 0]
  ------------------
  414|      0|      struct stsentry *sts = Curl_node_elem(e);
  415|      0|      bool stop;
  416|      0|      n = Curl_node_next(e);
  417|      0|      result = hsts_push(data, &i, sts, &stop);
  418|      0|      if(result || stop)
  ------------------
  |  Branch (418:10): [True: 0, False: 0]
  |  Branch (418:20): [True: 0, False: 0]
  ------------------
  419|      0|        break;
  420|      0|      i.index++;
  421|      0|    }
  422|      0|  }
  423|  4.73k|  return result;
  424|  4.73k|}

Curl_http_auth_cleanup_digest:
  159|  6.82k|{
  160|  6.82k|  Curl_auth_digest_cleanup(&data->state.digest);
  161|  6.82k|  Curl_auth_digest_cleanup(&data->state.proxydigest);
  162|  6.82k|}

Curl_llist_init:
   46|   324k|{
   47|   324k|  l->_size = 0;
   48|   324k|  l->_dtor = dtor;
   49|   324k|  l->_head = NULL;
   50|   324k|  l->_tail = NULL;
   51|   324k|#ifdef DEBUGBUILD
   52|   324k|  l->_init = LLISTINIT;
  ------------------
  |  |   29|   324k|#define LLISTINIT 0x100cc001 /* random pattern */
  ------------------
   53|   324k|#endif
   54|   324k|}
Curl_llist_insert_next:
   71|  1.46k|{
   72|  1.46k|  DEBUGASSERT(list);
  ------------------
  |  | 1077|  1.46k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (72:3): [True: 0, False: 1.46k]
  |  Branch (72:3): [True: 1.46k, False: 0]
  ------------------
   73|  1.46k|  DEBUGASSERT(list->_init == LLISTINIT);
  ------------------
  |  | 1077|  1.46k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (73:3): [True: 0, False: 1.46k]
  |  Branch (73:3): [True: 1.46k, False: 0]
  ------------------
   74|  1.46k|  DEBUGASSERT(ne);
  ------------------
  |  | 1077|  1.46k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (74:3): [True: 0, False: 1.46k]
  |  Branch (74:3): [True: 1.46k, False: 0]
  ------------------
   75|       |
   76|  1.46k|#ifdef DEBUGBUILD
   77|  1.46k|  ne->_init = NODEINIT;
  ------------------
  |  |   30|  1.46k|#define NODEINIT  0x12344321 /* random pattern */
  ------------------
   78|  1.46k|#endif
   79|  1.46k|  ne->_ptr = CURL_UNCONST(p);
  ------------------
  |  |  862|  1.46k|#define CURL_UNCONST(p) ((void *)(uintptr_t)(const void *)(p))
  ------------------
   80|  1.46k|  ne->_list = list;
   81|  1.46k|  if(list->_size == 0) {
  ------------------
  |  Branch (81:6): [True: 1.46k, False: 0]
  ------------------
   82|  1.46k|    list->_head = ne;
   83|  1.46k|    list->_head->_prev = NULL;
   84|  1.46k|    list->_head->_next = NULL;
   85|  1.46k|    list->_tail = ne;
   86|  1.46k|  }
   87|      0|  else {
   88|       |    /* if 'e' is NULL here, we insert the new element first in the list */
   89|      0|    ne->_next = e ? e->_next : list->_head;
  ------------------
  |  Branch (89:17): [True: 0, False: 0]
  ------------------
   90|      0|    ne->_prev = e;
   91|      0|    if(!e) {
  ------------------
  |  Branch (91:8): [True: 0, False: 0]
  ------------------
   92|      0|      list->_head->_prev = ne;
   93|      0|      list->_head = ne;
   94|      0|    }
   95|      0|    else if(e->_next) {
  ------------------
  |  Branch (95:13): [True: 0, False: 0]
  ------------------
   96|      0|      e->_next->_prev = ne;
   97|      0|    }
   98|      0|    else {
   99|      0|      list->_tail = ne;
  100|      0|    }
  101|      0|    if(e)
  ------------------
  |  Branch (101:8): [True: 0, False: 0]
  ------------------
  102|      0|      e->_next = ne;
  103|      0|  }
  104|       |
  105|  1.46k|  ++list->_size;
  106|  1.46k|}
Curl_llist_append:
  119|  1.46k|{
  120|  1.46k|  DEBUGASSERT(list);
  ------------------
  |  | 1077|  1.46k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (120:3): [True: 0, False: 1.46k]
  |  Branch (120:3): [True: 1.46k, False: 0]
  ------------------
  121|  1.46k|  DEBUGASSERT(list->_init == LLISTINIT);
  ------------------
  |  | 1077|  1.46k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (121:3): [True: 0, False: 1.46k]
  |  Branch (121:3): [True: 1.46k, False: 0]
  ------------------
  122|  1.46k|  DEBUGASSERT(ne);
  ------------------
  |  | 1077|  1.46k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (122:3): [True: 0, False: 1.46k]
  |  Branch (122:3): [True: 1.46k, False: 0]
  ------------------
  123|  1.46k|  Curl_llist_insert_next(list, list->_tail, p, ne);
  124|  1.46k|}
Curl_node_take_elem:
  127|  1.46k|{
  128|  1.46k|  void *ptr;
  129|  1.46k|  struct Curl_llist *list;
  130|  1.46k|  if(!e)
  ------------------
  |  Branch (130:6): [True: 0, False: 1.46k]
  ------------------
  131|      0|    return NULL;
  132|       |
  133|  1.46k|  list = e->_list;
  134|  1.46k|  DEBUGASSERT(list);
  ------------------
  |  | 1077|  1.46k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (134:3): [True: 0, False: 1.46k]
  |  Branch (134:3): [True: 1.46k, False: 0]
  ------------------
  135|  1.46k|  DEBUGASSERT(list->_init == LLISTINIT);
  ------------------
  |  | 1077|  1.46k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (135:3): [True: 0, False: 1.46k]
  |  Branch (135:3): [True: 1.46k, False: 0]
  ------------------
  136|  1.46k|  DEBUGASSERT(list->_size);
  ------------------
  |  | 1077|  1.46k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (136:3): [True: 0, False: 1.46k]
  |  Branch (136:3): [True: 1.46k, False: 0]
  ------------------
  137|  1.46k|  DEBUGASSERT(e->_init == NODEINIT);
  ------------------
  |  | 1077|  1.46k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (137:3): [True: 0, False: 1.46k]
  |  Branch (137:3): [True: 1.46k, False: 0]
  ------------------
  138|  1.46k|  if(list) {
  ------------------
  |  Branch (138:6): [True: 1.46k, False: 0]
  ------------------
  139|  1.46k|    if(e == list->_head) {
  ------------------
  |  Branch (139:8): [True: 1.46k, False: 0]
  ------------------
  140|  1.46k|      list->_head = e->_next;
  141|       |
  142|  1.46k|      if(!list->_head)
  ------------------
  |  Branch (142:10): [True: 1.46k, False: 0]
  ------------------
  143|  1.46k|        list->_tail = NULL;
  144|      0|      else
  145|      0|        e->_next->_prev = NULL;
  146|  1.46k|    }
  147|      0|    else {
  148|      0|      if(e->_prev)
  ------------------
  |  Branch (148:10): [True: 0, False: 0]
  ------------------
  149|      0|        e->_prev->_next = e->_next;
  150|       |
  151|      0|      if(!e->_next)
  ------------------
  |  Branch (151:10): [True: 0, False: 0]
  ------------------
  152|      0|        list->_tail = e->_prev;
  153|      0|      else
  154|      0|        e->_next->_prev = e->_prev;
  155|      0|    }
  156|  1.46k|    --list->_size;
  157|  1.46k|  }
  158|  1.46k|  ptr = e->_ptr;
  159|       |
  160|  1.46k|  e->_list = NULL;
  161|  1.46k|  e->_ptr  = NULL;
  162|  1.46k|  e->_prev = NULL;
  163|  1.46k|  e->_next = NULL;
  164|  1.46k|#ifdef DEBUGBUILD
  165|  1.46k|  e->_init = NODEREM; /* specific pattern on remove - not zero */
  ------------------
  |  |   31|  1.46k|#define NODEREM   0x54321012 /* random pattern */
  ------------------
  166|  1.46k|#endif
  167|       |
  168|  1.46k|  return ptr;
  169|  1.46k|}
Curl_node_remove:
  188|  1.46k|{
  189|       |  node_uremove(e, NULL);
  190|  1.46k|}
Curl_llist_head:
  204|   421k|{
  205|   421k|  DEBUGASSERT(list);
  ------------------
  |  | 1077|   421k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (205:3): [True: 0, False: 421k]
  |  Branch (205:3): [True: 421k, False: 0]
  ------------------
  206|   421k|  DEBUGASSERT(list->_init == LLISTINIT);
  ------------------
  |  | 1077|   421k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (206:3): [True: 0, False: 421k]
  |  Branch (206:3): [True: 421k, False: 0]
  ------------------
  207|   421k|  return VERIFYNODE(list->_head);
  ------------------
  |  |   33|   421k|#define VERIFYNODE(x) verifynode(x)
  ------------------
  208|   421k|}
Curl_node_elem:
  235|  1.46k|{
  236|  1.46k|  DEBUGASSERT(n);
  ------------------
  |  | 1077|  1.46k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (236:3): [True: 0, False: 1.46k]
  |  Branch (236:3): [True: 1.46k, False: 0]
  ------------------
  237|  1.46k|  DEBUGASSERT(n->_init == NODEINIT);
  ------------------
  |  | 1077|  1.46k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (237:3): [True: 0, False: 1.46k]
  |  Branch (237:3): [True: 1.46k, False: 0]
  ------------------
  238|  1.46k|  return n->_ptr;
  239|  1.46k|}
Curl_node_next:
  244|  1.46k|{
  245|  1.46k|  DEBUGASSERT(n);
  ------------------
  |  | 1077|  1.46k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (245:3): [True: 0, False: 1.46k]
  |  Branch (245:3): [True: 1.46k, False: 0]
  ------------------
  246|  1.46k|  DEBUGASSERT(n->_init == NODEINIT);
  ------------------
  |  | 1077|  1.46k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (246:3): [True: 0, False: 1.46k]
  |  Branch (246:3): [True: 1.46k, False: 0]
  ------------------
  247|  1.46k|  return VERIFYNODE(n->_next);
  ------------------
  |  |   33|  1.46k|#define VERIFYNODE(x) verifynode(x)
  ------------------
  248|  1.46k|}
llist.c:node_uremove:
  172|  1.46k|{
  173|  1.46k|  struct Curl_llist *list;
  174|  1.46k|  void *ptr;
  175|  1.46k|  if(!e)
  ------------------
  |  Branch (175:6): [True: 0, False: 1.46k]
  ------------------
  176|      0|    return;
  177|       |
  178|  1.46k|  list = e->_list;
  179|  1.46k|  DEBUGASSERT(list);
  ------------------
  |  | 1077|  1.46k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (179:3): [True: 0, False: 1.46k]
  |  Branch (179:3): [True: 1.46k, False: 0]
  ------------------
  180|  1.46k|  if(list) {
  ------------------
  |  Branch (180:6): [True: 1.46k, False: 0]
  ------------------
  181|  1.46k|    ptr = Curl_node_take_elem(e);
  182|  1.46k|    if(list->_dtor)
  ------------------
  |  Branch (182:8): [True: 0, False: 1.46k]
  ------------------
  183|      0|      list->_dtor(user, ptr);
  184|  1.46k|  }
  185|  1.46k|}
llist.c:verifynode:
   35|   422k|{
   36|   422k|  DEBUGASSERT(!n || (n->_init == NODEINIT));
  ------------------
  |  | 1077|   422k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (36:3): [True: 422k, False: 0]
  |  Branch (36:3): [True: 0, False: 0]
  |  Branch (36:3): [True: 421k, False: 1.46k]
  |  Branch (36:3): [True: 1.46k, False: 0]
  ------------------
   37|   422k|  return n;
   38|   422k|}

curl_dbg_malloc:
  212|  75.1k|{
  213|  75.1k|  struct memdebug *mem;
  214|  75.1k|  size_t size;
  215|       |
  216|  75.1k|  DEBUGASSERT(wantedsize != 0);
  ------------------
  |  | 1077|  75.1k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (216:3): [True: 0, False: 75.1k]
  |  Branch (216:3): [True: 75.1k, False: 0]
  ------------------
  217|       |
  218|  75.1k|  if(countcheck("malloc", line, source))
  ------------------
  |  Branch (218:6): [True: 0, False: 75.1k]
  ------------------
  219|      0|    return NULL;
  220|       |
  221|       |  /* alloc at least 64 bytes */
  222|  75.1k|  size = sizeof(struct memdebug) + wantedsize;
  223|       |
  224|  75.1k|  mem = Curl_cmalloc(size);
  225|  75.1k|  if(mem) {
  ------------------
  |  Branch (225:6): [True: 75.1k, False: 0]
  ------------------
  226|  75.1k|    mem->size = wantedsize;
  227|  75.1k|  }
  228|       |
  229|  75.1k|  if(source)
  ------------------
  |  Branch (229:6): [True: 27.0k, False: 48.1k]
  ------------------
  230|  27.0k|    curl_dbg_log("MEM %s:%d malloc(%zu) = %p\n",
  231|  27.0k|                 source, line, wantedsize,
  232|  27.0k|                 mem ? (void *)mem->mem : (void *)0);
  ------------------
  |  Branch (232:18): [True: 27.0k, False: 0]
  ------------------
  233|       |
  234|  75.1k|  return mem ? mem->mem : NULL;
  ------------------
  |  Branch (234:10): [True: 75.1k, False: 0]
  ------------------
  235|  75.1k|}
curl_dbg_calloc:
  240|  21.1k|{
  241|  21.1k|  struct memdebug *mem;
  242|  21.1k|  size_t size, user_size;
  243|       |
  244|  21.1k|  DEBUGASSERT(wanted_elements != 0);
  ------------------
  |  | 1077|  21.1k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (244:3): [True: 0, False: 21.1k]
  |  Branch (244:3): [True: 21.1k, False: 0]
  ------------------
  245|  21.1k|  DEBUGASSERT(wanted_size != 0);
  ------------------
  |  | 1077|  21.1k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (245:3): [True: 0, False: 21.1k]
  |  Branch (245:3): [True: 21.1k, False: 0]
  ------------------
  246|       |
  247|  21.1k|  if(countcheck("calloc", line, source))
  ------------------
  |  Branch (247:6): [True: 0, False: 21.1k]
  ------------------
  248|      0|    return NULL;
  249|       |
  250|       |  /* alloc at least 64 bytes */
  251|  21.1k|  user_size = wanted_size * wanted_elements;
  252|  21.1k|  size = sizeof(struct memdebug) + user_size;
  253|       |
  254|  21.1k|  mem = Curl_ccalloc(1, size);
  255|  21.1k|  if(mem)
  ------------------
  |  Branch (255:6): [True: 21.1k, False: 0]
  ------------------
  256|  21.1k|    mem->size = user_size;
  257|       |
  258|  21.1k|  if(source)
  ------------------
  |  Branch (258:6): [True: 21.1k, False: 0]
  ------------------
  259|  21.1k|    curl_dbg_log("MEM %s:%d calloc(%zu,%zu) = %p\n",
  260|  21.1k|                 source, line, wanted_elements, wanted_size,
  261|  21.1k|                 mem ? (void *)mem->mem : (void *)0);
  ------------------
  |  Branch (261:18): [True: 21.1k, False: 0]
  ------------------
  262|       |
  263|  21.1k|  return mem ? mem->mem : NULL;
  ------------------
  |  Branch (263:10): [True: 21.1k, False: 0]
  ------------------
  264|  21.1k|}
curl_dbg_strdup:
  268|  48.1k|{
  269|  48.1k|  char *mem;
  270|  48.1k|  size_t len;
  271|       |
  272|  48.1k|  DEBUGASSERT(str);
  ------------------
  |  | 1077|  48.1k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (272:3): [True: 0, False: 48.1k]
  |  Branch (272:3): [True: 48.1k, False: 0]
  ------------------
  273|       |
  274|  48.1k|  if(countcheck("strdup", line, source))
  ------------------
  |  Branch (274:6): [True: 0, False: 48.1k]
  ------------------
  275|      0|    return NULL;
  276|       |
  277|  48.1k|  len = strlen(str) + 1;
  278|       |
  279|  48.1k|  mem = curl_dbg_malloc(len, 0, NULL); /* NULL prevents logging */
  280|  48.1k|  if(mem)
  ------------------
  |  Branch (280:6): [True: 48.1k, False: 0]
  ------------------
  281|  48.1k|    memcpy(mem, str, len);
  282|       |
  283|  48.1k|  if(source)
  ------------------
  |  Branch (283:6): [True: 48.1k, False: 0]
  ------------------
  284|  48.1k|    curl_dbg_log("MEM %s:%d strdup(%p) (%zu) = %p\n",
  285|  48.1k|                 source, line, (const void *)str, len, (const void *)mem);
  286|       |
  287|  48.1k|  return mem;
  288|  48.1k|}
curl_dbg_realloc:
  321|  4.74k|{
  322|  4.74k|  struct memdebug *mem = NULL;
  323|  4.74k|  bool was_locked;
  324|       |
  325|  4.74k|  size_t size = sizeof(struct memdebug) + wantedsize;
  326|       |
  327|  4.74k|  DEBUGASSERT(wantedsize != 0);
  ------------------
  |  | 1077|  4.74k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (327:3): [True: 0, False: 4.74k]
  |  Branch (327:3): [True: 4.74k, False: 0]
  ------------------
  328|       |
  329|  4.74k|  if(countcheck("realloc", line, source))
  ------------------
  |  Branch (329:6): [True: 0, False: 4.74k]
  ------------------
  330|      0|    return NULL;
  331|       |
  332|       |  /* need to realloc under lock, as we get out-of-order log
  333|       |   * entries otherwise, since another thread might alloc the
  334|       |   * memory released by realloc() before otherwise would log it. */
  335|  4.74k|  was_locked = curl_dbg_lock();
  336|       |#ifdef __INTEL_COMPILER
  337|       |#  pragma warning(push)
  338|       |#  pragma warning(disable:1684)
  339|       |   /* 1684: conversion from pointer to same-sized integral type */
  340|       |#endif
  341|       |
  342|  4.74k|  if(ptr)
  ------------------
  |  Branch (342:6): [True: 0, False: 4.74k]
  ------------------
  343|      0|    mem = (void *)((char *)ptr - offsetof(struct memdebug, mem));
  344|       |
  345|       |#ifdef __INTEL_COMPILER
  346|       |#  pragma warning(pop)
  347|       |#endif
  348|       |
  349|  4.74k|  mem = Curl_crealloc(mem, size);
  350|  4.74k|  if(source)
  ------------------
  |  Branch (350:6): [True: 4.74k, False: 0]
  ------------------
  351|  4.74k|    curl_dbg_log_locked("MEM %s:%d realloc(%p, %zu) = %p\n",
  352|  4.74k|                        source, line, (void *)ptr, wantedsize,
  353|  4.74k|                        mem ? (void *)mem->mem : (void *)0);
  ------------------
  |  Branch (353:25): [True: 4.74k, False: 0]
  ------------------
  354|       |
  355|  4.74k|  curl_dbg_unlock(was_locked);
  356|  4.74k|  if(mem) {
  ------------------
  |  Branch (356:6): [True: 4.74k, False: 0]
  ------------------
  357|  4.74k|    mem->size = wantedsize;
  358|  4.74k|    return mem->mem;
  359|  4.74k|  }
  360|       |
  361|      0|  return NULL;
  362|  4.74k|}
curl_dbg_free:
  365|   924k|{
  366|   924k|  if(ptr) {
  ------------------
  |  Branch (366:6): [True: 101k, False: 823k]
  ------------------
  367|   101k|    struct memdebug *mem;
  368|       |
  369|   101k|    if(source)
  ------------------
  |  Branch (369:8): [True: 101k, False: 0]
  ------------------
  370|   101k|      curl_dbg_log("MEM %s:%d free(%p)\n", source, line, (void *)ptr);
  371|       |
  372|       |#ifdef __INTEL_COMPILER
  373|       |#  pragma warning(push)
  374|       |#  pragma warning(disable:1684)
  375|       |   /* 1684: conversion from pointer to same-sized integral type */
  376|       |#endif
  377|       |
  378|   101k|    mem = (void *)((char *)ptr - offsetof(struct memdebug, mem));
  379|       |
  380|       |#ifdef __INTEL_COMPILER
  381|       |#  pragma warning(pop)
  382|       |#endif
  383|       |
  384|       |    /* free for real */
  385|   101k|    Curl_cfree(mem);
  386|   101k|  }
  387|   924k|}
curl_dbg_fopen:
  477|  14.1k|{
  478|  14.1k|  FILE *res = CURLX_FOPEN_LOW(file, mode);
  ------------------
  |  |   64|  14.1k|#define CURLX_FOPEN_LOW         fopen
  ------------------
  479|  14.1k|  if(source)
  ------------------
  |  Branch (479:6): [True: 14.1k, False: 0]
  ------------------
  480|  14.1k|    curl_dbg_log("FILE %s:%d fopen(\"%s\",\"%s\") = %p\n",
  481|  14.1k|                 source, line, file, mode, (void *)res);
  482|       |
  483|  14.1k|  return res;
  484|  14.1k|}
curl_dbg_fclose:
  510|  14.1k|{
  511|  14.1k|  int res;
  512|       |
  513|  14.1k|  DEBUGASSERT(file);
  ------------------
  |  | 1077|  14.1k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (513:3): [True: 0, False: 14.1k]
  |  Branch (513:3): [True: 14.1k, False: 0]
  ------------------
  514|       |
  515|  14.1k|  if(source)
  ------------------
  |  Branch (515:6): [True: 14.1k, False: 0]
  ------------------
  516|  14.1k|    curl_dbg_log("FILE %s:%d fclose(%p)\n", source, line, (void *)file);
  517|       |
  518|       |  /* !checksrc! disable BANNEDFUNC 1 */
  519|  14.1k|  res = fclose(file);
  520|       |
  521|  14.1k|  return res;
  522|  14.1k|}
curl_dbg_log:
  565|   225k|{
  566|   225k|  bool was_locked;
  567|   225k|  va_list ap;
  568|       |
  569|   225k|  if(!curl_dbg_logfile)
  ------------------
  |  Branch (569:6): [True: 225k, False: 0]
  ------------------
  570|   225k|    return;
  571|       |
  572|      0|  was_locked = curl_dbg_lock();
  573|      0|  va_start(ap, format);
  574|      0|  curl_dbg_vlog(format, ap);
  575|       |  va_end(ap);
  576|      0|  curl_dbg_unlock(was_locked);
  577|      0|}
memdebug.c:countcheck:
  187|   149k|{
  188|       |  /* if source is NULL, then the call is made internally and this check
  189|       |     should not be made */
  190|   149k|  if(memlimit && source) {
  ------------------
  |  Branch (190:6): [True: 0, False: 149k]
  |  Branch (190:18): [True: 0, False: 0]
  ------------------
  191|      0|    if(!memsize) {
  ------------------
  |  Branch (191:8): [True: 0, False: 0]
  ------------------
  192|       |      /* log to file */
  193|      0|      curl_dbg_log("LIMIT %s:%d %s reached memlimit\n", source, line, func);
  194|       |      /* log to stderr also */
  195|      0|      curl_mfprintf(stderr, "LIMIT %s:%d %s reached memlimit\n",
  196|      0|                    source, line, func);
  197|      0|      dump_bt();
  198|      0|      fflush(curl_dbg_logfile); /* because it might crash now */
  199|       |      /* !checksrc! disable ERRNOVAR 1 */
  200|      0|      errno = ENOMEM;
  201|      0|      return TRUE; /* RETURN ERROR! */
  ------------------
  |  | 1051|      0|#define TRUE true
  ------------------
  202|      0|    }
  203|      0|    else
  204|      0|      memsize--; /* countdown */
  205|      0|  }
  206|       |
  207|   149k|  return FALSE; /* allow this */
  ------------------
  |  | 1054|   149k|#define FALSE false
  ------------------
  208|   149k|}
memdebug.c:curl_dbg_lock:
   74|  4.74k|{
   75|  4.74k|#ifdef USE_MUTEX
   76|  4.74k|  if(dbg_mutex_init) {
  ------------------
  |  Branch (76:6): [True: 0, False: 4.74k]
  ------------------
   77|      0|    Curl_mutex_acquire(&dbg_mutex);
  ------------------
  |  |   36|      0|#  define Curl_mutex_acquire(m)  pthread_mutex_lock(m)
  ------------------
   78|      0|    return TRUE;
  ------------------
  |  | 1051|      0|#define TRUE true
  ------------------
   79|      0|  }
   80|  4.74k|#endif
   81|  4.74k|  return FALSE;
  ------------------
  |  | 1054|  4.74k|#define FALSE false
  ------------------
   82|  4.74k|}
memdebug.c:curl_dbg_unlock:
   85|  4.74k|{
   86|  4.74k|#ifdef USE_MUTEX
   87|  4.74k|  if(was_locked)
  ------------------
  |  Branch (87:6): [True: 0, False: 4.74k]
  ------------------
   88|      0|    Curl_mutex_release(&dbg_mutex);
  ------------------
  |  |   37|      0|#  define Curl_mutex_release(m)  pthread_mutex_unlock(m)
  ------------------
   89|       |#else
   90|       |  (void)was_locked;
   91|       |#endif
   92|  4.74k|}
memdebug.c:curl_dbg_log_locked:
  552|  4.74k|{
  553|  4.74k|  va_list ap;
  554|       |
  555|  4.74k|  if(!curl_dbg_logfile)
  ------------------
  |  Branch (555:6): [True: 4.74k, False: 0]
  ------------------
  556|  4.74k|    return;
  557|       |
  558|  4.74k|  va_start(ap, format);
  559|      0|  curl_dbg_vlog(format, ap);
  560|       |  va_end(ap);
  561|      0|}

Curl_mime_cleanpart:
 1099|  16.3k|{
 1100|  16.3k|  if(part) {
  ------------------
  |  Branch (1100:6): [True: 2.69k, False: 13.6k]
  ------------------
 1101|  2.69k|    cleanup_part_content(part);
 1102|  2.69k|    curl_slist_free_all(part->curlheaders);
 1103|  2.69k|    if(part->flags & MIME_USERHEADERS_OWNER)
  ------------------
  |  |   34|  2.69k|#define MIME_USERHEADERS_OWNER  (1 << 0)
  ------------------
  |  Branch (1103:8): [True: 0, False: 2.69k]
  ------------------
 1104|      0|      curl_slist_free_all(part->userheaders);
 1105|  2.69k|    curlx_safefree(part->mimetype);
  ------------------
  |  | 1332|  2.69k|  do {                      \
  |  | 1333|  2.69k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1488|  2.69k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  2.69k|    (ptr) = NULL;           \
  |  | 1335|  2.69k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 2.69k]
  |  |  ------------------
  ------------------
 1106|  2.69k|    curlx_safefree(part->name);
  ------------------
  |  | 1332|  2.69k|  do {                      \
  |  | 1333|  2.69k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1488|  2.69k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  2.69k|    (ptr) = NULL;           \
  |  | 1335|  2.69k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 2.69k]
  |  |  ------------------
  ------------------
 1107|       |    curlx_safefree(part->filename);
  ------------------
  |  | 1332|  2.69k|  do {                      \
  |  | 1333|  2.69k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1488|  2.69k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  2.69k|    (ptr) = NULL;           \
  |  | 1335|  2.69k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 2.69k]
  |  |  ------------------
  ------------------
 1108|  2.69k|    Curl_mime_initpart(part);
 1109|  2.69k|  }
 1110|  16.3k|}
curl_mime_free:
 1114|    297|{
 1115|    297|  curl_mimepart *part;
 1116|       |
 1117|    297|  if(mime) {
  ------------------
  |  Branch (1117:6): [True: 297, False: 0]
  ------------------
 1118|    297|    mime_subparts_unbind(mime);  /* Be sure it is not referenced anymore. */
 1119|  2.98k|    while(mime->firstpart) {
  ------------------
  |  Branch (1119:11): [True: 2.69k, False: 297]
  ------------------
 1120|  2.69k|      part = mime->firstpart;
 1121|  2.69k|      mime->firstpart = part->nextpart;
 1122|  2.69k|      Curl_mime_cleanpart(part);
 1123|  2.69k|      curlx_free(part);
  ------------------
  |  | 1488|  2.69k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
 1124|  2.69k|    }
 1125|    297|    curlx_free(mime);
  ------------------
  |  | 1488|    297|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
 1126|    297|  }
 1127|    297|}
curl_mime_init:
 1213|    297|{
 1214|    297|  curl_mime *mime = curlx_malloc(sizeof(*mime));
  ------------------
  |  | 1483|    297|#define curlx_malloc(size)         curl_dbg_malloc(size, __LINE__, __FILE__)
  ------------------
 1215|       |
 1216|    297|  if(mime) {
  ------------------
  |  Branch (1216:6): [True: 297, False: 0]
  ------------------
 1217|    297|    mime->parent = NULL;
 1218|    297|    mime->firstpart = NULL;
 1219|    297|    mime->lastpart = NULL;
 1220|       |
 1221|    297|    memset(mime->boundary, '-', MIME_BOUNDARY_DASHES);
  ------------------
  |  |   28|    297|#define MIME_BOUNDARY_DASHES            24  /* leading boundary dashes */
  ------------------
 1222|    297|    if(Curl_rand_alnum(easy,
  ------------------
  |  Branch (1222:8): [True: 0, False: 297]
  ------------------
 1223|    297|                       (unsigned char *)&mime->boundary[MIME_BOUNDARY_DASHES],
  ------------------
  |  |   28|    297|#define MIME_BOUNDARY_DASHES            24  /* leading boundary dashes */
  ------------------
 1224|    297|                       MIME_RAND_BOUNDARY_CHARS + 1)) {
  ------------------
  |  |   29|    297|#define MIME_RAND_BOUNDARY_CHARS        22  /* Nb. of random boundary chars. */
  ------------------
 1225|       |      /* failed to get random separator, bail out */
 1226|      0|      curlx_free(mime);
  ------------------
  |  | 1488|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
 1227|      0|      return NULL;
 1228|      0|    }
 1229|    297|    mimesetstate(&mime->state, MIMESTATE_BEGIN, NULL);
 1230|    297|  }
 1231|       |
 1232|    297|  return mime;
 1233|    297|}
Curl_mime_initpart:
 1237|  5.38k|{
 1238|  5.38k|  memset(part, 0, sizeof(*part));
 1239|  5.38k|  part->lastreadstatus = 1; /* Successful read status. */
 1240|       |  mimesetstate(&part->state, MIMESTATE_BEGIN, NULL);
 1241|  5.38k|}
curl_mime_addpart:
 1245|  2.69k|{
 1246|  2.69k|  curl_mimepart *part;
 1247|       |
 1248|  2.69k|  if(!mime)
  ------------------
  |  Branch (1248:6): [True: 0, False: 2.69k]
  ------------------
 1249|      0|    return NULL;
 1250|       |
 1251|  2.69k|  part = curlx_malloc(sizeof(*part));
  ------------------
  |  | 1483|  2.69k|#define curlx_malloc(size)         curl_dbg_malloc(size, __LINE__, __FILE__)
  ------------------
 1252|       |
 1253|  2.69k|  if(part) {
  ------------------
  |  Branch (1253:6): [True: 2.69k, False: 0]
  ------------------
 1254|  2.69k|    Curl_mime_initpart(part);
 1255|  2.69k|    part->parent = mime;
 1256|       |
 1257|  2.69k|    if(mime->lastpart)
  ------------------
  |  Branch (1257:8): [True: 2.39k, False: 297]
  ------------------
 1258|  2.39k|      mime->lastpart->nextpart = part;
 1259|    297|    else
 1260|    297|      mime->firstpart = part;
 1261|       |
 1262|  2.69k|    mime->lastpart = part;
 1263|  2.69k|  }
 1264|       |
 1265|  2.69k|  return part;
 1266|  2.69k|}
curl_mime_name:
 1270|    204|{
 1271|    204|  if(!part)
  ------------------
  |  Branch (1271:6): [True: 0, False: 204]
  ------------------
 1272|      0|    return CURLE_BAD_FUNCTION_ARGUMENT;
 1273|       |
 1274|    204|  curlx_safefree(part->name);
  ------------------
  |  | 1332|    204|  do {                      \
  |  | 1333|    204|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1488|    204|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|    204|    (ptr) = NULL;           \
  |  | 1335|    204|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 204]
  |  |  ------------------
  ------------------
 1275|       |
 1276|    204|  if(name) {
  ------------------
  |  Branch (1276:6): [True: 204, False: 0]
  ------------------
 1277|    204|    part->name = curlx_strdup(name);
  ------------------
  |  | 1482|    204|#define curlx_strdup(ptr)          curl_dbg_strdup(ptr, __LINE__, __FILE__)
  ------------------
 1278|    204|    if(!part->name)
  ------------------
  |  Branch (1278:8): [True: 0, False: 204]
  ------------------
 1279|      0|      return CURLE_OUT_OF_MEMORY;
 1280|    204|  }
 1281|       |
 1282|    204|  return CURLE_OK;
 1283|    204|}
curl_mime_data:
 1304|    790|{
 1305|    790|  if(!part)
  ------------------
  |  Branch (1305:6): [True: 0, False: 790]
  ------------------
 1306|      0|    return CURLE_BAD_FUNCTION_ARGUMENT;
 1307|       |
 1308|    790|  cleanup_part_content(part);
 1309|       |
 1310|    790|  if(data) {
  ------------------
  |  Branch (1310:6): [True: 790, False: 0]
  ------------------
 1311|    790|    if(datasize == CURL_ZERO_TERMINATED)
  ------------------
  |  | 2429|    790|#define CURL_ZERO_TERMINATED ((size_t)-1)
  ------------------
  |  Branch (1311:8): [True: 0, False: 790]
  ------------------
 1312|      0|      datasize = strlen(data);
 1313|       |
 1314|    790|    part->data = curlx_memdup0(data, datasize);
 1315|    790|    if(!part->data)
  ------------------
  |  Branch (1315:8): [True: 0, False: 790]
  ------------------
 1316|      0|      return CURLE_OUT_OF_MEMORY;
 1317|       |
 1318|    790|    part->datasize = datasize;
 1319|    790|    part->readfunc = mime_mem_read;
 1320|    790|    part->seekfunc = mime_mem_seek;
 1321|    790|    part->freefunc = mime_mem_free;
 1322|    790|    part->flags |= MIME_FAST_READ;
  ------------------
  |  |   36|    790|#define MIME_FAST_READ          (1 << 2)
  ------------------
 1323|    790|    part->kind = MIMEKIND_DATA;
 1324|    790|  }
 1325|       |
 1326|    790|  return CURLE_OK;
 1327|    790|}
mime.c:cleanup_part_content:
 1057|  3.48k|{
 1058|  3.48k|  if(part->freefunc)
  ------------------
  |  Branch (1058:6): [True: 790, False: 2.69k]
  ------------------
 1059|    790|    part->freefunc(part->arg);
 1060|       |
 1061|  3.48k|  part->readfunc = NULL;
 1062|  3.48k|  part->seekfunc = NULL;
 1063|  3.48k|  part->freefunc = NULL;
 1064|  3.48k|  part->arg = (void *)part;           /* Defaults to part itself. */
 1065|  3.48k|  part->data = NULL;
 1066|  3.48k|  part->fp = NULL;
 1067|  3.48k|  part->datasize = (curl_off_t)0;     /* No size yet. */
 1068|  3.48k|  cleanup_encoder_state(&part->encstate);
 1069|  3.48k|  part->kind = MIMEKIND_NONE;
 1070|  3.48k|  part->flags &= ~(unsigned int)MIME_FAST_READ;
  ------------------
  |  |   36|  3.48k|#define MIME_FAST_READ          (1 << 2)
  ------------------
 1071|  3.48k|  part->lastreadstatus = 1; /* Successful read status. */
 1072|  3.48k|  part->state.state = MIMESTATE_BEGIN;
 1073|  3.48k|}
mime.c:cleanup_encoder_state:
  284|  3.48k|{
  285|  3.48k|  p->pos = 0;
  286|  3.48k|  p->bufbeg = 0;
  287|  3.48k|  p->bufend = 0;
  288|  3.48k|}
mime.c:mime_subparts_unbind:
 1088|    297|{
 1089|    297|  curl_mime *mime = (curl_mime *)ptr;
 1090|       |
 1091|    297|  if(mime && mime->parent) {
  ------------------
  |  Branch (1091:6): [True: 297, False: 0]
  |  Branch (1091:14): [True: 0, False: 297]
  ------------------
 1092|      0|    mime->parent->freefunc = NULL;  /* Be sure we will not be called again. */
 1093|      0|    cleanup_part_content(mime->parent);  /* Avoid dangling pointer in part. */
 1094|       |    mime->parent = NULL;
 1095|      0|  }
 1096|    297|}
mime.c:mimesetstate:
  190|  5.67k|{
  191|  5.67k|  state->state = tok;
  192|  5.67k|  state->ptr = ptr;
  193|  5.67k|  state->offset = 0;
  194|  5.67k|}
mime.c:mime_mem_free:
  614|    790|{
  615|       |  curlx_safefree(((curl_mimepart *)ptr)->data);
  ------------------
  |  | 1332|    790|  do {                      \
  |  | 1333|    790|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1488|    790|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|    790|    (ptr) = NULL;           \
  |  | 1335|    790|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 790]
  |  |  ------------------
  ------------------
  616|    790|}

curl_mvsnprintf:
 1106|    104|{
 1107|    104|  int retcode;
 1108|    104|  struct nsprintf info;
 1109|       |
 1110|    104|  info.buffer = buffer;
 1111|    104|  info.length = 0;
 1112|    104|  info.max = maxlength;
 1113|       |
 1114|    104|  retcode = formatf(&info, addbyter, format, args);
 1115|    104|  if(info.max) {
  ------------------
  |  Branch (1115:6): [True: 104, False: 0]
  ------------------
 1116|       |    /* we terminate this with a zero byte */
 1117|    104|    if(info.max == info.length) {
  ------------------
  |  Branch (1117:8): [True: 0, False: 104]
  ------------------
 1118|       |      /* we are at maximum, scrap the last letter */
 1119|      0|      info.buffer[-1] = 0;
 1120|      0|      DEBUGASSERT(retcode);
  ------------------
  |  | 1077|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (1120:7): [True: 0, False: 0]
  |  Branch (1120:7): [True: 0, False: 0]
  ------------------
 1121|      0|      retcode--; /* do not count the nul byte */
 1122|      0|    }
 1123|    104|    else
 1124|    104|      info.buffer[0] = 0;
 1125|    104|  }
 1126|    104|  return retcode;
 1127|    104|}
curl_msnprintf:
 1130|    104|{
 1131|    104|  int retcode;
 1132|    104|  va_list args; /* argument pointer */
 1133|    104|  va_start(args, format);
 1134|    104|  retcode = curl_mvsnprintf(buffer, maxlength, format, args);
 1135|       |  va_end(args);
 1136|    104|  return retcode;
 1137|    104|}
mprintf.c:formatf:
  976|    104|{
  977|    104|  int done = 0;   /* number of characters written */
  978|    104|  int i;
  979|    104|  int ocount = 0; /* number of output segments */
  980|    104|  int icount = 0; /* number of input arguments */
  981|       |
  982|    104|  struct outsegment output[MAX_SEGMENTS];
  983|    104|  struct va_input input[MAX_PARAMETERS];
  984|    104|  char work[BUFFSIZE + 2];
  985|       |
  986|       |  /* Parse the format string */
  987|    104|  if(parsefmt(format, output, input, &ocount, &icount, ap_save))
  ------------------
  |  Branch (987:6): [True: 0, False: 104]
  ------------------
  988|      0|    return 0;
  989|       |
  990|    312|  for(i = 0; i < ocount; i++) {
  ------------------
  |  Branch (990:14): [True: 208, False: 104]
  ------------------
  991|    208|    struct outsegment *optr = &output[i];
  992|    208|    struct va_input *iptr = &input[optr->input];
  993|    208|    struct mproperty p;
  994|    208|    size_t outlen = optr->outlen;
  995|       |
  996|    208|    if(outlen) {
  ------------------
  |  Branch (996:8): [True: 104, False: 104]
  ------------------
  997|    104|      const char *str = optr->start;
  998|    208|      for(; outlen && *str; outlen--) {
  ------------------
  |  Branch (998:13): [True: 104, False: 104]
  |  Branch (998:23): [True: 104, False: 0]
  ------------------
  999|    104|        if(stream(*str++, userp))
  ------------------
  |  Branch (999:12): [True: 0, False: 104]
  ------------------
 1000|      0|          return done;
 1001|    104|        done++;
 1002|    104|      }
 1003|    104|      if(optr->flags & FLAGS_SUBSTR)
  ------------------
  |  Branch (1003:10): [True: 0, False: 104]
  ------------------
 1004|       |        /* this is a substring */
 1005|      0|        continue;
 1006|    104|    }
 1007|       |
 1008|    208|    p.flags = optr->flags;
 1009|       |
 1010|       |    /* pick up the specified width */
 1011|    208|    if(p.flags & FLAGS_WIDTHPARAM) {
  ------------------
  |  Branch (1011:8): [True: 0, False: 208]
  ------------------
 1012|      0|      p.width = (int)input[optr->width].val.nums;
 1013|      0|      if(p.width < 0) {
  ------------------
  |  Branch (1013:10): [True: 0, False: 0]
  ------------------
 1014|       |        /* "A negative field width is taken as a '-' flag followed by a
 1015|       |           positive field width." */
 1016|      0|        if(p.width == INT_MIN)
  ------------------
  |  Branch (1016:12): [True: 0, False: 0]
  ------------------
 1017|      0|          p.width = INT_MAX;
 1018|      0|        else
 1019|      0|          p.width = -p.width;
 1020|      0|        p.flags |= FLAGS_LEFT;
 1021|      0|        p.flags &= ~(unsigned int)FLAGS_PAD_NIL;
 1022|      0|      }
 1023|      0|    }
 1024|    208|    else
 1025|    208|      p.width = optr->width;
 1026|       |
 1027|       |    /* pick up the specified precision */
 1028|    208|    if(p.flags & FLAGS_PRECPARAM) {
  ------------------
  |  Branch (1028:8): [True: 0, False: 208]
  ------------------
 1029|      0|      p.prec = (int)input[optr->precision].val.nums;
 1030|      0|      if(p.prec < 0)
  ------------------
  |  Branch (1030:10): [True: 0, False: 0]
  ------------------
 1031|       |        /* "A negative precision is taken as if the precision were
 1032|       |           omitted." */
 1033|      0|        p.prec = -1;
 1034|      0|    }
 1035|    208|    else if(p.flags & FLAGS_PREC)
  ------------------
  |  Branch (1035:13): [True: 0, False: 208]
  ------------------
 1036|      0|      p.prec = optr->precision;
 1037|    208|    else
 1038|    208|      p.prec = -1;
 1039|       |
 1040|    208|    switch(iptr->type) {
 1041|      0|    case MTYPE_INTU:
  ------------------
  |  Branch (1041:5): [True: 0, False: 208]
  ------------------
 1042|      0|    case MTYPE_LONGU:
  ------------------
  |  Branch (1042:5): [True: 0, False: 208]
  ------------------
 1043|      0|    case MTYPE_LONGLONGU:
  ------------------
  |  Branch (1043:5): [True: 0, False: 208]
  ------------------
 1044|      0|      p.flags |= FLAGS_UNSIGNED;
 1045|      0|      if(out_number(userp, stream, &p, iptr->val.numu, 0, work, &done))
  ------------------
  |  Branch (1045:10): [True: 0, False: 0]
  ------------------
 1046|      0|        return done;
 1047|      0|      break;
 1048|       |
 1049|      0|    case MTYPE_INT:
  ------------------
  |  Branch (1049:5): [True: 0, False: 208]
  ------------------
 1050|      0|    case MTYPE_LONG:
  ------------------
  |  Branch (1050:5): [True: 0, False: 208]
  ------------------
 1051|      0|    case MTYPE_LONGLONG:
  ------------------
  |  Branch (1051:5): [True: 0, False: 208]
  ------------------
 1052|      0|      if(out_number(userp, stream, &p, iptr->val.numu,
  ------------------
  |  Branch (1052:10): [True: 0, False: 0]
  ------------------
 1053|      0|                    iptr->val.nums, work, &done))
 1054|      0|        return done;
 1055|      0|      break;
 1056|       |
 1057|    208|    case MTYPE_STRING:
  ------------------
  |  Branch (1057:5): [True: 208, False: 0]
  ------------------
 1058|    208|      if(out_string(userp, stream, &p, iptr->val.str, &done))
  ------------------
  |  Branch (1058:10): [True: 0, False: 208]
  ------------------
 1059|      0|        return done;
 1060|    208|      break;
 1061|       |
 1062|    208|    case MTYPE_PTR:
  ------------------
  |  Branch (1062:5): [True: 0, False: 208]
  ------------------
 1063|      0|      if(out_pointer(userp, stream, &p, iptr->val.ptr, work, &done))
  ------------------
  |  Branch (1063:10): [True: 0, False: 0]
  ------------------
 1064|      0|        return done;
 1065|      0|      break;
 1066|       |
 1067|      0|    case MTYPE_DOUBLE:
  ------------------
  |  Branch (1067:5): [True: 0, False: 208]
  ------------------
 1068|      0|      if(out_double(userp, stream, &p, iptr->val.dnum, work, &done))
  ------------------
  |  Branch (1068:10): [True: 0, False: 0]
  ------------------
 1069|      0|        return done;
 1070|      0|      break;
 1071|       |
 1072|      0|    case MTYPE_INTPTR:
  ------------------
  |  Branch (1072:5): [True: 0, False: 208]
  ------------------
 1073|       |      /* Answer the count of characters written. */
 1074|      0|      if(p.flags & FLAGS_LONGLONG)
  ------------------
  |  Branch (1074:10): [True: 0, False: 0]
  ------------------
 1075|      0|        *(int64_t *)iptr->val.ptr = (int64_t)done;
 1076|      0|      else if(p.flags & FLAGS_LONG)
  ------------------
  |  Branch (1076:15): [True: 0, False: 0]
  ------------------
 1077|      0|        *(long *)iptr->val.ptr = (long)done;
 1078|      0|      else if(!(p.flags & FLAGS_SHORT))
  ------------------
  |  Branch (1078:15): [True: 0, False: 0]
  ------------------
 1079|      0|        *(int *)iptr->val.ptr = done;
 1080|      0|      else
 1081|      0|        *(short *)iptr->val.ptr = (short)done;
 1082|      0|      break;
 1083|       |
 1084|      0|    default:
  ------------------
  |  Branch (1084:5): [True: 0, False: 208]
  ------------------
 1085|      0|      break;
 1086|    208|    }
 1087|    208|  }
 1088|    104|  return done;
 1089|    104|}
mprintf.c:parsefmt:
  431|    104|{
  432|    104|  const char *fmt = format;
  433|    104|  int param_num = 0;
  434|    104|  int max_param = -1;
  435|    104|  int i;
  436|    104|  int ocount = 0;
  437|    104|  unsigned char usedinput[MAX_PARAMETERS / 8];
  438|    104|  size_t outlen = 0;
  439|    104|  struct outsegment *optr;
  440|    104|  int use_dollar = DOLLAR_UNKNOWN;
  441|    104|  const char *start = fmt;
  442|       |
  443|       |  /* clear, set a bit for each used input */
  444|    104|  memset(usedinput, 0, sizeof(usedinput));
  445|       |
  446|    416|  while(*fmt) {
  ------------------
  |  Branch (446:9): [True: 312, False: 104]
  ------------------
  447|    312|    if(*fmt == '%') {
  ------------------
  |  Branch (447:8): [True: 208, False: 104]
  ------------------
  448|    208|      struct va_input *iptr;
  449|    208|      FormatType type;
  450|    208|      unsigned int flags = 0;
  451|    208|      int width = 0;
  452|    208|      int precision = 0;
  453|    208|      int param = -1;
  454|    208|      int rc;
  455|    208|      fmt++;
  456|    208|      outlen = (size_t)(fmt - start - 1);
  457|    208|      if(*fmt == '%') {
  ------------------
  |  Branch (457:10): [True: 0, False: 208]
  ------------------
  458|       |        /* this means a %% that should be output only as %. Create an output
  459|       |           segment. */
  460|      0|        if(outlen) {
  ------------------
  |  Branch (460:12): [True: 0, False: 0]
  ------------------
  461|      0|          optr = &out[ocount++];
  462|      0|          if(ocount > MAX_SEGMENTS)
  ------------------
  |  |   34|      0|#define MAX_SEGMENTS   128 /* number of output segments */
  ------------------
  |  Branch (462:14): [True: 0, False: 0]
  ------------------
  463|      0|            return PFMT_MANYSEGS;
  ------------------
  |  |  170|      0|#define PFMT_MANYSEGS   11 /* maxed out output segments */
  ------------------
  464|      0|          optr->input = 0;
  465|      0|          optr->flags = FLAGS_SUBSTR;
  466|      0|          optr->start = start;
  467|      0|          optr->outlen = outlen;
  468|      0|        }
  469|      0|        start = fmt;
  470|      0|        fmt++;
  471|      0|        continue; /* while */
  472|      0|      }
  473|       |
  474|    208|      if(use_dollar != DOLLAR_NOPE) {
  ------------------
  |  Branch (474:10): [True: 104, False: 104]
  ------------------
  475|    104|        param = dollarstring(fmt, &fmt);
  476|    104|        if(param < 0) {
  ------------------
  |  Branch (476:12): [True: 104, False: 0]
  ------------------
  477|    104|          if(use_dollar == DOLLAR_USE)
  ------------------
  |  Branch (477:14): [True: 0, False: 104]
  ------------------
  478|       |            /* illegal combo */
  479|      0|            return PFMT_DOLLAR;
  ------------------
  |  |  160|      0|#define PFMT_DOLLAR      1 /* bad dollar for main param */
  ------------------
  480|       |
  481|       |          /* we got no positional, get the next arg */
  482|    104|          param = -1;
  483|    104|          use_dollar = DOLLAR_NOPE;
  484|    104|        }
  485|      0|        else
  486|      0|          use_dollar = DOLLAR_USE;
  487|    104|      }
  488|       |
  489|    208|      rc = parse_flags(&fmt, &flags, use_dollar, &precision, &width);
  490|    208|      if(rc)
  ------------------
  |  Branch (490:10): [True: 0, False: 208]
  ------------------
  491|      0|        return rc;
  492|       |
  493|    208|      if(parse_conversion(*fmt, &flags, &type))
  ------------------
  |  Branch (493:10): [True: 0, False: 208]
  ------------------
  494|      0|        continue;
  495|       |
  496|    208|      if(flags & FLAGS_WIDTHPARAM) {
  ------------------
  |  Branch (496:10): [True: 0, False: 208]
  ------------------
  497|      0|        if(width < 0)
  ------------------
  |  Branch (497:12): [True: 0, False: 0]
  ------------------
  498|      0|          width = param_num++;
  499|      0|        else {
  500|       |          /* if this identifies a parameter already used, this is illegal */
  501|      0|          if(is_arg_used(usedinput, width))
  ------------------
  |  |  148|      0|#define is_arg_used(x, y)   ((x)[(y) / 8] & (1 << ((y) & 7)))
  |  |  ------------------
  |  |  |  Branch (148:29): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  502|      0|            return PFMT_WIDTHARG;
  ------------------
  |  |  168|      0|#define PFMT_WIDTHARG    9 /* attempted to use same arg twice, for width */
  ------------------
  503|      0|        }
  504|      0|        if(width >= MAX_PARAMETERS)
  ------------------
  |  |   33|      0|#define MAX_PARAMETERS 128 /* number of input arguments */
  ------------------
  |  Branch (504:12): [True: 0, False: 0]
  ------------------
  505|      0|          return PFMT_MANYARGS;
  ------------------
  |  |  163|      0|#define PFMT_MANYARGS    4 /* too many input arguments used */
  ------------------
  506|      0|        if(width >= max_param)
  ------------------
  |  Branch (506:12): [True: 0, False: 0]
  ------------------
  507|      0|          max_param = width;
  508|       |
  509|      0|        in[width].type = MTYPE_WIDTH;
  510|       |        /* mark as used */
  511|      0|        mark_arg_used(usedinput, width);
  ------------------
  |  |  149|      0|#define mark_arg_used(x, y) ((x)[(y) / 8] |= (unsigned char)(1 << ((y) & 7)))
  ------------------
  512|      0|      }
  513|       |
  514|    208|      if(flags & FLAGS_PRECPARAM) {
  ------------------
  |  Branch (514:10): [True: 0, False: 208]
  ------------------
  515|      0|        if(precision < 0)
  ------------------
  |  Branch (515:12): [True: 0, False: 0]
  ------------------
  516|      0|          precision = param_num++;
  517|      0|        else {
  518|       |          /* if this identifies a parameter already used, this is illegal */
  519|      0|          if(is_arg_used(usedinput, precision))
  ------------------
  |  |  148|      0|#define is_arg_used(x, y)   ((x)[(y) / 8] & (1 << ((y) & 7)))
  |  |  ------------------
  |  |  |  Branch (148:29): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  520|      0|            return PFMT_PRECARG;
  ------------------
  |  |  169|      0|#define PFMT_PRECARG    10 /* attempted to use same arg twice, for prec */
  ------------------
  521|      0|        }
  522|      0|        if(precision >= MAX_PARAMETERS)
  ------------------
  |  |   33|      0|#define MAX_PARAMETERS 128 /* number of input arguments */
  ------------------
  |  Branch (522:12): [True: 0, False: 0]
  ------------------
  523|      0|          return PFMT_MANYARGS;
  ------------------
  |  |  163|      0|#define PFMT_MANYARGS    4 /* too many input arguments used */
  ------------------
  524|      0|        if(precision >= max_param)
  ------------------
  |  Branch (524:12): [True: 0, False: 0]
  ------------------
  525|      0|          max_param = precision;
  526|       |
  527|      0|        in[precision].type = MTYPE_PRECISION;
  528|      0|        mark_arg_used(usedinput, precision);
  ------------------
  |  |  149|      0|#define mark_arg_used(x, y) ((x)[(y) / 8] |= (unsigned char)(1 << ((y) & 7)))
  ------------------
  529|      0|      }
  530|       |
  531|       |      /* Handle the specifier */
  532|    208|      if(param < 0)
  ------------------
  |  Branch (532:10): [True: 208, False: 0]
  ------------------
  533|    208|        param = param_num++;
  534|    208|      if(param >= MAX_PARAMETERS)
  ------------------
  |  |   33|    208|#define MAX_PARAMETERS 128 /* number of input arguments */
  ------------------
  |  Branch (534:10): [True: 0, False: 208]
  ------------------
  535|      0|        return PFMT_MANYARGS;
  ------------------
  |  |  163|      0|#define PFMT_MANYARGS    4 /* too many input arguments used */
  ------------------
  536|    208|      if(param >= max_param)
  ------------------
  |  Branch (536:10): [True: 208, False: 0]
  ------------------
  537|    208|        max_param = param;
  538|       |
  539|    208|      iptr = &in[param];
  540|    208|      iptr->type = type;
  541|       |
  542|       |      /* mark this input as used */
  543|    208|      mark_arg_used(usedinput, param);
  ------------------
  |  |  149|    208|#define mark_arg_used(x, y) ((x)[(y) / 8] |= (unsigned char)(1 << ((y) & 7)))
  ------------------
  544|       |
  545|    208|      fmt++;
  546|    208|      optr = &out[ocount++];
  547|    208|      if(ocount > MAX_SEGMENTS)
  ------------------
  |  |   34|    208|#define MAX_SEGMENTS   128 /* number of output segments */
  ------------------
  |  Branch (547:10): [True: 0, False: 208]
  ------------------
  548|      0|        return PFMT_MANYSEGS;
  ------------------
  |  |  170|      0|#define PFMT_MANYSEGS   11 /* maxed out output segments */
  ------------------
  549|    208|      optr->input = (unsigned int)param;
  550|    208|      optr->flags = flags;
  551|    208|      optr->width = width;
  552|    208|      optr->precision = precision;
  553|    208|      optr->start = start;
  554|    208|      optr->outlen = outlen;
  555|    208|      start = fmt;
  556|    208|    }
  557|    104|    else
  558|    104|      fmt++;
  559|    312|  }
  560|       |
  561|       |  /* is there a trailing piece */
  562|    104|  outlen = (size_t)(fmt - start);
  563|    104|  if(outlen) {
  ------------------
  |  Branch (563:6): [True: 0, False: 104]
  ------------------
  564|      0|    optr = &out[ocount++];
  565|      0|    if(ocount > MAX_SEGMENTS)
  ------------------
  |  |   34|      0|#define MAX_SEGMENTS   128 /* number of output segments */
  ------------------
  |  Branch (565:8): [True: 0, False: 0]
  ------------------
  566|      0|      return PFMT_MANYSEGS;
  ------------------
  |  |  170|      0|#define PFMT_MANYSEGS   11 /* maxed out output segments */
  ------------------
  567|      0|    optr->input = 0;
  568|      0|    optr->flags = FLAGS_SUBSTR;
  569|      0|    optr->start = start;
  570|      0|    optr->outlen = outlen;
  571|      0|  }
  572|       |
  573|       |  /* Read the arg list parameters into our data list */
  574|    312|  for(i = 0; i < max_param + 1; i++) {
  ------------------
  |  Branch (574:14): [True: 208, False: 104]
  ------------------
  575|    208|    struct va_input *iptr = &in[i];
  576|    208|    if(!is_arg_used(usedinput, i))
  ------------------
  |  |  148|    208|#define is_arg_used(x, y)   ((x)[(y) / 8] & (1 << ((y) & 7)))
  ------------------
  |  Branch (576:8): [True: 0, False: 208]
  ------------------
  577|       |      /* bad input */
  578|      0|      return PFMT_INPUTGAP;
  ------------------
  |  |  167|      0|#define PFMT_INPUTGAP    8 /* gap in arguments */
  ------------------
  579|       |
  580|       |    /* based on the type, read the correct argument */
  581|    208|    switch(iptr->type) {
  582|    208|    case MTYPE_STRING:
  ------------------
  |  Branch (582:5): [True: 208, False: 0]
  ------------------
  583|    208|      iptr->val.str = va_arg(arglist, const char *);
  584|    208|      break;
  585|       |
  586|      0|    case MTYPE_INTPTR:
  ------------------
  |  Branch (586:5): [True: 0, False: 208]
  ------------------
  587|      0|    case MTYPE_PTR:
  ------------------
  |  Branch (587:5): [True: 0, False: 208]
  ------------------
  588|      0|      iptr->val.ptr = va_arg(arglist, void *);
  589|      0|      break;
  590|       |
  591|      0|    case MTYPE_LONGLONGU:
  ------------------
  |  Branch (591:5): [True: 0, False: 208]
  ------------------
  592|      0|      iptr->val.numu = va_arg(arglist, uint64_t);
  593|      0|      break;
  594|       |
  595|      0|    case MTYPE_LONGLONG:
  ------------------
  |  Branch (595:5): [True: 0, False: 208]
  ------------------
  596|      0|      iptr->val.nums = va_arg(arglist, int64_t);
  597|      0|      break;
  598|       |
  599|      0|    case MTYPE_LONGU:
  ------------------
  |  Branch (599:5): [True: 0, False: 208]
  ------------------
  600|      0|      iptr->val.numu = va_arg(arglist, unsigned long);
  601|      0|      break;
  602|       |
  603|      0|    case MTYPE_LONG:
  ------------------
  |  Branch (603:5): [True: 0, False: 208]
  ------------------
  604|      0|      iptr->val.nums = va_arg(arglist, long);
  605|      0|      break;
  606|       |
  607|      0|    case MTYPE_INTU:
  ------------------
  |  Branch (607:5): [True: 0, False: 208]
  ------------------
  608|      0|      iptr->val.numu = va_arg(arglist, unsigned int);
  609|      0|      break;
  610|       |
  611|      0|    case MTYPE_INT:
  ------------------
  |  Branch (611:5): [True: 0, False: 208]
  ------------------
  612|      0|    case MTYPE_WIDTH:
  ------------------
  |  Branch (612:5): [True: 0, False: 208]
  ------------------
  613|      0|    case MTYPE_PRECISION:
  ------------------
  |  Branch (613:5): [True: 0, False: 208]
  ------------------
  614|      0|      iptr->val.nums = va_arg(arglist, int);
  615|      0|      break;
  616|       |
  617|      0|    case MTYPE_DOUBLE:
  ------------------
  |  Branch (617:5): [True: 0, False: 208]
  ------------------
  618|      0|      iptr->val.dnum = va_arg(arglist, double);
  619|      0|      break;
  620|       |
  621|      0|    default:
  ------------------
  |  Branch (621:5): [True: 0, False: 208]
  ------------------
  622|      0|      DEBUGASSERT(NULL); /* unexpected */
  ------------------
  |  | 1077|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (622:7): [True: 0, False: 0]
  |  Branch (622:7): [True: 0, False: 0]
  ------------------
  623|      0|      break;
  624|    208|    }
  625|    208|  }
  626|    104|  *ipieces = max_param + 1;
  627|    104|  *opieces = ocount;
  628|       |
  629|    104|  return PFMT_OK;
  ------------------
  |  |  159|    104|#define PFMT_OK          0
  ------------------
  630|    104|}
mprintf.c:dollarstring:
  139|    104|{
  140|    104|  curl_off_t num;
  141|    104|  if(curlx_str_number(&p, &num, MAX_PARAMETERS) ||
  ------------------
  |  |   33|    104|#define MAX_PARAMETERS 128 /* number of input arguments */
  ------------------
  |  Branch (141:6): [True: 104, False: 0]
  ------------------
  142|      0|     curlx_str_single(&p, '$') || !num)
  ------------------
  |  Branch (142:6): [True: 0, False: 0]
  |  Branch (142:35): [True: 0, False: 0]
  ------------------
  143|    104|    return -1;
  144|      0|  *end = p;
  145|      0|  return (int)num - 1;
  146|    104|}
mprintf.c:parse_flags:
  174|    208|{
  175|    208|  const char *fmt = *fmtp;
  176|    208|  bool loopit = TRUE;
  ------------------
  |  | 1051|    208|#define TRUE true
  ------------------
  177|    208|  unsigned int flags = 0;
  178|    208|  int width = 0;
  179|    208|  int precision = 0;
  180|       |
  181|       |  /* Handle the flags */
  182|    208|  do {
  183|    208|    switch(*fmt++) {
  184|      0|    case ' ':
  ------------------
  |  Branch (184:5): [True: 0, False: 208]
  ------------------
  185|      0|      flags |= FLAGS_SPACE;
  186|      0|      break;
  187|      0|    case '+':
  ------------------
  |  Branch (187:5): [True: 0, False: 208]
  ------------------
  188|      0|      flags |= FLAGS_SHOWSIGN;
  189|      0|      break;
  190|      0|    case '-':
  ------------------
  |  Branch (190:5): [True: 0, False: 208]
  ------------------
  191|      0|      flags |= FLAGS_LEFT;
  192|      0|      flags &= ~(unsigned int)FLAGS_PAD_NIL;
  193|      0|      break;
  194|      0|    case '#':
  ------------------
  |  Branch (194:5): [True: 0, False: 208]
  ------------------
  195|      0|      flags |= FLAGS_ALT;
  196|      0|      break;
  197|      0|    case '.':
  ------------------
  |  Branch (197:5): [True: 0, False: 208]
  ------------------
  198|      0|      if('*' == *fmt) {
  ------------------
  |  Branch (198:10): [True: 0, False: 0]
  ------------------
  199|       |        /* The precision is picked from a specified parameter */
  200|      0|        flags |= FLAGS_PRECPARAM;
  201|      0|        fmt++;
  202|       |
  203|      0|        if(use_dollar == DOLLAR_USE) {
  ------------------
  |  Branch (203:12): [True: 0, False: 0]
  ------------------
  204|      0|          precision = dollarstring(fmt, &fmt);
  205|      0|          if(precision < 0)
  ------------------
  |  Branch (205:14): [True: 0, False: 0]
  ------------------
  206|       |            /* illegal combo */
  207|      0|            return PFMT_DOLLARPREC;
  ------------------
  |  |  162|      0|#define PFMT_DOLLARPREC  3 /* bad dollar use for precision */
  ------------------
  208|      0|        }
  209|      0|        else
  210|       |          /* get it from the next argument */
  211|      0|          precision = -1;
  212|      0|      }
  213|      0|      else {
  214|      0|        bool is_neg;
  215|      0|        curl_off_t num;
  216|      0|        flags |= FLAGS_PREC;
  217|      0|        is_neg = ('-' == *fmt);
  218|      0|        if(is_neg)
  ------------------
  |  Branch (218:12): [True: 0, False: 0]
  ------------------
  219|      0|          fmt++;
  220|      0|        if(curlx_str_number(&fmt, &num, INT_MAX))
  ------------------
  |  Branch (220:12): [True: 0, False: 0]
  ------------------
  221|      0|          return PFMT_PREC;
  ------------------
  |  |  164|      0|#define PFMT_PREC        5 /* precision overflow */
  ------------------
  222|      0|        precision = (int)num;
  223|      0|        if(is_neg)
  ------------------
  |  Branch (223:12): [True: 0, False: 0]
  ------------------
  224|      0|          precision = -precision;
  225|      0|      }
  226|      0|      if((flags & (FLAGS_PREC | FLAGS_PRECPARAM)) ==
  ------------------
  |  Branch (226:10): [True: 0, False: 0]
  ------------------
  227|      0|         (FLAGS_PREC | FLAGS_PRECPARAM))
  228|       |        /* it is not permitted to use both kinds of precision for the same
  229|       |           argument */
  230|      0|        return PFMT_PRECMIX;
  ------------------
  |  |  165|      0|#define PFMT_PRECMIX     6 /* bad mix of precision specifiers */
  ------------------
  231|      0|      break;
  232|      0|    case 'h':
  ------------------
  |  Branch (232:5): [True: 0, False: 208]
  ------------------
  233|      0|      flags |= FLAGS_SHORT;
  234|      0|      break;
  235|       |#ifdef _WIN32
  236|       |    case 'I':
  237|       |      /* Non-ANSI integer extensions I32 I64 */
  238|       |      if((fmt[0] == '3') && (fmt[1] == '2')) {
  239|       |        flags |= FLAGS_LONG;
  240|       |        fmt += 2;
  241|       |      }
  242|       |      else if((fmt[0] == '6') && (fmt[1] == '4')) {
  243|       |        flags |= FLAGS_LONGLONG;
  244|       |        fmt += 2;
  245|       |      }
  246|       |      else {
  247|       |#if SIZEOF_CURL_OFF_T > SIZEOF_LONG
  248|       |        flags |= FLAGS_LONGLONG;
  249|       |#else
  250|       |        flags |= FLAGS_LONG;
  251|       |#endif
  252|       |      }
  253|       |      break;
  254|       |#endif /* _WIN32 */
  255|      0|    case 'l':
  ------------------
  |  Branch (255:5): [True: 0, False: 208]
  ------------------
  256|      0|      if(flags & FLAGS_LONG)
  ------------------
  |  Branch (256:10): [True: 0, False: 0]
  ------------------
  257|      0|        flags |= FLAGS_LONGLONG;
  258|      0|      else
  259|      0|        flags |= FLAGS_LONG;
  260|      0|      break;
  261|      0|    case 'L':
  ------------------
  |  Branch (261:5): [True: 0, False: 208]
  ------------------
  262|      0|      flags |= FLAGS_LONGDOUBLE;
  263|      0|      break;
  264|      0|    case 'q':
  ------------------
  |  Branch (264:5): [True: 0, False: 208]
  ------------------
  265|      0|      flags |= FLAGS_LONGLONG;
  266|      0|      break;
  267|      0|    case 'z':
  ------------------
  |  Branch (267:5): [True: 0, False: 208]
  ------------------
  268|       |      /* the code below generates a warning if -Wunreachable-code is
  269|       |         used */
  270|       |#if SIZEOF_SIZE_T > SIZEOF_LONG
  271|       |      flags |= FLAGS_LONGLONG;
  272|       |#else
  273|      0|      flags |= FLAGS_LONG;
  274|      0|#endif
  275|      0|      break;
  276|      0|    case 'O':
  ------------------
  |  Branch (276:5): [True: 0, False: 208]
  ------------------
  277|       |#if SIZEOF_CURL_OFF_T > SIZEOF_LONG
  278|       |      flags |= FLAGS_LONGLONG;
  279|       |#else
  280|      0|      flags |= FLAGS_LONG;
  281|      0|#endif
  282|      0|      break;
  283|      0|    case '0':
  ------------------
  |  Branch (283:5): [True: 0, False: 208]
  ------------------
  284|      0|      if(!(flags & FLAGS_LEFT))
  ------------------
  |  Branch (284:10): [True: 0, False: 0]
  ------------------
  285|      0|        flags |= FLAGS_PAD_NIL;
  286|      0|      FALLTHROUGH();
  ------------------
  |  |  817|      0|#  define FALLTHROUGH()  __attribute__((fallthrough))
  ------------------
  287|      0|    case '1':
  ------------------
  |  Branch (287:5): [True: 0, False: 208]
  ------------------
  288|      0|    case '2':
  ------------------
  |  Branch (288:5): [True: 0, False: 208]
  ------------------
  289|      0|    case '3':
  ------------------
  |  Branch (289:5): [True: 0, False: 208]
  ------------------
  290|      0|    case '4':
  ------------------
  |  Branch (290:5): [True: 0, False: 208]
  ------------------
  291|      0|    case '5':
  ------------------
  |  Branch (291:5): [True: 0, False: 208]
  ------------------
  292|      0|    case '6':
  ------------------
  |  Branch (292:5): [True: 0, False: 208]
  ------------------
  293|      0|    case '7':
  ------------------
  |  Branch (293:5): [True: 0, False: 208]
  ------------------
  294|      0|    case '8':
  ------------------
  |  Branch (294:5): [True: 0, False: 208]
  ------------------
  295|      0|    case '9': {
  ------------------
  |  Branch (295:5): [True: 0, False: 208]
  ------------------
  296|      0|      curl_off_t num;
  297|      0|      flags |= FLAGS_WIDTH;
  298|      0|      fmt--;
  299|      0|      if(curlx_str_number(&fmt, &num, INT_MAX))
  ------------------
  |  Branch (299:10): [True: 0, False: 0]
  ------------------
  300|      0|        return PFMT_WIDTH;
  ------------------
  |  |  166|      0|#define PFMT_WIDTH       7 /* width overflow */
  ------------------
  301|      0|      width = (int)num;
  302|      0|      break;
  303|      0|    }
  304|      0|    case '*':  /* read width from argument list */
  ------------------
  |  Branch (304:5): [True: 0, False: 208]
  ------------------
  305|      0|      flags |= FLAGS_WIDTHPARAM;
  306|      0|      if(use_dollar == DOLLAR_USE) {
  ------------------
  |  Branch (306:10): [True: 0, False: 0]
  ------------------
  307|      0|        width = dollarstring(fmt, &fmt);
  308|      0|        if(width < 0)
  ------------------
  |  Branch (308:12): [True: 0, False: 0]
  ------------------
  309|       |          /* illegal combo */
  310|      0|          return PFMT_DOLLARWIDTH;
  ------------------
  |  |  161|      0|#define PFMT_DOLLARWIDTH 2 /* bad dollar use for width */
  ------------------
  311|      0|      }
  312|      0|      else
  313|       |        /* pick from the next argument */
  314|      0|        width = -1;
  315|      0|      break;
  316|    208|    default:
  ------------------
  |  Branch (316:5): [True: 208, False: 0]
  ------------------
  317|    208|      loopit = FALSE;
  ------------------
  |  | 1054|    208|#define FALSE false
  ------------------
  318|    208|      fmt--;
  319|    208|      break;
  320|    208|    } /* switch */
  321|    208|  } while(loopit); /* do */
  ------------------
  |  Branch (321:11): [True: 0, False: 208]
  ------------------
  322|    208|  *flagsp = flags;
  323|    208|  *precp = precision;
  324|    208|  *widthp = width;
  325|    208|  *fmtp = fmt;
  326|    208|  return PFMT_OK;
  ------------------
  |  |  159|    208|#define PFMT_OK          0
  ------------------
  327|    208|}
mprintf.c:parse_conversion:
  331|    208|{
  332|    208|  unsigned int flags = *flagp;
  333|    208|  FormatType type;
  334|    208|  switch(f) {
  335|      0|  case 'S':
  ------------------
  |  Branch (335:3): [True: 0, False: 208]
  ------------------
  336|      0|    flags |= FLAGS_ALT;
  337|      0|    type = MTYPE_STRING;
  338|      0|    break;
  339|    208|  case 's':
  ------------------
  |  Branch (339:3): [True: 208, False: 0]
  ------------------
  340|    208|    type = MTYPE_STRING;
  341|    208|    break;
  342|      0|  case 'n':
  ------------------
  |  Branch (342:3): [True: 0, False: 208]
  ------------------
  343|      0|    type = MTYPE_INTPTR;
  344|      0|    break;
  345|      0|  case 'p':
  ------------------
  |  Branch (345:3): [True: 0, False: 208]
  ------------------
  346|      0|    type = MTYPE_PTR;
  347|      0|    break;
  348|      0|  case 'd':
  ------------------
  |  Branch (348:3): [True: 0, False: 208]
  ------------------
  349|      0|  case 'i':
  ------------------
  |  Branch (349:3): [True: 0, False: 208]
  ------------------
  350|      0|    if(flags & FLAGS_LONGLONG)
  ------------------
  |  Branch (350:8): [True: 0, False: 0]
  ------------------
  351|      0|      type = MTYPE_LONGLONG;
  352|      0|    else if(flags & FLAGS_LONG)
  ------------------
  |  Branch (352:13): [True: 0, False: 0]
  ------------------
  353|      0|      type = MTYPE_LONG;
  354|      0|    else
  355|      0|      type = MTYPE_INT;
  356|      0|    break;
  357|      0|  case 'u':
  ------------------
  |  Branch (357:3): [True: 0, False: 208]
  ------------------
  358|      0|    if(flags & FLAGS_LONGLONG)
  ------------------
  |  Branch (358:8): [True: 0, False: 0]
  ------------------
  359|      0|      type = MTYPE_LONGLONGU;
  360|      0|    else if(flags & FLAGS_LONG)
  ------------------
  |  Branch (360:13): [True: 0, False: 0]
  ------------------
  361|      0|      type = MTYPE_LONGU;
  362|      0|    else
  363|      0|      type = MTYPE_INTU;
  364|      0|    flags |= FLAGS_UNSIGNED;
  365|      0|    break;
  366|      0|  case 'o':
  ------------------
  |  Branch (366:3): [True: 0, False: 208]
  ------------------
  367|      0|    if(flags & FLAGS_LONGLONG)
  ------------------
  |  Branch (367:8): [True: 0, False: 0]
  ------------------
  368|      0|      type = MTYPE_LONGLONGU;
  369|      0|    else if(flags & FLAGS_LONG)
  ------------------
  |  Branch (369:13): [True: 0, False: 0]
  ------------------
  370|      0|      type = MTYPE_LONGU;
  371|      0|    else
  372|      0|      type = MTYPE_INTU;
  373|      0|    flags |= FLAGS_OCTAL | FLAGS_UNSIGNED;
  374|      0|    break;
  375|      0|  case 'x':
  ------------------
  |  Branch (375:3): [True: 0, False: 208]
  ------------------
  376|      0|    if(flags & FLAGS_LONGLONG)
  ------------------
  |  Branch (376:8): [True: 0, False: 0]
  ------------------
  377|      0|      type = MTYPE_LONGLONGU;
  378|      0|    else if(flags & FLAGS_LONG)
  ------------------
  |  Branch (378:13): [True: 0, False: 0]
  ------------------
  379|      0|      type = MTYPE_LONGU;
  380|      0|    else
  381|      0|      type = MTYPE_INTU;
  382|      0|    flags |= FLAGS_HEX | FLAGS_UNSIGNED;
  383|      0|    break;
  384|      0|  case 'X':
  ------------------
  |  Branch (384:3): [True: 0, False: 208]
  ------------------
  385|      0|    if(flags & FLAGS_LONGLONG)
  ------------------
  |  Branch (385:8): [True: 0, False: 0]
  ------------------
  386|      0|      type = MTYPE_LONGLONGU;
  387|      0|    else if(flags & FLAGS_LONG)
  ------------------
  |  Branch (387:13): [True: 0, False: 0]
  ------------------
  388|      0|      type = MTYPE_LONGU;
  389|      0|    else
  390|      0|      type = MTYPE_INTU;
  391|      0|    flags |= FLAGS_HEX | FLAGS_UPPER | FLAGS_UNSIGNED;
  392|      0|    break;
  393|      0|  case 'c':
  ------------------
  |  Branch (393:3): [True: 0, False: 208]
  ------------------
  394|      0|    type = MTYPE_INT;
  395|      0|    flags |= FLAGS_CHAR;
  396|      0|    break;
  397|      0|  case 'f':
  ------------------
  |  Branch (397:3): [True: 0, False: 208]
  ------------------
  398|      0|    type = MTYPE_DOUBLE;
  399|      0|    break;
  400|      0|  case 'e':
  ------------------
  |  Branch (400:3): [True: 0, False: 208]
  ------------------
  401|      0|    type = MTYPE_DOUBLE;
  402|      0|    flags |= FLAGS_FLOATE;
  403|      0|    break;
  404|      0|  case 'E':
  ------------------
  |  Branch (404:3): [True: 0, False: 208]
  ------------------
  405|      0|    type = MTYPE_DOUBLE;
  406|      0|    flags |= FLAGS_FLOATE | FLAGS_UPPER;
  407|      0|    break;
  408|      0|  case 'g':
  ------------------
  |  Branch (408:3): [True: 0, False: 208]
  ------------------
  409|      0|    type = MTYPE_DOUBLE;
  410|      0|    flags |= FLAGS_FLOATG;
  411|      0|    break;
  412|      0|  case 'G':
  ------------------
  |  Branch (412:3): [True: 0, False: 208]
  ------------------
  413|      0|    type = MTYPE_DOUBLE;
  414|      0|    flags |= FLAGS_FLOATG | FLAGS_UPPER;
  415|      0|    break;
  416|      0|  default:
  ------------------
  |  Branch (416:3): [True: 0, False: 208]
  ------------------
  417|       |    /* invalid instruction, disregard and continue */
  418|      0|    return TRUE;
  ------------------
  |  | 1051|      0|#define TRUE true
  ------------------
  419|    208|  } /* switch */
  420|       |
  421|    208|  *flagp |= flags;
  422|    208|  *typep = type;
  423|       |  return FALSE;
  ------------------
  |  | 1054|    208|#define FALSE false
  ------------------
  424|    208|}
mprintf.c:out_string:
  873|    208|{
  874|    208|  int flags = p->flags;
  875|    208|  int width = p->width;
  876|    208|  int prec = p->prec;
  877|    208|  size_t len;
  878|       |
  879|    208|  if(!str) {
  ------------------
  |  Branch (879:6): [True: 0, False: 208]
  ------------------
  880|       |    /* Write null string if there is space. */
  881|      0|    if(prec == -1 || prec >= (int)sizeof(nilstr) - 1) {
  ------------------
  |  Branch (881:8): [True: 0, False: 0]
  |  Branch (881:22): [True: 0, False: 0]
  ------------------
  882|      0|      str = nilstr;
  883|      0|      len = sizeof(nilstr) - 1;
  884|       |      /* Disable quotes around (nil) */
  885|      0|      flags &= ~(unsigned int)FLAGS_ALT;
  886|      0|    }
  887|      0|    else {
  888|      0|      str = "";
  889|      0|      len = 0;
  890|      0|    }
  891|      0|  }
  892|    208|  else if(prec != -1)
  ------------------
  |  Branch (892:11): [True: 0, False: 208]
  ------------------
  893|      0|    len = (size_t)prec;
  894|    208|  else if(*str == '\0')
  ------------------
  |  Branch (894:11): [True: 0, False: 208]
  ------------------
  895|      0|    len = 0;
  896|    208|  else
  897|    208|    len = strlen(str);
  898|       |
  899|    208|  width -= (len > INT_MAX) ? INT_MAX : (int)len;
  ------------------
  |  Branch (899:12): [True: 0, False: 208]
  ------------------
  900|       |
  901|    208|  if(flags & FLAGS_ALT)
  ------------------
  |  Branch (901:6): [True: 0, False: 208]
  ------------------
  902|      0|    OUTCHAR('"');
  ------------------
  |  |   43|      0|  do {                                    \
  |  |   44|      0|    if(stream((unsigned char)(x), userp)) \
  |  |  ------------------
  |  |  |  Branch (44:8): [True: 0, False: 0]
  |  |  ------------------
  |  |   45|      0|      return TRUE;                        \
  |  |  ------------------
  |  |  |  | 1051|      0|#define TRUE true
  |  |  ------------------
  |  |   46|      0|    (*donep)++;                           \
  |  |   47|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (47:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  903|       |
  904|    208|  if(!(flags & FLAGS_LEFT))
  ------------------
  |  Branch (904:6): [True: 208, False: 0]
  ------------------
  905|    208|    while(width-- > 0)
  ------------------
  |  Branch (905:11): [True: 0, False: 208]
  ------------------
  906|      0|      OUTCHAR(' ');
  ------------------
  |  |   43|      0|  do {                                    \
  |  |   44|      0|    if(stream((unsigned char)(x), userp)) \
  |  |  ------------------
  |  |  |  Branch (44:8): [True: 0, False: 0]
  |  |  ------------------
  |  |   45|      0|      return TRUE;                        \
  |  |  ------------------
  |  |  |  | 1051|      0|#define TRUE true
  |  |  ------------------
  |  |   46|      0|    (*donep)++;                           \
  |  |   47|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (47:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  907|       |
  908|  1.45k|  for(; len && *str; len--)
  ------------------
  |  Branch (908:9): [True: 1.24k, False: 208]
  |  Branch (908:16): [True: 1.24k, False: 0]
  ------------------
  909|  1.24k|    OUTCHAR(*str++);
  ------------------
  |  |   43|  1.45k|  do {                                    \
  |  |   44|  1.24k|    if(stream((unsigned char)(x), userp)) \
  |  |  ------------------
  |  |  |  Branch (44:8): [True: 0, False: 1.24k]
  |  |  ------------------
  |  |   45|  1.24k|      return TRUE;                        \
  |  |  ------------------
  |  |  |  | 1051|      0|#define TRUE true
  |  |  ------------------
  |  |   46|  1.24k|    (*donep)++;                           \
  |  |   47|  1.24k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (47:11): [Folded, False: 1.24k]
  |  |  ------------------
  ------------------
  910|    208|  if(flags & FLAGS_LEFT)
  ------------------
  |  Branch (910:6): [True: 0, False: 208]
  ------------------
  911|      0|    while(width-- > 0)
  ------------------
  |  Branch (911:11): [True: 0, False: 0]
  ------------------
  912|      0|      OUTCHAR(' ');
  ------------------
  |  |   43|      0|  do {                                    \
  |  |   44|      0|    if(stream((unsigned char)(x), userp)) \
  |  |  ------------------
  |  |  |  Branch (44:8): [True: 0, False: 0]
  |  |  ------------------
  |  |   45|      0|      return TRUE;                        \
  |  |  ------------------
  |  |  |  | 1051|      0|#define TRUE true
  |  |  ------------------
  |  |   46|      0|    (*donep)++;                           \
  |  |   47|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (47:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  913|       |
  914|    208|  if(flags & FLAGS_ALT)
  ------------------
  |  Branch (914:6): [True: 0, False: 208]
  ------------------
  915|      0|    OUTCHAR('"');
  ------------------
  |  |   43|      0|  do {                                    \
  |  |   44|      0|    if(stream((unsigned char)(x), userp)) \
  |  |  ------------------
  |  |  |  Branch (44:8): [True: 0, False: 0]
  |  |  ------------------
  |  |   45|      0|      return TRUE;                        \
  |  |  ------------------
  |  |  |  | 1051|      0|#define TRUE true
  |  |  ------------------
  |  |   46|      0|    (*donep)++;                           \
  |  |   47|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (47:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  916|       |
  917|    208|  return FALSE;
  ------------------
  |  | 1054|    208|#define FALSE false
  ------------------
  918|    208|}
mprintf.c:addbyter:
 1093|  1.35k|{
 1094|  1.35k|  struct nsprintf *infop = f;
 1095|  1.35k|  if(infop->length < infop->max) {
  ------------------
  |  Branch (1095:6): [True: 1.35k, False: 0]
  ------------------
 1096|       |    /* only do this if we have not reached max length yet */
 1097|  1.35k|    *infop->buffer++ = (char)outc; /* store */
 1098|  1.35k|    infop->length++; /* we are now one byte larger */
 1099|  1.35k|    return 0;     /* fputc() returns like this on success */
 1100|  1.35k|  }
 1101|      0|  return 1;
 1102|  1.35k|}

Curl_detach_connection:
  953|  6.82k|{
  954|  6.82k|  struct connectdata *conn = data->conn;
  955|  6.82k|  if(conn) {
  ------------------
  |  Branch (955:6): [True: 0, False: 6.82k]
  ------------------
  956|       |    /* this should never happen, prevent underflow */
  957|      0|    DEBUGASSERT(conn->attached_xfers);
  ------------------
  |  | 1077|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (957:5): [True: 0, False: 0]
  |  Branch (957:5): [True: 0, False: 0]
  ------------------
  958|      0|    if(conn->attached_xfers) {
  ------------------
  |  Branch (958:8): [True: 0, False: 0]
  ------------------
  959|      0|      conn->attached_xfers--;
  960|      0|      if(!conn->attached_xfers)
  ------------------
  |  Branch (960:10): [True: 0, False: 0]
  ------------------
  961|      0|        conn->attached_multi = NULL;
  962|      0|    }
  963|      0|  }
  964|  6.82k|  data->conn = NULL;
  965|  6.82k|}
Curl_expire_clear:
 3805|  6.82k|{
 3806|  6.82k|  struct Curl_multi *multi = data->multi;
 3807|  6.82k|  struct curltime *nowp = &data->state.expiretime;
 3808|       |
 3809|       |  /* this is only interesting while there is still an associated multi struct
 3810|       |     remaining! */
 3811|  6.82k|  if(!multi)
  ------------------
  |  Branch (3811:6): [True: 6.82k, False: 0]
  ------------------
 3812|  6.82k|    return;
 3813|       |
 3814|      0|  if(nowp->tv_sec || nowp->tv_usec) {
  ------------------
  |  Branch (3814:6): [True: 0, False: 0]
  |  Branch (3814:22): [True: 0, False: 0]
  ------------------
 3815|       |    /* Since this is an cleared time, we must remove the previous entry from
 3816|       |       the splay tree */
 3817|      0|    struct Curl_llist *list = &data->state.timeoutlist;
 3818|      0|    int rc;
 3819|       |
 3820|      0|    rc = Curl_splayremove(multi->timetree, &data->state.timenode,
 3821|      0|                          &multi->timetree);
 3822|      0|    if(rc)
  ------------------
  |  Branch (3822:8): [True: 0, False: 0]
  ------------------
 3823|      0|      infof(data, "Internal error clearing splay node = %d", rc);
  ------------------
  |  |  143|      0|  do {                               \
  |  |  144|      0|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  319|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (319:4): [True: 0, False: 0]
  |  |  |  |  |  Branch (319:14): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  320|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (320:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  321|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (321:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|      0|      Curl_infof(data, __VA_ARGS__); \
  |  |  146|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
 3824|       |
 3825|       |    /* clear the timeout list too */
 3826|      0|    Curl_llist_destroy(list, NULL);
 3827|       |
 3828|      0|    if(data->id >= 0)
  ------------------
  |  Branch (3828:8): [True: 0, False: 0]
  ------------------
 3829|      0|      CURL_TRC_M(data, "[TIMEOUT] all cleared");
  ------------------
  |  |  148|      0|  do {                                   \
  |  |  149|      0|    if(CURL_TRC_M_is_verbose(data))      \
  |  |  ------------------
  |  |  |  |  135|      0|  Curl_trc_ft_is_verbose(data, &Curl_trc_feat_multi)
  |  |  |  |  ------------------
  |  |  |  |  |  |  326|      0|  (Curl_trc_is_verbose(data) &&          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  319|      0|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (319:4): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (319:14): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  320|      0|   (!(data)->state.feat ||                                 \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (320:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  321|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (321:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  327|      0|   (ft)->log_level >= CURL_LOG_LVL_INFO)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (327:4): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  150|      0|      Curl_trc_multi(data, __VA_ARGS__); \
  |  |  151|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (151:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
 3830|      0|    nowp->tv_sec = 0;
 3831|      0|    nowp->tv_usec = 0;
 3832|      0|  }
 3833|      0|}

Curl_netrc_init:
  665|  6.82k|{
  666|  6.82k|  curlx_dyn_init(&store->filebuf, MAX_NETRC_FILE);
  ------------------
  |  |   77|  6.82k|#define MAX_NETRC_FILE  (128 * 1024)
  ------------------
  667|  6.82k|  store->loaded = FALSE;
  ------------------
  |  | 1054|  6.82k|#define FALSE false
  ------------------
  668|       |  store->filename = NULL;
  669|  6.82k|}
Curl_netrc_cleanup:
  671|  6.82k|{
  672|  6.82k|  curlx_dyn_free(&store->filebuf);
  673|  6.82k|  curlx_safefree(store->filename);
  ------------------
  |  | 1332|  6.82k|  do {                      \
  |  | 1333|  6.82k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1488|  6.82k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  6.82k|    (ptr) = NULL;           \
  |  | 1335|  6.82k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 6.82k]
  |  |  ------------------
  ------------------
  674|       |  store->loaded = FALSE;
  ------------------
  |  | 1054|  6.82k|#define FALSE false
  ------------------
  675|  6.82k|}

Curl_getdate_capped:
  606|  11.2k|{
  607|  11.2k|  int rc = parsedate(p, tp);
  608|  11.2k|  return (rc == PARSEDATE_FAIL);
  ------------------
  |  |   97|  11.2k|#define PARSEDATE_FAIL   (-1)
  ------------------
  609|  11.2k|}
parsedate.c:parsedate:
  543|  11.2k|{
  544|  11.2k|  curl_off_t seconds = 0;
  545|  11.2k|  enum assume dignext = DATE_MDAY;
  546|  11.2k|  const char *indate = date; /* save the original pointer */
  547|  11.2k|  int part = 0; /* max 6 parts */
  548|  11.2k|  int rc = 0;
  549|  11.2k|  struct when w;
  550|  11.2k|  initwhen(&w);
  551|       |
  552|  32.7k|  while(*date && (part < 6)) {
  ------------------
  |  Branch (552:9): [True: 27.9k, False: 4.83k]
  |  Branch (552:18): [True: 27.9k, False: 2]
  ------------------
  553|  27.9k|    skip(&date);
  554|       |
  555|  27.9k|    if(ISALPHA(*date))
  ------------------
  |  |   38|  27.9k|#define ISALPHA(x)  (ISLOWER(x) || ISUPPER(x))
  |  |  ------------------
  |  |  |  |   43|  55.9k|#define ISLOWER(x)  (((x) >= 'a') && ((x) <= 'z'))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:22): [True: 3.22k, False: 24.7k]
  |  |  |  |  |  Branch (43:38): [True: 3.22k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define ISALPHA(x)  (ISLOWER(x) || ISUPPER(x))
  |  |  ------------------
  |  |  |  |   42|  24.7k|#define ISUPPER(x)  (((x) >= 'A') && ((x) <= 'Z'))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (42:22): [True: 7.06k, False: 17.6k]
  |  |  |  |  |  Branch (42:38): [True: 7.06k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  556|  10.2k|      rc = datestring(&date, &w);
  557|  17.6k|    else if(ISDIGIT(*date))
  ------------------
  |  |   44|  17.6k|#define ISDIGIT(x)  (((x) >= '0') && ((x) <= '9'))
  |  |  ------------------
  |  |  |  Branch (44:22): [True: 15.5k, False: 2.07k]
  |  |  |  Branch (44:38): [True: 15.5k, False: 0]
  |  |  ------------------
  ------------------
  558|  15.5k|      rc = datenum(indate, &date, &w, &dignext);
  559|  27.9k|    if(rc)
  ------------------
  |  Branch (559:8): [True: 6.41k, False: 21.5k]
  ------------------
  560|  6.41k|      return rc;
  561|       |
  562|  21.5k|    part++;
  563|  21.5k|  }
  564|       |
  565|  4.83k|  rc = datecheck(&w);
  566|  4.83k|  if(rc)
  ------------------
  |  Branch (566:6): [True: 4.61k, False: 224]
  ------------------
  567|  4.61k|    return rc;
  568|       |
  569|    224|  seconds = time2epoch(&w); /* get number of seconds */
  570|    224|  tzadjust(&seconds, &w); /* handle the time zone offset */
  571|    224|  rc = mktimet(seconds, output); /* squeeze seconds into a time_t */
  572|       |
  573|    224|  return rc;
  574|  4.83k|}
parsedate.c:initwhen:
  360|  11.2k|{
  361|  11.2k|  w->wday = w->mon = w->mday = w->hour = w->min = w->sec = w->year = w->tzoff =
  362|  11.2k|    -1;
  363|  11.2k|}
parsedate.c:skip:
  256|  27.9k|{
  257|       |  /* skip everything that are not letters or digits */
  258|  49.2k|  while(**date && !ISALNUM(**date))
  ------------------
  |  |   41|  47.1k|#define ISALNUM(x)  (ISDIGIT(x) || ISLOWER(x) || ISUPPER(x))
  |  |  ------------------
  |  |  |  |   44|  94.3k|#define ISDIGIT(x)  (((x) >= '0') && ((x) <= '9'))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (44:22): [True: 34.6k, False: 12.5k]
  |  |  |  |  |  Branch (44:38): [True: 15.5k, False: 19.0k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define ISALNUM(x)  (ISDIGIT(x) || ISLOWER(x) || ISUPPER(x))
  |  |  ------------------
  |  |  |  |   43|  78.7k|#define ISLOWER(x)  (((x) >= 'a') && ((x) <= 'z'))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:22): [True: 3.83k, False: 27.7k]
  |  |  |  |  |  Branch (43:38): [True: 3.22k, False: 607]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define ISALNUM(x)  (ISDIGIT(x) || ISLOWER(x) || ISUPPER(x))
  |  |  ------------------
  |  |  |  |   42|  28.3k|#define ISUPPER(x)  (((x) >= 'A') && ((x) <= 'Z'))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (42:22): [True: 8.55k, False: 19.7k]
  |  |  |  |  |  Branch (42:38): [True: 7.06k, False: 1.48k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (258:9): [True: 47.1k, False: 2.07k]
  ------------------
  259|  21.2k|    (*date)++;
  260|  27.9k|}
parsedate.c:datestring:
  366|  10.2k|{
  367|       |  /* a name coming up */
  368|  10.2k|  size_t len = 0;
  369|  10.2k|  const char *p = *datep;
  370|  10.2k|  bool found = FALSE;
  ------------------
  |  | 1054|  10.2k|#define FALSE false
  ------------------
  371|  33.7k|  while(ISALPHA(*p) && (len < NAME_LEN)) {
  ------------------
  |  |   38|  67.5k|#define ISALPHA(x)  (ISLOWER(x) || ISUPPER(x))
  |  |  ------------------
  |  |  |  |   43|  67.5k|#define ISLOWER(x)  (((x) >= 'a') && ((x) <= 'z'))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:22): [True: 14.4k, False: 19.3k]
  |  |  |  |  |  Branch (43:38): [True: 14.0k, False: 400]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define ISALPHA(x)  (ISLOWER(x) || ISUPPER(x))
  |  |  ------------------
  |  |  |  |   42|  19.7k|#define ISUPPER(x)  (((x) >= 'A') && ((x) <= 'Z'))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (42:22): [True: 10.2k, False: 9.44k]
  |  |  |  |  |  Branch (42:38): [True: 9.50k, False: 783]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                while(ISALPHA(*p) && (len < NAME_LEN)) {
  ------------------
  |  |  357|  23.5k|#define NAME_LEN 12
  ------------------
  |  Branch (371:24): [True: 23.5k, False: 67]
  ------------------
  372|  23.5k|    p++;
  373|  23.5k|    len++;
  374|  23.5k|  }
  375|       |
  376|  10.2k|  if(len != NAME_LEN) {
  ------------------
  |  |  357|  10.2k|#define NAME_LEN 12
  ------------------
  |  Branch (376:6): [True: 10.2k, False: 86]
  ------------------
  377|  10.2k|    if(w->wday == -1) {
  ------------------
  |  Branch (377:8): [True: 9.34k, False: 856]
  ------------------
  378|  9.34k|      w->wday = checkday(*datep, len);
  379|  9.34k|      if(w->wday != -1)
  ------------------
  |  Branch (379:10): [True: 807, False: 8.54k]
  ------------------
  380|    807|        found = TRUE;
  ------------------
  |  | 1051|    807|#define TRUE true
  ------------------
  381|  9.34k|    }
  382|  10.2k|    if(!found && (w->mon == -1)) {
  ------------------
  |  Branch (382:8): [True: 9.39k, False: 807]
  |  Branch (382:18): [True: 8.17k, False: 1.22k]
  ------------------
  383|  8.17k|      w->mon = checkmonth(*datep, len);
  384|  8.17k|      if(w->mon != -1)
  ------------------
  |  Branch (384:10): [True: 1.64k, False: 6.53k]
  ------------------
  385|  1.64k|        found = TRUE;
  ------------------
  |  | 1051|  1.64k|#define TRUE true
  ------------------
  386|  8.17k|    }
  387|       |
  388|  10.2k|    if(!found && (w->tzoff == -1)) {
  ------------------
  |  Branch (388:8): [True: 7.75k, False: 2.45k]
  |  Branch (388:18): [True: 6.42k, False: 1.32k]
  ------------------
  389|       |      /* this must be a time zone string */
  390|  6.42k|      w->tzoff = checktz(*datep, len);
  391|  6.42k|      if(w->tzoff != -1)
  ------------------
  |  Branch (391:10): [True: 3.39k, False: 3.03k]
  ------------------
  392|  3.39k|        found = TRUE;
  ------------------
  |  | 1051|  3.39k|#define TRUE true
  ------------------
  393|  6.42k|    }
  394|  10.2k|  }
  395|  10.2k|  if(!found)
  ------------------
  |  Branch (395:6): [True: 4.44k, False: 5.84k]
  ------------------
  396|  4.44k|    return PARSEDATE_FAIL; /* bad string */
  ------------------
  |  |   97|  4.44k|#define PARSEDATE_FAIL   (-1)
  ------------------
  397|       |
  398|  5.84k|  *datep += len;
  399|  5.84k|  return PARSEDATE_OK;
  ------------------
  |  |   96|  5.84k|#define PARSEDATE_OK     0
  ------------------
  400|  10.2k|}
parsedate.c:checkday:
  199|  9.34k|{
  200|  9.34k|  int i;
  201|  9.34k|  const char * const *what;
  202|  9.34k|  if(len > 3)
  ------------------
  |  Branch (202:6): [True: 1.05k, False: 8.29k]
  ------------------
  203|  1.05k|    what = &weekday[0];
  204|  8.29k|  else if(len == 3)
  ------------------
  |  Branch (204:11): [True: 2.96k, False: 5.33k]
  ------------------
  205|  2.96k|    what = &Curl_wkday[0];
  206|  5.33k|  else
  207|  5.33k|    return -1; /* too short */
  208|  29.6k|  for(i = 0; i < 7; i++) {
  ------------------
  |  Branch (208:14): [True: 26.4k, False: 3.20k]
  ------------------
  209|  26.4k|    size_t ilen = strlen(what[0]);
  210|  26.4k|    if((ilen == len) &&
  ------------------
  |  Branch (210:8): [True: 19.7k, False: 6.69k]
  ------------------
  211|  19.7k|       curl_strnequal(check, what[0], len))
  ------------------
  |  Branch (211:8): [True: 807, False: 18.9k]
  ------------------
  212|    807|      return i;
  213|  25.6k|    what++;
  214|  25.6k|  }
  215|  3.20k|  return -1;
  216|  4.01k|}
parsedate.c:checkmonth:
  219|  8.17k|{
  220|  8.17k|  int i;
  221|  8.17k|  const char * const *what = &Curl_month[0];
  222|  8.17k|  if(len != 3)
  ------------------
  |  Branch (222:6): [True: 5.75k, False: 2.42k]
  ------------------
  223|  5.75k|    return -1; /* not a month */
  224|       |
  225|  24.4k|  for(i = 0; i < 12; i++) {
  ------------------
  |  Branch (225:14): [True: 23.6k, False: 775]
  ------------------
  226|  23.6k|    if(curl_strnequal(check, what[0], 3))
  ------------------
  |  Branch (226:8): [True: 1.64k, False: 21.9k]
  ------------------
  227|  1.64k|      return i;
  228|  21.9k|    what++;
  229|  21.9k|  }
  230|    775|  return -1; /* return the offset or -1, no real offset is -1 */
  231|  2.42k|}
parsedate.c:checktz:
  243|  6.42k|{
  244|  6.42k|  if(len <= 4) {
  ------------------
  |  Branch (244:6): [True: 5.91k, False: 519]
  ------------------
  245|  5.91k|    const struct tzinfo *what;
  246|  5.91k|    struct tzinfo find;
  247|  5.91k|    curlx_strcopy(find.name, sizeof(find.name), check, len);
  248|  5.91k|    what = bsearch(&find, tz, CURL_ARRAYSIZE(tz), sizeof(tz[0]), tzcompare);
  ------------------
  |  | 1299|  5.91k|#define CURL_ARRAYSIZE(A) (sizeof(A) / sizeof((A)[0]))
  ------------------
  249|  5.91k|    if(what)
  ------------------
  |  Branch (249:8): [True: 3.39k, False: 2.51k]
  ------------------
  250|  3.39k|      return what->offset * 60;
  251|  5.91k|  }
  252|  3.03k|  return -1;
  253|  6.42k|}
parsedate.c:tzcompare:
  234|  33.7k|{
  235|  33.7k|  const struct tzinfo *tz1 = m1;
  236|  33.7k|  const struct tzinfo *tz2 = m2;
  237|  33.7k|  return strcmp(tz1->name, tz2->name);
  238|  33.7k|}
parsedate.c:datenum:
  404|  15.5k|{
  405|       |  /* a digit */
  406|  15.5k|  unsigned int val;
  407|  15.5k|  char *end;
  408|  15.5k|  const char *date = *datep;
  409|  15.5k|  enum assume dignext = *dignextp;
  410|       |
  411|  15.5k|  if((w->sec == -1) && match_time(date, w, &end)) {
  ------------------
  |  Branch (411:6): [True: 14.6k, False: 958]
  |  Branch (411:24): [True: 1.76k, False: 12.8k]
  ------------------
  412|       |    /* time stamp */
  413|  1.76k|    date = end;
  414|  1.76k|  }
  415|  13.8k|  else {
  416|  13.8k|    bool found = FALSE;
  ------------------
  |  | 1054|  13.8k|#define FALSE false
  ------------------
  417|  13.8k|    curl_off_t lval;
  418|  13.8k|    int num_digits = 0;
  419|  13.8k|    const char *p = *datep;
  420|  13.8k|    if(curlx_str_number(&p, &lval, 99999999))
  ------------------
  |  Branch (420:8): [True: 109, False: 13.7k]
  ------------------
  421|    109|      return PARSEDATE_FAIL;
  ------------------
  |  |   97|    109|#define PARSEDATE_FAIL   (-1)
  ------------------
  422|       |
  423|       |    /* we know num_digits cannot be larger than 8 */
  424|  13.7k|    num_digits = (int)(p - *datep);
  425|  13.7k|    val = (unsigned int)lval;
  426|       |
  427|  13.7k|    if((w->tzoff == -1) &&
  ------------------
  |  Branch (427:8): [True: 10.5k, False: 3.18k]
  ------------------
  428|  10.5k|       (num_digits == 4) &&
  ------------------
  |  Branch (428:8): [True: 1.36k, False: 9.15k]
  ------------------
  429|  1.36k|       (val <= 1400) &&
  ------------------
  |  Branch (429:8): [True: 969, False: 396]
  ------------------
  430|    969|       (indate < date) &&
  ------------------
  |  Branch (430:8): [True: 672, False: 297]
  ------------------
  431|    672|       (date[-1] == '+' || date[-1] == '-')) {
  ------------------
  |  Branch (431:9): [True: 239, False: 433]
  |  Branch (431:28): [True: 168, False: 265]
  ------------------
  432|       |      /* four digits and a value less than or equal to 1400 (to take into
  433|       |         account all sorts of funny time zone diffs) and it is preceded
  434|       |         with a plus or minus. This is a time zone indication. 1400 is
  435|       |         picked since +1300 is frequently used and +1400 is mentioned as
  436|       |         an edge number in the document "ISO C 200X Proposal: Timezone
  437|       |         Functions" at http://david.tribble.com/text/c0xtimezone.html If
  438|       |         anyone has a more authoritative source for the exact maximum time
  439|       |         zone offsets, please speak up! */
  440|    407|      found = TRUE;
  ------------------
  |  | 1051|    407|#define TRUE true
  ------------------
  441|    407|      w->tzoff = ((val / 100 * 60) + (val % 100)) * 60;
  442|       |
  443|       |      /* the + and - prefix indicates the local time compared to GMT,
  444|       |         this we need their reversed math to get what we want */
  445|    407|      w->tzoff = date[-1] == '+' ? -w->tzoff : w->tzoff;
  ------------------
  |  Branch (445:18): [True: 239, False: 168]
  ------------------
  446|    407|    }
  447|       |
  448|  13.3k|    else if((num_digits == 8) && (w->year == -1) &&
  ------------------
  |  Branch (448:13): [True: 1.19k, False: 12.1k]
  |  Branch (448:34): [True: 1.05k, False: 144]
  ------------------
  449|  1.05k|            (w->mon == -1) && (w->mday == -1)) {
  ------------------
  |  Branch (449:13): [True: 956, False: 95]
  |  Branch (449:31): [True: 859, False: 97]
  ------------------
  450|       |      /* 8 digits, no year, month or day yet. This is YYYYMMDD */
  451|    859|      found = TRUE;
  ------------------
  |  | 1051|    859|#define TRUE true
  ------------------
  452|    859|      w->year = val / 10000;
  453|    859|      w->mon = ((val % 10000) / 100) - 1; /* month is 0 - 11 */
  454|    859|      w->mday = val % 100;
  455|    859|    }
  456|       |
  457|  13.7k|    if(!found && (dignext == DATE_MDAY) && (w->mday == -1)) {
  ------------------
  |  Branch (457:8): [True: 12.4k, False: 1.26k]
  |  Branch (457:18): [True: 8.77k, False: 3.67k]
  |  Branch (457:44): [True: 8.66k, False: 113]
  ------------------
  458|  8.66k|      if((val > 0) && (val < 32)) {
  ------------------
  |  Branch (458:10): [True: 7.64k, False: 1.01k]
  |  Branch (458:23): [True: 4.94k, False: 2.69k]
  ------------------
  459|  4.94k|        w->mday = val;
  460|  4.94k|        found = TRUE;
  ------------------
  |  | 1051|  4.94k|#define TRUE true
  ------------------
  461|  4.94k|      }
  462|  8.66k|      dignext = DATE_YEAR;
  463|  8.66k|    }
  464|       |
  465|  13.7k|    if(!found && (dignext == DATE_YEAR) && (w->year == -1)) {
  ------------------
  |  Branch (465:8): [True: 7.49k, False: 6.21k]
  |  Branch (465:18): [True: 7.38k, False: 113]
  |  Branch (465:44): [True: 5.63k, False: 1.75k]
  ------------------
  466|  5.63k|      w->year = val;
  467|  5.63k|      found = TRUE;
  ------------------
  |  | 1051|  5.63k|#define TRUE true
  ------------------
  468|  5.63k|      if(w->year < 100) {
  ------------------
  |  Branch (468:10): [True: 3.66k, False: 1.96k]
  ------------------
  469|  3.66k|        if(w->year > 70)
  ------------------
  |  Branch (469:12): [True: 535, False: 3.13k]
  ------------------
  470|    535|          w->year += 1900;
  471|  3.13k|        else
  472|  3.13k|          w->year += 2000;
  473|  3.66k|      }
  474|  5.63k|      if(w->mday == -1)
  ------------------
  |  Branch (474:10): [True: 3.27k, False: 2.36k]
  ------------------
  475|  3.27k|        dignext = DATE_MDAY;
  476|  5.63k|    }
  477|       |
  478|  13.7k|    if(!found)
  ------------------
  |  Branch (478:8): [True: 1.86k, False: 11.8k]
  ------------------
  479|  1.86k|      return PARSEDATE_FAIL;
  ------------------
  |  |   97|  1.86k|#define PARSEDATE_FAIL   (-1)
  ------------------
  480|       |
  481|  11.8k|    date = p;
  482|  11.8k|  }
  483|  13.6k|  *datep = date;
  484|  13.6k|  *dignextp = dignext;
  485|  13.6k|  return PARSEDATE_OK;
  ------------------
  |  |   96|  13.6k|#define PARSEDATE_OK     0
  ------------------
  486|  15.5k|}
parsedate.c:match_time:
  316|  14.6k|{
  317|  14.6k|  const char *p;
  318|  14.6k|  int hh, mm, ss = 0;
  319|  14.6k|  hh = oneortwodigit(date, &p);
  320|  14.6k|  if((hh < 24) && (*p == ':') && ISDIGIT(p[1])) {
  ------------------
  |  |   44|  3.93k|#define ISDIGIT(x)  (((x) >= '0') && ((x) <= '9'))
  |  |  ------------------
  |  |  |  Branch (44:22): [True: 3.37k, False: 565]
  |  |  |  Branch (44:38): [True: 2.96k, False: 403]
  |  |  ------------------
  ------------------
  |  Branch (320:6): [True: 11.0k, False: 3.59k]
  |  Branch (320:19): [True: 3.93k, False: 7.09k]
  ------------------
  321|  2.96k|    mm = oneortwodigit(&p[1], &p);
  322|  2.96k|    if(mm < 60) {
  ------------------
  |  Branch (322:8): [True: 2.30k, False: 660]
  ------------------
  323|  2.30k|      if((*p == ':') && ISDIGIT(p[1])) {
  ------------------
  |  |   44|  1.84k|#define ISDIGIT(x)  (((x) >= '0') && ((x) <= '9'))
  |  |  ------------------
  |  |  |  Branch (44:22): [True: 1.55k, False: 291]
  |  |  |  Branch (44:38): [True: 1.33k, False: 222]
  |  |  ------------------
  ------------------
  |  Branch (323:10): [True: 1.84k, False: 464]
  ------------------
  324|  1.33k|        ss = oneortwodigit(&p[1], &p);
  325|  1.33k|        if(ss <= 60) {
  ------------------
  |  Branch (325:12): [True: 787, False: 545]
  ------------------
  326|       |          /* valid HH:MM:SS */
  327|    787|          goto match;
  328|    787|        }
  329|  1.33k|      }
  330|    977|      else {
  331|       |        /* valid HH:MM */
  332|    977|        goto match;
  333|    977|      }
  334|  2.30k|    }
  335|  2.96k|  }
  336|  12.8k|  return FALSE; /* not a time string */
  ------------------
  |  | 1054|  12.8k|#define FALSE false
  ------------------
  337|  1.76k|match:
  338|  1.76k|  w->hour = hh;
  339|  1.76k|  w->min = mm;
  340|  1.76k|  w->sec = ss;
  341|  1.76k|  *endp = (char *)CURL_UNCONST(p);
  ------------------
  |  |  862|  1.76k|#define CURL_UNCONST(p) ((void *)(uintptr_t)(const void *)(p))
  ------------------
  342|       |  return TRUE;
  ------------------
  |  | 1051|  1.76k|#define TRUE true
  ------------------
  343|  14.6k|}
parsedate.c:oneortwodigit:
  304|  18.9k|{
  305|  18.9k|  int num = date[0] - '0';
  306|  18.9k|  if(ISDIGIT(date[1])) {
  ------------------
  |  |   44|  18.9k|#define ISDIGIT(x)  (((x) >= '0') && ((x) <= '9'))
  |  |  ------------------
  |  |  |  Branch (44:22): [True: 15.3k, False: 3.60k]
  |  |  |  Branch (44:38): [True: 8.11k, False: 7.20k]
  |  |  ------------------
  ------------------
  307|  8.11k|    *endp = &date[2];
  308|  8.11k|    return (num * 10) + (date[1] - '0');
  309|  8.11k|  }
  310|  10.8k|  *endp = &date[1];
  311|  10.8k|  return num;
  312|  18.9k|}
parsedate.c:datecheck:
  489|  4.83k|{
  490|  4.83k|  if(w->sec == -1)
  ------------------
  |  Branch (490:6): [True: 4.12k, False: 711]
  ------------------
  491|  4.12k|    w->sec = w->min = w->hour = 0; /* no time, make it zero */
  492|       |
  493|  4.83k|  if((w->mday == -1) || (w->mon == -1) || (w->year == -1))
  ------------------
  |  Branch (493:6): [True: 1.53k, False: 3.29k]
  |  Branch (493:25): [True: 1.76k, False: 1.53k]
  |  Branch (493:43): [True: 315, False: 1.21k]
  ------------------
  494|       |    /* lacks vital info, fail */
  495|  3.61k|    return PARSEDATE_FAIL;
  ------------------
  |  |   97|  3.61k|#define PARSEDATE_FAIL   (-1)
  ------------------
  496|       |
  497|       |  /* The Gregorian calendar was introduced 1582 */
  498|  1.21k|  else if(w->year < 1583)
  ------------------
  |  Branch (498:11): [True: 414, False: 801]
  ------------------
  499|    414|    return PARSEDATE_FAIL;
  ------------------
  |  |   97|    414|#define PARSEDATE_FAIL   (-1)
  ------------------
  500|       |
  501|    801|  else if((w->mday > 31) || (w->mon > 11) || (w->hour > 23) ||
  ------------------
  |  Branch (501:11): [True: 470, False: 331]
  |  Branch (501:29): [True: 107, False: 224]
  |  Branch (501:46): [True: 0, False: 224]
  ------------------
  502|    224|          (w->min > 59) || (w->sec > 60))
  ------------------
  |  Branch (502:11): [True: 0, False: 224]
  |  Branch (502:28): [True: 0, False: 224]
  ------------------
  503|    577|    return PARSEDATE_FAIL; /* clearly an illegal date */
  ------------------
  |  |   97|    577|#define PARSEDATE_FAIL   (-1)
  ------------------
  504|       |
  505|    224|  return PARSEDATE_OK;
  ------------------
  |  |   96|    224|#define PARSEDATE_OK     0
  ------------------
  506|  4.83k|}
parsedate.c:time2epoch:
  288|    224|{
  289|    224|  static const int cumulative_days[12] = {
  290|    224|    0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334
  291|    224|  };
  292|    224|  int y = w->year - (w->mon <= 1);
  293|    224|  int leap_days = (y / 4) - (y / 100) + (y / 400) - LEAP_DAYS_BEFORE_1969;
  ------------------
  |  |  281|    224|#define LEAP_DAYS_BEFORE_1969 477
  ------------------
  294|    224|  curl_off_t days = (curl_off_t)(w->year - 1970) * 365 + leap_days +
  295|    224|    cumulative_days[w->mon] + w->mday - 1;
  296|       |
  297|    224|  return (((days * 24 + w->hour) * 60 + w->min) * 60) + w->sec;
  298|    224|}
parsedate.c:tzadjust:
  509|    224|{
  510|    224|  if(w->tzoff == -1) /* unknown tz means no offset */
  ------------------
  |  Branch (510:6): [True: 191, False: 33]
  ------------------
  511|    191|    w->tzoff = 0;
  512|       |
  513|       |  /* Add the time zone diff between local time zone and GMT. */
  514|    224|  if((w->tzoff > 0) && (*tp > (curl_off_t)(CURL_OFF_T_MAX - w->tzoff)))
  ------------------
  |  |  590|      9|#  define CURL_OFF_T_MAX 0x7FFFFFFFFFFFFFFF
  ------------------
  |  Branch (514:6): [True: 9, False: 215]
  |  Branch (514:24): [True: 0, False: 9]
  ------------------
  515|      0|    *tp = CURL_OFF_T_MAX;
  ------------------
  |  |  590|      0|#  define CURL_OFF_T_MAX 0x7FFFFFFFFFFFFFFF
  ------------------
  516|    224|  else
  517|    224|    *tp += w->tzoff;
  518|       |  /* this needs no minimum check since we require a year > 1582 */
  519|    224|}
parsedate.c:mktimet:
  522|    224|{
  523|       |#if SIZEOF_TIME_T < 5
  524|       |  if(seconds > TIME_T_MAX) {
  525|       |    *output = TIME_T_MAX;
  526|       |    return PARSEDATE_LATER;
  527|       |  }
  528|       |  else if(seconds < TIME_T_MIN) {
  529|       |    *output = TIME_T_MIN;
  530|       |    return PARSEDATE_SOONER;
  531|       |  }
  532|       |#elif defined(HAVE_TIME_T_UNSIGNED)
  533|       |  if(seconds < 0) {
  534|       |    *output = 0;
  535|       |    return PARSEDATE_SOONER;
  536|       |  }
  537|       |#endif
  538|    224|  *output = (time_t)seconds;
  539|    224|  return PARSEDATE_OK;
  ------------------
  |  |   96|    224|#define PARSEDATE_OK     0
  ------------------
  540|    224|}

Curl_peer_unlink:
  307|  27.3k|{
  308|  27.3k|  if(*ppeer) {
  ------------------
  |  Branch (308:6): [True: 0, False: 27.3k]
  ------------------
  309|      0|    struct Curl_peer *peer = *ppeer;
  310|       |
  311|      0|    DEBUGASSERT(peer->refcount);
  ------------------
  |  | 1077|      0|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (311:5): [True: 0, False: 0]
  |  Branch (311:5): [True: 0, False: 0]
  ------------------
  312|      0|    *ppeer = NULL;
  313|      0|    if(peer->refcount)
  ------------------
  |  Branch (313:8): [True: 0, False: 0]
  ------------------
  314|      0|      peer->refcount--;
  315|      0|    if(!peer->refcount) {
  ------------------
  |  Branch (315:8): [True: 0, False: 0]
  ------------------
  316|      0|      curlx_free(peer);
  ------------------
  |  | 1488|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  317|      0|    }
  318|      0|  }
  319|  27.3k|}

Curl_pgrs_now:
  174|    103|{
  175|    103|  curlx_pnow(&data->progress.now);
  176|    103|  return &data->progress.now;
  177|    103|}

Curl_getn_scheme:
  469|  75.9k|{
  470|       |  /* table generated by schemetable.c:
  471|       |     1. gcc schemetable.c && ./a.out
  472|       |     2. check how small the table gets
  473|       |     3. tweak the hash algorithm, then rerun from 1
  474|       |     4. when the table is good enough
  475|       |     5. copy the table into this source code
  476|       |     6. make sure this function uses the same hash function that worked for
  477|       |     schemetable.c
  478|       |     */
  479|  75.9k|  static const struct Curl_scheme * const all_schemes[59] = { NULL,
  480|  75.9k|    &Curl_scheme_pop3, NULL,
  481|  75.9k|    &Curl_scheme_smtps,
  482|  75.9k|    &Curl_scheme_socks,
  483|  75.9k|    &Curl_scheme_socks4,
  484|  75.9k|    &Curl_scheme_socks5, NULL, NULL,
  485|  75.9k|    &Curl_scheme_gophers,
  486|  75.9k|    &Curl_scheme_ws,
  487|  75.9k|    &Curl_scheme_sftp,
  488|  75.9k|    &Curl_scheme_socks4a,
  489|  75.9k|    &Curl_scheme_scp,
  490|  75.9k|    &Curl_scheme_rtsp,
  491|  75.9k|    &Curl_scheme_dict, NULL, NULL,
  492|  75.9k|    &Curl_scheme_gopher, NULL, NULL, NULL,
  493|  75.9k|    &Curl_scheme_wss, NULL,
  494|  75.9k|    &Curl_scheme_smb, NULL,
  495|  75.9k|    &Curl_scheme_ldap,
  496|  75.9k|    &Curl_scheme_ldaps,
  497|  75.9k|    &Curl_scheme_imap, NULL, NULL, NULL,
  498|  75.9k|    &Curl_scheme_imaps,
  499|  75.9k|    &Curl_scheme_https,
  500|  75.9k|    &Curl_scheme_tftp,
  501|  75.9k|    &Curl_scheme_telnet, NULL, NULL, NULL,
  502|  75.9k|    &Curl_scheme_file,
  503|  75.9k|    &Curl_scheme_smtp, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
  504|  75.9k|    &Curl_scheme_ftp,
  505|  75.9k|    &Curl_scheme_mqtt, NULL,
  506|  75.9k|    &Curl_scheme_socks5h,
  507|  75.9k|    &Curl_scheme_http,
  508|  75.9k|    &Curl_scheme_pop3s, NULL,
  509|  75.9k|    &Curl_scheme_mqtts, NULL,
  510|  75.9k|    &Curl_scheme_smbs,
  511|  75.9k|    &Curl_scheme_ftps,
  512|  75.9k|  };
  513|       |
  514|  75.9k|  if(len && (len <= 7)) {
  ------------------
  |  Branch (514:6): [True: 75.9k, False: 0]
  |  Branch (514:13): [True: 75.9k, False: 8]
  ------------------
  515|  75.9k|    const char *s = scheme;
  516|  75.9k|    size_t l = len;
  517|  75.9k|    const struct Curl_scheme *h;
  518|  75.9k|    unsigned int c = 443;
  519|   417k|    while(l) {
  ------------------
  |  Branch (519:11): [True: 341k, False: 75.9k]
  ------------------
  520|   341k|      c <<= 5;
  521|   341k|      c += (unsigned int)Curl_raw_tolower(*s);
  522|   341k|      s++;
  523|   341k|      l--;
  524|   341k|    }
  525|       |
  526|  75.9k|    h = all_schemes[c % 59];
  527|  75.9k|    if(h && curl_strnequal(scheme, h->name, len) && !h->name[len])
  ------------------
  |  Branch (527:8): [True: 75.8k, False: 12]
  |  Branch (527:13): [True: 71.1k, False: 4.74k]
  |  Branch (527:53): [True: 71.1k, False: 3]
  ------------------
  528|  71.1k|      return h;
  529|  75.9k|  }
  530|  4.76k|  return NULL;
  531|  75.9k|}

Curl_rand_alnum:
  225|    297|{
  226|    297|  CURLcode result = CURLE_OK;
  227|    297|  const unsigned int alnumspace = sizeof(alnum) - 1;
  228|    297|  unsigned int r;
  229|    297|  DEBUGASSERT(num > 1);
  ------------------
  |  | 1077|    297|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (229:3): [True: 0, False: 297]
  |  Branch (229:3): [True: 297, False: 0]
  ------------------
  230|       |
  231|    297|  num--; /* save one for null-termination */
  232|       |
  233|  6.83k|  while(num) {
  ------------------
  |  Branch (233:9): [True: 6.53k, False: 297]
  ------------------
  234|  6.53k|    do {
  235|  6.53k|      result = randit(data, &r, TRUE);
  ------------------
  |  | 1051|  6.53k|#define TRUE true
  ------------------
  236|  6.53k|      if(result)
  ------------------
  |  Branch (236:10): [True: 0, False: 6.53k]
  ------------------
  237|      0|        return result;
  238|  6.53k|    } while(r >= (UINT_MAX - UINT_MAX % alnumspace));
  ------------------
  |  Branch (238:13): [True: 0, False: 6.53k]
  ------------------
  239|       |
  240|  6.53k|    *rnd++ = (unsigned char)alnum[r % alnumspace];
  241|  6.53k|    num--;
  242|  6.53k|  }
  243|    297|  *rnd = 0;
  244|       |
  245|    297|  return result;
  246|    297|}
rand.c:randit:
  105|  6.53k|{
  106|  6.53k|#ifdef DEBUGBUILD
  107|  6.53k|  if(env_override) {
  ------------------
  |  Branch (107:6): [True: 6.53k, False: 0]
  ------------------
  108|  6.53k|    char *force_entropy = getenv("CURL_ENTROPY");
  109|  6.53k|    if(force_entropy) {
  ------------------
  |  Branch (109:8): [True: 0, False: 6.53k]
  ------------------
  110|      0|      static unsigned int randseed;
  111|      0|      static bool seeded = FALSE;
  ------------------
  |  | 1054|      0|#define FALSE false
  ------------------
  112|       |
  113|      0|      if(!seeded) {
  ------------------
  |  Branch (113:10): [True: 0, False: 0]
  ------------------
  114|      0|        unsigned int seed = 0;
  115|      0|        size_t elen = strlen(force_entropy);
  116|      0|        size_t clen = sizeof(seed);
  117|      0|        size_t min = elen < clen ? elen : clen;
  ------------------
  |  Branch (117:22): [True: 0, False: 0]
  ------------------
  118|      0|        memcpy((char *)&seed, force_entropy, min);
  119|      0|        randseed = ntohl(seed);
  120|      0|        seeded = TRUE;
  ------------------
  |  | 1051|      0|#define TRUE true
  ------------------
  121|      0|      }
  122|      0|      else
  123|      0|        randseed++;
  124|      0|      *rnd = randseed;
  125|      0|      return CURLE_OK;
  126|      0|    }
  127|  6.53k|  }
  128|       |#else
  129|       |  (void)env_override;
  130|       |#endif
  131|       |
  132|       |  /* data may be NULL! */
  133|  6.53k|#ifdef USE_SSL
  134|  6.53k|  return Curl_ssl_random(data, (unsigned char *)rnd, sizeof(*rnd));
  135|       |#else
  136|       |  return weak_random(data, (unsigned char *)rnd, sizeof(*rnd));
  137|       |#endif
  138|  6.53k|}

Curl_rlimit_init:
  158|    103|{
  159|    103|  DEBUGASSERT(rate_per_sec >= 0);
  ------------------
  |  | 1077|    103|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (159:3): [True: 0, False: 103]
  |  Branch (159:3): [True: 103, False: 0]
  ------------------
  160|    103|  DEBUGASSERT(burst_per_sec >= rate_per_sec || !burst_per_sec);
  ------------------
  |  | 1077|    103|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (160:3): [True: 103, False: 0]
  |  Branch (160:3): [True: 0, False: 0]
  |  Branch (160:3): [True: 103, False: 0]
  |  Branch (160:3): [True: 0, False: 0]
  ------------------
  161|    103|  DEBUGASSERT(pts);
  ------------------
  |  | 1077|    103|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (161:3): [True: 0, False: 103]
  |  Branch (161:3): [True: 103, False: 0]
  ------------------
  162|    103|  r->rate_per_step = r->rate_per_sec = rate_per_sec;
  163|    103|  r->burst_per_step = r->burst_per_sec = burst_per_sec;
  164|    103|  r->step_us = CURL_US_PER_SEC;
  ------------------
  |  |   29|    103|#define CURL_US_PER_SEC         1000000
  ------------------
  165|    103|  r->spare_us = 0;
  166|    103|  r->tokens = r->rate_per_step;
  167|    103|  r->ts = *pts;
  168|       |  r->blocked = FALSE;
  ------------------
  |  | 1054|    103|#define FALSE false
  ------------------
  169|    103|}

Curl_req_init:
   39|  6.82k|{
   40|  6.82k|  memset(req, 0, sizeof(*req));
   41|  6.82k|}
Curl_req_free:
  176|  6.82k|{
  177|  6.82k|  curlx_safefree(req->newurl);
  ------------------
  |  | 1332|  6.82k|  do {                      \
  |  | 1333|  6.82k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1488|  6.82k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  6.82k|    (ptr) = NULL;           \
  |  | 1335|  6.82k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 6.82k]
  |  |  ------------------
  ------------------
  178|  6.82k|  curlx_safefree(req->hd_auth);
  ------------------
  |  | 1332|  6.82k|  do {                      \
  |  | 1333|  6.82k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1488|  6.82k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  6.82k|    (ptr) = NULL;           \
  |  | 1335|  6.82k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 6.82k]
  |  |  ------------------
  ------------------
  179|  6.82k|#ifndef CURL_DISABLE_PROXY
  180|  6.82k|  curlx_safefree(req->hd_proxy_auth);
  ------------------
  |  | 1332|  6.82k|  do {                      \
  |  | 1333|  6.82k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1488|  6.82k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  6.82k|    (ptr) = NULL;           \
  |  | 1335|  6.82k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 6.82k]
  |  |  ------------------
  ------------------
  181|  6.82k|#endif
  182|  6.82k|  if(req->sendbuf_init)
  ------------------
  |  Branch (182:6): [True: 0, False: 6.82k]
  ------------------
  183|      0|    Curl_bufq_free(&req->sendbuf);
  184|  6.82k|  Curl_client_cleanup(data);
  185|  6.82k|}

Curl_client_cleanup:
   71|  6.82k|{
   72|  6.82k|  cl_reset_reader(data);
   73|  6.82k|  cl_reset_writer(data);
   74|       |
   75|  6.82k|  data->req.bytecount = 0;
   76|  6.82k|  data->req.headerline = 0;
   77|  6.82k|}
sendf.c:cl_reset_reader:
   59|  6.82k|{
   60|  6.82k|  struct Curl_creader *reader = data->req.reader_stack;
   61|  6.82k|  data->req.reader_started = FALSE;
  ------------------
  |  | 1054|  6.82k|#define FALSE false
  ------------------
   62|  6.82k|  while(reader) {
  ------------------
  |  Branch (62:9): [True: 0, False: 6.82k]
  ------------------
   63|      0|    data->req.reader_stack = reader->next;
   64|      0|    reader->crt->do_close(data, reader);
   65|      0|    curlx_free(reader);
  ------------------
  |  | 1488|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
   66|      0|    reader = data->req.reader_stack;
   67|      0|  }
   68|  6.82k|}
sendf.c:cl_reset_writer:
   48|  6.82k|{
   49|  6.82k|  struct Curl_cwriter *writer = data->req.writer_stack;
   50|  6.82k|  while(writer) {
  ------------------
  |  Branch (50:9): [True: 0, False: 6.82k]
  ------------------
   51|      0|    data->req.writer_stack = writer->next;
   52|      0|    writer->cwt->do_close(data, writer);
   53|      0|    curlx_free(writer);
  ------------------
  |  | 1488|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
   54|      0|    writer = data->req.writer_stack;
   55|      0|  }
   56|  6.82k|}

Curl_setstropt:
   83|  24.4k|{
   84|       |  /* Release the previous storage at `charp' and replace by a dynamic storage
   85|       |     copy of `s'. Return CURLE_OK or CURLE_OUT_OF_MEMORY. */
   86|       |
   87|  24.4k|  curlx_safefree(*charp);
  ------------------
  |  | 1332|  24.4k|  do {                      \
  |  | 1333|  24.4k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1488|  24.4k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  24.4k|    (ptr) = NULL;           \
  |  | 1335|  24.4k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 24.4k]
  |  |  ------------------
  ------------------
   88|       |
   89|  24.4k|  if(s) {
  ------------------
  |  Branch (89:6): [True: 24.4k, False: 0]
  ------------------
   90|  24.4k|    if(strlen(s) > CURL_MAX_INPUT_LENGTH)
  ------------------
  |  |   45|  24.4k|#define CURL_MAX_INPUT_LENGTH 8000000
  ------------------
  |  Branch (90:8): [True: 0, False: 24.4k]
  ------------------
   91|      0|      return CURLE_BAD_FUNCTION_ARGUMENT;
   92|       |
   93|  24.4k|    *charp = curlx_strdup(s);
  ------------------
  |  | 1482|  24.4k|#define curlx_strdup(ptr)          curl_dbg_strdup(ptr, __LINE__, __FILE__)
  ------------------
   94|  24.4k|    if(!*charp)
  ------------------
  |  Branch (94:8): [True: 0, False: 24.4k]
  ------------------
   95|      0|      return CURLE_OUT_OF_MEMORY;
   96|  24.4k|  }
   97|       |
   98|  24.4k|  return CURLE_OK;
   99|  24.4k|}
Curl_setopt_SSLVERSION:
  317|  13.6k|{
  318|       |  /*
  319|       |   * Set explicit SSL version to try to connect with, as some SSL
  320|       |   * implementations are lame.
  321|       |   */
  322|  13.6k|  {
  323|  13.6k|    long version, version_max;
  324|  13.6k|    struct ssl_primary_config *primary = &data->set.ssl.primary;
  325|  13.6k|#ifndef CURL_DISABLE_PROXY
  326|  13.6k|    if(option != CURLOPT_SSLVERSION)
  ------------------
  |  Branch (326:8): [True: 6.84k, False: 6.84k]
  ------------------
  327|  6.84k|      primary = &data->set.proxy_ssl.primary;
  328|       |#else
  329|       |    (void)option; /* unused */
  330|       |#endif
  331|  13.6k|    version = C_SSLVERSION_VALUE(arg);
  ------------------
  |  |  194|  13.6k|#define C_SSLVERSION_VALUE(x)     ((x) & 0xffff)
  ------------------
  332|  13.6k|    version_max = (long)C_SSLVERSION_MAX_VALUE(arg);
  ------------------
  |  |  195|  13.6k|#define C_SSLVERSION_MAX_VALUE(x) ((unsigned long)(x) & 0xffff0000)
  ------------------
  333|       |
  334|  13.6k|    if(version < CURL_SSLVERSION_DEFAULT ||
  ------------------
  |  | 2374|  27.3k|#define CURL_SSLVERSION_DEFAULT 0L
  ------------------
  |  Branch (334:8): [True: 0, False: 13.6k]
  ------------------
  335|  13.6k|       version == CURL_SSLVERSION_SSLv2 ||
  ------------------
  |  | 2376|  27.3k|#define CURL_SSLVERSION_SSLv2   2L
  ------------------
  |  Branch (335:8): [True: 1, False: 13.6k]
  ------------------
  336|  13.6k|       version == CURL_SSLVERSION_SSLv3 ||
  ------------------
  |  | 2377|  27.3k|#define CURL_SSLVERSION_SSLv3   3L
  ------------------
  |  Branch (336:8): [True: 1, False: 13.6k]
  ------------------
  337|  13.6k|       version >= CURL_SSLVERSION_LAST ||
  ------------------
  |  | 2383|  27.3k|#define CURL_SSLVERSION_LAST    8L /* never use, keep last */
  ------------------
  |  Branch (337:8): [True: 14, False: 13.6k]
  ------------------
  338|  13.6k|       version_max < CURL_SSLVERSION_MAX_NONE ||
  ------------------
  |  | 2385|  27.3k|#define CURL_SSLVERSION_MAX_NONE 0L
  ------------------
  |  Branch (338:8): [True: 0, False: 13.6k]
  ------------------
  339|  13.6k|       version_max >= CURL_SSLVERSION_MAX_LAST)
  ------------------
  |  | 2393|  13.6k|#define CURL_SSLVERSION_MAX_LAST    (CURL_SSLVERSION_LAST    << 16)
  |  |  ------------------
  |  |  |  | 2383|  13.6k|#define CURL_SSLVERSION_LAST    8L /* never use, keep last */
  |  |  ------------------
  ------------------
  |  Branch (339:8): [True: 14, False: 13.6k]
  ------------------
  340|     30|      return CURLE_BAD_FUNCTION_ARGUMENT;
  341|  13.6k|    if(version == CURL_SSLVERSION_DEFAULT)
  ------------------
  |  | 2374|  13.6k|#define CURL_SSLVERSION_DEFAULT 0L
  ------------------
  |  Branch (341:8): [True: 13.6k, False: 6]
  ------------------
  342|  13.6k|      version = CURL_SSLVERSION_TLSv1_2;
  ------------------
  |  | 2380|  13.6k|#define CURL_SSLVERSION_TLSv1_2 6L
  ------------------
  343|       |
  344|  13.6k|    primary->version = (unsigned char)version;
  345|  13.6k|    primary->version_max = (unsigned int)version_max;
  346|  13.6k|  }
  347|      0|  return CURLE_OK;
  348|  13.6k|}
Curl_vsetopt:
 2872|  86.3k|{
 2873|  86.3k|  if(option < CURLOPTTYPE_OBJECTPOINT)
  ------------------
  |  | 1114|  86.3k|#define CURLOPTTYPE_OBJECTPOINT   10000
  ------------------
  |  Branch (2873:6): [True: 12.0k, False: 74.3k]
  ------------------
 2874|  12.0k|    return setopt_long(data, option, va_arg(param, long));
 2875|  74.3k|  else if(option < CURLOPTTYPE_FUNCTIONPOINT) {
  ------------------
  |  | 1115|  74.3k|#define CURLOPTTYPE_FUNCTIONPOINT 20000
  ------------------
  |  Branch (2875:11): [True: 55.2k, False: 19.1k]
  ------------------
 2876|       |    /* unfortunately, different pointer types cannot be identified any other
 2877|       |       way than being listed explicitly */
 2878|  55.2k|    switch(option) {
 2879|      0|    case CURLOPT_HTTPHEADER:
  ------------------
  |  Branch (2879:5): [True: 0, False: 55.2k]
  ------------------
 2880|      0|    case CURLOPT_QUOTE:
  ------------------
  |  Branch (2880:5): [True: 0, False: 55.2k]
  ------------------
 2881|      0|    case CURLOPT_POSTQUOTE:
  ------------------
  |  Branch (2881:5): [True: 0, False: 55.2k]
  ------------------
 2882|      0|    case CURLOPT_TELNETOPTIONS:
  ------------------
  |  Branch (2882:5): [True: 0, False: 55.2k]
  ------------------
 2883|      0|    case CURLOPT_PREQUOTE:
  ------------------
  |  Branch (2883:5): [True: 0, False: 55.2k]
  ------------------
 2884|      0|    case CURLOPT_HTTP200ALIASES:
  ------------------
  |  Branch (2884:5): [True: 0, False: 55.2k]
  ------------------
 2885|      0|    case CURLOPT_MAIL_RCPT:
  ------------------
  |  Branch (2885:5): [True: 0, False: 55.2k]
  ------------------
 2886|      0|    case CURLOPT_RESOLVE:
  ------------------
  |  Branch (2886:5): [True: 0, False: 55.2k]
  ------------------
 2887|      0|    case CURLOPT_PROXYHEADER:
  ------------------
  |  Branch (2887:5): [True: 0, False: 55.2k]
  ------------------
 2888|  4.73k|    case CURLOPT_CONNECT_TO:
  ------------------
  |  Branch (2888:5): [True: 4.73k, False: 50.5k]
  ------------------
 2889|  4.73k|      return setopt_slist(data, option, va_arg(param, struct curl_slist *));
 2890|     12|    case CURLOPT_HTTPPOST:         /* curl_httppost * */
  ------------------
  |  Branch (2890:5): [True: 12, False: 55.2k]
  ------------------
 2891|     12|    case CURLOPT_MIMEPOST:         /* curl_mime * */
  ------------------
  |  Branch (2891:5): [True: 0, False: 55.2k]
  ------------------
 2892|     12|    case CURLOPT_STDERR:           /* FILE * */
  ------------------
  |  Branch (2892:5): [True: 0, False: 55.2k]
  ------------------
 2893|     12|    case CURLOPT_SHARE:            /* CURLSH * */
  ------------------
  |  Branch (2893:5): [True: 0, False: 55.2k]
  ------------------
 2894|     12|    case CURLOPT_CURLU:            /* CURLU * */
  ------------------
  |  Branch (2894:5): [True: 0, False: 55.2k]
  ------------------
 2895|     12|      return setopt_pointers(data, option, param);
 2896|      0|    case CURLOPT_STREAM_DEPENDS:   /* CURL * */
  ------------------
  |  Branch (2896:5): [True: 0, False: 55.2k]
  ------------------
 2897|      0|    case CURLOPT_STREAM_DEPENDS_E: /* CURL * */
  ------------------
  |  Branch (2897:5): [True: 0, False: 55.2k]
  ------------------
 2898|      0|      return CURLE_OK;
 2899|  50.4k|    default:
  ------------------
  |  Branch (2899:5): [True: 50.4k, False: 4.74k]
  ------------------
 2900|  50.4k|      break;
 2901|  55.2k|    }
 2902|       |    /* the char pointer options */
 2903|  50.4k|    return setopt_cptr(data, option, va_arg(param, char *));
 2904|  55.2k|  }
 2905|  19.1k|  else if(option < CURLOPTTYPE_OFF_T)
  ------------------
  |  | 1116|  19.1k|#define CURLOPTTYPE_OFF_T         30000
  ------------------
  |  Branch (2905:11): [True: 18.9k, False: 177]
  ------------------
 2906|  18.9k|    return setopt_func(data, option, param);
 2907|    177|  else if(option < CURLOPTTYPE_BLOB)
  ------------------
  |  | 1117|    177|#define CURLOPTTYPE_BLOB          40000
  ------------------
  |  Branch (2907:11): [True: 177, False: 0]
  ------------------
 2908|    177|    return setopt_offt(data, option, va_arg(param, curl_off_t));
 2909|      0|  return setopt_blob(data, option, va_arg(param, struct curl_blob *));
 2910|  86.3k|}
curl_easy_setopt:
 2922|  86.3k|{
 2923|  86.3k|  va_list arg;
 2924|  86.3k|  CURLcode result;
 2925|  86.3k|  struct Curl_easy *data = curl;
 2926|       |
 2927|  86.3k|  if(!data)
  ------------------
  |  Branch (2927:6): [True: 0, False: 86.3k]
  ------------------
 2928|      0|    return CURLE_BAD_FUNCTION_ARGUMENT;
 2929|       |
 2930|  86.3k|  va_start(arg, option);
 2931|       |
 2932|  86.3k|  result = Curl_vsetopt(data, option, arg);
 2933|       |
 2934|  86.3k|  va_end(arg);
 2935|  86.3k|  if(result == CURLE_BAD_FUNCTION_ARGUMENT)
  ------------------
  |  Branch (2935:6): [True: 627, False: 85.7k]
  ------------------
 2936|    627|    failf(data, "setopt 0x%x got bad argument", (unsigned int)option);
  ------------------
  |  |   62|    627|#define failf Curl_failf
  ------------------
 2937|  86.3k|  return result;
 2938|  86.3k|}
setopt.c:setopt_long:
 1301|  12.0k|{
 1302|  12.0k|  typedef CURLcode (*setoptfunc)(struct Curl_easy *data,
 1303|  12.0k|                                 CURLoption option, long arg);
 1304|  12.0k|  static const setoptfunc setopt_call[] = {
 1305|  12.0k|    setopt_long_bool,
 1306|  12.0k|    setopt_long_net,
 1307|  12.0k|    setopt_long_http,
 1308|  12.0k|    setopt_long_proxy,
 1309|  12.0k|    setopt_long_ssl,
 1310|  12.0k|    setopt_long_proto,
 1311|  12.0k|    setopt_long_misc
 1312|  12.0k|  };
 1313|  12.0k|  size_t i;
 1314|       |
 1315|  27.5k|  for(i = 0; i < CURL_ARRAYSIZE(setopt_call); i++) {
  ------------------
  |  | 1299|  27.5k|#define CURL_ARRAYSIZE(A) (sizeof(A) / sizeof((A)[0]))
  ------------------
  |  Branch (1315:14): [True: 27.5k, False: 6]
  ------------------
 1316|  27.5k|    CURLcode result = setopt_call[i](data, option, arg);
 1317|  27.5k|    if(result != CURLE_UNKNOWN_OPTION)
  ------------------
  |  Branch (1317:8): [True: 12.0k, False: 15.5k]
  ------------------
 1318|  12.0k|      return result;
 1319|  27.5k|  }
 1320|      6|  return CURLE_UNKNOWN_OPTION;
 1321|  12.0k|}
setopt.c:setopt_long_bool:
  404|  12.0k|{
  405|  12.0k|  bool enabled = !!arg;
  406|  12.0k|  int ok = 1;
  407|  12.0k|  struct UserDefined *s = &data->set;
  408|  12.0k|  switch(option) {
  409|      2|  case CURLOPT_FORBID_REUSE:
  ------------------
  |  Branch (409:3): [True: 2, False: 12.0k]
  ------------------
  410|       |    /*
  411|       |     * When this transfer is done, it must not be left to be reused by a
  412|       |     * subsequent transfer but shall be closed immediately.
  413|       |     */
  414|      2|    s->reuse_forbid = enabled;
  415|      2|    break;
  416|      3|  case CURLOPT_FRESH_CONNECT:
  ------------------
  |  Branch (416:3): [True: 3, False: 12.0k]
  ------------------
  417|       |    /*
  418|       |     * This transfer shall not use a previously cached connection but
  419|       |     * should be made with a fresh new connect!
  420|       |     */
  421|      3|    s->reuse_fresh = enabled;
  422|      3|    break;
  423|      0|  case CURLOPT_VERBOSE:
  ------------------
  |  Branch (423:3): [True: 0, False: 12.0k]
  ------------------
  424|       |    /*
  425|       |     * Verbose means infof() calls that give a lot of information about
  426|       |     * the connection and transfer procedures as well as internal choices.
  427|       |     */
  428|      0|    s->verbose = enabled;
  429|      0|    break;
  430|     15|  case CURLOPT_HEADER:
  ------------------
  |  Branch (430:3): [True: 15, False: 12.0k]
  ------------------
  431|       |    /*
  432|       |     * Set to include the header in the general data output stream.
  433|       |     */
  434|     15|    s->include_header = enabled;
  435|     15|    break;
  436|      2|  case CURLOPT_NOPROGRESS:
  ------------------
  |  Branch (436:3): [True: 2, False: 12.0k]
  ------------------
  437|       |    /*
  438|       |     * Shut off the internal supported progress meter
  439|       |     */
  440|      2|    data->progress.hide = enabled;
  441|      2|    break;
  442|      4|  case CURLOPT_NOBODY:
  ------------------
  |  Branch (442:3): [True: 4, False: 12.0k]
  ------------------
  443|       |    /*
  444|       |     * Do not include the body part in the output data stream.
  445|       |     */
  446|      4|    s->opt_no_body = enabled;
  447|      4|#ifndef CURL_DISABLE_HTTP
  448|      4|    if(s->opt_no_body)
  ------------------
  |  Branch (448:8): [True: 3, False: 1]
  ------------------
  449|       |      /* in HTTP lingo, no body means using the HEAD request... */
  450|      3|      s->method = HTTPREQ_HEAD;
  451|      1|    else if(s->method == HTTPREQ_HEAD)
  ------------------
  |  Branch (451:13): [True: 0, False: 1]
  ------------------
  452|      0|      s->method = HTTPREQ_GET;
  453|      4|#endif
  454|      4|    break;
  455|      7|  case CURLOPT_FAILONERROR:
  ------------------
  |  Branch (455:3): [True: 7, False: 12.0k]
  ------------------
  456|       |    /*
  457|       |     * Do not output the >=400 error code HTML-page, but instead only
  458|       |     * return error.
  459|       |     */
  460|      7|    s->http_fail_on_error = enabled;
  461|      7|    break;
  462|      4|  case CURLOPT_KEEP_SENDING_ON_ERROR:
  ------------------
  |  Branch (462:3): [True: 4, False: 12.0k]
  ------------------
  463|      4|    s->http_keep_sending_on_error = enabled;
  464|      4|    break;
  465|     26|  case CURLOPT_UPLOAD:
  ------------------
  |  Branch (465:3): [True: 26, False: 11.9k]
  ------------------
  466|     26|  case CURLOPT_PUT:
  ------------------
  |  Branch (466:3): [True: 0, False: 12.0k]
  ------------------
  467|       |    /*
  468|       |     * We want to send data to the remote host. If this is HTTP, that equals
  469|       |     * using the PUT request.
  470|       |     */
  471|     26|    if(enabled) {
  ------------------
  |  Branch (471:8): [True: 26, False: 0]
  ------------------
  472|       |      /* If this is HTTP, PUT is what's needed to "upload" */
  473|     26|      s->method = HTTPREQ_PUT;
  474|     26|      s->opt_no_body = FALSE; /* this is implied */
  ------------------
  |  | 1054|     26|#define FALSE false
  ------------------
  475|     26|    }
  476|      0|    else
  477|       |      /* In HTTP, the opposite of upload is GET (unless NOBODY is true as
  478|       |         then this can be changed to HEAD later on) */
  479|      0|      s->method = HTTPREQ_GET;
  480|     26|    break;
  481|      3|  case CURLOPT_FILETIME:
  ------------------
  |  Branch (481:3): [True: 3, False: 12.0k]
  ------------------
  482|       |    /*
  483|       |     * Try to get the file time of the remote document. The time will
  484|       |     * later (possibly) become available using curl_easy_getinfo().
  485|       |     */
  486|      3|    s->get_filetime = enabled;
  487|      3|    break;
  488|      0|#ifndef CURL_DISABLE_HTTP
  489|      2|  case CURLOPT_HTTP09_ALLOWED:
  ------------------
  |  Branch (489:3): [True: 2, False: 12.0k]
  ------------------
  490|      2|    s->http09_allowed = enabled;
  491|      2|    break;
  492|      0|#ifndef CURL_DISABLE_COOKIES
  493|      6|  case CURLOPT_COOKIESESSION:
  ------------------
  |  Branch (493:3): [True: 6, False: 12.0k]
  ------------------
  494|       |    /*
  495|       |     * Set this option to TRUE to start a new "cookie session". It will
  496|       |     * prevent the forthcoming read-cookies-from-file actions to accept
  497|       |     * cookies that are marked as being session cookies, as they belong to a
  498|       |     * previous session.
  499|       |     */
  500|      6|    s->cookiesession = enabled;
  501|      6|    break;
  502|      0|#endif
  503|      2|  case CURLOPT_AUTOREFERER:
  ------------------
  |  Branch (503:3): [True: 2, False: 12.0k]
  ------------------
  504|       |    /*
  505|       |     * Switch on automatic referer that gets set if curl follows locations.
  506|       |     */
  507|      2|    s->http_auto_referer = enabled;
  508|      2|    break;
  509|      2|  case CURLOPT_TRANSFER_ENCODING:
  ------------------
  |  Branch (509:3): [True: 2, False: 12.0k]
  ------------------
  510|      2|    s->http_transfer_encoding = enabled;
  511|      2|    break;
  512|      6|  case CURLOPT_UNRESTRICTED_AUTH:
  ------------------
  |  Branch (512:3): [True: 6, False: 12.0k]
  ------------------
  513|       |    /*
  514|       |     * Send authentication (user+password) when following locations, even when
  515|       |     * hostname changed.
  516|       |     */
  517|      6|    s->allow_auth_to_other_hosts = enabled;
  518|      6|    break;
  519|      2|  case CURLOPT_HTTP_TRANSFER_DECODING:
  ------------------
  |  Branch (519:3): [True: 2, False: 12.0k]
  ------------------
  520|       |    /*
  521|       |     * disable libcurl transfer encoding is used
  522|       |     */
  523|      2|    s->http_te_skip = !enabled; /* reversed */
  524|      2|    break;
  525|      7|  case CURLOPT_HTTP_CONTENT_DECODING:
  ------------------
  |  Branch (525:3): [True: 7, False: 12.0k]
  ------------------
  526|       |    /*
  527|       |     * raw data passed to the application when content encoding is used
  528|       |     */
  529|      7|    s->http_ce_skip = !enabled; /* reversed */
  530|      7|    break;
  531|      4|  case CURLOPT_HTTPGET:
  ------------------
  |  Branch (531:3): [True: 4, False: 12.0k]
  ------------------
  532|       |    /*
  533|       |     * Set to force us do HTTP GET
  534|       |     */
  535|      4|    if(enabled) {
  ------------------
  |  Branch (535:8): [True: 3, False: 1]
  ------------------
  536|      3|      s->method = HTTPREQ_GET;
  537|      3|      s->opt_no_body = FALSE; /* this is implied */
  ------------------
  |  | 1054|      3|#define FALSE false
  ------------------
  538|      3|    }
  539|      4|    break;
  540|      8|  case CURLOPT_POST:
  ------------------
  |  Branch (540:3): [True: 8, False: 12.0k]
  ------------------
  541|       |    /* Does this option serve a purpose anymore? Yes it does, when
  542|       |       CURLOPT_POSTFIELDS is not used and the POST data is read off the
  543|       |       callback! */
  544|      8|    if(enabled) {
  ------------------
  |  Branch (544:8): [True: 4, False: 4]
  ------------------
  545|      4|      s->method = HTTPREQ_POST;
  546|      4|      s->opt_no_body = FALSE; /* this is implied */
  ------------------
  |  | 1054|      4|#define FALSE false
  ------------------
  547|      4|    }
  548|      4|    else
  549|      4|      s->method = HTTPREQ_GET;
  550|      8|    break;
  551|      0|#endif /* !CURL_DISABLE_HTTP */
  552|      0|#ifndef CURL_DISABLE_PROXY
  553|      5|  case CURLOPT_HTTPPROXYTUNNEL:
  ------------------
  |  Branch (553:3): [True: 5, False: 12.0k]
  ------------------
  554|       |    /*
  555|       |     * Tunnel operations through the proxy instead of normal proxy use
  556|       |     */
  557|      5|    s->tunnel_thru_httpproxy = enabled;
  558|      5|    break;
  559|      5|  case CURLOPT_HAPROXYPROTOCOL:
  ------------------
  |  Branch (559:3): [True: 5, False: 12.0k]
  ------------------
  560|       |    /*
  561|       |     * Set to send the HAProxy Proxy Protocol header
  562|       |     */
  563|      5|    s->haproxyprotocol = enabled;
  564|      5|    break;
  565|      9|  case CURLOPT_PROXY_SSL_VERIFYPEER:
  ------------------
  |  Branch (565:3): [True: 9, False: 12.0k]
  ------------------
  566|       |    /*
  567|       |     * Enable peer SSL verifying for proxy.
  568|       |     */
  569|      9|    s->proxy_ssl.primary.verifypeer = enabled;
  570|       |
  571|       |    /* Update the current connection proxy_ssl_config. */
  572|      9|    Curl_ssl_conn_config_update(data, TRUE);
  ------------------
  |  | 1051|      9|#define TRUE true
  ------------------
  573|      9|    break;
  574|     12|  case CURLOPT_PROXY_SSL_VERIFYHOST:
  ------------------
  |  Branch (574:3): [True: 12, False: 12.0k]
  ------------------
  575|       |    /*
  576|       |     * Enable verification of the hostname in the peer certificate for proxy
  577|       |     */
  578|     12|    s->proxy_ssl.primary.verifyhost = enabled;
  579|     12|    ok = 2;
  580|       |    /* Update the current connection proxy_ssl_config. */
  581|     12|    Curl_ssl_conn_config_update(data, TRUE);
  ------------------
  |  | 1051|     12|#define TRUE true
  ------------------
  582|     12|    break;
  583|      3|  case CURLOPT_PROXY_TRANSFER_MODE:
  ------------------
  |  Branch (583:3): [True: 3, False: 12.0k]
  ------------------
  584|       |    /*
  585|       |     * set transfer mode (;type=<a|i>) when doing FTP via an HTTP proxy
  586|       |     */
  587|      3|    s->proxy_transfer_mode = enabled;
  588|      3|    break;
  589|      0|#endif /* !CURL_DISABLE_PROXY */
  590|       |#if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI)
  591|       |  case CURLOPT_SOCKS5_GSSAPI_NEC:
  592|       |    /*
  593|       |     * Set flag for NEC SOCKS5 support
  594|       |     */
  595|       |    s->socks5_gssapi_nec = enabled;
  596|       |    break;
  597|       |#endif
  598|      0|#ifdef CURL_LIST_ONLY_PROTOCOL
  599|      6|  case CURLOPT_DIRLISTONLY:
  ------------------
  |  Branch (599:3): [True: 6, False: 12.0k]
  ------------------
  600|       |    /*
  601|       |     * An option that changes the command to one that asks for a list only, no
  602|       |     * file info details. Used for FTP, POP3 and SFTP.
  603|       |     */
  604|      6|    s->list_only = enabled;
  605|      6|    break;
  606|      0|#endif
  607|      6|  case CURLOPT_APPEND:
  ------------------
  |  Branch (607:3): [True: 6, False: 12.0k]
  ------------------
  608|       |    /*
  609|       |     * We want to upload and append to an existing file. Used for FTP and
  610|       |     * SFTP.
  611|       |     */
  612|      6|    s->remote_append = enabled;
  613|      6|    break;
  614|      0|#ifndef CURL_DISABLE_FTP
  615|      7|  case CURLOPT_FTP_USE_EPRT:
  ------------------
  |  Branch (615:3): [True: 7, False: 12.0k]
  ------------------
  616|      7|    s->ftp_use_eprt = enabled;
  617|      7|    break;
  618|      8|  case CURLOPT_FTP_USE_EPSV:
  ------------------
  |  Branch (618:3): [True: 8, False: 12.0k]
  ------------------
  619|      8|    s->ftp_use_epsv = enabled;
  620|      8|    break;
  621|      3|  case CURLOPT_FTP_USE_PRET:
  ------------------
  |  Branch (621:3): [True: 3, False: 12.0k]
  ------------------
  622|      3|    s->ftp_use_pret = enabled;
  623|      3|    break;
  624|      4|  case CURLOPT_FTP_SKIP_PASV_IP:
  ------------------
  |  Branch (624:3): [True: 4, False: 12.0k]
  ------------------
  625|       |    /*
  626|       |     * Enable or disable FTP_SKIP_PASV_IP, which will disable/enable the
  627|       |     * bypass of the IP address in PASV responses.
  628|       |     */
  629|      4|    s->ftp_skip_ip = enabled;
  630|      4|    break;
  631|      3|  case CURLOPT_WILDCARDMATCH:
  ------------------
  |  Branch (631:3): [True: 3, False: 12.0k]
  ------------------
  632|      3|    s->wildcard_enabled = enabled;
  633|      3|    break;
  634|      0|#endif
  635|      0|  case CURLOPT_CRLF:
  ------------------
  |  Branch (635:3): [True: 0, False: 12.0k]
  ------------------
  636|       |    /*
  637|       |     * Kludgy option to enable CRLF conversions. Subject for removal.
  638|       |     */
  639|      0|    s->crlf = enabled;
  640|      0|    break;
  641|      0|#ifndef CURL_DISABLE_TFTP
  642|      2|  case CURLOPT_TFTP_NO_OPTIONS:
  ------------------
  |  Branch (642:3): [True: 2, False: 12.0k]
  ------------------
  643|       |    /*
  644|       |     * Option that prevents libcurl from sending TFTP option requests to the
  645|       |     * server.
  646|       |     */
  647|      2|    s->tftp_no_options = enabled;
  648|      2|    break;
  649|      0|#endif /* !CURL_DISABLE_TFTP */
  650|      3|  case CURLOPT_TRANSFERTEXT:
  ------------------
  |  Branch (650:3): [True: 3, False: 12.0k]
  ------------------
  651|       |    /*
  652|       |     * This option was previously named 'FTPASCII'. Renamed to work with
  653|       |     * more protocols than merely FTP.
  654|       |     *
  655|       |     * Transfer using ASCII (instead of BINARY).
  656|       |     */
  657|      3|    s->prefer_ascii = enabled;
  658|      3|    break;
  659|      9|  case CURLOPT_SSL_VERIFYPEER:
  ------------------
  |  Branch (659:3): [True: 9, False: 12.0k]
  ------------------
  660|       |    /*
  661|       |     * Enable peer SSL verifying.
  662|       |     */
  663|      9|    s->ssl.primary.verifypeer = enabled;
  664|       |
  665|       |    /* Update the current connection ssl_config. */
  666|      9|    Curl_ssl_conn_config_update(data, FALSE);
  ------------------
  |  | 1054|      9|#define FALSE false
  ------------------
  667|      9|    break;
  668|      0|#ifndef CURL_DISABLE_DOH
  669|      4|  case CURLOPT_DOH_SSL_VERIFYPEER:
  ------------------
  |  Branch (669:3): [True: 4, False: 12.0k]
  ------------------
  670|       |    /*
  671|       |     * Enable peer SSL verifying for DoH.
  672|       |     */
  673|      4|    s->doh_verifypeer = enabled;
  674|      4|    break;
  675|      2|  case CURLOPT_DOH_SSL_VERIFYHOST:
  ------------------
  |  Branch (675:3): [True: 2, False: 12.0k]
  ------------------
  676|       |    /*
  677|       |     * Enable verification of the hostname in the peer certificate for DoH
  678|       |     */
  679|      2|    s->doh_verifyhost = enabled;
  680|      2|    ok = 2;
  681|      2|    break;
  682|      3|  case CURLOPT_DOH_SSL_VERIFYSTATUS:
  ------------------
  |  Branch (682:3): [True: 3, False: 12.0k]
  ------------------
  683|       |    /*
  684|       |     * Enable certificate status verifying for DoH.
  685|       |     */
  686|      3|    if(!Curl_ssl_cert_status_request())
  ------------------
  |  Branch (686:8): [True: 0, False: 3]
  ------------------
  687|      0|      return CURLE_NOT_BUILT_IN;
  688|       |
  689|      3|    s->doh_verifystatus = enabled;
  690|      3|    ok = 2;
  691|      3|    break;
  692|      0|#endif /* !CURL_DISABLE_DOH */
  693|      7|  case CURLOPT_SSL_VERIFYHOST:
  ------------------
  |  Branch (693:3): [True: 7, False: 12.0k]
  ------------------
  694|       |    /*
  695|       |     * Enable verification of the hostname in the peer certificate
  696|       |     */
  697|       |
  698|       |    /* Obviously people are not reading documentation and too many thought
  699|       |       this argument took a boolean when it was not and misused it.
  700|       |       Treat 1 and 2 the same */
  701|      7|    s->ssl.primary.verifyhost = enabled;
  702|      7|    ok = 2;
  703|       |
  704|       |    /* Update the current connection ssl_config. */
  705|      7|    Curl_ssl_conn_config_update(data, FALSE);
  ------------------
  |  | 1054|      7|#define FALSE false
  ------------------
  706|      7|    break;
  707|      7|  case CURLOPT_SSL_VERIFYSTATUS:
  ------------------
  |  Branch (707:3): [True: 7, False: 12.0k]
  ------------------
  708|       |    /*
  709|       |     * Enable certificate status verifying.
  710|       |     */
  711|      7|    if(!Curl_ssl_cert_status_request())
  ------------------
  |  Branch (711:8): [True: 0, False: 7]
  ------------------
  712|      0|      return CURLE_NOT_BUILT_IN;
  713|       |
  714|      7|    s->ssl.primary.verifystatus = enabled;
  715|       |
  716|       |    /* Update the current connection ssl_config. */
  717|      7|    Curl_ssl_conn_config_update(data, FALSE);
  ------------------
  |  | 1054|      7|#define FALSE false
  ------------------
  718|      7|    break;
  719|      3|  case CURLOPT_CERTINFO:
  ------------------
  |  Branch (719:3): [True: 3, False: 12.0k]
  ------------------
  720|      3|#ifdef USE_SSL
  721|      3|    if(Curl_ssl_supports(data, SSLSUPP_CERTINFO))
  ------------------
  |  |   36|      3|#define SSLSUPP_CERTINFO     (1 << 1) /* supports CURLOPT_CERTINFO */
  ------------------
  |  Branch (721:8): [True: 3, False: 0]
  ------------------
  722|      3|      s->ssl.certinfo = enabled;
  723|      0|    else
  724|      0|#endif
  725|      0|      return CURLE_NOT_BUILT_IN;
  726|      3|    break;
  727|      3|  case CURLOPT_NOSIGNAL:
  ------------------
  |  Branch (727:3): [True: 3, False: 12.0k]
  ------------------
  728|       |    /*
  729|       |     * The application asks not to set any signal() or alarm() handlers,
  730|       |     * even when using a timeout.
  731|       |     */
  732|      3|    s->no_signal = enabled;
  733|      3|    break;
  734|      2|  case CURLOPT_TCP_NODELAY:
  ------------------
  |  Branch (734:3): [True: 2, False: 12.0k]
  ------------------
  735|       |    /*
  736|       |     * Enable or disable TCP_NODELAY, which will disable/enable the Nagle
  737|       |     * algorithm
  738|       |     */
  739|      2|    s->tcp_nodelay = enabled;
  740|      2|    break;
  741|      2|  case CURLOPT_IGNORE_CONTENT_LENGTH:
  ------------------
  |  Branch (741:3): [True: 2, False: 12.0k]
  ------------------
  742|      2|    s->ignorecl = enabled;
  743|      2|    break;
  744|      2|  case CURLOPT_SSL_SESSIONID_CACHE:
  ------------------
  |  Branch (744:3): [True: 2, False: 12.0k]
  ------------------
  745|      2|    s->ssl.primary.cache_session = enabled;
  746|      2|#ifndef CURL_DISABLE_PROXY
  747|      2|    s->proxy_ssl.primary.cache_session = s->ssl.primary.cache_session;
  748|      2|#endif
  749|      2|    break;
  750|       |#ifdef USE_SSH
  751|       |  case CURLOPT_SSH_COMPRESSION:
  752|       |    s->ssh_compression = enabled;
  753|       |    break;
  754|       |#endif /* !USE_SSH */
  755|      0|#ifndef CURL_DISABLE_SMTP
  756|      4|  case CURLOPT_MAIL_RCPT_ALLOWFAILS:
  ------------------
  |  Branch (756:3): [True: 4, False: 12.0k]
  ------------------
  757|       |    /* allow RCPT TO command to fail for some recipients */
  758|      4|    s->mail_rcpt_allowfails = enabled;
  759|      4|    break;
  760|      0|#endif /* !CURL_DISABLE_SMTP */
  761|      6|  case CURLOPT_SASL_IR:
  ------------------
  |  Branch (761:3): [True: 6, False: 12.0k]
  ------------------
  762|       |    /* Enable/disable SASL initial response */
  763|      6|    s->sasl_ir = enabled;
  764|      6|    break;
  765|      7|  case CURLOPT_TCP_KEEPALIVE:
  ------------------
  |  Branch (765:3): [True: 7, False: 12.0k]
  ------------------
  766|      7|    s->tcp_keepalive = enabled;
  767|      7|    break;
  768|      4|  case CURLOPT_TCP_FASTOPEN:
  ------------------
  |  Branch (768:3): [True: 4, False: 12.0k]
  ------------------
  769|      4|#if defined(CONNECT_DATA_IDEMPOTENT) || defined(MSG_FASTOPEN) || \
  770|      4|  defined(TCP_FASTOPEN_CONNECT)
  771|      4|    s->tcp_fastopen = enabled;
  772|      4|    break;
  773|       |#else
  774|       |    return CURLE_NOT_BUILT_IN;
  775|       |#endif
  776|      2|  case CURLOPT_SSL_ENABLE_ALPN:
  ------------------
  |  Branch (776:3): [True: 2, False: 12.0k]
  ------------------
  777|      2|    s->ssl_enable_alpn = enabled;
  778|      2|    break;
  779|      4|  case CURLOPT_PATH_AS_IS:
  ------------------
  |  Branch (779:3): [True: 4, False: 12.0k]
  ------------------
  780|      4|    s->path_as_is = enabled;
  781|      4|    break;
  782|      8|  case CURLOPT_PIPEWAIT:
  ------------------
  |  Branch (782:3): [True: 8, False: 12.0k]
  ------------------
  783|      8|    s->pipewait = enabled;
  784|      8|    break;
  785|      3|  case CURLOPT_SUPPRESS_CONNECT_HEADERS:
  ------------------
  |  Branch (785:3): [True: 3, False: 12.0k]
  ------------------
  786|      3|    s->suppress_connect_headers = enabled;
  787|      3|    break;
  788|      0|#ifndef CURL_DISABLE_SHUFFLE_DNS
  789|      7|  case CURLOPT_DNS_SHUFFLE_ADDRESSES:
  ------------------
  |  Branch (789:3): [True: 7, False: 12.0k]
  ------------------
  790|      7|    s->dns_shuffle_addresses = enabled;
  791|      7|    break;
  792|      0|#endif
  793|      3|  case CURLOPT_DISALLOW_USERNAME_IN_URL:
  ------------------
  |  Branch (793:3): [True: 3, False: 12.0k]
  ------------------
  794|      3|    s->disallow_username_in_url = enabled;
  795|      3|    break;
  796|      2|  case CURLOPT_QUICK_EXIT:
  ------------------
  |  Branch (796:3): [True: 2, False: 12.0k]
  ------------------
  797|      2|    s->quick_exit = enabled;
  798|      2|    break;
  799|  11.7k|  default:
  ------------------
  |  Branch (799:3): [True: 11.7k, False: 275]
  ------------------
  800|  11.7k|    return CURLE_UNKNOWN_OPTION;
  801|  12.0k|  }
  802|    275|  if((arg > ok) || (arg < 0))
  ------------------
  |  Branch (802:6): [True: 227, False: 48]
  |  Branch (802:20): [True: 0, False: 48]
  ------------------
  803|       |    /* reserve other values for future use */
  804|    227|    infof(data, "boolean setopt(%d) got unsupported argument %ld,"
  ------------------
  |  |  143|    227|  do {                               \
  |  |  144|    227|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  319|    227|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (319:4): [True: 227, False: 0]
  |  |  |  |  |  Branch (319:14): [True: 0, False: 227]
  |  |  |  |  ------------------
  |  |  |  |  320|    227|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (320:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  321|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (321:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|    227|      Curl_infof(data, __VA_ARGS__); \
  |  |  146|    227|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 227]
  |  |  ------------------
  ------------------
  805|    275|          " treated as %d", (int)option, arg, enabled);
  806|       |
  807|    275|  return CURLE_OK;
  808|  12.0k|}
setopt.c:setopt_long_net:
  823|  11.7k|{
  824|  11.7k|  CURLcode result = CURLE_OK;
  825|  11.7k|  struct UserDefined *s = &data->set;
  826|       |
  827|  11.7k|  switch(option) {
  828|     57|  case CURLOPT_DNS_CACHE_TIMEOUT:
  ------------------
  |  Branch (828:3): [True: 57, False: 11.6k]
  ------------------
  829|     57|    if(arg != -1)
  ------------------
  |  Branch (829:8): [True: 57, False: 0]
  ------------------
  830|     57|      return setopt_set_timeout_sec(&s->dns_cache_timeout_ms, arg);
  831|      0|    s->dns_cache_timeout_ms = -1;
  832|      0|    break;
  833|     69|  case CURLOPT_MAXCONNECTS:
  ------------------
  |  Branch (833:3): [True: 69, False: 11.6k]
  ------------------
  834|     69|    result = value_range(&arg, 0, 0, INT_MAX);
  835|     69|    if(!result)
  ------------------
  |  Branch (835:8): [True: 69, False: 0]
  ------------------
  836|     69|      s->maxconnects = arg ? (uint32_t)arg : DEFAULT_CONNCACHE_SIZE;
  ------------------
  |  |   38|      2|#define DEFAULT_CONNCACHE_SIZE 5
  ------------------
  |  Branch (836:24): [True: 67, False: 2]
  ------------------
  837|     69|    break;
  838|  4.73k|  case CURLOPT_SERVER_RESPONSE_TIMEOUT:
  ------------------
  |  Branch (838:3): [True: 4.73k, False: 7.01k]
  ------------------
  839|  4.73k|    return setopt_set_timeout_sec(&s->server_response_timeout, arg);
  840|     26|  case CURLOPT_SERVER_RESPONSE_TIMEOUT_MS:
  ------------------
  |  Branch (840:3): [True: 26, False: 11.7k]
  ------------------
  841|     26|    return setopt_set_timeout_ms(&s->server_response_timeout, arg);
  842|     32|  case CURLOPT_LOW_SPEED_LIMIT:
  ------------------
  |  Branch (842:3): [True: 32, False: 11.7k]
  ------------------
  843|     32|    if(arg < 0)
  ------------------
  |  Branch (843:8): [True: 0, False: 32]
  ------------------
  844|      0|      result = CURLE_BAD_FUNCTION_ARGUMENT;
  845|     32|    else
  846|     32|      s->low_speed_limit = arg;
  847|     32|    break;
  848|     50|  case CURLOPT_LOW_SPEED_TIME:
  ------------------
  |  Branch (848:3): [True: 50, False: 11.7k]
  ------------------
  849|     50|    result = value_range(&arg, 0, 0, USHRT_MAX);
  850|     50|    if(!result)
  ------------------
  |  Branch (850:8): [True: 50, False: 0]
  ------------------
  851|     50|      s->low_speed_time = (uint16_t)arg;
  852|     50|    break;
  853|     45|  case CURLOPT_PORT:
  ------------------
  |  Branch (853:3): [True: 45, False: 11.7k]
  ------------------
  854|     45|    if((arg < 0) || (arg > 65535))
  ------------------
  |  Branch (854:8): [True: 0, False: 45]
  |  Branch (854:21): [True: 35, False: 10]
  ------------------
  855|     35|      return CURLE_BAD_FUNCTION_ARGUMENT;
  856|     10|    s->use_port = (unsigned short)arg;
  857|     10|    break;
  858|      0|  case CURLOPT_TIMEOUT:
  ------------------
  |  Branch (858:3): [True: 0, False: 11.7k]
  ------------------
  859|      0|    return setopt_set_timeout_sec(&s->timeout, arg);
  860|  4.73k|  case CURLOPT_TIMEOUT_MS:
  ------------------
  |  Branch (860:3): [True: 4.73k, False: 7.01k]
  ------------------
  861|  4.73k|    return setopt_set_timeout_ms(&s->timeout, arg);
  862|     53|  case CURLOPT_CONNECTTIMEOUT:
  ------------------
  |  Branch (862:3): [True: 53, False: 11.6k]
  ------------------
  863|     53|    return setopt_set_timeout_sec(&s->connecttimeout, arg);
  864|     31|  case CURLOPT_CONNECTTIMEOUT_MS:
  ------------------
  |  Branch (864:3): [True: 31, False: 11.7k]
  ------------------
  865|     31|    return setopt_set_timeout_ms(&s->connecttimeout, arg);
  866|      0|#ifndef CURL_DISABLE_BINDLOCAL
  867|     36|  case CURLOPT_LOCALPORT:
  ------------------
  |  Branch (867:3): [True: 36, False: 11.7k]
  ------------------
  868|     36|    if((arg < 0) || (arg > 65535))
  ------------------
  |  Branch (868:8): [True: 0, False: 36]
  |  Branch (868:21): [True: 14, False: 22]
  ------------------
  869|     14|      return CURLE_BAD_FUNCTION_ARGUMENT;
  870|     22|    s->localport = curlx_sltous(arg);
  871|     22|    break;
  872|     57|  case CURLOPT_LOCALPORTRANGE:
  ------------------
  |  Branch (872:3): [True: 57, False: 11.6k]
  ------------------
  873|     57|    if((arg < 0) || (arg > 65535))
  ------------------
  |  Branch (873:8): [True: 0, False: 57]
  |  Branch (873:21): [True: 33, False: 24]
  ------------------
  874|     33|      return CURLE_BAD_FUNCTION_ARGUMENT;
  875|     24|    s->localportrange = curlx_sltous(arg);
  876|     24|    break;
  877|      0|#endif
  878|     66|  case CURLOPT_BUFFERSIZE:
  ------------------
  |  Branch (878:3): [True: 66, False: 11.6k]
  ------------------
  879|     66|    result = value_range(&arg, 0, READBUFFER_MIN, READBUFFER_MAX);
  ------------------
  |  |  121|     66|#define READBUFFER_MIN  1024
  ------------------
                  result = value_range(&arg, 0, READBUFFER_MIN, READBUFFER_MAX);
  ------------------
  |  |  120|     66|#define READBUFFER_MAX  CURL_MAX_READ_SIZE
  |  |  ------------------
  |  |  |  |  255|     66|#define CURL_MAX_READ_SIZE (10 * 1024 * 1024)
  |  |  ------------------
  ------------------
  880|     66|    if(!result)
  ------------------
  |  Branch (880:8): [True: 66, False: 0]
  ------------------
  881|     66|      s->buffer_size = (unsigned int)arg;
  882|     66|    break;
  883|     69|  case CURLOPT_UPLOAD_BUFFERSIZE:
  ------------------
  |  Branch (883:3): [True: 69, False: 11.6k]
  ------------------
  884|     69|    result = value_range(&arg, 0, UPLOADBUFFER_MIN, UPLOADBUFFER_MAX);
  ------------------
  |  |  133|     69|#define UPLOADBUFFER_MIN     CURL_MAX_WRITE_SIZE
  |  |  ------------------
  |  |  |  |  265|     69|#define CURL_MAX_WRITE_SIZE 16384
  |  |  ------------------
  ------------------
                  result = value_range(&arg, 0, UPLOADBUFFER_MIN, UPLOADBUFFER_MAX);
  ------------------
  |  |  132|     69|#define UPLOADBUFFER_MAX     (2 * 1024 * 1024)
  ------------------
  885|     69|    if(!result)
  ------------------
  |  Branch (885:8): [True: 69, False: 0]
  ------------------
  886|     69|      s->upload_buffer_size = (unsigned int)arg;
  887|     69|    break;
  888|     27|  case CURLOPT_MAXFILESIZE:
  ------------------
  |  Branch (888:3): [True: 27, False: 11.7k]
  ------------------
  889|     27|    if(arg < 0)
  ------------------
  |  Branch (889:8): [True: 0, False: 27]
  ------------------
  890|      0|      result = CURLE_BAD_FUNCTION_ARGUMENT;
  891|     27|    else
  892|     27|      s->max_filesize = arg;
  893|     27|    break;
  894|     33|  case CURLOPT_IPRESOLVE:
  ------------------
  |  Branch (894:3): [True: 33, False: 11.7k]
  ------------------
  895|     33|    if((arg < CURL_IPRESOLVE_WHATEVER) || (arg > CURL_IPRESOLVE_V6))
  ------------------
  |  | 2309|     33|#define CURL_IPRESOLVE_WHATEVER 0L /* default, uses addresses to all IP
  ------------------
                  if((arg < CURL_IPRESOLVE_WHATEVER) || (arg > CURL_IPRESOLVE_V6))
  ------------------
  |  | 2312|     33|#define CURL_IPRESOLVE_V6       2L /* uses only IPv6 addresses/connections */
  ------------------
  |  Branch (895:8): [True: 0, False: 33]
  |  Branch (895:43): [True: 31, False: 2]
  ------------------
  896|     31|      result = CURLE_BAD_FUNCTION_ARGUMENT;
  897|      2|    else
  898|      2|      s->ipver = (unsigned char)arg;
  899|     33|    break;
  900|     41|  case CURLOPT_CONNECT_ONLY:
  ------------------
  |  Branch (900:3): [True: 41, False: 11.7k]
  ------------------
  901|     41|    if(arg < 0 || arg > 2)
  ------------------
  |  Branch (901:8): [True: 0, False: 41]
  |  Branch (901:19): [True: 37, False: 4]
  ------------------
  902|     37|      result = CURLE_BAD_FUNCTION_ARGUMENT;
  903|      4|    else {
  904|      4|      s->connect_only = !!arg;
  905|      4|      s->connect_only_ws = (arg == 2);
  906|      4|    }
  907|     41|    break;
  908|      0|#ifdef USE_IPV6
  909|     48|  case CURLOPT_ADDRESS_SCOPE:
  ------------------
  |  Branch (909:3): [True: 48, False: 11.7k]
  ------------------
  910|     48|#if SIZEOF_LONG > 4
  911|     48|    if((unsigned long)arg > UINT_MAX)
  ------------------
  |  Branch (911:8): [True: 0, False: 48]
  ------------------
  912|      0|      result = CURLE_BAD_FUNCTION_ARGUMENT;
  913|     48|    else
  914|     48|#endif
  915|     48|    s->scope_id = (unsigned int)arg;
  916|     48|    break;
  917|      0|#endif
  918|     65|  case CURLOPT_TCP_KEEPIDLE:
  ------------------
  |  Branch (918:3): [True: 65, False: 11.6k]
  ------------------
  919|     65|    result = value_range(&arg, 0, 0, INT_MAX);
  920|     65|    if(!result)
  ------------------
  |  Branch (920:8): [True: 65, False: 0]
  ------------------
  921|     65|      s->tcp_keepidle = (int)arg;
  922|     65|    break;
  923|     59|  case CURLOPT_TCP_KEEPINTVL:
  ------------------
  |  Branch (923:3): [True: 59, False: 11.6k]
  ------------------
  924|     59|    result = value_range(&arg, 0, 0, INT_MAX);
  925|     59|    if(!result)
  ------------------
  |  Branch (925:8): [True: 59, False: 0]
  ------------------
  926|     59|      s->tcp_keepintvl = (int)arg;
  927|     59|    break;
  928|     56|  case CURLOPT_TCP_KEEPCNT:
  ------------------
  |  Branch (928:3): [True: 56, False: 11.6k]
  ------------------
  929|     56|    result = value_range(&arg, 0, 0, INT_MAX);
  930|     56|    if(!result)
  ------------------
  |  Branch (930:8): [True: 56, False: 0]
  ------------------
  931|     56|      s->tcp_keepcnt = (int)arg;
  932|     56|    break;
  933|     11|  case CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS:
  ------------------
  |  Branch (933:3): [True: 11, False: 11.7k]
  ------------------
  934|     11|    return setopt_set_timeout_ms(&s->happy_eyeballs_timeout, arg);
  935|     26|  case CURLOPT_UPKEEP_INTERVAL_MS:
  ------------------
  |  Branch (935:3): [True: 26, False: 11.7k]
  ------------------
  936|     26|    return setopt_set_timeout_ms(&s->upkeep_interval_ms, arg);
  937|     42|  case CURLOPT_MAXAGE_CONN:
  ------------------
  |  Branch (937:3): [True: 42, False: 11.7k]
  ------------------
  938|     42|    return setopt_set_timeout_sec(&s->conn_max_idle_ms, arg);
  939|     49|  case CURLOPT_MAXLIFETIME_CONN:
  ------------------
  |  Branch (939:3): [True: 49, False: 11.7k]
  ------------------
  940|     49|    return setopt_set_timeout_sec(&s->conn_max_age_ms, arg);
  941|      0|  case CURLOPT_DNS_USE_GLOBAL_CACHE:
  ------------------
  |  Branch (941:3): [True: 0, False: 11.7k]
  ------------------
  942|       |    /* deprecated */
  943|      0|    break;
  944|  1.23k|  default:
  ------------------
  |  Branch (944:3): [True: 1.23k, False: 10.5k]
  ------------------
  945|  1.23k|    return CURLE_UNKNOWN_OPTION;
  946|  11.7k|  }
  947|    671|  return result;
  948|  11.7k|}
setopt.c:setopt_set_timeout_sec:
   55|  4.93k|{
   56|  4.93k|  if(secs < 0)
  ------------------
  |  Branch (56:6): [True: 0, False: 4.93k]
  ------------------
   57|      0|    return CURLE_BAD_FUNCTION_ARGUMENT;
   58|  4.93k|#if LONG_MAX > (TIMEDIFF_T_MAX / 1000)
   59|  4.93k|  if(secs > (TIMEDIFF_T_MAX / 1000)) {
  ------------------
  |  |   33|  4.93k|#define TIMEDIFF_T_MAX CURL_OFF_T_MAX
  |  |  ------------------
  |  |  |  |  590|  4.93k|#  define CURL_OFF_T_MAX 0x7FFFFFFFFFFFFFFF
  |  |  ------------------
  ------------------
  |  Branch (59:6): [True: 0, False: 4.93k]
  ------------------
   60|      0|    *ptimeout_ms = TIMEDIFF_T_MAX;
  ------------------
  |  |   33|      0|#define TIMEDIFF_T_MAX CURL_OFF_T_MAX
  |  |  ------------------
  |  |  |  |  590|      0|#  define CURL_OFF_T_MAX 0x7FFFFFFFFFFFFFFF
  |  |  ------------------
  ------------------
   61|      0|    return CURLE_OK;
   62|      0|  }
   63|  4.93k|#endif
   64|  4.93k|  *ptimeout_ms = (timediff_t)secs * 1000;
   65|  4.93k|  return CURLE_OK;
   66|  4.93k|}
setopt.c:value_range:
  811|    785|{
  812|    785|  if(*value < below_error)
  ------------------
  |  Branch (812:6): [True: 0, False: 785]
  ------------------
  813|      0|    return CURLE_BAD_FUNCTION_ARGUMENT;
  814|    785|  else if(*value < min)
  ------------------
  |  Branch (814:11): [True: 28, False: 757]
  ------------------
  815|     28|    *value = min;
  816|    757|  else if(*value > max)
  ------------------
  |  Branch (816:11): [True: 325, False: 432]
  ------------------
  817|    325|    *value = max;
  818|    785|  return CURLE_OK;
  819|    785|}
setopt.c:setopt_set_timeout_ms:
   69|  4.86k|{
   70|  4.86k|  if(ms < 0)
  ------------------
  |  Branch (70:6): [True: 0, False: 4.86k]
  ------------------
   71|      0|    return CURLE_BAD_FUNCTION_ARGUMENT;
   72|       |#if LONG_MAX > TIMEDIFF_T_MAX
   73|       |  if(ms > TIMEDIFF_T_MAX) {
   74|       |    *ptimeout_ms = TIMEDIFF_T_MAX;
   75|       |    return CURLE_OK;
   76|       |  }
   77|       |#endif
   78|  4.86k|  *ptimeout_ms = (timediff_t)ms;
   79|  4.86k|  return CURLE_OK;
   80|  4.86k|}
setopt.c:setopt_long_http:
 1060|  1.23k|{
 1061|  1.23k|#ifndef CURL_DISABLE_HTTP
 1062|  1.23k|  CURLcode result = CURLE_OK;
 1063|  1.23k|  struct UserDefined *s = &data->set;
 1064|       |
 1065|  1.23k|  switch(option) {
 1066|     31|  case CURLOPT_FOLLOWLOCATION:
  ------------------
  |  Branch (1066:3): [True: 31, False: 1.20k]
  ------------------
 1067|     31|    if((unsigned long)arg > 3)
  ------------------
  |  Branch (1067:8): [True: 29, False: 2]
  ------------------
 1068|     29|      result = CURLE_BAD_FUNCTION_ARGUMENT;
 1069|      2|    else
 1070|      2|      s->http_follow_mode = (unsigned char)arg;
 1071|     31|    break;
 1072|     54|  case CURLOPT_MAXREDIRS:
  ------------------
  |  Branch (1072:3): [True: 54, False: 1.17k]
  ------------------
 1073|     54|    result = value_range(&arg, -1, -1, 0x7fff);
 1074|     54|    if(!result)
  ------------------
  |  Branch (1074:8): [True: 54, False: 0]
  ------------------
 1075|     54|      s->maxredirs = (short)arg;
 1076|     54|    break;
 1077|     31|  case CURLOPT_POSTREDIR:
  ------------------
  |  Branch (1077:3): [True: 31, False: 1.20k]
  ------------------
 1078|     31|    if(arg < CURL_REDIR_GET_ALL)
  ------------------
  |  | 2409|     31|#define CURL_REDIR_GET_ALL  0L
  ------------------
  |  Branch (1078:8): [True: 0, False: 31]
  ------------------
 1079|      0|      result = CURLE_BAD_FUNCTION_ARGUMENT;
 1080|     31|    else {
 1081|     31|      s->post301 = !!(arg & CURL_REDIR_POST_301);
  ------------------
  |  | 2410|     31|#define CURL_REDIR_POST_301 1L
  ------------------
 1082|     31|      s->post302 = !!(arg & CURL_REDIR_POST_302);
  ------------------
  |  | 2411|     31|#define CURL_REDIR_POST_302 2L
  ------------------
 1083|     31|      s->post303 = !!(arg & CURL_REDIR_POST_303);
  ------------------
  |  | 2412|     31|#define CURL_REDIR_POST_303 4L
  ------------------
 1084|     31|    }
 1085|     31|    break;
 1086|      2|  case CURLOPT_HEADEROPT:
  ------------------
  |  Branch (1086:3): [True: 2, False: 1.23k]
  ------------------
 1087|      2|    s->sep_headers = !!(arg & CURLHEADER_SEPARATE);
  ------------------
  |  | 1031|      2|#define CURLHEADER_SEPARATE (1L << 0)
  ------------------
 1088|      2|    break;
 1089|     35|  case CURLOPT_HTTPAUTH:
  ------------------
  |  Branch (1089:3): [True: 35, False: 1.19k]
  ------------------
 1090|     35|    return httpauth(data, FALSE, (unsigned long)arg);
  ------------------
  |  | 1054|     35|#define FALSE false
  ------------------
 1091|     24|  case CURLOPT_HTTP_VERSION:
  ------------------
  |  Branch (1091:3): [True: 24, False: 1.20k]
  ------------------
 1092|     24|    return setopt_HTTP_VERSION(data, arg);
 1093|     54|  case CURLOPT_EXPECT_100_TIMEOUT_MS:
  ------------------
  |  Branch (1093:3): [True: 54, False: 1.17k]
  ------------------
 1094|     54|    result = value_range(&arg, 0, 0, 0xffff);
 1095|     54|    if(!result)
  ------------------
  |  Branch (1095:8): [True: 54, False: 0]
  ------------------
 1096|     54|      s->expect_100_timeout = (unsigned short)arg;
 1097|     54|    break;
 1098|     35|  case CURLOPT_STREAM_WEIGHT:
  ------------------
  |  Branch (1098:3): [True: 35, False: 1.19k]
  ------------------
 1099|     35|#if defined(USE_HTTP2) || defined(USE_HTTP3)
 1100|     35|    if((arg >= 1) && (arg <= 256))
  ------------------
  |  Branch (1100:8): [True: 34, False: 1]
  |  Branch (1100:22): [True: 9, False: 25]
  ------------------
 1101|      9|      s->priority.weight = (int)arg;
 1102|     35|    break;
 1103|       |#else
 1104|       |    result = CURLE_NOT_BUILT_IN;
 1105|       |    break;
 1106|       |#endif
 1107|    966|  default:
  ------------------
  |  Branch (1107:3): [True: 966, False: 266]
  ------------------
 1108|    966|    return CURLE_UNKNOWN_OPTION;
 1109|  1.23k|  }
 1110|    207|  return result;
 1111|       |#else
 1112|       |  (void)data;
 1113|       |  (void)option;
 1114|       |  (void)arg;
 1115|       |  return CURLE_UNKNOWN_OPTION;
 1116|       |#endif
 1117|  1.23k|}
setopt.c:httpauth:
  239|     68|{
  240|     68|  if(auth != CURLAUTH_NONE) {
  ------------------
  |  |  830|     68|#define CURLAUTH_NONE         ((unsigned long)0)
  ------------------
  |  Branch (240:6): [True: 66, False: 2]
  ------------------
  241|     66|    int bitcheck = 0;
  242|     66|    bool authbits = FALSE;
  ------------------
  |  | 1054|     66|#define FALSE false
  ------------------
  243|     66|    if(auth & CURLAUTH_DIGEST_IE) {
  ------------------
  |  |  839|     66|#define CURLAUTH_DIGEST_IE    (((unsigned long)1) << 4)
  ------------------
  |  Branch (243:8): [True: 28, False: 38]
  ------------------
  244|     28|      auth |= CURLAUTH_DIGEST; /* set standard digest bit */
  ------------------
  |  |  832|     28|#define CURLAUTH_DIGEST       (((unsigned long)1) << 1)
  ------------------
  245|     28|      auth &= ~CURLAUTH_DIGEST_IE; /* drop the legacy bit */
  ------------------
  |  |  839|     28|#define CURLAUTH_DIGEST_IE    (((unsigned long)1) << 4)
  ------------------
  246|     28|    }
  247|       |
  248|       |    /* switch off bits we cannot support */
  249|     66|#ifndef USE_NTLM
  250|     66|    auth &= ~CURLAUTH_NTLM; /* no NTLM support */
  ------------------
  |  |  838|     66|#define CURLAUTH_NTLM         (((unsigned long)1) << 3)
  ------------------
  251|     66|#endif
  252|     66|#ifndef USE_SPNEGO
  253|     66|    auth &= ~CURLAUTH_NEGOTIATE; /* no Negotiate (SPNEGO) auth without GSS-API
  ------------------
  |  |  833|     66|#define CURLAUTH_NEGOTIATE    (((unsigned long)1) << 2)
  ------------------
  254|       |                                    or SSPI */
  255|     66|#endif
  256|       |
  257|       |    /* check if any auth bit lower than CURLAUTH_ONLY is still set */
  258|    439|    while(bitcheck < 31) {
  ------------------
  |  Branch (258:11): [True: 437, False: 2]
  ------------------
  259|    437|      if(auth & (1UL << bitcheck++)) {
  ------------------
  |  Branch (259:10): [True: 64, False: 373]
  ------------------
  260|     64|        authbits = TRUE;
  ------------------
  |  | 1051|     64|#define TRUE true
  ------------------
  261|     64|        break;
  262|     64|      }
  263|    437|    }
  264|     66|    if(!authbits)
  ------------------
  |  Branch (264:8): [True: 2, False: 64]
  ------------------
  265|      2|      return CURLE_NOT_BUILT_IN; /* no supported types left! */
  266|     66|  }
  267|     66|  if(proxy)
  ------------------
  |  Branch (267:6): [True: 32, False: 34]
  ------------------
  268|     32|    data->set.proxyauth = (uint32_t)auth;
  269|     34|  else
  270|     34|    data->set.httpauth = (uint32_t)auth;
  271|     66|  return CURLE_OK;
  272|     68|}
setopt.c:setopt_HTTP_VERSION:
  277|     24|{
  278|       |  /*
  279|       |   * This sets a requested HTTP version to be used. The value is one of
  280|       |   * the listed enums in curl/curl.h.
  281|       |   */
  282|     24|  switch(arg) {
  283|      1|  case CURL_HTTP_VERSION_NONE:
  ------------------
  |  | 2318|      1|#define CURL_HTTP_VERSION_NONE  0L /* setting this means we do not care, and
  ------------------
  |  Branch (283:3): [True: 1, False: 23]
  ------------------
  284|       |    /* accepted */
  285|      1|    break;
  286|      0|  case CURL_HTTP_VERSION_1_0:
  ------------------
  |  | 2321|      0|#define CURL_HTTP_VERSION_1_0   1L /* please use HTTP 1.0 in the request */
  ------------------
  |  Branch (286:3): [True: 0, False: 24]
  ------------------
  287|      0|  case CURL_HTTP_VERSION_1_1:
  ------------------
  |  | 2322|      0|#define CURL_HTTP_VERSION_1_1   2L /* please use HTTP 1.1 in the request */
  ------------------
  |  Branch (287:3): [True: 0, False: 24]
  ------------------
  288|       |    /* accepted */
  289|      0|    break;
  290|      0|#ifdef USE_HTTP2
  291|      0|  case CURL_HTTP_VERSION_2_0:
  ------------------
  |  | 2323|      0|#define CURL_HTTP_VERSION_2_0   3L /* please use HTTP 2 in the request */
  ------------------
  |  Branch (291:3): [True: 0, False: 24]
  ------------------
  292|      0|  case CURL_HTTP_VERSION_2TLS:
  ------------------
  |  | 2324|      0|#define CURL_HTTP_VERSION_2TLS  4L /* use version 2 for HTTPS, version 1.1 for
  ------------------
  |  Branch (292:3): [True: 0, False: 24]
  ------------------
  293|      2|  case CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE:
  ------------------
  |  | 2326|      2|#define CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE 5L /* please use HTTP 2 without
  ------------------
  |  Branch (293:3): [True: 2, False: 22]
  ------------------
  294|       |    /* accepted */
  295|      2|    break;
  296|      0|#endif
  297|       |#ifdef USE_HTTP3
  298|       |  case CURL_HTTP_VERSION_3:
  299|       |  case CURL_HTTP_VERSION_3ONLY:
  300|       |    /* accepted */
  301|       |    break;
  302|       |#endif
  303|     21|  default:
  ------------------
  |  Branch (303:3): [True: 21, False: 3]
  ------------------
  304|       |    /* not accepted */
  305|     21|    if(arg < CURL_HTTP_VERSION_NONE)
  ------------------
  |  | 2318|     21|#define CURL_HTTP_VERSION_NONE  0L /* setting this means we do not care, and
  ------------------
  |  Branch (305:8): [True: 0, False: 21]
  ------------------
  306|      0|      return CURLE_BAD_FUNCTION_ARGUMENT;
  307|     21|    return CURLE_UNSUPPORTED_PROTOCOL;
  308|     24|  }
  309|      3|  data->set.httpwant = (unsigned char)arg;
  310|      3|  return CURLE_OK;
  311|     24|}
setopt.c:setopt_long_proxy:
 1015|    966|{
 1016|    966|  struct UserDefined *s = &data->set;
 1017|       |
 1018|    966|  switch(option) {
 1019|     66|  case CURLOPT_PROXYPORT:
  ------------------
  |  Branch (1019:3): [True: 66, False: 900]
  ------------------
 1020|     66|    if((arg < 0) || (arg > UINT16_MAX))
  ------------------
  |  Branch (1020:8): [True: 0, False: 66]
  |  Branch (1020:21): [True: 32, False: 34]
  ------------------
 1021|     32|      return CURLE_BAD_FUNCTION_ARGUMENT;
 1022|     34|    if(arg != s->proxyport)
  ------------------
  |  Branch (1022:8): [True: 33, False: 1]
  ------------------
 1023|     33|      changeproxy(data);
 1024|     34|    s->proxyport = (uint16_t)arg;
 1025|     34|    break;
 1026|     33|  case CURLOPT_PROXYAUTH:
  ------------------
  |  Branch (1026:3): [True: 33, False: 933]
  ------------------
 1027|     33|    return httpauth(data, TRUE, (unsigned long)arg);
  ------------------
  |  | 1051|     33|#define TRUE true
  ------------------
 1028|     43|  case CURLOPT_PROXYTYPE:
  ------------------
  |  Branch (1028:3): [True: 43, False: 923]
  ------------------
 1029|     43|    if((arg < CURLPROXY_HTTP) || (arg > CURLPROXY_HTTPS3))
  ------------------
  |  |  790|     43|#define CURLPROXY_HTTP            0L /* added in 7.10, new in 7.19.4 default is
  ------------------
                  if((arg < CURLPROXY_HTTP) || (arg > CURLPROXY_HTTPS3))
  ------------------
  |  |  805|     43|#define CURLPROXY_HTTPS3          8L /* HTTPS and attempt HTTP/3
  ------------------
  |  Branch (1029:8): [True: 0, False: 43]
  |  Branch (1029:34): [True: 37, False: 6]
  ------------------
 1030|     37|      return CURLE_BAD_FUNCTION_ARGUMENT;
 1031|      6|#ifndef USE_PROXY_HTTP3
 1032|      6|    if(arg == CURLPROXY_HTTPS3)
  ------------------
  |  |  805|      6|#define CURLPROXY_HTTPS3          8L /* HTTPS and attempt HTTP/3
  ------------------
  |  Branch (1032:8): [True: 1, False: 5]
  ------------------
 1033|      1|      return CURLE_NOT_BUILT_IN;
 1034|      5|#endif
 1035|      5|    s->proxytype = (unsigned char)arg;
 1036|      5|    break;
 1037|     27|  case CURLOPT_SOCKS5_AUTH:
  ------------------
  |  Branch (1037:3): [True: 27, False: 939]
  ------------------
 1038|     27|    if(arg & ~(CURLAUTH_BASIC | CURLAUTH_GSSAPI))
  ------------------
  |  |  831|     27|#define CURLAUTH_BASIC        (((unsigned long)1) << 0)
  ------------------
                  if(arg & ~(CURLAUTH_BASIC | CURLAUTH_GSSAPI))
  ------------------
  |  |  837|     27|#define CURLAUTH_GSSAPI CURLAUTH_NEGOTIATE
  |  |  ------------------
  |  |  |  |  833|     27|#define CURLAUTH_NEGOTIATE    (((unsigned long)1) << 2)
  |  |  ------------------
  ------------------
  |  Branch (1038:8): [True: 25, False: 2]
  ------------------
 1039|     25|      return CURLE_NOT_BUILT_IN;
 1040|      2|    s->socks5auth = (unsigned char)arg;
 1041|      2|    break;
 1042|    797|  default:
  ------------------
  |  Branch (1042:3): [True: 797, False: 169]
  ------------------
 1043|    797|    return CURLE_UNKNOWN_OPTION;
 1044|    966|  }
 1045|     41|  return CURLE_OK;
 1046|    966|}
setopt.c:changeproxy:
 1008|     49|{
 1009|     49|  Curl_auth_digest_cleanup(&data->state.proxydigest);
 1010|     49|  memset(&data->state.authproxy, 0, sizeof(data->state.authproxy));
 1011|     49|}
setopt.c:setopt_long_ssl:
  952|    797|{
  953|    797|#ifdef USE_SSL
  954|    797|  CURLcode result = CURLE_OK;
  955|    797|  struct UserDefined *s = &data->set;
  956|    797|  switch(option) {
  957|     63|  case CURLOPT_CA_CACHE_TIMEOUT:
  ------------------
  |  Branch (957:3): [True: 63, False: 734]
  ------------------
  958|     63|    if(Curl_ssl_supports(data, SSLSUPP_CA_CACHE)) {
  ------------------
  |  |   43|     63|#define SSLSUPP_CA_CACHE     (1 << 8)
  ------------------
  |  Branch (958:8): [True: 63, False: 0]
  ------------------
  959|     63|      result = value_range(&arg, -1, -1, INT_MAX);
  960|     63|      if(!result)
  ------------------
  |  Branch (960:10): [True: 63, False: 0]
  ------------------
  961|     63|        s->general_ssl.ca_cache_timeout = (int)arg;
  962|     63|    }
  963|      0|    else
  964|      0|      result = CURLE_NOT_BUILT_IN;
  965|     63|    break;
  966|     22|  case CURLOPT_SSLVERSION:
  ------------------
  |  Branch (966:3): [True: 22, False: 775]
  ------------------
  967|     22|#ifndef CURL_DISABLE_PROXY
  968|     42|  case CURLOPT_PROXY_SSLVERSION:
  ------------------
  |  Branch (968:3): [True: 20, False: 777]
  ------------------
  969|     42|#endif
  970|     42|    return Curl_setopt_SSLVERSION(data, option, arg);
  971|      1|  case CURLOPT_SSL_FALSESTART:
  ------------------
  |  Branch (971:3): [True: 1, False: 796]
  ------------------
  972|      1|    result = CURLE_NOT_BUILT_IN;
  973|      1|    break;
  974|     44|  case CURLOPT_USE_SSL:
  ------------------
  |  Branch (974:3): [True: 44, False: 753]
  ------------------
  975|     44|    if((arg < CURLUSESSL_NONE) || (arg >= CURLUSESSL_LAST))
  ------------------
  |  |  924|     44|#define CURLUSESSL_NONE    0L /* do not attempt to use SSL */
  ------------------
  |  Branch (975:8): [True: 0, False: 44]
  |  Branch (975:35): [True: 40, False: 4]
  ------------------
  976|     40|      result = CURLE_BAD_FUNCTION_ARGUMENT;
  977|      4|    else
  978|      4|      s->use_ssl = (unsigned char)arg;
  979|     44|    break;
  980|      4|  case CURLOPT_SSL_OPTIONS:
  ------------------
  |  Branch (980:3): [True: 4, False: 793]
  ------------------
  981|      4|    s->ssl.primary.ssl_options = (unsigned char)(arg & 0xff);
  982|      4|    break;
  983|      0|#ifndef CURL_DISABLE_PROXY
  984|      3|  case CURLOPT_PROXY_SSL_OPTIONS:
  ------------------
  |  Branch (984:3): [True: 3, False: 794]
  ------------------
  985|      3|    s->proxy_ssl.primary.ssl_options = (unsigned char)(arg & 0xff);
  986|      3|    break;
  987|      0|#endif
  988|      0|  case CURLOPT_SSL_ENABLE_NPN:
  ------------------
  |  Branch (988:3): [True: 0, False: 797]
  ------------------
  989|      0|    break;
  990|      2|  case CURLOPT_SSLENGINE_DEFAULT:
  ------------------
  |  Branch (990:3): [True: 2, False: 795]
  ------------------
  991|      2|    curlx_safefree(s->str[STRING_SSL_ENGINE]);
  ------------------
  |  | 1332|      2|  do {                      \
  |  | 1333|      2|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1488|      2|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|      2|    (ptr) = NULL;           \
  |  | 1335|      2|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 2]
  |  |  ------------------
  ------------------
  992|      2|    result = Curl_ssl_set_engine_default(data);
  993|      2|    break;
  994|    638|  default:
  ------------------
  |  Branch (994:3): [True: 638, False: 159]
  ------------------
  995|    638|    return CURLE_UNKNOWN_OPTION;
  996|    797|  }
  997|    117|  return result;
  998|       |#else  /* USE_SSL */
  999|       |  (void)data;
 1000|       |  (void)option;
 1001|       |  (void)arg;
 1002|       |  return CURLE_UNKNOWN_OPTION;
 1003|       |#endif /* !USE_SSL */
 1004|    797|}
setopt.c:setopt_long_proto:
 1121|    638|{
 1122|    638|  CURLcode result = CURLE_OK;
 1123|    638|  struct UserDefined *s = &data->set;
 1124|       |
 1125|    638|  switch(option) {
 1126|      0|#ifndef CURL_DISABLE_TFTP
 1127|     61|  case CURLOPT_TFTP_BLKSIZE:
  ------------------
  |  Branch (1127:3): [True: 61, False: 577]
  ------------------
 1128|     61|    result = value_range(&arg, 0, TFTP_BLKSIZE_MIN, TFTP_BLKSIZE_MAX);
  ------------------
  |  |   30|     61|#define TFTP_BLKSIZE_MIN 8
  ------------------
                  result = value_range(&arg, 0, TFTP_BLKSIZE_MIN, TFTP_BLKSIZE_MAX);
  ------------------
  |  |   31|     61|#define TFTP_BLKSIZE_MAX 65464
  ------------------
 1129|     61|    if(!result)
  ------------------
  |  Branch (1129:8): [True: 61, False: 0]
  ------------------
 1130|     61|      s->tftp_blksize = (unsigned short)arg;
 1131|     61|    break;
 1132|      0|#endif
 1133|      0|#ifndef CURL_DISABLE_NETRC
 1134|     38|  case CURLOPT_NETRC:
  ------------------
  |  Branch (1134:3): [True: 38, False: 600]
  ------------------
 1135|     38|    if((arg < CURL_NETRC_IGNORED) || (arg >= CURL_NETRC_LAST))
  ------------------
  |  | 2361|     38|#define CURL_NETRC_IGNORED  0L /* The .netrc is never read.
  ------------------
  |  Branch (1135:8): [True: 0, False: 38]
  |  Branch (1135:38): [True: 34, False: 4]
  ------------------
 1136|     34|      result = CURLE_BAD_FUNCTION_ARGUMENT;
 1137|      4|    else
 1138|      4|      s->use_netrc = (unsigned char)arg;
 1139|     38|    break;
 1140|      0|#endif
 1141|      0|#ifndef CURL_DISABLE_FTP
 1142|     40|  case CURLOPT_FTP_FILEMETHOD:
  ------------------
  |  Branch (1142:3): [True: 40, False: 598]
  ------------------
 1143|     40|    if((arg < CURLFTPMETHOD_DEFAULT) || (arg >= CURLFTPMETHOD_LAST))
  ------------------
  |  | 1019|     40|#define CURLFTPMETHOD_DEFAULT   0L /* let libcurl pick */
  ------------------
  |  Branch (1143:8): [True: 0, False: 40]
  |  Branch (1143:41): [True: 38, False: 2]
  ------------------
 1144|     38|      result = CURLE_BAD_FUNCTION_ARGUMENT;
 1145|      2|    else
 1146|      2|      s->ftp_filemethod = (unsigned char)arg;
 1147|     40|    break;
 1148|     46|  case CURLOPT_FTP_SSL_CCC:
  ------------------
  |  Branch (1148:3): [True: 46, False: 592]
  ------------------
 1149|     46|    if((arg < CURLFTPSSL_CCC_NONE) || (arg >= CURLFTPSSL_CCC_LAST))
  ------------------
  |  |  989|     46|#define CURLFTPSSL_CCC_NONE    0L /* do not send CCC */
  ------------------
  |  Branch (1149:8): [True: 0, False: 46]
  |  Branch (1149:39): [True: 42, False: 4]
  ------------------
 1150|     42|      result = CURLE_BAD_FUNCTION_ARGUMENT;
 1151|      4|    else
 1152|      4|      s->ftp_ccc = (unsigned char)arg;
 1153|     46|    break;
 1154|     43|  case CURLOPT_FTPSSLAUTH:
  ------------------
  |  Branch (1154:3): [True: 43, False: 595]
  ------------------
 1155|     43|    if((arg < CURLFTPAUTH_DEFAULT) || (arg >= CURLFTPAUTH_LAST))
  ------------------
  |  |  998|     43|#define CURLFTPAUTH_DEFAULT 0L /* let libcurl decide */
  ------------------
  |  Branch (1155:8): [True: 0, False: 43]
  |  Branch (1155:39): [True: 38, False: 5]
  ------------------
 1156|     38|      result = CURLE_BAD_FUNCTION_ARGUMENT;
 1157|      5|    else
 1158|      5|      s->ftpsslauth = (unsigned char)arg;
 1159|     43|    break;
 1160|     31|  case CURLOPT_ACCEPTTIMEOUT_MS:
  ------------------
  |  Branch (1160:3): [True: 31, False: 607]
  ------------------
 1161|     31|    return setopt_set_timeout_ms(&s->accepttimeout, arg);
 1162|      0|#endif
 1163|      0|#if !defined(CURL_DISABLE_FTP) || defined(USE_SSH)
 1164|     29|  case CURLOPT_FTP_CREATE_MISSING_DIRS:
  ------------------
  |  Branch (1164:3): [True: 29, False: 609]
  ------------------
 1165|     29|    if((arg < CURLFTP_CREATE_DIR_NONE) || (arg > CURLFTP_CREATE_DIR_RETRY))
  ------------------
  |  | 1007|     29|#define CURLFTP_CREATE_DIR_NONE  0L /* do NOT create missing dirs! */
  ------------------
                  if((arg < CURLFTP_CREATE_DIR_NONE) || (arg > CURLFTP_CREATE_DIR_RETRY))
  ------------------
  |  | 1011|     29|#define CURLFTP_CREATE_DIR_RETRY 2L /* (FTP only) if CWD fails, try MKD and
  ------------------
  |  Branch (1165:8): [True: 0, False: 29]
  |  Branch (1165:43): [True: 27, False: 2]
  ------------------
 1166|     27|      result = CURLE_BAD_FUNCTION_ARGUMENT;
 1167|      2|    else
 1168|      2|      s->ftp_create_missing_dirs = (unsigned char)arg;
 1169|     29|    break;
 1170|     48|  case CURLOPT_NEW_FILE_PERMS:
  ------------------
  |  Branch (1170:3): [True: 48, False: 590]
  ------------------
 1171|     48|    if((arg < 0) || (arg > 0777))
  ------------------
  |  Branch (1171:8): [True: 0, False: 48]
  |  Branch (1171:21): [True: 40, False: 8]
  ------------------
 1172|     40|      result = CURLE_BAD_FUNCTION_ARGUMENT;
 1173|      8|    else
 1174|      8|      s->new_file_perms = (unsigned int)arg;
 1175|     48|    break;
 1176|      0|#endif
 1177|      0|#ifndef CURL_DISABLE_RTSP
 1178|     36|  case CURLOPT_RTSP_REQUEST:
  ------------------
  |  Branch (1178:3): [True: 36, False: 602]
  ------------------
 1179|     36|    return setopt_RTSP_REQUEST(data, arg);
 1180|     61|  case CURLOPT_RTSP_CLIENT_CSEQ:
  ------------------
  |  Branch (1180:3): [True: 61, False: 577]
  ------------------
 1181|     61|    result = value_range(&arg, 0, 0, INT_MAX);
 1182|     61|    if(!result)
  ------------------
  |  Branch (1182:8): [True: 61, False: 0]
  ------------------
 1183|     61|      data->state.rtsp_next_client_CSeq = (uint32_t)arg;
 1184|     61|    break;
 1185|     58|  case CURLOPT_RTSP_SERVER_CSEQ:
  ------------------
  |  Branch (1185:3): [True: 58, False: 580]
  ------------------
 1186|     58|    result = value_range(&arg, 0, 0, INT_MAX);
 1187|     58|    if(!result)
  ------------------
  |  Branch (1187:8): [True: 58, False: 0]
  ------------------
 1188|     58|      data->state.rtsp_next_server_CSeq = (uint32_t)arg;
 1189|     58|    break;
 1190|      0|#endif
 1191|       |#ifdef USE_SSH
 1192|       |  case CURLOPT_SSH_AUTH_TYPES:
 1193|       |    s->ssh_auth_types = (uint32_t)arg;
 1194|       |    break;
 1195|       |  case CURLOPT_NEW_DIRECTORY_PERMS:
 1196|       |    if((arg < 0) || (arg > 0777))
 1197|       |      result = CURLE_BAD_FUNCTION_ARGUMENT;
 1198|       |    else
 1199|       |      s->new_directory_perms = (unsigned int)arg;
 1200|       |    break;
 1201|       |#endif
 1202|      0|  case CURLOPT_PROTOCOLS:
  ------------------
  |  Branch (1202:3): [True: 0, False: 638]
  ------------------
 1203|      0|    s->allowed_protocols = (curl_prot_t)arg;
 1204|      0|    break;
 1205|      0|  case CURLOPT_REDIR_PROTOCOLS:
  ------------------
  |  Branch (1205:3): [True: 0, False: 638]
  ------------------
 1206|      0|    s->redir_protocols = (curl_prot_t)arg;
 1207|      0|    break;
 1208|      0|#ifndef CURL_DISABLE_WEBSOCKETS
 1209|      3|  case CURLOPT_WS_OPTIONS:
  ------------------
  |  Branch (1209:3): [True: 3, False: 635]
  ------------------
 1210|      3|    s->ws_raw_mode = (bool)(arg & CURLWS_RAW_MODE);
  ------------------
  |  |   89|      3|#define CURLWS_RAW_MODE   (1L << 0)
  ------------------
 1211|      3|    s->ws_no_auto_pong = (bool)(arg & CURLWS_NOAUTOPONG);
  ------------------
  |  |   90|      3|#define CURLWS_NOAUTOPONG (1L << 1)
  ------------------
 1212|      3|    break;
 1213|      0|#endif
 1214|    144|  default:
  ------------------
  |  Branch (1214:3): [True: 144, False: 494]
  ------------------
 1215|    144|    return CURLE_UNKNOWN_OPTION;
 1216|    638|  }
 1217|    427|  return result;
 1218|    638|}
setopt.c:setopt_RTSP_REQUEST:
  353|     36|{
  354|       |  /*
  355|       |   * Set the RTSP request method (OPTIONS, SETUP, PLAY, etc...) Would this be
  356|       |   * better if the RTSPREQ_* were moved into here?
  357|       |   */
  358|     36|  Curl_RtspReq rtspreq = RTSPREQ_NONE;
  359|     36|  switch(arg) {
  360|      1|  case CURL_RTSPREQ_OPTIONS:
  ------------------
  |  | 2347|      1|#define CURL_RTSPREQ_OPTIONS       1L
  ------------------
  |  Branch (360:3): [True: 1, False: 35]
  ------------------
  361|      1|    rtspreq = RTSPREQ_OPTIONS;
  362|      1|    break;
  363|      0|  case CURL_RTSPREQ_DESCRIBE:
  ------------------
  |  | 2348|      0|#define CURL_RTSPREQ_DESCRIBE      2L
  ------------------
  |  Branch (363:3): [True: 0, False: 36]
  ------------------
  364|      0|    rtspreq = RTSPREQ_DESCRIBE;
  365|      0|    break;
  366|      0|  case CURL_RTSPREQ_ANNOUNCE:
  ------------------
  |  | 2349|      0|#define CURL_RTSPREQ_ANNOUNCE      3L
  ------------------
  |  Branch (366:3): [True: 0, False: 36]
  ------------------
  367|      0|    rtspreq = RTSPREQ_ANNOUNCE;
  368|      0|    break;
  369|      2|  case CURL_RTSPREQ_SETUP:
  ------------------
  |  | 2350|      2|#define CURL_RTSPREQ_SETUP         4L
  ------------------
  |  Branch (369:3): [True: 2, False: 34]
  ------------------
  370|      2|    rtspreq = RTSPREQ_SETUP;
  371|      2|    break;
  372|      0|  case CURL_RTSPREQ_PLAY:
  ------------------
  |  | 2351|      0|#define CURL_RTSPREQ_PLAY          5L
  ------------------
  |  Branch (372:3): [True: 0, False: 36]
  ------------------
  373|      0|    rtspreq = RTSPREQ_PLAY;
  374|      0|    break;
  375|      1|  case CURL_RTSPREQ_PAUSE:
  ------------------
  |  | 2352|      1|#define CURL_RTSPREQ_PAUSE         6L
  ------------------
  |  Branch (375:3): [True: 1, False: 35]
  ------------------
  376|      1|    rtspreq = RTSPREQ_PAUSE;
  377|      1|    break;
  378|      0|  case CURL_RTSPREQ_TEARDOWN:
  ------------------
  |  | 2353|      0|#define CURL_RTSPREQ_TEARDOWN      7L
  ------------------
  |  Branch (378:3): [True: 0, False: 36]
  ------------------
  379|      0|    rtspreq = RTSPREQ_TEARDOWN;
  380|      0|    break;
  381|      0|  case CURL_RTSPREQ_GET_PARAMETER:
  ------------------
  |  | 2354|      0|#define CURL_RTSPREQ_GET_PARAMETER 8L
  ------------------
  |  Branch (381:3): [True: 0, False: 36]
  ------------------
  382|      0|    rtspreq = RTSPREQ_GET_PARAMETER;
  383|      0|    break;
  384|      1|  case CURL_RTSPREQ_SET_PARAMETER:
  ------------------
  |  | 2355|      1|#define CURL_RTSPREQ_SET_PARAMETER 9L
  ------------------
  |  Branch (384:3): [True: 1, False: 35]
  ------------------
  385|      1|    rtspreq = RTSPREQ_SET_PARAMETER;
  386|      1|    break;
  387|      1|  case CURL_RTSPREQ_RECORD:
  ------------------
  |  | 2356|      1|#define CURL_RTSPREQ_RECORD        10L
  ------------------
  |  Branch (387:3): [True: 1, False: 35]
  ------------------
  388|      1|    rtspreq = RTSPREQ_RECORD;
  389|      1|    break;
  390|      0|  case CURL_RTSPREQ_RECEIVE:
  ------------------
  |  | 2357|      0|#define CURL_RTSPREQ_RECEIVE       11L
  ------------------
  |  Branch (390:3): [True: 0, False: 36]
  ------------------
  391|      0|    rtspreq = RTSPREQ_RECEIVE;
  392|      0|    break;
  393|     30|  default:
  ------------------
  |  Branch (393:3): [True: 30, False: 6]
  ------------------
  394|     30|    return CURLE_BAD_FUNCTION_ARGUMENT;
  395|     36|  }
  396|       |
  397|      6|  data->set.rtspreq = rtspreq;
  398|      6|  return CURLE_OK;
  399|     36|}
setopt.c:setopt_long_misc:
 1222|    144|{
 1223|    144|  struct UserDefined *s = &data->set;
 1224|       |
 1225|    144|  switch(option) {
 1226|     46|  case CURLOPT_TIMECONDITION:
  ------------------
  |  Branch (1226:3): [True: 46, False: 98]
  ------------------
 1227|     46|    if((arg < CURL_TIMECOND_NONE) || (arg >= CURL_TIMECOND_LAST))
  ------------------
  |  | 2416|     46|#define CURL_TIMECOND_NONE         0L
  ------------------
  |  Branch (1227:8): [True: 0, False: 46]
  |  Branch (1227:38): [True: 40, False: 6]
  ------------------
 1228|     40|      return CURLE_BAD_FUNCTION_ARGUMENT;
 1229|      6|    s->timecondition = (unsigned char)arg;
 1230|      6|    break;
 1231|      6|  case CURLOPT_TIMEVALUE:
  ------------------
  |  Branch (1231:3): [True: 6, False: 138]
  ------------------
 1232|      6|    s->timevalue = (time_t)arg;
 1233|      6|    break;
 1234|      0|  case CURLOPT_POSTFIELDSIZE:
  ------------------
  |  Branch (1234:3): [True: 0, False: 144]
  ------------------
 1235|      0|    if(arg < -1)
  ------------------
  |  Branch (1235:8): [True: 0, False: 0]
  ------------------
 1236|      0|      return CURLE_BAD_FUNCTION_ARGUMENT;
 1237|      0|    if(s->postfieldsize < arg &&
  ------------------
  |  Branch (1237:8): [True: 0, False: 0]
  ------------------
 1238|      0|       s->postfields == s->str[STRING_COPYPOSTFIELDS]) {
  ------------------
  |  Branch (1238:8): [True: 0, False: 0]
  ------------------
 1239|      0|      curlx_safefree(s->str[STRING_COPYPOSTFIELDS]);
  ------------------
  |  | 1332|      0|  do {                      \
  |  | 1333|      0|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1488|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|      0|    (ptr) = NULL;           \
  |  | 1335|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1240|      0|      s->postfields = NULL;
 1241|      0|    }
 1242|      0|    s->postfieldsize = arg;
 1243|      0|    break;
 1244|      0|  case CURLOPT_INFILESIZE:
  ------------------
  |  Branch (1244:3): [True: 0, False: 144]
  ------------------
 1245|      0|    if(arg < -1)
  ------------------
  |  Branch (1245:8): [True: 0, False: 0]
  ------------------
 1246|      0|      return CURLE_BAD_FUNCTION_ARGUMENT;
 1247|      0|    s->filesize = arg;
 1248|      0|    break;
 1249|     37|  case CURLOPT_RESUME_FROM:
  ------------------
  |  Branch (1249:3): [True: 37, False: 107]
  ------------------
 1250|     37|    if(arg < -1)
  ------------------
  |  Branch (1250:8): [True: 0, False: 37]
  ------------------
 1251|      0|      return CURLE_BAD_FUNCTION_ARGUMENT;
 1252|     37|    s->set_resume_from = arg;
 1253|     37|    break;
 1254|      0|  case CURLOPT_UPLOAD_FLAGS:
  ------------------
  |  Branch (1254:3): [True: 0, False: 144]
  ------------------
 1255|      0|    s->upload_flags = (unsigned char)arg;
 1256|      0|    break;
 1257|      0|#ifndef CURL_DISABLE_MIME
 1258|      3|  case CURLOPT_MIME_OPTIONS:
  ------------------
  |  Branch (1258:3): [True: 3, False: 141]
  ------------------
 1259|      3|    s->mime_formescape = !!(arg & CURLMIMEOPT_FORMESCAPE);
  ------------------
  |  | 2441|      3|#define CURLMIMEOPT_FORMESCAPE (1L << 0) /* Use backslash-escaping for forms */
  ------------------
 1260|      3|    break;
 1261|      0|#endif
 1262|      0|#ifndef CURL_DISABLE_HSTS
 1263|     10|  case CURLOPT_HSTS_CTRL:
  ------------------
  |  Branch (1263:3): [True: 10, False: 134]
  ------------------
 1264|     10|    if(arg & CURLHSTS_ENABLE) {
  ------------------
  |  | 1073|     10|#define CURLHSTS_ENABLE       (1L << 0)
  ------------------
  |  Branch (1264:8): [True: 5, False: 5]
  ------------------
 1265|      5|      if(!data->hsts) {
  ------------------
  |  Branch (1265:10): [True: 5, False: 0]
  ------------------
 1266|      5|        data->hsts = Curl_hsts_init();
 1267|      5|        if(!data->hsts)
  ------------------
  |  Branch (1267:12): [True: 0, False: 5]
  ------------------
 1268|      0|          return CURLE_OUT_OF_MEMORY;
 1269|      5|      }
 1270|      5|    }
 1271|      5|    else if(!data->share || !data->share->hsts) {
  ------------------
  |  Branch (1271:13): [True: 5, False: 0]
  |  Branch (1271:29): [True: 0, False: 0]
  ------------------
 1272|       |      /* throw away the HSTS cache unless shared */
 1273|      5|      Curl_hsts_cleanup(&data->hsts);
 1274|       |      /* flush all the entries */
 1275|      5|      curl_slist_free_all(data->state.hstslist);
 1276|      5|      data->state.hstslist = NULL;
 1277|      5|    }
 1278|      0|    else
 1279|       |      /* detach from shared HSTS cache without freeing it */
 1280|      0|      data->hsts = NULL;
 1281|     10|    break;
 1282|     10|#endif
 1283|     10|#ifndef CURL_DISABLE_ALTSVC
 1284|     36|  case CURLOPT_ALTSVC_CTRL:
  ------------------
  |  Branch (1284:3): [True: 36, False: 108]
  ------------------
 1285|     36|    return Curl_altsvc_ctrl(data, arg);
 1286|      0|#endif
 1287|       |#if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI)
 1288|       |  case CURLOPT_GSSAPI_DELEGATION:
 1289|       |    s->gssapi_delegation = (unsigned char)arg &
 1290|       |      (CURLGSSAPI_DELEGATION_POLICY_FLAG | CURLGSSAPI_DELEGATION_FLAG);
 1291|       |    break;
 1292|       |#endif
 1293|      6|  default:
  ------------------
  |  Branch (1293:3): [True: 6, False: 138]
  ------------------
 1294|      6|    return CURLE_UNKNOWN_OPTION;
 1295|    144|  }
 1296|     62|  return CURLE_OK;
 1297|    144|}
setopt.c:setopt_slist:
 1325|  4.73k|{
 1326|  4.73k|  CURLcode result = CURLE_OK;
 1327|  4.73k|  struct UserDefined *s = &data->set;
 1328|  4.73k|  switch(option) {
 1329|      0|#ifndef CURL_DISABLE_PROXY
 1330|      0|  case CURLOPT_PROXYHEADER:
  ------------------
  |  Branch (1330:3): [True: 0, False: 4.73k]
  ------------------
 1331|       |    /*
 1332|       |     * Set a list with proxy headers to use (or replace internals with)
 1333|       |     *
 1334|       |     * Since CURLOPT_HTTPHEADER was the only way to set HTTP headers for a
 1335|       |     * long time we remain doing it this way until CURLOPT_PROXYHEADER is
 1336|       |     * used. As soon as this option has been used, if set to anything but
 1337|       |     * NULL, custom headers for proxies are only picked from this list.
 1338|       |     *
 1339|       |     * Set this option to NULL to restore the previous behavior.
 1340|       |     */
 1341|      0|    s->proxyheaders = slist;
 1342|      0|    break;
 1343|      0|#endif
 1344|      0|#ifndef CURL_DISABLE_HTTP
 1345|      0|  case CURLOPT_HTTP200ALIASES:
  ------------------
  |  Branch (1345:3): [True: 0, False: 4.73k]
  ------------------
 1346|       |    /*
 1347|       |     * Set a list of aliases for HTTP 200 in response header
 1348|       |     */
 1349|      0|    s->http200aliases = slist;
 1350|      0|    break;
 1351|      0|#endif
 1352|      0|#if !defined(CURL_DISABLE_FTP) || defined(USE_SSH)
 1353|      0|  case CURLOPT_POSTQUOTE:
  ------------------
  |  Branch (1353:3): [True: 0, False: 4.73k]
  ------------------
 1354|       |    /*
 1355|       |     * List of RAW FTP commands to use after a transfer
 1356|       |     */
 1357|      0|    s->postquote = slist;
 1358|      0|    break;
 1359|      0|  case CURLOPT_PREQUOTE:
  ------------------
  |  Branch (1359:3): [True: 0, False: 4.73k]
  ------------------
 1360|       |    /*
 1361|       |     * List of RAW FTP commands to use prior to RETR (Wesley Laxton)
 1362|       |     */
 1363|      0|    s->prequote = slist;
 1364|      0|    break;
 1365|      0|  case CURLOPT_QUOTE:
  ------------------
  |  Branch (1365:3): [True: 0, False: 4.73k]
  ------------------
 1366|       |    /*
 1367|       |     * List of RAW FTP commands to use before a transfer
 1368|       |     */
 1369|      0|    s->quote = slist;
 1370|      0|    break;
 1371|      0|#endif
 1372|      0|  case CURLOPT_RESOLVE:
  ------------------
  |  Branch (1372:3): [True: 0, False: 4.73k]
  ------------------
 1373|       |    /*
 1374|       |     * List of HOST:PORT:[addresses] strings to populate the DNS cache with
 1375|       |     * Entries added this way will remain in the cache until explicitly
 1376|       |     * removed or the handle is cleaned up.
 1377|       |     *
 1378|       |     * Prefix the HOST with plus sign (+) to have the entry expire like
 1379|       |     * automatically added entries.
 1380|       |     *
 1381|       |     * Prefix the HOST with dash (-) to _remove_ the entry from the cache.
 1382|       |     *
 1383|       |     * This API can remove any entry from the DNS cache, but only entries
 1384|       |     * that are not actually in use right now will be pruned immediately.
 1385|       |     */
 1386|      0|    s->resolve = slist;
 1387|      0|    data->state.resolve = s->resolve;
 1388|      0|    break;
 1389|      0|#if !defined(CURL_DISABLE_HTTP) || !defined(CURL_DISABLE_MIME)
 1390|      0|  case CURLOPT_HTTPHEADER:
  ------------------
  |  Branch (1390:3): [True: 0, False: 4.73k]
  ------------------
 1391|       |    /*
 1392|       |     * Set a list with HTTP headers to use (or replace internals with)
 1393|       |     */
 1394|      0|    s->headers = slist;
 1395|      0|    break;
 1396|      0|#endif
 1397|      0|#ifndef CURL_DISABLE_TELNET
 1398|      0|  case CURLOPT_TELNETOPTIONS:
  ------------------
  |  Branch (1398:3): [True: 0, False: 4.73k]
  ------------------
 1399|       |    /*
 1400|       |     * Set a linked list of telnet options
 1401|       |     */
 1402|      0|    s->telnet_options = slist;
 1403|      0|    break;
 1404|      0|#endif
 1405|      0|#ifndef CURL_DISABLE_SMTP
 1406|      0|  case CURLOPT_MAIL_RCPT:
  ------------------
  |  Branch (1406:3): [True: 0, False: 4.73k]
  ------------------
 1407|       |    /* Set the list of mail recipients */
 1408|      0|    s->mail_rcpt = slist;
 1409|      0|    break;
 1410|      0|#endif
 1411|  4.73k|  case CURLOPT_CONNECT_TO:
  ------------------
  |  Branch (1411:3): [True: 4.73k, False: 0]
  ------------------
 1412|  4.73k|    s->connect_to = slist;
 1413|  4.73k|    break;
 1414|      0|  default:
  ------------------
  |  Branch (1414:3): [True: 0, False: 4.73k]
  ------------------
 1415|      0|    return CURLE_UNKNOWN_OPTION;
 1416|  4.73k|  }
 1417|  4.73k|  return result;
 1418|  4.73k|}
setopt.c:setopt_pointers:
 1475|     12|{
 1476|     12|  CURLcode result = CURLE_OK;
 1477|     12|  struct UserDefined *s = &data->set;
 1478|     12|  switch(option) {
 1479|      0|  case CURLOPT_CURLU:
  ------------------
  |  Branch (1479:3): [True: 0, False: 12]
  ------------------
 1480|       |    /*
 1481|       |     * pass CURLU to set URL
 1482|       |     */
 1483|      0|    Curl_bufref_free(&data->state.url);
 1484|      0|    curlx_safefree(s->str[STRING_SET_URL]);
  ------------------
  |  | 1332|      0|  do {                      \
  |  | 1333|      0|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1488|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|      0|    (ptr) = NULL;           \
  |  | 1335|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1485|      0|    s->uh = va_arg(param, CURLU *);
 1486|      0|    break;
 1487|      0|#ifndef CURL_DISABLE_HTTP
 1488|      0|#ifndef CURL_DISABLE_FORM_API
 1489|     12|  case CURLOPT_HTTPPOST:
  ------------------
  |  Branch (1489:3): [True: 12, False: 0]
  ------------------
 1490|       |    /*
 1491|       |     * Set to make us do HTTP POST. Legacy API-style.
 1492|       |     */
 1493|     12|    s->httppost = va_arg(param, struct curl_httppost *);
 1494|     12|    s->method = HTTPREQ_POST_FORM;
 1495|     12|    s->opt_no_body = FALSE; /* this is implied */
  ------------------
  |  | 1054|     12|#define FALSE false
  ------------------
 1496|     12|    Curl_mime_cleanpart(data->state.formp);
 1497|     12|    curlx_safefree(data->state.formp);
  ------------------
  |  | 1332|     12|  do {                      \
  |  | 1333|     12|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1488|     12|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|     12|    (ptr) = NULL;           \
  |  | 1335|     12|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 12]
  |  |  ------------------
  ------------------
 1498|     12|    data->state.mimepost = NULL;
 1499|     12|    break;
 1500|      0|#endif /* !CURL_DISABLE_FORM_API */
 1501|      0|#endif /* !CURL_DISABLE_HTTP */
 1502|      0|#if !defined(CURL_DISABLE_HTTP) || !defined(CURL_DISABLE_SMTP) ||       \
 1503|      0|  !defined(CURL_DISABLE_IMAP)
 1504|      0|#ifndef CURL_DISABLE_MIME
 1505|      0|  case CURLOPT_MIMEPOST:
  ------------------
  |  Branch (1505:3): [True: 0, False: 12]
  ------------------
 1506|      0|    result = setopt_mimepost(data, va_arg(param, curl_mime *));
 1507|      0|    break;
 1508|      0|#endif /* !CURL_DISABLE_MIME */
 1509|      0|#endif /* !CURL_DISABLE_HTTP || !CURL_DISABLE_SMTP || !CURL_DISABLE_IMAP */
 1510|      0|  case CURLOPT_STDERR:
  ------------------
  |  Branch (1510:3): [True: 0, False: 12]
  ------------------
 1511|       |    /*
 1512|       |     * Set to a FILE * that should receive all error writes. This
 1513|       |     * defaults to stderr for normal operations.
 1514|       |     */
 1515|      0|    s->err = va_arg(param, FILE *);
 1516|      0|    if(!s->err)
  ------------------
  |  Branch (1516:8): [True: 0, False: 0]
  ------------------
 1517|      0|      s->err = stderr;
 1518|      0|    break;
 1519|      0|  case CURLOPT_SHARE:
  ------------------
  |  Branch (1519:3): [True: 0, False: 12]
  ------------------
 1520|      0|    return setopt_share(data, va_arg(param, struct Curl_share *));
 1521|       |
 1522|      0|  default:
  ------------------
  |  Branch (1522:3): [True: 0, False: 12]
  ------------------
 1523|      0|    return CURLE_UNKNOWN_OPTION;
 1524|     12|  }
 1525|     12|  return result;
 1526|     12|}
setopt.c:setopt_cptr:
 2484|  50.4k|{
 2485|  50.4k|  typedef CURLcode (*ptrfunc)(struct Curl_easy *data, CURLoption option,
 2486|  50.4k|                              char *ptr);
 2487|  50.4k|  static const ptrfunc setopt_call[] = {
 2488|  50.4k|#ifndef CURL_DISABLE_PROXY
 2489|  50.4k|    setopt_cptr_proxy,
 2490|  50.4k|#endif
 2491|  50.4k|#if defined(USE_SSL) || defined(USE_SSH)
 2492|  50.4k|    setopt_cptr_ssl,
 2493|  50.4k|#endif
 2494|       |#ifdef USE_SSH
 2495|       |    setopt_cptr_ssh,
 2496|       |#endif
 2497|  50.4k|#ifndef CURL_DISABLE_FTP
 2498|  50.4k|    setopt_cptr_ftp,
 2499|  50.4k|#endif
 2500|  50.4k|#if !defined(CURL_DISABLE_HTTP) || !defined(CURL_DISABLE_MQTT)
 2501|  50.4k|    setopt_cptr_http_mqtt,
 2502|  50.4k|#endif
 2503|  50.4k|    setopt_cptr_net,
 2504|  50.4k|    setopt_cptr_misc,
 2505|  50.4k|  };
 2506|  50.4k|  size_t i;
 2507|       |
 2508|   257k|  for(i = 0; i < CURL_ARRAYSIZE(setopt_call); i++) {
  ------------------
  |  | 1299|   257k|#define CURL_ARRAYSIZE(A) (sizeof(A) / sizeof((A)[0]))
  ------------------
  |  Branch (2508:14): [True: 257k, False: 13]
  ------------------
 2509|   257k|    CURLcode result = setopt_call[i](data, option, ptr);
 2510|   257k|    if(result != CURLE_UNKNOWN_OPTION)
  ------------------
  |  Branch (2510:8): [True: 50.4k, False: 207k]
  ------------------
 2511|  50.4k|      return result;
 2512|   257k|  }
 2513|     13|  return CURLE_UNKNOWN_OPTION;
 2514|  50.4k|}
setopt.c:setopt_cptr_proxy:
 1634|  50.4k|{
 1635|  50.4k|  CURLcode result = CURLE_OK;
 1636|  50.4k|  struct UserDefined *s = &data->set;
 1637|  50.4k|  switch(option) {
 1638|    165|  case CURLOPT_PROXYUSERPWD: {
  ------------------
  |  Branch (1638:3): [True: 165, False: 50.3k]
  ------------------
 1639|       |    /*
 1640|       |     * user:password needed to use the proxy
 1641|       |     */
 1642|    165|    char *u = NULL;
 1643|    165|    char *p = NULL;
 1644|    165|    result = setstropt_userpwd(ptr, &u, &p);
 1645|       |
 1646|       |    /* URL decode the components */
 1647|    165|    if(!result) {
  ------------------
  |  Branch (1647:8): [True: 165, False: 0]
  ------------------
 1648|    165|      curlx_safefree(s->str[STRING_PROXYUSERNAME]);
  ------------------
  |  | 1332|    165|  do {                      \
  |  | 1333|    165|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1488|    165|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|    165|    (ptr) = NULL;           \
  |  | 1335|    165|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 165]
  |  |  ------------------
  ------------------
 1649|    165|      curlx_safefree(s->str[STRING_PROXYPASSWORD]);
  ------------------
  |  | 1332|    165|  do {                      \
  |  | 1333|    165|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1488|    165|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|    165|    (ptr) = NULL;           \
  |  | 1335|    165|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 165]
  |  |  ------------------
  ------------------
 1650|    165|      if(u)
  ------------------
  |  Branch (1650:10): [True: 165, False: 0]
  ------------------
 1651|    165|        result = Curl_urldecode(u, 0, &s->str[STRING_PROXYUSERNAME], NULL,
 1652|    165|                                REJECT_ZERO);
 1653|    165|    }
 1654|    165|    if(!result && p)
  ------------------
  |  Branch (1654:8): [True: 162, False: 3]
  |  Branch (1654:19): [True: 24, False: 138]
  ------------------
 1655|     24|      result = Curl_urldecode(p, 0, &s->str[STRING_PROXYPASSWORD], NULL,
 1656|     24|                              REJECT_ZERO);
 1657|    165|    curlx_free(u);
  ------------------
  |  | 1488|    165|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
 1658|    165|    curlx_free(p);
  ------------------
  |  | 1488|    165|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
 1659|    165|    break;
 1660|      0|  }
 1661|      5|  case CURLOPT_PROXYUSERNAME:
  ------------------
  |  Branch (1661:3): [True: 5, False: 50.4k]
  ------------------
 1662|       |    /*
 1663|       |     * authentication username to use in the operation
 1664|       |     */
 1665|      5|    return Curl_setstropt(&s->str[STRING_PROXYUSERNAME], ptr);
 1666|       |
 1667|     14|  case CURLOPT_PROXYPASSWORD:
  ------------------
  |  Branch (1667:3): [True: 14, False: 50.4k]
  ------------------
 1668|       |    /*
 1669|       |     * authentication password to use in the operation
 1670|       |     */
 1671|     14|    return Curl_setstropt(&s->str[STRING_PROXYPASSWORD], ptr);
 1672|       |
 1673|     13|  case CURLOPT_NOPROXY:
  ------------------
  |  Branch (1673:3): [True: 13, False: 50.4k]
  ------------------
 1674|       |    /*
 1675|       |     * proxy exception list
 1676|       |     */
 1677|     13|    return Curl_setstropt(&s->str[STRING_NOPROXY], ptr);
 1678|     14|  case CURLOPT_PROXY_SSLCERT:
  ------------------
  |  Branch (1678:3): [True: 14, False: 50.4k]
  ------------------
 1679|       |    /*
 1680|       |     * String that holds filename of the SSL certificate to use for proxy
 1681|       |     */
 1682|     14|    return Curl_setstropt(&s->str[STRING_CERT_PROXY], ptr);
 1683|      6|  case CURLOPT_PROXY_SSLCERTTYPE:
  ------------------
  |  Branch (1683:3): [True: 6, False: 50.4k]
  ------------------
 1684|       |    /*
 1685|       |     * String that holds file type of the SSL certificate to use for proxy
 1686|       |     */
 1687|      6|    return Curl_setstropt(&s->str[STRING_CERT_TYPE_PROXY], ptr);
 1688|     15|  case CURLOPT_PROXY_SSLKEY:
  ------------------
  |  Branch (1688:3): [True: 15, False: 50.4k]
  ------------------
 1689|       |    /*
 1690|       |     * String that holds filename of the SSL key to use for proxy
 1691|       |     */
 1692|     15|    return Curl_setstropt(&s->str[STRING_KEY_PROXY], ptr);
 1693|     11|  case CURLOPT_PROXY_KEYPASSWD:
  ------------------
  |  Branch (1693:3): [True: 11, False: 50.4k]
  ------------------
 1694|       |    /*
 1695|       |     * String that holds the SSL private key password for proxy.
 1696|       |     */
 1697|     11|    return Curl_setstropt(&s->str[STRING_KEY_PASSWD_PROXY], ptr);
 1698|     15|  case CURLOPT_PROXY_SSLKEYTYPE:
  ------------------
  |  Branch (1698:3): [True: 15, False: 50.4k]
  ------------------
 1699|       |    /*
 1700|       |     * String that holds file type of the SSL key to use for proxy
 1701|       |     */
 1702|     15|    return Curl_setstropt(&s->str[STRING_KEY_TYPE_PROXY], ptr);
 1703|     11|  case CURLOPT_PROXY_SSL_CIPHER_LIST:
  ------------------
  |  Branch (1703:3): [True: 11, False: 50.4k]
  ------------------
 1704|     11|    if(Curl_ssl_supports(data, SSLSUPP_CIPHER_LIST)) {
  ------------------
  |  |   44|     11|#define SSLSUPP_CIPHER_LIST  (1 << 9) /* supports TLS 1.0-1.2 ciphersuites */
  ------------------
  |  Branch (1704:8): [True: 11, False: 0]
  ------------------
 1705|       |      /* set a list of cipher we want to use in the SSL connection for proxy */
 1706|     11|      return Curl_setstropt(&s->str[STRING_SSL_CIPHER_LIST_PROXY], ptr);
 1707|     11|    }
 1708|      0|    else
 1709|      0|      return CURLE_NOT_BUILT_IN;
 1710|     14|  case CURLOPT_PROXY_TLS13_CIPHERS:
  ------------------
  |  Branch (1710:3): [True: 14, False: 50.4k]
  ------------------
 1711|     14|    if(Curl_ssl_supports(data, SSLSUPP_TLS13_CIPHERSUITES))
  ------------------
  |  |   40|     14|#define SSLSUPP_TLS13_CIPHERSUITES (1 << 5) /* supports TLS 1.3 ciphersuites */
  ------------------
  |  Branch (1711:8): [True: 14, False: 0]
  ------------------
 1712|       |      /* set preferred list of TLS 1.3 cipher suites for proxy */
 1713|     14|      return Curl_setstropt(&s->str[STRING_SSL_CIPHER13_LIST_PROXY], ptr);
 1714|      0|    else
 1715|      0|      return CURLE_NOT_BUILT_IN;
 1716|     16|  case CURLOPT_PROXY:
  ------------------
  |  Branch (1716:3): [True: 16, False: 50.4k]
  ------------------
 1717|       |    /*
 1718|       |     * Set proxy server:port to use as proxy.
 1719|       |     *
 1720|       |     * If the proxy is set to "" (and CURLOPT_PRE_PROXY is set to "" or NULL)
 1721|       |     * we explicitly say that we do not want to use a proxy (even though there
 1722|       |     * might be environment variables saying so).
 1723|       |     *
 1724|       |     * Setting it to NULL, means no proxy but allows the environment variables
 1725|       |     * to decide for us (if CURLOPT_PRE_PROXY setting it to NULL).
 1726|       |     */
 1727|     16|    return setproxy(data, ptr);
 1728|     15|  case CURLOPT_PRE_PROXY:
  ------------------
  |  Branch (1728:3): [True: 15, False: 50.4k]
  ------------------
 1729|       |    /*
 1730|       |     * Set proxy server:port to use as SOCKS proxy.
 1731|       |     *
 1732|       |     * If the proxy is set to "" or NULL we explicitly say that we do not want
 1733|       |     * to use the socks proxy.
 1734|       |     */
 1735|     15|    return Curl_setstropt(&s->str[STRING_PRE_PROXY], ptr);
 1736|      0|  case CURLOPT_SOCKS5_GSSAPI_SERVICE:
  ------------------
  |  Branch (1736:3): [True: 0, False: 50.4k]
  ------------------
 1737|     10|  case CURLOPT_PROXY_SERVICE_NAME:
  ------------------
  |  Branch (1737:3): [True: 10, False: 50.4k]
  ------------------
 1738|       |    /*
 1739|       |     * Set proxy authentication service name for Kerberos 5 and SPNEGO
 1740|       |     */
 1741|     10|    return Curl_setstropt(&s->str[STRING_PROXY_SERVICE_NAME], ptr);
 1742|     14|  case CURLOPT_PROXY_PINNEDPUBLICKEY:
  ------------------
  |  Branch (1742:3): [True: 14, False: 50.4k]
  ------------------
 1743|       |    /*
 1744|       |     * Set pinned public key for SSL connection.
 1745|       |     * Specify filename of the public key in DER format.
 1746|       |     */
 1747|     14|#ifdef USE_SSL
 1748|     14|    if(Curl_ssl_supports(data, SSLSUPP_PINNEDPUBKEY))
  ------------------
  |  |   37|     14|#define SSLSUPP_PINNEDPUBKEY (1 << 2) /* supports CURLOPT_PINNEDPUBLICKEY */
  ------------------
  |  Branch (1748:8): [True: 14, False: 0]
  ------------------
 1749|     14|      return Curl_setstropt(&s->str[STRING_SSL_PINNEDPUBLICKEY_PROXY], ptr);
 1750|      0|#endif
 1751|      0|    return CURLE_NOT_BUILT_IN;
 1752|       |
 1753|      4|  case CURLOPT_HAPROXY_CLIENT_IP:
  ------------------
  |  Branch (1753:3): [True: 4, False: 50.4k]
  ------------------
 1754|       |    /*
 1755|       |     * Set the client IP to send through HAProxy PROXY protocol
 1756|       |     */
 1757|      4|    result = Curl_setstropt(&s->str[STRING_HAPROXY_CLIENT_IP], ptr);
 1758|       |
 1759|       |    /* enable the HAProxy protocol if an IP is provided */
 1760|      4|    s->haproxyprotocol = !!s->str[STRING_HAPROXY_CLIENT_IP];
 1761|      4|    break;
 1762|     13|  case CURLOPT_PROXY_CAINFO:
  ------------------
  |  Branch (1762:3): [True: 13, False: 50.4k]
  ------------------
 1763|       |    /*
 1764|       |     * Set CA info SSL connection for proxy. Specify filename of the
 1765|       |     * CA certificate
 1766|       |     */
 1767|     13|    result = Curl_setstropt(&s->str[STRING_SSL_CAFILE_PROXY], ptr);
 1768|     13|    s->proxy_ssl.custom_cafile = !!s->str[STRING_SSL_CAFILE_PROXY];
 1769|     13|    return result;
 1770|     13|  case CURLOPT_PROXY_CRLFILE:
  ------------------
  |  Branch (1770:3): [True: 13, False: 50.4k]
  ------------------
 1771|       |    /*
 1772|       |     * Set CRL file info for SSL connection for proxy. Specify filename of the
 1773|       |     * CRL to check certificates revocation
 1774|       |     */
 1775|     13|    if(Curl_ssl_supports(data, SSLSUPP_CRLFILE))
  ------------------
  |  |   48|     13|#define SSLSUPP_CRLFILE      (1 << 13) /* supports CURLOPT_CRLFILE */
  ------------------
  |  Branch (1775:8): [True: 13, False: 0]
  ------------------
 1776|     13|      return Curl_setstropt(&s->str[STRING_SSL_CRLFILE_PROXY], ptr);
 1777|      0|    return CURLE_NOT_BUILT_IN;
 1778|     15|  case CURLOPT_PROXY_ISSUERCERT:
  ------------------
  |  Branch (1778:3): [True: 15, False: 50.4k]
  ------------------
 1779|       |    /*
 1780|       |     * Set Issuer certificate file to check certificates issuer
 1781|       |     */
 1782|     15|    if(Curl_ssl_supports(data, SSLSUPP_ISSUERCERT))
  ------------------
  |  |   46|     15|#define SSLSUPP_ISSUERCERT   (1 << 11) /* supports CURLOPT_ISSUERCERT */
  ------------------
  |  Branch (1782:8): [True: 15, False: 0]
  ------------------
 1783|     15|      return Curl_setstropt(&s->str[STRING_SSL_ISSUERCERT_PROXY], ptr);
 1784|      0|    return CURLE_NOT_BUILT_IN;
 1785|     13|  case CURLOPT_PROXY_CAPATH:
  ------------------
  |  Branch (1785:3): [True: 13, False: 50.4k]
  ------------------
 1786|       |    /*
 1787|       |     * Set CA path info for SSL connection proxy. Specify directory name of the
 1788|       |     * CA certificates which have been prepared using openssl c_rehash utility.
 1789|       |     */
 1790|     13|#ifdef USE_SSL
 1791|     13|    if(Curl_ssl_supports(data, SSLSUPP_CA_PATH)) {
  ------------------
  |  |   35|     13|#define SSLSUPP_CA_PATH      (1 << 0) /* supports CAPATH */
  ------------------
  |  Branch (1791:8): [True: 13, False: 0]
  ------------------
 1792|       |      /* This does not work on Windows. */
 1793|     13|      result = Curl_setstropt(&s->str[STRING_SSL_CAPATH_PROXY], ptr);
 1794|     13|      s->proxy_ssl.custom_capath = !!s->str[STRING_SSL_CAPATH_PROXY];
 1795|     13|      return result;
 1796|     13|    }
 1797|      0|#endif
 1798|      0|    return CURLE_NOT_BUILT_IN;
 1799|  50.0k|  default:
  ------------------
  |  Branch (1799:3): [True: 50.0k, False: 396]
  ------------------
 1800|  50.0k|    return CURLE_UNKNOWN_OPTION;
 1801|  50.4k|  }
 1802|    169|  return result;
 1803|  50.4k|}
setopt.c:setstropt_userpwd:
  134|    184|{
  135|    184|  char *user = NULL;
  136|    184|  char *passwd = NULL;
  137|       |
  138|    184|  DEBUGASSERT(userp);
  ------------------
  |  | 1077|    184|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (138:3): [True: 0, False: 184]
  |  Branch (138:3): [True: 184, False: 0]
  ------------------
  139|    184|  DEBUGASSERT(passwdp);
  ------------------
  |  | 1077|    184|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (139:3): [True: 0, False: 184]
  |  Branch (139:3): [True: 184, False: 0]
  ------------------
  140|       |
  141|       |  /* Parse the login details if specified. If not, then we treat NULL as a
  142|       |     hint to clear the existing data */
  143|    184|  if(option) {
  ------------------
  |  Branch (143:6): [True: 184, False: 0]
  ------------------
  144|    184|    size_t len = strlen(option);
  145|    184|    CURLcode result;
  146|    184|    if(len > CURL_MAX_INPUT_LENGTH)
  ------------------
  |  |   45|    184|#define CURL_MAX_INPUT_LENGTH 8000000
  ------------------
  |  Branch (146:8): [True: 0, False: 184]
  ------------------
  147|      0|      return CURLE_BAD_FUNCTION_ARGUMENT;
  148|       |
  149|    184|    result = Curl_parse_login_details(option, len, &user, &passwd, NULL);
  150|    184|    if(result)
  ------------------
  |  Branch (150:8): [True: 0, False: 184]
  ------------------
  151|      0|      return result;
  152|    184|  }
  153|       |
  154|    184|  curlx_free(*userp);
  ------------------
  |  | 1488|    184|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  155|    184|  *userp = user;
  156|       |
  157|    184|  curlx_free(*passwdp);
  ------------------
  |  | 1488|    184|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  158|    184|  *passwdp = passwd;
  159|       |
  160|    184|  return CURLE_OK;
  161|    184|}
setopt.c:setproxy:
 1622|     16|{
 1623|     16|  if((data->set.str[STRING_PROXY] && proxy) &&
  ------------------
  |  Branch (1623:7): [True: 0, False: 16]
  |  Branch (1623:38): [True: 0, False: 0]
  ------------------
 1624|       |     /* there was one set, is this a new one? */
 1625|      0|     !strcmp(data->set.str[STRING_PROXY], proxy))
  ------------------
  |  Branch (1625:6): [True: 0, False: 0]
  ------------------
 1626|      0|    return CURLE_OK; /* same one as before */
 1627|       |
 1628|     16|  changeproxy(data);
 1629|     16|  return Curl_setstropt(&data->set.str[STRING_PROXY], proxy);
 1630|     16|}
setopt.c:setopt_cptr_ssl:
 1887|  50.0k|{
 1888|  50.0k|  CURLcode result = CURLE_OK;
 1889|  50.0k|  struct UserDefined *s = &data->set;
 1890|       |
 1891|  50.0k|  switch(option) {
 1892|     13|  case CURLOPT_KEYPASSWD:
  ------------------
  |  Branch (1892:3): [True: 13, False: 50.0k]
  ------------------
 1893|       |    /*
 1894|       |     * String that holds the SSL or SSH private key password.
 1895|       |     */
 1896|     13|    result = Curl_setstropt(&s->str[STRING_KEY_PASSWD], ptr);
 1897|     13|    break;
 1898|      0|#ifdef USE_SSL
 1899|     13|  case CURLOPT_CAINFO:
  ------------------
  |  Branch (1899:3): [True: 13, False: 50.0k]
  ------------------
 1900|       |    /*
 1901|       |     * Set CA info for SSL connection. Specify filename of the CA certificate
 1902|       |     */
 1903|     13|    result = Curl_setstropt(&s->str[STRING_SSL_CAFILE], ptr);
 1904|     13|    s->ssl.custom_cafile = !!s->str[STRING_SSL_CAFILE];
 1905|     13|    return result;
 1906|      5|  case CURLOPT_CAPATH:
  ------------------
  |  Branch (1906:3): [True: 5, False: 50.0k]
  ------------------
 1907|       |    /*
 1908|       |     * Set CA path info for SSL connection. Specify directory name of the CA
 1909|       |     * certificates which have been prepared using openssl c_rehash utility.
 1910|       |     */
 1911|      5|    if(Curl_ssl_supports(data, SSLSUPP_CA_PATH)) {
  ------------------
  |  |   35|      5|#define SSLSUPP_CA_PATH      (1 << 0) /* supports CAPATH */
  ------------------
  |  Branch (1911:8): [True: 5, False: 0]
  ------------------
 1912|       |      /* This does not work on Windows. */
 1913|      5|      result = Curl_setstropt(&s->str[STRING_SSL_CAPATH], ptr);
 1914|      5|      s->ssl.custom_capath = !!s->str[STRING_SSL_CAPATH];
 1915|      5|      return result;
 1916|      5|    }
 1917|      0|    return CURLE_NOT_BUILT_IN;
 1918|  4.73k|  case CURLOPT_CRLFILE:
  ------------------
  |  Branch (1918:3): [True: 4.73k, False: 45.3k]
  ------------------
 1919|       |    /*
 1920|       |     * Set CRL file info for SSL connection. Specify filename of the CRL
 1921|       |     * to check certificates revocation
 1922|       |     */
 1923|  4.73k|    if(Curl_ssl_supports(data, SSLSUPP_CRLFILE))
  ------------------
  |  |   48|  4.73k|#define SSLSUPP_CRLFILE      (1 << 13) /* supports CURLOPT_CRLFILE */
  ------------------
  |  Branch (1923:8): [True: 4.73k, False: 0]
  ------------------
 1924|  4.73k|      return Curl_setstropt(&s->str[STRING_SSL_CRLFILE], ptr);
 1925|      0|    return CURLE_NOT_BUILT_IN;
 1926|     14|  case CURLOPT_SSL_CIPHER_LIST:
  ------------------
  |  Branch (1926:3): [True: 14, False: 50.0k]
  ------------------
 1927|     14|    if(Curl_ssl_supports(data, SSLSUPP_CIPHER_LIST))
  ------------------
  |  |   44|     14|#define SSLSUPP_CIPHER_LIST  (1 << 9) /* supports TLS 1.0-1.2 ciphersuites */
  ------------------
  |  Branch (1927:8): [True: 14, False: 0]
  ------------------
 1928|       |      /* set a list of cipher we want to use in the SSL connection */
 1929|     14|      return Curl_setstropt(&s->str[STRING_SSL_CIPHER_LIST], ptr);
 1930|      0|    else
 1931|      0|      return CURLE_NOT_BUILT_IN;
 1932|      5|  case CURLOPT_TLS13_CIPHERS:
  ------------------
  |  Branch (1932:3): [True: 5, False: 50.0k]
  ------------------
 1933|      5|    if(Curl_ssl_supports(data, SSLSUPP_TLS13_CIPHERSUITES))
  ------------------
  |  |   40|      5|#define SSLSUPP_TLS13_CIPHERSUITES (1 << 5) /* supports TLS 1.3 ciphersuites */
  ------------------
  |  Branch (1933:8): [True: 5, False: 0]
  ------------------
 1934|       |      /* set preferred list of TLS 1.3 cipher suites */
 1935|      5|      return Curl_setstropt(&s->str[STRING_SSL_CIPHER13_LIST], ptr);
 1936|      0|    else
 1937|      0|      return CURLE_NOT_BUILT_IN;
 1938|      0|  case CURLOPT_RANDOM_FILE:
  ------------------
  |  Branch (1938:3): [True: 0, False: 50.0k]
  ------------------
 1939|      0|    break;
 1940|      0|  case CURLOPT_EGDSOCKET:
  ------------------
  |  Branch (1940:3): [True: 0, False: 50.0k]
  ------------------
 1941|      0|    break;
 1942|      0|  case CURLOPT_SSL_CTX_DATA:
  ------------------
  |  Branch (1942:3): [True: 0, False: 50.0k]
  ------------------
 1943|       |    /*
 1944|       |     * Set an SSL_CTX callback parameter pointer
 1945|       |     */
 1946|      0|    if(Curl_ssl_supports(data, SSLSUPP_SSL_CTX)) {
  ------------------
  |  |   38|      0|#define SSLSUPP_SSL_CTX      (1 << 3) /* supports CURLOPT_SSL_CTX */
  ------------------
  |  Branch (1946:8): [True: 0, False: 0]
  ------------------
 1947|      0|      s->ssl.fsslctxp = ptr;
 1948|      0|      break;
 1949|      0|    }
 1950|      0|    else
 1951|      0|      return CURLE_NOT_BUILT_IN;
 1952|     13|  case CURLOPT_SSLCERT:
  ------------------
  |  Branch (1952:3): [True: 13, False: 50.0k]
  ------------------
 1953|       |    /*
 1954|       |     * String that holds filename of the SSL certificate to use
 1955|       |     */
 1956|     13|    return Curl_setstropt(&s->str[STRING_CERT], ptr);
 1957|      9|  case CURLOPT_SSLCERTTYPE:
  ------------------
  |  Branch (1957:3): [True: 9, False: 50.0k]
  ------------------
 1958|       |    /*
 1959|       |     * String that holds file type of the SSL certificate to use
 1960|       |     */
 1961|      9|    return Curl_setstropt(&s->str[STRING_CERT_TYPE], ptr);
 1962|      5|  case CURLOPT_SSLKEY:
  ------------------
  |  Branch (1962:3): [True: 5, False: 50.0k]
  ------------------
 1963|       |    /*
 1964|       |     * String that holds filename of the SSL key to use
 1965|       |     */
 1966|      5|    return Curl_setstropt(&s->str[STRING_KEY], ptr);
 1967|      2|  case CURLOPT_SSLKEYTYPE:
  ------------------
  |  Branch (1967:3): [True: 2, False: 50.0k]
  ------------------
 1968|       |    /*
 1969|       |     * String that holds file type of the SSL key to use
 1970|       |     */
 1971|      2|    return Curl_setstropt(&s->str[STRING_KEY_TYPE], ptr);
 1972|    114|  case CURLOPT_SSLENGINE:
  ------------------
  |  Branch (1972:3): [True: 114, False: 49.9k]
  ------------------
 1973|       |    /*
 1974|       |     * String that holds the SSL crypto engine.
 1975|       |     */
 1976|    114|    if(ptr && ptr[0]) {
  ------------------
  |  Branch (1976:8): [True: 114, False: 0]
  |  Branch (1976:15): [True: 112, False: 2]
  ------------------
 1977|    112|      result = Curl_setstropt(&s->str[STRING_SSL_ENGINE], ptr);
 1978|    112|      if(!result) {
  ------------------
  |  Branch (1978:10): [True: 112, False: 0]
  ------------------
 1979|    112|        result = Curl_ssl_set_engine(data, ptr);
 1980|    112|      }
 1981|    112|    }
 1982|    114|    break;
 1983|     15|  case CURLOPT_ISSUERCERT:
  ------------------
  |  Branch (1983:3): [True: 15, False: 50.0k]
  ------------------
 1984|       |    /*
 1985|       |     * Set Issuer certificate file
 1986|       |     * to check certificates issuer
 1987|       |     */
 1988|     15|    if(Curl_ssl_supports(data, SSLSUPP_ISSUERCERT))
  ------------------
  |  |   46|     15|#define SSLSUPP_ISSUERCERT   (1 << 11) /* supports CURLOPT_ISSUERCERT */
  ------------------
  |  Branch (1988:8): [True: 15, False: 0]
  ------------------
 1989|     15|      return Curl_setstropt(&s->str[STRING_SSL_ISSUERCERT], ptr);
 1990|      0|    return CURLE_NOT_BUILT_IN;
 1991|     14|  case CURLOPT_SSL_EC_CURVES:
  ------------------
  |  Branch (1991:3): [True: 14, False: 50.0k]
  ------------------
 1992|       |    /*
 1993|       |     * Set accepted curves in SSL connection setup.
 1994|       |     * Specify colon-delimited list of curve algorithm names.
 1995|       |     */
 1996|     14|    if(Curl_ssl_supports(data, SSLSUPP_SSL_EC_CURVES))
  ------------------
  |  |   47|     14|#define SSLSUPP_SSL_EC_CURVES (1 << 12) /* supports CURLOPT_SSL_EC_CURVES */
  ------------------
  |  Branch (1996:8): [True: 14, False: 0]
  ------------------
 1997|     14|      return Curl_setstropt(&s->str[STRING_SSL_EC_CURVES], ptr);
 1998|      0|    return CURLE_NOT_BUILT_IN;
 1999|      0|  case CURLOPT_SSL_SIGNATURE_ALGORITHMS:
  ------------------
  |  Branch (1999:3): [True: 0, False: 50.0k]
  ------------------
 2000|       |    /*
 2001|       |     * Set accepted signature algorithms.
 2002|       |     * Specify colon-delimited list of signature scheme names.
 2003|       |     */
 2004|      0|    if(Curl_ssl_supports(data, SSLSUPP_SIGNATURE_ALGORITHMS))
  ------------------
  |  |   45|      0|#define SSLSUPP_SIGNATURE_ALGORITHMS (1 << 10) /* supports TLS sigalgs */
  ------------------
  |  Branch (2004:8): [True: 0, False: 0]
  ------------------
 2005|      0|      return Curl_setstropt(&s->str[STRING_SSL_SIGNATURE_ALGORITHMS], ptr);
 2006|      0|    return CURLE_NOT_BUILT_IN;
 2007|      7|  case CURLOPT_PINNEDPUBLICKEY:
  ------------------
  |  Branch (2007:3): [True: 7, False: 50.0k]
  ------------------
 2008|       |    /*
 2009|       |     * Set pinned public key for SSL connection.
 2010|       |     * Specify filename of the public key in DER format.
 2011|       |     */
 2012|      7|    if(Curl_ssl_supports(data, SSLSUPP_PINNEDPUBKEY))
  ------------------
  |  |   37|      7|#define SSLSUPP_PINNEDPUBKEY (1 << 2) /* supports CURLOPT_PINNEDPUBLICKEY */
  ------------------
  |  Branch (2012:8): [True: 7, False: 0]
  ------------------
 2013|      7|      return Curl_setstropt(&s->str[STRING_SSL_PINNEDPUBLICKEY], ptr);
 2014|      0|    return CURLE_NOT_BUILT_IN;
 2015|      1|  case CURLOPT_ECH:
  ------------------
  |  Branch (2015:3): [True: 1, False: 50.0k]
  ------------------
 2016|      1|    return setopt_ech(data, ptr);
  ------------------
  |  | 1880|      1|#define setopt_ech(x,y) CURLE_NOT_BUILT_IN
  ------------------
 2017|      0|#endif
 2018|  45.1k|  default:
  ------------------
  |  Branch (2018:3): [True: 45.1k, False: 4.96k]
  ------------------
 2019|  45.1k|    return CURLE_UNKNOWN_OPTION;
 2020|  50.0k|  }
 2021|    127|  return result;
 2022|  50.0k|}
setopt.c:setopt_cptr_ftp:
 2198|  45.1k|{
 2199|  45.1k|  CURLcode result = CURLE_OK;
 2200|  45.1k|  struct UserDefined *s = &data->set;
 2201|  45.1k|  switch(option) {
 2202|      7|  case CURLOPT_FTPPORT:
  ------------------
  |  Branch (2202:3): [True: 7, False: 45.1k]
  ------------------
 2203|       |    /*
 2204|       |     * Use FTP PORT, this also specifies which IP address to use
 2205|       |     */
 2206|      7|    result = Curl_setstropt(&s->str[STRING_FTPPORT], ptr);
 2207|      7|    s->ftp_use_port = !!(s->str[STRING_FTPPORT]);
 2208|      7|    break;
 2209|       |
 2210|     11|  case CURLOPT_FTP_ACCOUNT:
  ------------------
  |  Branch (2210:3): [True: 11, False: 45.1k]
  ------------------
 2211|     11|    return Curl_setstropt(&s->str[STRING_FTP_ACCOUNT], ptr);
 2212|       |
 2213|     10|  case CURLOPT_FTP_ALTERNATIVE_TO_USER:
  ------------------
  |  Branch (2213:3): [True: 10, False: 45.1k]
  ------------------
 2214|     10|    return Curl_setstropt(&s->str[STRING_FTP_ALTERNATIVE_TO_USER], ptr);
 2215|       |
 2216|      2|  case CURLOPT_KRBLEVEL:
  ------------------
  |  Branch (2216:3): [True: 2, False: 45.1k]
  ------------------
 2217|      2|    return CURLE_NOT_BUILT_IN; /* removed in 8.17.0 */
 2218|      0|  case CURLOPT_CHUNK_DATA:
  ------------------
  |  Branch (2218:3): [True: 0, False: 45.1k]
  ------------------
 2219|      0|    s->wildcardptr = ptr;
 2220|      0|    break;
 2221|      0|  case CURLOPT_FNMATCH_DATA:
  ------------------
  |  Branch (2221:3): [True: 0, False: 45.1k]
  ------------------
 2222|      0|    s->fnmatch_data = ptr;
 2223|      0|    break;
 2224|  45.1k|  default:
  ------------------
  |  Branch (2224:3): [True: 45.1k, False: 30]
  ------------------
 2225|  45.1k|    return CURLE_UNKNOWN_OPTION;
 2226|  45.1k|  }
 2227|      7|  return result;
 2228|  45.1k|}
setopt.c:setopt_cptr_http_mqtt:
 2028|  45.1k|{
 2029|  45.1k|  CURLcode result = CURLE_OK;
 2030|  45.1k|  struct UserDefined *s = &data->set;
 2031|       |
 2032|  45.1k|  switch(option) {
 2033|      0|  case CURLOPT_COPYPOSTFIELDS:
  ------------------
  |  Branch (2033:3): [True: 0, False: 45.1k]
  ------------------
 2034|      0|    return setopt_copypostfields(ptr, s);
 2035|       |
 2036|      4|  case CURLOPT_POSTFIELDS:
  ------------------
  |  Branch (2036:3): [True: 4, False: 45.0k]
  ------------------
 2037|       |    /*
 2038|       |     * Like above, but use static data instead of copying it.
 2039|       |     */
 2040|      4|    s->postfields = ptr;
 2041|       |    /* Release old copied data. */
 2042|      4|    curlx_safefree(s->str[STRING_COPYPOSTFIELDS]);
  ------------------
  |  | 1332|      4|  do {                      \
  |  | 1333|      4|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1488|      4|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|      4|    (ptr) = NULL;           \
  |  | 1335|      4|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 4]
  |  |  ------------------
  ------------------
 2043|      4|    s->method = HTTPREQ_POST;
 2044|      4|    break;
 2045|       |
 2046|      0|#ifndef CURL_DISABLE_HTTP
 2047|      0|  case CURLOPT_TRAILERDATA:
  ------------------
  |  Branch (2047:3): [True: 0, False: 45.1k]
  ------------------
 2048|      0|    s->trailer_data = ptr;
 2049|      0|    break;
 2050|     15|  case CURLOPT_ACCEPT_ENCODING:
  ------------------
  |  Branch (2050:3): [True: 15, False: 45.0k]
  ------------------
 2051|       |    /*
 2052|       |     * String to use at the value of Accept-Encoding header.
 2053|       |     *
 2054|       |     * If the encoding is set to "" we use an Accept-Encoding header that
 2055|       |     * encompasses all the encodings we support.
 2056|       |     * If the encoding is set to NULL we do not send an Accept-Encoding header
 2057|       |     * and ignore any received Content-Encoding header.
 2058|       |     *
 2059|       |     */
 2060|     15|    if(ptr && !*ptr) {
  ------------------
  |  Branch (2060:8): [True: 15, False: 0]
  |  Branch (2060:15): [True: 9, False: 6]
  ------------------
 2061|      9|      ptr = Curl_get_content_encodings();
 2062|      9|      if(ptr) {
  ------------------
  |  Branch (2062:10): [True: 9, False: 0]
  ------------------
 2063|      9|        curlx_free(s->str[STRING_ENCODING]);
  ------------------
  |  | 1488|      9|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
 2064|      9|        s->str[STRING_ENCODING] = ptr;
 2065|      9|      }
 2066|      0|      else
 2067|      0|        result = CURLE_OUT_OF_MEMORY;
 2068|      9|      return result;
 2069|      9|    }
 2070|      6|    return Curl_setstropt(&s->str[STRING_ENCODING], ptr);
 2071|       |
 2072|      0|#ifndef CURL_DISABLE_AWS
 2073|     13|  case CURLOPT_AWS_SIGV4:
  ------------------
  |  Branch (2073:3): [True: 13, False: 45.0k]
  ------------------
 2074|       |    /*
 2075|       |     * String that is merged to some authentication
 2076|       |     * parameters are used by the algorithm.
 2077|       |     */
 2078|     13|    result = Curl_setstropt(&s->str[STRING_AWS_SIGV4], ptr);
 2079|       |    /*
 2080|       |     * Basic has been set by default; it needs to be unset here.
 2081|       |     */
 2082|     13|    if(s->str[STRING_AWS_SIGV4])
  ------------------
  |  Branch (2082:8): [True: 13, False: 0]
  ------------------
 2083|     13|      s->httpauth = CURLAUTH_AWS_SIGV4;
  ------------------
  |  |  845|     13|#define CURLAUTH_AWS_SIGV4    (((unsigned long)1) << 7)
  ------------------
 2084|     13|    break;
 2085|      0|#endif
 2086|     13|  case CURLOPT_REFERER:
  ------------------
  |  Branch (2086:3): [True: 13, False: 45.0k]
  ------------------
 2087|       |    /*
 2088|       |     * String to set in the HTTP Referer: field.
 2089|       |     */
 2090|     13|    Curl_bufref_free(&data->state.referer);
 2091|     13|    result = Curl_setstropt(&s->str[STRING_SET_REFERER], ptr);
 2092|     13|    break;
 2093|       |
 2094|      7|  case CURLOPT_USERAGENT:
  ------------------
  |  Branch (2094:3): [True: 7, False: 45.0k]
  ------------------
 2095|       |    /*
 2096|       |     * String to use in the HTTP User-Agent field
 2097|       |     */
 2098|      7|    return Curl_setstropt(&s->str[STRING_USERAGENT], ptr);
 2099|       |
 2100|      0|#ifndef CURL_DISABLE_COOKIES
 2101|      7|  case CURLOPT_COOKIE:
  ------------------
  |  Branch (2101:3): [True: 7, False: 45.0k]
  ------------------
 2102|       |    /*
 2103|       |     * Cookie string to send to the remote server in the request.
 2104|       |     */
 2105|      7|    return Curl_setstropt(&s->str[STRING_COOKIE], ptr);
 2106|       |
 2107|  4.73k|  case CURLOPT_COOKIEFILE:
  ------------------
  |  Branch (2107:3): [True: 4.73k, False: 40.3k]
  ------------------
 2108|  4.73k|    return cookiefile(data, ptr);
 2109|       |
 2110|  4.73k|  case CURLOPT_COOKIEJAR:
  ------------------
  |  Branch (2110:3): [True: 4.73k, False: 40.3k]
  ------------------
 2111|       |    /*
 2112|       |     * Set cookie filename to dump all cookies to when we are done.
 2113|       |     */
 2114|  4.73k|    result = Curl_setstropt(&s->str[STRING_COOKIEJAR], ptr);
 2115|  4.73k|    if(!result) {
  ------------------
  |  Branch (2115:8): [True: 4.73k, False: 0]
  ------------------
 2116|       |      /*
 2117|       |       * Activate the cookie parser. This may or may not already
 2118|       |       * have been made.
 2119|       |       */
 2120|  4.73k|      if(!data->cookies)
  ------------------
  |  Branch (2120:10): [True: 2.84k, False: 1.88k]
  ------------------
 2121|  2.84k|        data->cookies = Curl_cookie_init();
 2122|  4.73k|      if(!data->cookies)
  ------------------
  |  Branch (2122:10): [True: 0, False: 4.73k]
  ------------------
 2123|      0|        result = CURLE_OUT_OF_MEMORY;
 2124|  4.73k|      else
 2125|  4.73k|        data->state.cookie_engine = TRUE;
  ------------------
  |  | 1051|  4.73k|#define TRUE true
  ------------------
 2126|  4.73k|    }
 2127|  4.73k|    break;
 2128|       |
 2129|  1.94k|  case CURLOPT_COOKIELIST:
  ------------------
  |  Branch (2129:3): [True: 1.94k, False: 43.1k]
  ------------------
 2130|  1.94k|    return cookielist(data, ptr);
 2131|      0|#endif /* !CURL_DISABLE_COOKIES */
 2132|       |
 2133|      0|#endif /* !CURL_DISABLE_HTTP */
 2134|  33.6k|  default:
  ------------------
  |  Branch (2134:3): [True: 33.6k, False: 11.4k]
  ------------------
 2135|  33.6k|    return CURLE_UNKNOWN_OPTION;
 2136|  45.1k|  }
 2137|  4.76k|  return result;
 2138|  45.1k|}
setopt.c:cookiefile:
 1583|  4.73k|{
 1584|       |  /*
 1585|       |   * Set cookie file to read and parse. Can be used multiple times.
 1586|       |   */
 1587|  4.73k|  if(ptr) {
  ------------------
  |  Branch (1587:6): [True: 4.73k, False: 0]
  ------------------
 1588|  4.73k|    struct curl_slist *cl;
 1589|       |    /* general protection against mistakes and abuse */
 1590|  4.73k|    if(strlen(ptr) > CURL_MAX_INPUT_LENGTH)
  ------------------
  |  |   45|  4.73k|#define CURL_MAX_INPUT_LENGTH 8000000
  ------------------
  |  Branch (1590:8): [True: 0, False: 4.73k]
  ------------------
 1591|      0|      return CURLE_BAD_FUNCTION_ARGUMENT;
 1592|       |    /* append the cookie filename to the list of filenames, and deal with
 1593|       |       them later */
 1594|  4.73k|    cl = curl_slist_append(data->state.cookielist, ptr);
 1595|  4.73k|    if(!cl) {
  ------------------
  |  Branch (1595:8): [True: 0, False: 4.73k]
  ------------------
 1596|      0|      curl_slist_free_all(data->state.cookielist);
 1597|      0|      data->state.cookielist = NULL;
 1598|      0|      return CURLE_OUT_OF_MEMORY;
 1599|      0|    }
 1600|  4.73k|    data->state.cookielist = cl; /* store the list for later use */
 1601|  4.73k|  }
 1602|      0|  else {
 1603|       |    /* clear the list of cookie files */
 1604|      0|    curl_slist_free_all(data->state.cookielist);
 1605|      0|    data->state.cookielist = NULL;
 1606|       |
 1607|      0|    if(!data->share || !data->share->cookies) {
  ------------------
  |  Branch (1607:8): [True: 0, False: 0]
  |  Branch (1607:24): [True: 0, False: 0]
  ------------------
 1608|       |      /* throw away all existing cookies if this is not a shared cookie
 1609|       |         container */
 1610|      0|      Curl_cookie_clearall(data->cookies);
 1611|      0|      Curl_cookie_cleanup(data->cookies);
 1612|      0|    }
 1613|       |    /* disable the cookie engine */
 1614|      0|    data->cookies = NULL;
 1615|      0|  }
 1616|  4.73k|  return CURLE_OK;
 1617|  4.73k|}
setopt.c:cookielist:
 1530|  1.94k|{
 1531|  1.94k|  CURLcode result = CURLE_OK;
 1532|  1.94k|  if(!ptr)
  ------------------
  |  Branch (1532:6): [True: 0, False: 1.94k]
  ------------------
 1533|      0|    return CURLE_OK;
 1534|       |
 1535|  1.94k|  if(curl_strequal(ptr, "ALL")) {
  ------------------
  |  Branch (1535:6): [True: 1, False: 1.94k]
  ------------------
 1536|       |    /* clear all cookies */
 1537|      1|    Curl_share_lock(data, CURL_LOCK_DATA_COOKIE, CURL_LOCK_ACCESS_SINGLE);
 1538|      1|    Curl_cookie_clearall(data->cookies);
 1539|      1|    Curl_share_unlock(data, CURL_LOCK_DATA_COOKIE);
 1540|      1|  }
 1541|  1.94k|  else if(curl_strequal(ptr, "SESS")) {
  ------------------
  |  Branch (1541:11): [True: 1, False: 1.94k]
  ------------------
 1542|       |    /* clear session cookies */
 1543|      1|    Curl_share_lock(data, CURL_LOCK_DATA_COOKIE, CURL_LOCK_ACCESS_SINGLE);
 1544|      1|    Curl_cookie_clearsess(data->cookies);
 1545|      1|    Curl_share_unlock(data, CURL_LOCK_DATA_COOKIE);
 1546|      1|  }
 1547|  1.94k|  else if(curl_strequal(ptr, "FLUSH")) {
  ------------------
  |  Branch (1547:11): [True: 1, False: 1.94k]
  ------------------
 1548|       |    /* flush cookies to file, takes care of the locking */
 1549|      1|    Curl_flush_cookies(data, FALSE);
  ------------------
  |  | 1054|      1|#define FALSE false
  ------------------
 1550|      1|  }
 1551|  1.94k|  else if(curl_strequal(ptr, "RELOAD")) {
  ------------------
  |  Branch (1551:11): [True: 1, False: 1.94k]
  ------------------
 1552|       |    /* reload cookies from file */
 1553|      1|    return Curl_cookie_loadfiles(data);
 1554|      1|  }
 1555|  1.94k|  else {
 1556|  1.94k|    if(!data->cookies) {
  ------------------
  |  Branch (1556:8): [True: 1.94k, False: 0]
  ------------------
 1557|       |      /* if cookie engine was not running, activate it */
 1558|  1.94k|      data->cookies = Curl_cookie_init();
 1559|  1.94k|      if(!data->cookies)
  ------------------
  |  Branch (1559:10): [True: 0, False: 1.94k]
  ------------------
 1560|      0|        return CURLE_OUT_OF_MEMORY;
 1561|  1.94k|      data->state.cookie_engine = TRUE;
  ------------------
  |  | 1051|  1.94k|#define TRUE true
  ------------------
 1562|  1.94k|    }
 1563|       |
 1564|       |    /* general protection against mistakes and abuse */
 1565|  1.94k|    if(strlen(ptr) > CURL_MAX_INPUT_LENGTH)
  ------------------
  |  |   45|  1.94k|#define CURL_MAX_INPUT_LENGTH 8000000
  ------------------
  |  Branch (1565:8): [True: 0, False: 1.94k]
  ------------------
 1566|      0|      return CURLE_BAD_FUNCTION_ARGUMENT;
 1567|       |
 1568|  1.94k|    Curl_share_lock(data, CURL_LOCK_DATA_COOKIE, CURL_LOCK_ACCESS_SINGLE);
 1569|  1.94k|    if(checkprefix("Set-Cookie:", ptr))
  ------------------
  |  |   33|  1.94k|#define checkprefix(a, b) curl_strnequal(b, STRCONST(a))
  |  |  ------------------
  |  |  |  | 1297|  1.94k|#define STRCONST(x) x, sizeof(x) - 1
  |  |  ------------------
  |  |  |  Branch (33:27): [True: 1.25k, False: 689]
  |  |  ------------------
  ------------------
 1570|       |      /* HTTP Header format line */
 1571|  1.25k|      result = Curl_cookie_add(data, data->cookies, TRUE, FALSE, ptr + 11,
  ------------------
  |  | 1051|  1.25k|#define TRUE true
  ------------------
                    result = Curl_cookie_add(data, data->cookies, TRUE, FALSE, ptr + 11,
  ------------------
  |  | 1054|  1.25k|#define FALSE false
  ------------------
 1572|  1.25k|                               NULL, NULL, TRUE);
  ------------------
  |  | 1051|  1.25k|#define TRUE true
  ------------------
 1573|    689|    else
 1574|       |      /* Netscape format line */
 1575|    689|      result = Curl_cookie_add(data, data->cookies, FALSE, FALSE, ptr, NULL,
  ------------------
  |  | 1054|    689|#define FALSE false
  ------------------
                    result = Curl_cookie_add(data, data->cookies, FALSE, FALSE, ptr, NULL,
  ------------------
  |  | 1054|    689|#define FALSE false
  ------------------
 1576|    689|                               NULL, TRUE);
  ------------------
  |  | 1051|    689|#define TRUE true
  ------------------
 1577|  1.94k|    Curl_share_unlock(data, CURL_LOCK_DATA_COOKIE);
 1578|  1.94k|  }
 1579|  1.94k|  return result;
 1580|  1.94k|}
setopt.c:setopt_cptr_net:
 2233|  33.6k|{
 2234|  33.6k|  struct UserDefined *s = &data->set;
 2235|  33.6k|  switch(option) {
 2236|    130|  case CURLOPT_INTERFACE:
  ------------------
  |  Branch (2236:3): [True: 130, False: 33.4k]
  ------------------
 2237|       |    /*
 2238|       |     * Set what interface or address/hostname to bind the socket to when
 2239|       |     * performing an operation and thus what from-IP your connection will use.
 2240|       |     */
 2241|    130|    return setstropt_interface(ptr,
 2242|    130|                               &s->str[STRING_DEVICE],
 2243|    130|                               &s->str[STRING_INTERFACE],
 2244|    130|                               &s->str[STRING_BINDHOST]);
 2245|       |#ifdef USE_RESOLV_ARES
 2246|       |  case CURLOPT_DNS_SERVERS:
 2247|       |    return Curl_setstropt(&s->str[STRING_DNS_SERVERS], ptr);
 2248|       |
 2249|       |  case CURLOPT_DNS_INTERFACE:
 2250|       |    return Curl_setstropt(&s->str[STRING_DNS_INTERFACE], ptr);
 2251|       |
 2252|       |  case CURLOPT_DNS_LOCAL_IP4:
 2253|       |    return Curl_setstropt(&s->str[STRING_DNS_LOCAL_IP4], ptr);
 2254|       |
 2255|       |  case CURLOPT_DNS_LOCAL_IP6:
 2256|       |    return Curl_setstropt(&s->str[STRING_DNS_LOCAL_IP6], ptr);
 2257|       |#endif
 2258|      0|#ifdef USE_UNIX_SOCKETS
 2259|      3|  case CURLOPT_UNIX_SOCKET_PATH:
  ------------------
  |  Branch (2259:3): [True: 3, False: 33.6k]
  ------------------
 2260|      3|    s->abstract_unix_socket = FALSE;
  ------------------
  |  | 1054|      3|#define FALSE false
  ------------------
 2261|      3|    return Curl_setstropt(&s->str[STRING_UNIX_SOCKET_PATH], ptr);
 2262|       |
 2263|     12|  case CURLOPT_ABSTRACT_UNIX_SOCKET:
  ------------------
  |  Branch (2263:3): [True: 12, False: 33.6k]
  ------------------
 2264|     12|    s->abstract_unix_socket = TRUE;
  ------------------
  |  | 1051|     12|#define TRUE true
  ------------------
 2265|     12|    return Curl_setstropt(&s->str[STRING_UNIX_SOCKET_PATH], ptr);
 2266|      0|#endif
 2267|      0|#ifndef CURL_DISABLE_DOH
 2268|      4|  case CURLOPT_DOH_URL:
  ------------------
  |  Branch (2268:3): [True: 4, False: 33.6k]
  ------------------
 2269|      4|    {
 2270|      4|      CURLcode result = Curl_setstropt(&s->str[STRING_DOH], ptr);
 2271|      4|      s->doh = !!(s->str[STRING_DOH]);
 2272|      4|      return result;
 2273|      0|    }
 2274|      0|#endif
 2275|  33.4k|  default:
  ------------------
  |  Branch (2275:3): [True: 33.4k, False: 149]
  ------------------
 2276|  33.4k|    return CURLE_UNKNOWN_OPTION;
 2277|  33.6k|  }
 2278|  33.6k|}
setopt.c:setstropt_interface:
  165|    130|{
  166|    130|  char *dev = NULL;
  167|    130|  char *iface = NULL;
  168|    130|  char *host = NULL;
  169|    130|  CURLcode result;
  170|       |
  171|    130|  DEBUGASSERT(devp);
  ------------------
  |  | 1077|    130|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (171:3): [True: 0, False: 130]
  |  Branch (171:3): [True: 130, False: 0]
  ------------------
  172|    130|  DEBUGASSERT(ifacep);
  ------------------
  |  | 1077|    130|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (172:3): [True: 0, False: 130]
  |  Branch (172:3): [True: 130, False: 0]
  ------------------
  173|    130|  DEBUGASSERT(hostp);
  ------------------
  |  | 1077|    130|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (173:3): [True: 0, False: 130]
  |  Branch (173:3): [True: 130, False: 0]
  ------------------
  174|       |
  175|    130|  if(option) {
  ------------------
  |  Branch (175:6): [True: 130, False: 0]
  ------------------
  176|       |    /* Parse the interface details if set, otherwise clear them all */
  177|    130|    result = Curl_parse_interface(option, &dev, &iface, &host);
  178|    130|    if(result)
  ------------------
  |  Branch (178:8): [True: 6, False: 124]
  ------------------
  179|      6|      return result;
  180|    130|  }
  181|    124|  curlx_free(*devp);
  ------------------
  |  | 1488|    124|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  182|    124|  *devp = dev;
  183|       |
  184|    124|  curlx_free(*ifacep);
  ------------------
  |  | 1488|    124|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  185|    124|  *ifacep = iface;
  186|       |
  187|    124|  curlx_free(*hostp);
  ------------------
  |  | 1488|    124|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  188|    124|  *hostp = host;
  189|       |
  190|    124|  return CURLE_OK;
  191|    130|}
setopt.c:setopt_cptr_misc:
 2282|  33.4k|{
 2283|  33.4k|  CURLcode result = CURLE_OK;
 2284|  33.4k|  struct UserDefined *s = &data->set;
 2285|       |
 2286|  33.4k|  switch(option) {
 2287|     14|  case CURLOPT_REQUEST_TARGET:
  ------------------
  |  Branch (2287:3): [True: 14, False: 33.4k]
  ------------------
 2288|     14|    return Curl_setstropt(&s->str[STRING_TARGET], ptr);
 2289|      0|#ifndef CURL_DISABLE_NETRC
 2290|  4.73k|  case CURLOPT_NETRC_FILE:
  ------------------
  |  Branch (2290:3): [True: 4.73k, False: 28.7k]
  ------------------
 2291|  4.73k|    return Curl_setstropt(&s->str[STRING_NETRC_FILE], ptr);
 2292|      0|#endif
 2293|      6|  case CURLOPT_CUSTOMREQUEST:
  ------------------
  |  Branch (2293:3): [True: 6, False: 33.4k]
  ------------------
 2294|      6|    return Curl_setstropt(&s->str[STRING_CUSTOMREQUEST], ptr);
 2295|       |
 2296|       |    /* we do not set s->method = HTTPREQ_CUSTOM; here, we continue as if we
 2297|       |       were using the already set type and this changes the actual request
 2298|       |       keyword */
 2299|     15|  case CURLOPT_SERVICE_NAME:
  ------------------
  |  Branch (2299:3): [True: 15, False: 33.4k]
  ------------------
 2300|     15|    return Curl_setstropt(&s->str[STRING_SERVICE_NAME], ptr);
 2301|       |
 2302|      0|  case CURLOPT_HEADERDATA:
  ------------------
  |  Branch (2302:3): [True: 0, False: 33.4k]
  ------------------
 2303|      0|    s->writeheader = ptr;
 2304|      0|    break;
 2305|  4.73k|  case CURLOPT_READDATA:
  ------------------
  |  Branch (2305:3): [True: 4.73k, False: 28.7k]
  ------------------
 2306|  4.73k|    s->in_set = ptr;
 2307|  4.73k|    break;
 2308|  4.73k|  case CURLOPT_WRITEDATA:
  ------------------
  |  Branch (2308:3): [True: 4.73k, False: 28.7k]
  ------------------
 2309|  4.73k|    s->out = ptr;
 2310|  4.73k|    break;
 2311|      0|  case CURLOPT_DEBUGDATA:
  ------------------
  |  Branch (2311:3): [True: 0, False: 33.4k]
  ------------------
 2312|      0|    s->debugdata = ptr;
 2313|      0|    break;
 2314|      0|  case CURLOPT_PROGRESSDATA:
  ------------------
  |  | 1343|      0|#define CURLOPT_PROGRESSDATA CURLOPT_XFERINFODATA
  ------------------
  |  Branch (2314:3): [True: 0, False: 33.4k]
  ------------------
 2315|      0|    s->progress_client = ptr;
 2316|      0|    break;
 2317|      0|  case CURLOPT_SEEKDATA:
  ------------------
  |  Branch (2317:3): [True: 0, False: 33.4k]
  ------------------
 2318|      0|    s->seek_client = ptr;
 2319|      0|    break;
 2320|      0|  case CURLOPT_IOCTLDATA:
  ------------------
  |  Branch (2320:3): [True: 0, False: 33.4k]
  ------------------
 2321|      0|    s->ioctl_client = ptr;
 2322|      0|    break;
 2323|      0|  case CURLOPT_SOCKOPTDATA:
  ------------------
  |  Branch (2323:3): [True: 0, False: 33.4k]
  ------------------
 2324|      0|    s->sockopt_client = ptr;
 2325|      0|    break;
 2326|  4.73k|  case CURLOPT_OPENSOCKETDATA:
  ------------------
  |  Branch (2326:3): [True: 4.73k, False: 28.7k]
  ------------------
 2327|  4.73k|    s->opensocket_client = ptr;
 2328|  4.73k|    break;
 2329|      0|  case CURLOPT_RESOLVER_START_DATA:
  ------------------
  |  Branch (2329:3): [True: 0, False: 33.4k]
  ------------------
 2330|      0|    s->resolver_start_client = ptr;
 2331|      0|    break;
 2332|      0|  case CURLOPT_CLOSESOCKETDATA:
  ------------------
  |  Branch (2332:3): [True: 0, False: 33.4k]
  ------------------
 2333|      0|    s->closesocket_client = ptr;
 2334|      0|    break;
 2335|      0|  case CURLOPT_PREREQDATA:
  ------------------
  |  Branch (2335:3): [True: 0, False: 33.4k]
  ------------------
 2336|      0|    s->prereq_userp = ptr;
 2337|      0|    break;
 2338|      0|  case CURLOPT_ERRORBUFFER:
  ------------------
  |  Branch (2338:3): [True: 0, False: 33.4k]
  ------------------
 2339|      0|    s->errorbuffer = ptr;
 2340|      0|    break;
 2341|     31|  case CURLOPT_URL:
  ------------------
  |  Branch (2341:3): [True: 31, False: 33.4k]
  ------------------
 2342|     31|    result = Curl_setstropt(&s->str[STRING_SET_URL], ptr);
 2343|     31|    Curl_bufref_set(&data->state.url, s->str[STRING_SET_URL], 0, NULL);
 2344|     31|    break;
 2345|       |
 2346|     19|  case CURLOPT_USERPWD:
  ------------------
  |  Branch (2346:3): [True: 19, False: 33.4k]
  ------------------
 2347|     19|    return setstropt_userpwd(ptr, &s->str[STRING_USERNAME],
 2348|     19|                             &s->str[STRING_PASSWORD]);
 2349|       |
 2350|     16|  case CURLOPT_USERNAME:
  ------------------
  |  Branch (2350:3): [True: 16, False: 33.4k]
  ------------------
 2351|     16|    return Curl_setstropt(&s->str[STRING_USERNAME], ptr);
 2352|       |
 2353|     19|  case CURLOPT_PASSWORD:
  ------------------
  |  Branch (2353:3): [True: 19, False: 33.4k]
  ------------------
 2354|     19|    return Curl_setstropt(&s->str[STRING_PASSWORD], ptr);
 2355|       |
 2356|     10|  case CURLOPT_LOGIN_OPTIONS:
  ------------------
  |  Branch (2356:3): [True: 10, False: 33.4k]
  ------------------
 2357|     10|    return Curl_setstropt(&s->str[STRING_OPTIONS], ptr);
 2358|       |
 2359|      7|  case CURLOPT_XOAUTH2_BEARER:
  ------------------
  |  Branch (2359:3): [True: 7, False: 33.4k]
  ------------------
 2360|      7|    return Curl_setstropt(&s->str[STRING_BEARER], ptr);
 2361|     14|  case CURLOPT_RANGE:
  ------------------
  |  Branch (2361:3): [True: 14, False: 33.4k]
  ------------------
 2362|     14|    return Curl_setstropt(&s->str[STRING_SET_RANGE], ptr);
 2363|      0|  case CURLOPT_PRIVATE:
  ------------------
  |  Branch (2363:3): [True: 0, False: 33.4k]
  ------------------
 2364|      0|    s->private_data = ptr;
 2365|      0|    break;
 2366|  4.73k|  case CURLOPT_PROTOCOLS_STR:
  ------------------
  |  Branch (2366:3): [True: 4.73k, False: 28.7k]
  ------------------
 2367|  4.73k|    if(ptr) {
  ------------------
  |  Branch (2367:8): [True: 4.73k, False: 0]
  ------------------
 2368|  4.73k|      curl_prot_t protos;
 2369|  4.73k|      result = protocol2num(ptr, &protos);
 2370|  4.73k|      if(!result)
  ------------------
  |  Branch (2370:10): [True: 0, False: 4.73k]
  ------------------
 2371|      0|        s->allowed_protocols = protos;
 2372|  4.73k|    }
 2373|      0|    else
 2374|       |      /* make a NULL argument reset to default */
 2375|      0|      s->allowed_protocols = (curl_prot_t)CURLPROTO_64ALL;
  ------------------
  |  |   68|      0|#define CURLPROTO_64ALL ((uint64_t)0xffffffffffffffff)
  ------------------
 2376|  4.73k|    break;
 2377|     55|  case CURLOPT_REDIR_PROTOCOLS_STR:
  ------------------
  |  Branch (2377:3): [True: 55, False: 33.4k]
  ------------------
 2378|     55|    if(ptr) {
  ------------------
  |  Branch (2378:8): [True: 55, False: 0]
  ------------------
 2379|     55|      curl_prot_t protos;
 2380|     55|      result = protocol2num(ptr, &protos);
 2381|     55|      if(!result)
  ------------------
  |  Branch (2381:10): [True: 10, False: 45]
  ------------------
 2382|     10|        s->redir_protocols = protos;
 2383|     55|    }
 2384|      0|    else
 2385|       |      /* make a NULL argument reset to default */
 2386|      0|      s->redir_protocols = (curl_prot_t)CURLPROTO_REDIR;
  ------------------
  |  |   71|      0|#define CURLPROTO_REDIR (CURLPROTO_HTTP | CURLPROTO_HTTPS | CURLPROTO_FTP | \
  |  |  ------------------
  |  |  |  | 1078|      0|#define CURLPROTO_HTTP    (1L << 0)
  |  |  ------------------
  |  |               #define CURLPROTO_REDIR (CURLPROTO_HTTP | CURLPROTO_HTTPS | CURLPROTO_FTP | \
  |  |  ------------------
  |  |  |  | 1079|      0|#define CURLPROTO_HTTPS   (1L << 1)
  |  |  ------------------
  |  |               #define CURLPROTO_REDIR (CURLPROTO_HTTP | CURLPROTO_HTTPS | CURLPROTO_FTP | \
  |  |  ------------------
  |  |  |  | 1080|      0|#define CURLPROTO_FTP     (1L << 2)
  |  |  ------------------
  |  |   72|      0|                         CURLPROTO_FTPS)
  |  |  ------------------
  |  |  |  | 1081|      0|#define CURLPROTO_FTPS    (1L << 3)
  |  |  ------------------
  ------------------
 2387|     55|    break;
 2388|     12|  case CURLOPT_DEFAULT_PROTOCOL:
  ------------------
  |  Branch (2388:3): [True: 12, False: 33.4k]
  ------------------
 2389|       |    /* Set the protocol to use when the URL does not include any protocol */
 2390|     12|    return Curl_setstropt(&s->str[STRING_DEFAULT_PROTOCOL], ptr);
 2391|      0|#ifndef CURL_DISABLE_SMTP
 2392|     18|  case CURLOPT_MAIL_FROM:
  ------------------
  |  Branch (2392:3): [True: 18, False: 33.4k]
  ------------------
 2393|       |    /* Set the SMTP mail originator */
 2394|     18|    return Curl_setstropt(&s->str[STRING_MAIL_FROM], ptr);
 2395|     17|  case CURLOPT_MAIL_AUTH:
  ------------------
  |  Branch (2395:3): [True: 17, False: 33.4k]
  ------------------
 2396|       |    /* Set the SMTP auth originator */
 2397|     17|    return Curl_setstropt(&s->str[STRING_MAIL_AUTH], ptr);
 2398|      0|#endif
 2399|     14|  case CURLOPT_SASL_AUTHZID:
  ------------------
  |  Branch (2399:3): [True: 14, False: 33.4k]
  ------------------
 2400|       |    /* Authorization identity (identity to act as) */
 2401|     14|    return Curl_setstropt(&s->str[STRING_SASL_AUTHZID], ptr);
 2402|      0|#ifndef CURL_DISABLE_RTSP
 2403|     17|  case CURLOPT_RTSP_SESSION_ID:
  ------------------
  |  Branch (2403:3): [True: 17, False: 33.4k]
  ------------------
 2404|     17|    return Curl_setstropt(&s->str[STRING_RTSP_SESSION_ID], ptr);
 2405|     13|  case CURLOPT_RTSP_STREAM_URI:
  ------------------
  |  Branch (2405:3): [True: 13, False: 33.4k]
  ------------------
 2406|     13|    return Curl_setstropt(&s->str[STRING_RTSP_STREAM_URI], ptr);
 2407|     14|  case CURLOPT_RTSP_TRANSPORT:
  ------------------
  |  Branch (2407:3): [True: 14, False: 33.4k]
  ------------------
 2408|     14|    return Curl_setstropt(&s->str[STRING_RTSP_TRANSPORT], ptr);
 2409|      0|  case CURLOPT_INTERLEAVEDATA:
  ------------------
  |  Branch (2409:3): [True: 0, False: 33.4k]
  ------------------
 2410|      0|    s->rtp_out = ptr;
 2411|      0|    break;
 2412|      0|#endif /* !CURL_DISABLE_RTSP */
 2413|      1|  case CURLOPT_TLSAUTH_USERNAME:
  ------------------
  |  Branch (2413:3): [True: 1, False: 33.4k]
  ------------------
 2414|      2|  case CURLOPT_TLSAUTH_PASSWORD:
  ------------------
  |  Branch (2414:3): [True: 1, False: 33.4k]
  ------------------
 2415|      5|  case CURLOPT_TLSAUTH_TYPE:
  ------------------
  |  Branch (2415:3): [True: 3, False: 33.4k]
  ------------------
 2416|      6|  case CURLOPT_PROXY_TLSAUTH_USERNAME:
  ------------------
  |  Branch (2416:3): [True: 1, False: 33.4k]
  ------------------
 2417|      7|  case CURLOPT_PROXY_TLSAUTH_PASSWORD:
  ------------------
  |  Branch (2417:3): [True: 1, False: 33.4k]
  ------------------
 2418|      9|  case CURLOPT_PROXY_TLSAUTH_TYPE:
  ------------------
  |  Branch (2418:3): [True: 2, False: 33.4k]
  ------------------
 2419|      9|    return CURLE_NOT_BUILT_IN;
 2420|      0|#ifndef CURL_DISABLE_HSTS
 2421|      0|  case CURLOPT_HSTSREADDATA:
  ------------------
  |  Branch (2421:3): [True: 0, False: 33.4k]
  ------------------
 2422|      0|    s->hsts_read_userp = ptr;
 2423|      0|    break;
 2424|      0|  case CURLOPT_HSTSWRITEDATA:
  ------------------
  |  Branch (2424:3): [True: 0, False: 33.4k]
  ------------------
 2425|      0|    s->hsts_write_userp = ptr;
 2426|      0|    break;
 2427|  4.73k|  case CURLOPT_HSTS: {
  ------------------
  |  Branch (2427:3): [True: 4.73k, False: 28.7k]
  ------------------
 2428|  4.73k|    struct curl_slist *h;
 2429|  4.73k|    if(!data->hsts) {
  ------------------
  |  Branch (2429:8): [True: 4.73k, False: 2]
  ------------------
 2430|  4.73k|      data->hsts = Curl_hsts_init();
 2431|  4.73k|      if(!data->hsts)
  ------------------
  |  Branch (2431:10): [True: 0, False: 4.73k]
  ------------------
 2432|      0|        return CURLE_OUT_OF_MEMORY;
 2433|  4.73k|    }
 2434|  4.73k|    if(ptr) {
  ------------------
  |  Branch (2434:8): [True: 4.73k, False: 0]
  ------------------
 2435|  4.73k|      result = Curl_setstropt(&s->str[STRING_HSTS], ptr);
 2436|  4.73k|      if(result)
  ------------------
  |  Branch (2436:10): [True: 0, False: 4.73k]
  ------------------
 2437|      0|        return result;
 2438|       |      /* this needs to build a list of filenames to read from, so that it can
 2439|       |         read them later, as we might get a shared HSTS handle to load them
 2440|       |         into */
 2441|  4.73k|      h = curl_slist_append(data->state.hstslist, ptr);
 2442|  4.73k|      if(!h) {
  ------------------
  |  Branch (2442:10): [True: 0, False: 4.73k]
  ------------------
 2443|      0|        curl_slist_free_all(data->state.hstslist);
 2444|      0|        data->state.hstslist = NULL;
 2445|      0|        return CURLE_OUT_OF_MEMORY;
 2446|      0|      }
 2447|  4.73k|      data->state.hstslist = h; /* store the list for later use */
 2448|  4.73k|    }
 2449|      0|    else {
 2450|       |      /* clear the list of HSTS files */
 2451|      0|      curl_slist_free_all(data->state.hstslist);
 2452|      0|      data->state.hstslist = NULL;
 2453|      0|      if(!data->share || !data->share->hsts)
  ------------------
  |  Branch (2453:10): [True: 0, False: 0]
  |  Branch (2453:26): [True: 0, False: 0]
  ------------------
 2454|       |        /* throw away the HSTS cache unless shared */
 2455|      0|        Curl_hsts_cleanup(&data->hsts);
 2456|      0|    }
 2457|  4.73k|    break;
 2458|  4.73k|  }
 2459|  4.73k|#endif /* !CURL_DISABLE_HSTS */
 2460|  4.73k|#ifndef CURL_DISABLE_ALTSVC
 2461|  4.73k|  case CURLOPT_ALTSVC:
  ------------------
  |  Branch (2461:3): [True: 4.73k, False: 28.7k]
  ------------------
 2462|  4.73k|    if(!data->asi) {
  ------------------
  |  Branch (2462:8): [True: 4.70k, False: 31]
  ------------------
 2463|  4.70k|      data->asi = Curl_altsvc_init();
 2464|  4.70k|      if(!data->asi)
  ------------------
  |  Branch (2464:10): [True: 0, False: 4.70k]
  ------------------
 2465|      0|        return CURLE_OUT_OF_MEMORY;
 2466|  4.70k|    }
 2467|  4.73k|    result = Curl_setstropt(&s->str[STRING_ALTSVC], ptr);
 2468|  4.73k|    if(result)
  ------------------
  |  Branch (2468:8): [True: 0, False: 4.73k]
  ------------------
 2469|      0|      break;
 2470|  4.73k|    if(ptr)
  ------------------
  |  Branch (2470:8): [True: 4.73k, False: 0]
  ------------------
 2471|  4.73k|      return Curl_altsvc_load(data->asi, ptr);
 2472|      0|    break;
 2473|      0|#endif /* !CURL_DISABLE_ALTSVC */
 2474|      0|  case CURLOPT_ECH:
  ------------------
  |  Branch (2474:3): [True: 0, False: 33.4k]
  ------------------
 2475|      0|    return setopt_ech(data, ptr);
  ------------------
  |  | 1880|      0|#define setopt_ech(x,y) CURLE_NOT_BUILT_IN
  ------------------
 2476|     13|  default:
  ------------------
  |  Branch (2476:3): [True: 13, False: 33.4k]
  ------------------
 2477|     13|    return CURLE_UNKNOWN_OPTION;
 2478|  33.4k|  }
 2479|  23.7k|  return result;
 2480|  33.4k|}
setopt.c:protocol2num:
  199|  4.79k|{
  200|       |  /*
  201|       |   * We are asked to cherry-pick protocols, so play it safe and disallow all
  202|       |   * protocols to start with, and re-add the wanted ones back in.
  203|       |   */
  204|  4.79k|  *val = 0;
  205|       |
  206|  4.79k|  if(!str)
  ------------------
  |  Branch (206:6): [True: 0, False: 4.79k]
  ------------------
  207|      0|    return CURLE_BAD_FUNCTION_ARGUMENT;
  208|       |
  209|  4.79k|  if(curl_strequal(str, "all")) {
  ------------------
  |  Branch (209:6): [True: 1, False: 4.78k]
  ------------------
  210|      1|    *val = ~(curl_prot_t)0;
  211|      1|    return CURLE_OK;
  212|      1|  }
  213|       |
  214|  76.1k|  do {
  215|  76.1k|    const char *token = str;
  216|  76.1k|    size_t tlen;
  217|       |
  218|  76.1k|    str = strchr(str, ',');
  219|  76.1k|    tlen = str ? (size_t)(str - token) : strlen(token);
  ------------------
  |  Branch (219:12): [True: 76.0k, False: 53]
  ------------------
  220|  76.1k|    if(tlen) {
  ------------------
  |  Branch (220:8): [True: 75.9k, False: 231]
  ------------------
  221|  75.9k|      const struct Curl_scheme *h = Curl_getn_scheme(token, tlen);
  222|       |
  223|  75.9k|      if(!h || !h->run)
  ------------------
  |  Branch (223:10): [True: 4.76k, False: 71.1k]
  |  Branch (223:16): [True: 2, False: 71.1k]
  ------------------
  224|  4.77k|        return CURLE_UNSUPPORTED_PROTOCOL;
  225|       |
  226|  71.1k|      *val |= h->protocol;
  227|  71.1k|    }
  228|  76.1k|  } while(str && str++);
  ------------------
  |  Branch (228:11): [True: 71.3k, False: 19]
  |  Branch (228:18): [True: 71.3k, False: 0]
  ------------------
  229|       |
  230|     19|  if(!*val)
  ------------------
  |  Branch (230:6): [True: 10, False: 9]
  ------------------
  231|       |    /* no protocol listed */
  232|     10|    return CURLE_BAD_FUNCTION_ARGUMENT;
  233|      9|  return CURLE_OK;
  234|     19|}
setopt.c:setopt_func:
 2518|  18.9k|{
 2519|  18.9k|  struct UserDefined *s = &data->set;
 2520|  18.9k|  switch(option) {
 2521|      0|  case CURLOPT_PROGRESSFUNCTION:
  ------------------
  |  Branch (2521:3): [True: 0, False: 18.9k]
  ------------------
 2522|       |    /*
 2523|       |     * Progress callback function
 2524|       |     */
 2525|      0|    s->fprogress = va_arg(param, curl_progress_callback);
 2526|      0|    if(s->fprogress)
  ------------------
  |  Branch (2526:8): [True: 0, False: 0]
  ------------------
 2527|      0|      data->progress.callback = TRUE; /* no longer internal */
  ------------------
  |  | 1051|      0|#define TRUE true
  ------------------
 2528|      0|    else
 2529|      0|      data->progress.callback = FALSE; /* NULL enforces internal */
  ------------------
  |  | 1054|      0|#define FALSE false
  ------------------
 2530|      0|    break;
 2531|       |
 2532|      0|  case CURLOPT_XFERINFOFUNCTION:
  ------------------
  |  Branch (2532:3): [True: 0, False: 18.9k]
  ------------------
 2533|       |    /*
 2534|       |     * Transfer info callback function
 2535|       |     */
 2536|      0|    s->fxferinfo = va_arg(param, curl_xferinfo_callback);
 2537|      0|    if(s->fxferinfo)
  ------------------
  |  Branch (2537:8): [True: 0, False: 0]
  ------------------
 2538|      0|      data->progress.callback = TRUE; /* no longer internal */
  ------------------
  |  | 1051|      0|#define TRUE true
  ------------------
 2539|      0|    else
 2540|      0|      data->progress.callback = FALSE; /* NULL enforces internal */
  ------------------
  |  | 1054|      0|#define FALSE false
  ------------------
 2541|       |
 2542|      0|    break;
 2543|      0|  case CURLOPT_DEBUGFUNCTION:
  ------------------
  |  Branch (2543:3): [True: 0, False: 18.9k]
  ------------------
 2544|       |    /*
 2545|       |     * stderr write callback.
 2546|       |     */
 2547|      0|    s->fdebug = va_arg(param, curl_debug_callback);
 2548|       |    /*
 2549|       |     * if the callback provided is NULL, it will use the default callback
 2550|       |     */
 2551|      0|    break;
 2552|      0|  case CURLOPT_HEADERFUNCTION:
  ------------------
  |  Branch (2552:3): [True: 0, False: 18.9k]
  ------------------
 2553|       |    /*
 2554|       |     * Set header write callback
 2555|       |     */
 2556|      0|    s->fwrite_header = va_arg(param, curl_write_callback);
 2557|      0|    break;
 2558|  4.73k|  case CURLOPT_WRITEFUNCTION:
  ------------------
  |  Branch (2558:3): [True: 4.73k, False: 14.2k]
  ------------------
 2559|       |    /*
 2560|       |     * Set data write callback
 2561|       |     */
 2562|  4.73k|    s->fwrite_func = va_arg(param, curl_write_callback);
 2563|  4.73k|    if(!s->fwrite_func)
  ------------------
  |  Branch (2563:8): [True: 0, False: 4.73k]
  ------------------
 2564|      0|#if defined(__clang__) && __clang_major__ >= 16
 2565|      0|#pragma clang diagnostic push
 2566|      0|#pragma clang diagnostic ignored "-Wcast-function-type-strict"
 2567|      0|#endif
 2568|       |      /* When set to NULL, reset to our internal default function */
 2569|      0|      s->fwrite_func = (curl_write_callback)fwrite;
 2570|  4.73k|#if defined(__clang__) && __clang_major__ >= 16
 2571|  4.73k|#pragma clang diagnostic pop
 2572|  4.73k|#endif
 2573|  4.73k|    break;
 2574|  4.73k|  case CURLOPT_READFUNCTION:
  ------------------
  |  Branch (2574:3): [True: 4.73k, False: 14.2k]
  ------------------
 2575|       |    /*
 2576|       |     * Read data callback
 2577|       |     */
 2578|  4.73k|    s->fread_func_set = va_arg(param, curl_read_callback);
 2579|  4.73k|    if(!s->fread_func_set) {
  ------------------
  |  Branch (2579:8): [True: 0, False: 4.73k]
  ------------------
 2580|      0|      s->is_fread_set = 0;
 2581|      0|#if defined(__clang__) && __clang_major__ >= 16
 2582|      0|#pragma clang diagnostic push
 2583|      0|#pragma clang diagnostic ignored "-Wcast-function-type-strict"
 2584|      0|#endif
 2585|       |      /* When set to NULL, reset to our internal default function */
 2586|      0|      s->fread_func_set = (curl_read_callback)fread;
 2587|      0|#if defined(__clang__) && __clang_major__ >= 16
 2588|      0|#pragma clang diagnostic pop
 2589|      0|#endif
 2590|      0|    }
 2591|  4.73k|    else
 2592|  4.73k|      s->is_fread_set = 1;
 2593|  4.73k|    break;
 2594|      0|  case CURLOPT_SEEKFUNCTION:
  ------------------
  |  Branch (2594:3): [True: 0, False: 18.9k]
  ------------------
 2595|       |    /*
 2596|       |     * Seek callback. Might be NULL.
 2597|       |     */
 2598|      0|    s->seek_func = va_arg(param, curl_seek_callback);
 2599|      0|    break;
 2600|      0|  case CURLOPT_IOCTLFUNCTION:
  ------------------
  |  Branch (2600:3): [True: 0, False: 18.9k]
  ------------------
 2601|       |    /*
 2602|       |     * I/O control callback. Might be NULL.
 2603|       |     */
 2604|      0|    s->ioctl_func = va_arg(param, curl_ioctl_callback);
 2605|      0|    break;
 2606|      0|  case CURLOPT_SSL_CTX_FUNCTION:
  ------------------
  |  Branch (2606:3): [True: 0, False: 18.9k]
  ------------------
 2607|       |    /*
 2608|       |     * Set an SSL_CTX callback
 2609|       |     */
 2610|      0|#ifdef USE_SSL
 2611|      0|    if(Curl_ssl_supports(data, SSLSUPP_SSL_CTX)) {
  ------------------
  |  |   38|      0|#define SSLSUPP_SSL_CTX      (1 << 3) /* supports CURLOPT_SSL_CTX */
  ------------------
  |  Branch (2611:8): [True: 0, False: 0]
  ------------------
 2612|      0|      s->ssl.fsslctx = va_arg(param, curl_ssl_ctx_callback);
 2613|      0|      break;
 2614|      0|    }
 2615|      0|    else
 2616|      0|#endif
 2617|      0|      return CURLE_NOT_BUILT_IN;
 2618|       |
 2619|  4.73k|  case CURLOPT_SOCKOPTFUNCTION:
  ------------------
  |  Branch (2619:3): [True: 4.73k, False: 14.2k]
  ------------------
 2620|       |    /*
 2621|       |     * socket callback function: called after socket() but before connect()
 2622|       |     */
 2623|  4.73k|    s->fsockopt = va_arg(param, curl_sockopt_callback);
 2624|  4.73k|    break;
 2625|       |
 2626|  4.73k|  case CURLOPT_OPENSOCKETFUNCTION:
  ------------------
  |  Branch (2626:3): [True: 4.73k, False: 14.2k]
  ------------------
 2627|       |    /*
 2628|       |     * open/create socket callback function: called instead of socket(),
 2629|       |     * before connect()
 2630|       |     */
 2631|  4.73k|    s->fopensocket = va_arg(param, curl_opensocket_callback);
 2632|  4.73k|    break;
 2633|       |
 2634|      0|  case CURLOPT_CLOSESOCKETFUNCTION:
  ------------------
  |  Branch (2634:3): [True: 0, False: 18.9k]
  ------------------
 2635|       |    /*
 2636|       |     * close socket callback function: called instead of close()
 2637|       |     * when shutting down a connection
 2638|       |     */
 2639|      0|    s->fclosesocket = va_arg(param, curl_closesocket_callback);
 2640|      0|    break;
 2641|       |
 2642|      0|  case CURLOPT_RESOLVER_START_FUNCTION:
  ------------------
  |  Branch (2642:3): [True: 0, False: 18.9k]
  ------------------
 2643|       |    /*
 2644|       |     * resolver start callback function: called before a new resolver request
 2645|       |     * is started
 2646|       |     */
 2647|      0|    s->resolver_start = va_arg(param, curl_resolver_start_callback);
 2648|      0|    break;
 2649|       |
 2650|       |#ifdef USE_SSH
 2651|       |#ifdef USE_LIBSSH2
 2652|       |  case CURLOPT_SSH_HOSTKEYFUNCTION:
 2653|       |    /* the callback to check the hostkey without the knownhost file */
 2654|       |    s->ssh_hostkeyfunc = va_arg(param, curl_sshhostkeycallback);
 2655|       |    break;
 2656|       |#endif
 2657|       |
 2658|       |  case CURLOPT_SSH_KEYFUNCTION:
 2659|       |    /* setting to NULL is fine since the ssh.c functions themselves will
 2660|       |       then revert to use the internal default */
 2661|       |    s->ssh_keyfunc = va_arg(param, curl_sshkeycallback);
 2662|       |    break;
 2663|       |
 2664|       |#endif /* USE_SSH */
 2665|       |
 2666|      0|#ifndef CURL_DISABLE_RTSP
 2667|      0|  case CURLOPT_INTERLEAVEFUNCTION:
  ------------------
  |  Branch (2667:3): [True: 0, False: 18.9k]
  ------------------
 2668|       |    /* Set the user defined RTP write function */
 2669|      0|    s->fwrite_rtp = va_arg(param, curl_write_callback);
 2670|      0|    break;
 2671|      0|#endif
 2672|      0|#ifndef CURL_DISABLE_FTP
 2673|      0|  case CURLOPT_CHUNK_BGN_FUNCTION:
  ------------------
  |  Branch (2673:3): [True: 0, False: 18.9k]
  ------------------
 2674|      0|    s->chunk_bgn = va_arg(param, curl_chunk_bgn_callback);
 2675|      0|    break;
 2676|      0|  case CURLOPT_CHUNK_END_FUNCTION:
  ------------------
  |  Branch (2676:3): [True: 0, False: 18.9k]
  ------------------
 2677|      0|    s->chunk_end = va_arg(param, curl_chunk_end_callback);
 2678|      0|    break;
 2679|      0|  case CURLOPT_FNMATCH_FUNCTION:
  ------------------
  |  Branch (2679:3): [True: 0, False: 18.9k]
  ------------------
 2680|      0|    s->fnmatch = va_arg(param, curl_fnmatch_callback);
 2681|      0|    break;
 2682|      0|#endif
 2683|      0|#ifndef CURL_DISABLE_HTTP
 2684|      0|  case CURLOPT_TRAILERFUNCTION:
  ------------------
  |  Branch (2684:3): [True: 0, False: 18.9k]
  ------------------
 2685|      0|    s->trailer_callback = va_arg(param, curl_trailer_callback);
 2686|      0|    break;
 2687|      0|#endif
 2688|      0|#ifndef CURL_DISABLE_HSTS
 2689|      0|  case CURLOPT_HSTSREADFUNCTION:
  ------------------
  |  Branch (2689:3): [True: 0, False: 18.9k]
  ------------------
 2690|      0|    s->hsts_read = va_arg(param, curl_hstsread_callback);
 2691|      0|    break;
 2692|      0|  case CURLOPT_HSTSWRITEFUNCTION:
  ------------------
  |  Branch (2692:3): [True: 0, False: 18.9k]
  ------------------
 2693|      0|    s->hsts_write = va_arg(param, curl_hstswrite_callback);
 2694|      0|    break;
 2695|      0|#endif
 2696|      0|  case CURLOPT_PREREQFUNCTION:
  ------------------
  |  Branch (2696:3): [True: 0, False: 18.9k]
  ------------------
 2697|      0|    s->fprereq = va_arg(param, curl_prereq_callback);
 2698|      0|    break;
 2699|      0|  default:
  ------------------
  |  Branch (2699:3): [True: 0, False: 18.9k]
  ------------------
 2700|      0|    return CURLE_UNKNOWN_OPTION;
 2701|  18.9k|  }
 2702|  18.9k|  return CURLE_OK;
 2703|  18.9k|}
setopt.c:setopt_offt:
 2707|    177|{
 2708|    177|  struct UserDefined *s = &data->set;
 2709|    177|  switch(option) {
 2710|      3|  case CURLOPT_TIMEVALUE_LARGE:
  ------------------
  |  Branch (2710:3): [True: 3, False: 174]
  ------------------
 2711|       |    /*
 2712|       |     * This is the value to compare with the remote document with the
 2713|       |     * method set with CURLOPT_TIMECONDITION
 2714|       |     */
 2715|      3|    s->timevalue = (time_t)offt;
 2716|      3|    break;
 2717|       |
 2718|       |    /* MQTT "borrows" some of the HTTP options */
 2719|      0|  case CURLOPT_POSTFIELDSIZE_LARGE:
  ------------------
  |  Branch (2719:3): [True: 0, False: 177]
  ------------------
 2720|       |    /*
 2721|       |     * The size of the POSTFIELD data to prevent libcurl to do strlen() to
 2722|       |     * figure it out. Enables binary posts.
 2723|       |     */
 2724|      0|    if(offt < -1)
  ------------------
  |  Branch (2724:8): [True: 0, False: 0]
  ------------------
 2725|      0|      return CURLE_BAD_FUNCTION_ARGUMENT;
 2726|       |
 2727|      0|    if(s->postfieldsize < offt &&
  ------------------
  |  Branch (2727:8): [True: 0, False: 0]
  ------------------
 2728|      0|       s->postfields == s->str[STRING_COPYPOSTFIELDS]) {
  ------------------
  |  Branch (2728:8): [True: 0, False: 0]
  ------------------
 2729|       |      /* Previous CURLOPT_COPYPOSTFIELDS is no longer valid. */
 2730|      0|      curlx_safefree(s->str[STRING_COPYPOSTFIELDS]);
  ------------------
  |  | 1332|      0|  do {                      \
  |  | 1333|      0|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1488|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|      0|    (ptr) = NULL;           \
  |  | 1335|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2731|      0|      s->postfields = NULL;
 2732|      0|    }
 2733|      0|    s->postfieldsize = offt;
 2734|      0|    break;
 2735|     26|  case CURLOPT_INFILESIZE_LARGE:
  ------------------
  |  Branch (2735:3): [True: 26, False: 151]
  ------------------
 2736|       |    /*
 2737|       |     * If known, this should inform curl about the file size of the
 2738|       |     * to-be-uploaded file.
 2739|       |     */
 2740|     26|    if(offt < -1)
  ------------------
  |  Branch (2740:8): [True: 0, False: 26]
  ------------------
 2741|      0|      return CURLE_BAD_FUNCTION_ARGUMENT;
 2742|     26|    s->filesize = offt;
 2743|     26|    break;
 2744|     53|  case CURLOPT_MAX_SEND_SPEED_LARGE:
  ------------------
  |  Branch (2744:3): [True: 53, False: 124]
  ------------------
 2745|       |    /*
 2746|       |     * When transfer uploads are faster than CURLOPT_MAX_SEND_SPEED_LARGE
 2747|       |     * bytes per second the transfer is throttled..
 2748|       |     */
 2749|     53|    if(offt < 0)
  ------------------
  |  Branch (2749:8): [True: 0, False: 53]
  ------------------
 2750|      0|      return CURLE_BAD_FUNCTION_ARGUMENT;
 2751|     53|    s->max_send_speed = offt;
 2752|       |    /* use minimal burst rate of 32k. some protocol batch IO */
 2753|     53|    Curl_rlimit_init(&data->progress.ul.rlimit, offt,
 2754|     53|                     CURLMAX(offt, (32 * 1024)),
  ------------------
  |  | 1291|     53|#define CURLMAX(x, y) ((x) > (y) ? (x) : (y))
  |  |  ------------------
  |  |  |  Branch (1291:24): [True: 30, False: 23]
  |  |  ------------------
  ------------------
 2755|     53|                     Curl_pgrs_now(data));
 2756|     53|    break;
 2757|     50|  case CURLOPT_MAX_RECV_SPEED_LARGE:
  ------------------
  |  Branch (2757:3): [True: 50, False: 127]
  ------------------
 2758|       |    /*
 2759|       |     * When receiving data faster than CURLOPT_MAX_RECV_SPEED_LARGE bytes per
 2760|       |     * second the transfer is throttled..
 2761|       |     */
 2762|     50|    if(offt < 0)
  ------------------
  |  Branch (2762:8): [True: 0, False: 50]
  ------------------
 2763|      0|      return CURLE_BAD_FUNCTION_ARGUMENT;
 2764|     50|    s->max_recv_speed = offt;
 2765|       |    /* use minimal burst rate of 32k. some protocol batch IO */
 2766|     50|    Curl_rlimit_init(&data->progress.dl.rlimit, offt,
 2767|     50|                     CURLMAX(offt, (32 * 1024)),
  ------------------
  |  | 1291|     50|#define CURLMAX(x, y) ((x) > (y) ? (x) : (y))
  |  |  ------------------
  |  |  |  Branch (1291:24): [True: 30, False: 20]
  |  |  ------------------
  ------------------
 2768|     50|                     Curl_pgrs_now(data));
 2769|     50|    break;
 2770|     35|  case CURLOPT_RESUME_FROM_LARGE:
  ------------------
  |  Branch (2770:3): [True: 35, False: 142]
  ------------------
 2771|       |    /*
 2772|       |     * Resume transfer at the given file position
 2773|       |     */
 2774|     35|    if(offt < -1)
  ------------------
  |  Branch (2774:8): [True: 0, False: 35]
  ------------------
 2775|      0|      return CURLE_BAD_FUNCTION_ARGUMENT;
 2776|     35|    s->set_resume_from = offt;
 2777|     35|    break;
 2778|     10|  case CURLOPT_MAXFILESIZE_LARGE:
  ------------------
  |  Branch (2778:3): [True: 10, False: 167]
  ------------------
 2779|       |    /*
 2780|       |     * Set the maximum size of a file to download.
 2781|       |     */
 2782|     10|    if(offt < 0)
  ------------------
  |  Branch (2782:8): [True: 0, False: 10]
  ------------------
 2783|      0|      return CURLE_BAD_FUNCTION_ARGUMENT;
 2784|     10|    s->max_filesize = offt;
 2785|     10|    break;
 2786|       |
 2787|      0|  default:
  ------------------
  |  Branch (2787:3): [True: 0, False: 177]
  ------------------
 2788|      0|    return CURLE_UNKNOWN_OPTION;
 2789|    177|  }
 2790|    177|  return CURLE_OK;
 2791|    177|}

easy.c:sigpipe_ignore:
   49|  6.82k|{
   50|       |  /* get a local copy of no_signal because the Curl_easy might not be
   51|       |     around when we restore */
   52|  6.82k|  ig->no_signal = data->set.no_signal;
   53|  6.82k|  if(!data->set.no_signal) {
  ------------------
  |  Branch (53:6): [True: 6.81k, False: 3]
  ------------------
   54|  6.81k|    struct sigaction action;
   55|       |    /* first, extract the existing situation */
   56|  6.81k|    sigaction(SIGPIPE, NULL, &ig->old_pipe_act);
   57|  6.81k|    action = ig->old_pipe_act;
   58|       |    /* ignore this signal */
   59|  6.81k|    action.sa_handler = SIG_IGN;
   60|  6.81k|#ifdef SA_SIGINFO
   61|       |    /* clear SA_SIGINFO flag since we are using sa_handler */
   62|  6.81k|    action.sa_flags &= ~SA_SIGINFO;
   63|  6.81k|#endif
   64|  6.81k|    sigaction(SIGPIPE, &action, NULL);
   65|  6.81k|  }
   66|  6.82k|}
easy.c:sigpipe_restore:
   74|  6.82k|{
   75|  6.82k|  if(!ig->no_signal)
  ------------------
  |  Branch (75:6): [True: 6.81k, False: 3]
  ------------------
   76|       |    /* restore the outside state */
   77|  6.81k|    sigaction(SIGPIPE, &ig->old_pipe_act, NULL);
   78|  6.82k|}

Curl_slist_append_nodup:
   56|  17.8k|{
   57|  17.8k|  struct curl_slist *last;
   58|  17.8k|  struct curl_slist *new_item;
   59|       |
   60|  17.8k|  DEBUGASSERT(data);
  ------------------
  |  | 1077|  17.8k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (60:3): [True: 0, False: 17.8k]
  |  Branch (60:3): [True: 17.8k, False: 0]
  ------------------
   61|       |
   62|  17.8k|  new_item = curlx_malloc(sizeof(struct curl_slist));
  ------------------
  |  | 1483|  17.8k|#define curlx_malloc(size)         curl_dbg_malloc(size, __LINE__, __FILE__)
  ------------------
   63|  17.8k|  if(!new_item)
  ------------------
  |  Branch (63:6): [True: 0, False: 17.8k]
  ------------------
   64|      0|    return NULL;
   65|       |
   66|  17.8k|  new_item->next = NULL;
   67|  17.8k|  new_item->data = CURL_UNCONST(data);
  ------------------
  |  |  862|  17.8k|#define CURL_UNCONST(p) ((void *)(uintptr_t)(const void *)(p))
  ------------------
   68|       |
   69|       |  /* if this is the first item, then new_item *is* the list */
   70|  17.8k|  if(!list)
  ------------------
  |  Branch (70:6): [True: 14.2k, False: 3.59k]
  ------------------
   71|  14.2k|    return new_item;
   72|       |
   73|  3.59k|  last = slist_get_last(list);
   74|  3.59k|  last->next = new_item;
   75|  3.59k|  return list;
   76|  17.8k|}
curl_slist_append:
   86|  17.8k|{
   87|  17.8k|  char *dupdata = curlx_strdup(data);
  ------------------
  |  | 1482|  17.8k|#define curlx_strdup(ptr)          curl_dbg_strdup(ptr, __LINE__, __FILE__)
  ------------------
   88|       |
   89|  17.8k|  if(!dupdata)
  ------------------
  |  Branch (89:6): [True: 0, False: 17.8k]
  ------------------
   90|      0|    return NULL;
   91|       |
   92|  17.8k|  list = Curl_slist_append_nodup(list, dupdata);
   93|  17.8k|  if(!list)
  ------------------
  |  Branch (93:6): [True: 0, False: 17.8k]
  ------------------
   94|      0|    curlx_free(dupdata);
  ------------------
  |  | 1488|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
   95|       |
   96|  17.8k|  return list;
   97|  17.8k|}
curl_slist_free_all:
  125|  21.1k|{
  126|  21.1k|  struct curl_slist *next;
  127|  21.1k|  struct curl_slist *item;
  128|       |
  129|  21.1k|  if(!list)
  ------------------
  |  Branch (129:6): [True: 6.86k, False: 14.2k]
  ------------------
  130|  6.86k|    return;
  131|       |
  132|  14.2k|  item = list;
  133|  17.8k|  do {
  134|  17.8k|    next = item->next;
  135|  17.8k|    curlx_safefree(item->data);
  ------------------
  |  | 1332|  17.8k|  do {                      \
  |  | 1333|  17.8k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1488|  17.8k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  17.8k|    (ptr) = NULL;           \
  |  | 1335|  17.8k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 17.8k]
  |  |  ------------------
  ------------------
  136|  17.8k|    curlx_free(item);
  ------------------
  |  | 1488|  17.8k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  137|  17.8k|    item = next;
  138|  17.8k|  } while(next);
  ------------------
  |  Branch (138:11): [True: 3.59k, False: 14.2k]
  ------------------
  139|  14.2k|}
slist.c:slist_get_last:
   30|  3.59k|{
   31|  3.59k|  struct curl_slist *item;
   32|       |
   33|       |  /* if caller passed us a NULL, return now */
   34|  3.59k|  if(!list)
  ------------------
  |  Branch (34:6): [True: 0, False: 3.59k]
  ------------------
   35|      0|    return NULL;
   36|       |
   37|       |  /* loop through to find the last item */
   38|  3.59k|  item = list;
   39|  1.63M|  while(item->next) {
  ------------------
  |  Branch (39:9): [True: 1.62M, False: 3.59k]
  ------------------
   40|  1.62M|    item = item->next;
   41|  1.62M|  }
   42|  3.59k|  return item;
   43|  3.59k|}

Curl_raw_toupper:
   75|  1.03M|{
   76|  1.03M|  return (char)touppermap[(unsigned char)in];
   77|  1.03M|}
Curl_raw_tolower:
   82|   341k|{
   83|   341k|  return (char)tolowermap[(unsigned char)in];
   84|   341k|}

curl_strequal:
   77|  12.5k|{
   78|  12.5k|  if(s1 && s2)
  ------------------
  |  Branch (78:6): [True: 12.5k, False: 0]
  |  Branch (78:12): [True: 12.5k, False: 0]
  ------------------
   79|       |    /* both pointers point to something then compare them */
   80|  12.5k|    return casecompare(s1, s2);
   81|       |
   82|       |  /* if both pointers are NULL then treat them as equal */
   83|      0|  return NULL == s1 && NULL == s2;
  ------------------
  |  Branch (83:10): [True: 0, False: 0]
  |  Branch (83:24): [True: 0, False: 0]
  ------------------
   84|  12.5k|}
curl_strnequal:
   88|   148k|{
   89|   148k|  if(s1 && s2)
  ------------------
  |  Branch (89:6): [True: 148k, False: 0]
  |  Branch (89:12): [True: 148k, False: 0]
  ------------------
   90|       |    /* both pointers point to something then compare them */
   91|   148k|    return ncasecompare(s1, s2, n);
   92|       |
   93|       |  /* if both pointers are NULL then treat them as equal if max is non-zero */
   94|      0|  return NULL == s1 && NULL == s2 && n;
  ------------------
  |  Branch (94:10): [True: 0, False: 0]
  |  Branch (94:24): [True: 0, False: 0]
  |  Branch (94:38): [True: 0, False: 0]
  ------------------
   95|   148k|}
strequal.c:casecompare:
   36|  12.5k|{
   37|  15.2k|  while(*first) {
  ------------------
  |  Branch (37:9): [True: 15.1k, False: 57]
  ------------------
   38|  15.1k|    if(Curl_raw_toupper(*first) != Curl_raw_toupper(*second))
  ------------------
  |  Branch (38:8): [True: 12.5k, False: 2.66k]
  ------------------
   39|       |      /* get out of the loop as soon as they do not match */
   40|  12.5k|      return 0;
   41|  2.66k|    first++;
   42|  2.66k|    second++;
   43|  2.66k|  }
   44|       |  /* If we are here either the strings are the same or the length is different.
   45|       |     We can test if the "current" character is non-zero for one and zero
   46|       |     for the other. Note that the characters may not be exactly the same even
   47|       |     if they match, we only want to compare zero-ness. */
   48|     57|  return !*first == !*second;
   49|  12.5k|}
strequal.c:ncasecompare:
   52|   148k|{
   53|   581k|  while(*first && max) {
  ------------------
  |  Branch (53:9): [True: 581k, False: 401]
  |  Branch (53:19): [True: 493k, False: 87.8k]
  ------------------
   54|   493k|    if(Curl_raw_toupper(*first) != Curl_raw_toupper(*second))
  ------------------
  |  Branch (54:8): [True: 59.9k, False: 433k]
  ------------------
   55|  59.9k|      return 0;
   56|   433k|    max--;
   57|   433k|    first++;
   58|   433k|    second++;
   59|   433k|  }
   60|  88.2k|  if(max == 0)
  ------------------
  |  Branch (60:6): [True: 88.2k, False: 11]
  ------------------
   61|  88.2k|    return 1; /* they are equal this far */
   62|       |
   63|     11|  return Curl_raw_toupper(*first) == Curl_raw_toupper(*second);
   64|  88.2k|}

Curl_freeset:
  150|  6.82k|{
  151|       |  /* Free all dynamic strings stored in the data->set substructure. */
  152|  6.82k|  enum dupstring i;
  153|  6.82k|  enum dupblob j;
  154|       |
  155|   491k|  for(i = (enum dupstring)0; i < STRING_LAST; i++) {
  ------------------
  |  Branch (155:30): [True: 484k, False: 6.82k]
  ------------------
  156|   484k|    curlx_safefree(data->set.str[i]);
  ------------------
  |  | 1332|   484k|  do {                      \
  |  | 1333|   484k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1488|   484k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|   484k|    (ptr) = NULL;           \
  |  | 1335|   484k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 484k]
  |  |  ------------------
  ------------------
  157|   484k|  }
  158|       |
  159|  61.3k|  for(j = (enum dupblob)0; j < BLOB_LAST; j++) {
  ------------------
  |  Branch (159:28): [True: 54.5k, False: 6.82k]
  ------------------
  160|  54.5k|    curlx_safefree(data->set.blobs[j]);
  ------------------
  |  | 1332|  54.5k|  do {                      \
  |  | 1333|  54.5k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1488|  54.5k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  54.5k|    (ptr) = NULL;           \
  |  | 1335|  54.5k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 54.5k]
  |  |  ------------------
  ------------------
  161|  54.5k|  }
  162|       |
  163|  6.82k|  Curl_bufref_free(&data->state.referer);
  164|  6.82k|  Curl_bufref_free(&data->state.url);
  165|       |
  166|  6.82k|#if !defined(CURL_DISABLE_MIME) || !defined(CURL_DISABLE_FORM_API)
  167|  6.82k|  Curl_mime_cleanpart(data->set.mimepostp);
  168|  6.82k|  curlx_safefree(data->set.mimepostp);
  ------------------
  |  | 1332|  6.82k|  do {                      \
  |  | 1333|  6.82k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1488|  6.82k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  6.82k|    (ptr) = NULL;           \
  |  | 1335|  6.82k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 6.82k]
  |  |  ------------------
  ------------------
  169|  6.82k|#endif
  170|       |
  171|  6.82k|#ifndef CURL_DISABLE_COOKIES
  172|  6.82k|  curl_slist_free_all(data->state.cookielist);
  173|       |  data->state.cookielist = NULL;
  174|  6.82k|#endif
  175|  6.82k|}
Curl_close:
  196|  6.82k|{
  197|  6.82k|  struct Curl_easy *data;
  198|       |
  199|  6.82k|  if(!datap || !*datap)
  ------------------
  |  Branch (199:6): [True: 0, False: 6.82k]
  |  Branch (199:16): [True: 0, False: 6.82k]
  ------------------
  200|      0|    return CURLE_OK;
  201|       |
  202|  6.82k|  data = *datap;
  203|  6.82k|  *datap = NULL;
  204|       |
  205|  6.82k|  if(!data->state.internal && data->multi) {
  ------------------
  |  Branch (205:6): [True: 6.82k, False: 0]
  |  Branch (205:31): [True: 0, False: 6.82k]
  ------------------
  206|       |    /* This handle is still part of a multi handle, take care of this first
  207|       |       and detach this handle from there.
  208|       |       This detaches the connection. */
  209|      0|    curl_multi_remove_handle(data->multi, data);
  210|      0|  }
  211|  6.82k|  else {
  212|       |    /* Detach connection if any is left. This should not be normal, but can be
  213|       |       the case for example with CONNECT_ONLY + recv/send (test 556) */
  214|  6.82k|    Curl_detach_connection(data);
  215|  6.82k|    if(!data->state.internal && data->multi_easy) {
  ------------------
  |  Branch (215:8): [True: 6.82k, False: 0]
  |  Branch (215:33): [True: 0, False: 6.82k]
  ------------------
  216|       |      /* when curl_easy_perform() is used, it creates its own multi handle to
  217|       |         use and this is the one */
  218|      0|      curl_multi_cleanup(data->multi_easy);
  219|      0|      data->multi_easy = NULL;
  220|      0|    }
  221|  6.82k|  }
  222|  6.82k|  DEBUGASSERT(!data->conn || data->state.internal);
  ------------------
  |  | 1077|  6.82k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (222:3): [True: 6.82k, False: 0]
  |  Branch (222:3): [True: 0, False: 0]
  |  Branch (222:3): [True: 6.82k, False: 0]
  |  Branch (222:3): [True: 0, False: 0]
  ------------------
  223|       |
  224|  6.82k|  Curl_expire_clear(data); /* shut off any timers left */
  225|       |
  226|  6.82k|  if(data->state.rangestringalloc)
  ------------------
  |  Branch (226:6): [True: 0, False: 6.82k]
  ------------------
  227|      0|    curlx_free(data->state.range);
  ------------------
  |  | 1488|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  228|       |
  229|       |  /* release any resolve information this transfer kept */
  230|  6.82k|  Curl_resolv_destroy_all(data);
  231|       |
  232|  6.82k|  data->set.verbose = FALSE; /* no more calls to DEBUGFUNCTION */
  ------------------
  |  | 1054|  6.82k|#define FALSE false
  ------------------
  233|  6.82k|  data->magic = 0; /* force a clear AFTER the possibly enforced removal from
  234|       |                    * the multi handle and async dns shutdown. The multi
  235|       |                    * handle might check the magic and so might any
  236|       |                    * DEBUGFUNCTION invoked for tracing */
  237|       |
  238|       |  /* freed here in case DONE was not called */
  239|  6.82k|  Curl_req_free(&data->req, data);
  240|       |
  241|       |  /* Close down all open SSL info and sessions */
  242|  6.82k|  Curl_ssl_close_all(data);
  243|  6.82k|  Curl_peer_unlink(&data->state.origin);
  244|  6.82k|  Curl_peer_unlink(&data->state.initial_origin);
  245|  6.82k|  Curl_ssl_free_certinfo(data);
  246|       |
  247|  6.82k|  Curl_bufref_free(&data->state.referer);
  248|       |
  249|  6.82k|  up_free(data);
  250|  6.82k|  curlx_dyn_free(&data->state.headerb);
  251|  6.82k|  Curl_flush_cookies(data, TRUE);
  ------------------
  |  | 1051|  6.82k|#define TRUE true
  ------------------
  252|  6.82k|#ifndef CURL_DISABLE_ALTSVC
  253|  6.82k|  Curl_altsvc_save(data, data->asi, data->set.str[STRING_ALTSVC]);
  254|  6.82k|  Curl_altsvc_cleanup(&data->asi);
  255|  6.82k|#endif
  256|  6.82k|#ifndef CURL_DISABLE_HSTS
  257|  6.82k|  Curl_hsts_save(data, data->hsts, data->set.str[STRING_HSTS]);
  258|  6.82k|  if(!data->share || !data->share->hsts)
  ------------------
  |  Branch (258:6): [True: 6.82k, False: 0]
  |  Branch (258:22): [True: 0, False: 0]
  ------------------
  259|  6.82k|    Curl_hsts_cleanup(&data->hsts);
  260|  6.82k|  curl_slist_free_all(data->state.hstslist); /* clean up list */
  261|  6.82k|#endif
  262|  6.82k|#if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_DIGEST_AUTH)
  263|  6.82k|  Curl_http_auth_cleanup_digest(data);
  264|  6.82k|#endif
  265|  6.82k|  curlx_safefree(data->state.most_recent_ftp_entrypath);
  ------------------
  |  | 1332|  6.82k|  do {                      \
  |  | 1333|  6.82k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1488|  6.82k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  6.82k|    (ptr) = NULL;           \
  |  | 1335|  6.82k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 6.82k]
  |  |  ------------------
  ------------------
  266|  6.82k|  curlx_safefree(data->info.contenttype);
  ------------------
  |  | 1332|  6.82k|  do {                      \
  |  | 1333|  6.82k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1488|  6.82k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  6.82k|    (ptr) = NULL;           \
  |  | 1335|  6.82k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 6.82k]
  |  |  ------------------
  ------------------
  267|  6.82k|  curlx_safefree(data->info.wouldredirect);
  ------------------
  |  | 1332|  6.82k|  do {                      \
  |  | 1333|  6.82k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1488|  6.82k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  6.82k|    (ptr) = NULL;           \
  |  | 1335|  6.82k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 6.82k]
  |  |  ------------------
  ------------------
  268|       |
  269|       |  /* No longer a dirty share, if it exists */
  270|  6.82k|  if(Curl_share_easy_unlink(data))
  ------------------
  |  Branch (270:6): [True: 0, False: 6.82k]
  ------------------
  271|  6.82k|    DEBUGASSERT(0);
  ------------------
  |  | 1077|  6.82k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (271:5): [Folded, False: 0]
  |  Branch (271:5): [Folded, False: 0]
  ------------------
  272|       |
  273|  6.82k|  Curl_hash_destroy(&data->meta_hash);
  274|  6.82k|  Curl_creds_unlink(&data->state.creds);
  275|  6.82k|  curlx_safefree(data->state.aptr.uagent);
  ------------------
  |  | 1332|  6.82k|  do {                      \
  |  | 1333|  6.82k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1488|  6.82k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  6.82k|    (ptr) = NULL;           \
  |  | 1335|  6.82k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 6.82k]
  |  |  ------------------
  ------------------
  276|  6.82k|  curlx_safefree(data->state.aptr.accept_encoding);
  ------------------
  |  | 1332|  6.82k|  do {                      \
  |  | 1333|  6.82k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1488|  6.82k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  6.82k|    (ptr) = NULL;           \
  |  | 1335|  6.82k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 6.82k]
  |  |  ------------------
  ------------------
  277|  6.82k|  curlx_safefree(data->state.aptr.rangeline);
  ------------------
  |  | 1332|  6.82k|  do {                      \
  |  | 1333|  6.82k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1488|  6.82k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  6.82k|    (ptr) = NULL;           \
  |  | 1335|  6.82k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 6.82k]
  |  |  ------------------
  ------------------
  278|  6.82k|  curlx_safefree(data->state.aptr.ref);
  ------------------
  |  | 1332|  6.82k|  do {                      \
  |  | 1333|  6.82k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1488|  6.82k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  6.82k|    (ptr) = NULL;           \
  |  | 1335|  6.82k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 6.82k]
  |  |  ------------------
  ------------------
  279|  6.82k|  curlx_safefree(data->state.aptr.host);
  ------------------
  |  | 1332|  6.82k|  do {                      \
  |  | 1333|  6.82k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1488|  6.82k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  6.82k|    (ptr) = NULL;           \
  |  | 1335|  6.82k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 6.82k]
  |  |  ------------------
  ------------------
  280|  6.82k|#ifndef CURL_DISABLE_COOKIES
  281|  6.82k|  curlx_safefree(data->req.cookiehost);
  ------------------
  |  | 1332|  6.82k|  do {                      \
  |  | 1333|  6.82k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1488|  6.82k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  6.82k|    (ptr) = NULL;           \
  |  | 1335|  6.82k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 6.82k]
  |  |  ------------------
  ------------------
  282|  6.82k|#endif
  283|  6.82k|#ifndef CURL_DISABLE_RTSP
  284|  6.82k|  curlx_safefree(data->state.aptr.rtsp_transport);
  ------------------
  |  | 1332|  6.82k|  do {                      \
  |  | 1333|  6.82k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1488|  6.82k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  6.82k|    (ptr) = NULL;           \
  |  | 1335|  6.82k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 6.82k]
  |  |  ------------------
  ------------------
  285|  6.82k|#endif
  286|       |
  287|  6.82k|#if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_FORM_API)
  288|  6.82k|  Curl_mime_cleanpart(data->state.formp);
  289|  6.82k|  curlx_safefree(data->state.formp);
  ------------------
  |  | 1332|  6.82k|  do {                      \
  |  | 1333|  6.82k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1488|  6.82k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  6.82k|    (ptr) = NULL;           \
  |  | 1335|  6.82k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 6.82k]
  |  |  ------------------
  ------------------
  290|  6.82k|#endif
  291|       |
  292|       |  /* destruct wildcard structures if it is needed */
  293|  6.82k|  Curl_wildcard_dtor(&data->wildcard);
  294|  6.82k|  Curl_freeset(data);
  295|  6.82k|  Curl_headers_cleanup(data);
  296|  6.82k|  Curl_netrc_cleanup(&data->state.netrc);
  297|  6.82k|#ifndef CURL_DISABLE_DIGEST_AUTH
  298|  6.82k|  curlx_free(data->state.envproxy);
  ------------------
  |  | 1488|  6.82k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  299|  6.82k|#endif
  300|  6.82k|  Curl_ssl_config_cleanup(&data->set.ssl.primary);
  301|  6.82k|#ifndef CURL_DISABLE_PROXY
  302|  6.82k|  Curl_ssl_config_cleanup(&data->set.proxy_ssl.primary);
  303|  6.82k|#endif
  304|  6.82k|  curlx_free(data);
  ------------------
  |  | 1488|  6.82k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
  305|  6.82k|  return CURLE_OK;
  306|  6.82k|}
Curl_init_userdefined:
  313|  6.82k|{
  314|  6.82k|  struct UserDefined *set = &data->set;
  315|       |
  316|  6.82k|  set->out = stdout;  /* default output to stdout */
  317|  6.82k|  set->in_set = stdin;  /* default input from stdin */
  318|  6.82k|  set->err = stderr;  /* default stderr to stderr */
  319|       |
  320|  6.82k|#if defined(__clang__) && __clang_major__ >= 16
  321|  6.82k|#pragma clang diagnostic push
  322|  6.82k|#pragma clang diagnostic ignored "-Wcast-function-type-strict"
  323|  6.82k|#endif
  324|       |  /* use fwrite as default function to store output */
  325|  6.82k|  set->fwrite_func = (curl_write_callback)fwrite;
  326|       |
  327|       |  /* use fread as default function to read input */
  328|  6.82k|  set->fread_func_set = (curl_read_callback)fread;
  329|  6.82k|#if defined(__clang__) && __clang_major__ >= 16
  330|  6.82k|#pragma clang diagnostic pop
  331|  6.82k|#endif
  332|  6.82k|  set->is_fread_set = 0;
  333|       |
  334|  6.82k|  set->seek_client = ZERO_NULL;
  ------------------
  |  | 1160|  6.82k|#define ZERO_NULL 0
  ------------------
  335|       |
  336|  6.82k|  set->filesize = -1;        /* we do not know the size */
  337|  6.82k|  set->postfieldsize = -1;   /* unknown size */
  338|  6.82k|  set->maxredirs = 30;       /* sensible default */
  339|       |
  340|  6.82k|  set->method = HTTPREQ_GET; /* Default HTTP request */
  341|  6.82k|#ifndef CURL_DISABLE_RTSP
  342|  6.82k|  set->rtspreq = RTSPREQ_OPTIONS; /* Default RTSP request */
  343|  6.82k|#endif
  344|  6.82k|#ifndef CURL_DISABLE_FTP
  345|  6.82k|  set->ftp_use_epsv = TRUE;   /* FTP defaults to EPSV operations */
  ------------------
  |  | 1051|  6.82k|#define TRUE true
  ------------------
  346|  6.82k|  set->ftp_use_eprt = TRUE;   /* FTP defaults to EPRT operations */
  ------------------
  |  | 1051|  6.82k|#define TRUE true
  ------------------
  347|  6.82k|  set->ftp_use_pret = FALSE;  /* mainly useful for drftpd servers */
  ------------------
  |  | 1054|  6.82k|#define FALSE false
  ------------------
  348|  6.82k|  set->ftp_filemethod = FTPFILE_MULTICWD;
  349|  6.82k|  set->ftp_skip_ip = TRUE;    /* skip PASV IP by default */
  ------------------
  |  | 1051|  6.82k|#define TRUE true
  ------------------
  350|  6.82k|#endif
  351|  6.82k|  set->dns_cache_timeout_ms = 60000; /* Timeout every 60 seconds by default */
  352|       |
  353|       |  /* Timeout every 24 hours by default */
  354|  6.82k|  set->general_ssl.ca_cache_timeout = 24 * 60 * 60;
  355|       |
  356|  6.82k|  set->httpauth = CURLAUTH_BASIC;  /* defaults to basic */
  ------------------
  |  |  831|  6.82k|#define CURLAUTH_BASIC        (((unsigned long)1) << 0)
  ------------------
  357|       |
  358|  6.82k|  Curl_ssl_config_init(&data->set.ssl.primary);
  359|  6.82k|#ifndef CURL_DISABLE_PROXY
  360|  6.82k|  Curl_ssl_config_init(&data->set.proxy_ssl.primary);
  361|  6.82k|  set->proxyport = 0;
  362|  6.82k|  set->proxytype = CURLPROXY_HTTP; /* defaults to HTTP proxy */
  ------------------
  |  |  790|  6.82k|#define CURLPROXY_HTTP            0L /* added in 7.10, new in 7.19.4 default is
  ------------------
  363|  6.82k|  set->proxyauth = CURLAUTH_BASIC; /* defaults to basic */
  ------------------
  |  |  831|  6.82k|#define CURLAUTH_BASIC        (((unsigned long)1) << 0)
  ------------------
  364|       |  /* SOCKS5 proxy auth defaults to username/password + GSS-API */
  365|  6.82k|  set->socks5auth = CURLAUTH_BASIC | CURLAUTH_GSSAPI;
  ------------------
  |  |  831|  6.82k|#define CURLAUTH_BASIC        (((unsigned long)1) << 0)
  ------------------
                set->socks5auth = CURLAUTH_BASIC | CURLAUTH_GSSAPI;
  ------------------
  |  |  837|  6.82k|#define CURLAUTH_GSSAPI CURLAUTH_NEGOTIATE
  |  |  ------------------
  |  |  |  |  833|  6.82k|#define CURLAUTH_NEGOTIATE    (((unsigned long)1) << 2)
  |  |  ------------------
  ------------------
  366|  6.82k|#endif
  367|       |
  368|  6.82k|#ifndef CURL_DISABLE_DOH
  369|  6.82k|  set->doh_verifyhost = TRUE;
  ------------------
  |  | 1051|  6.82k|#define TRUE true
  ------------------
  370|  6.82k|  set->doh_verifypeer = TRUE;
  ------------------
  |  | 1051|  6.82k|#define TRUE true
  ------------------
  371|  6.82k|#endif
  372|       |#ifdef USE_SSH
  373|       |  /* defaults to any auth type */
  374|       |  set->ssh_auth_types = CURLSSH_AUTH_DEFAULT;
  375|       |  set->new_directory_perms = 0755; /* Default permissions */
  376|       |#endif
  377|       |
  378|  6.82k|  set->new_file_perms = 0644;    /* Default permissions */
  379|  6.82k|  set->allowed_protocols = (curl_prot_t)CURLPROTO_64ALL;
  ------------------
  |  |   68|  6.82k|#define CURLPROTO_64ALL ((uint64_t)0xffffffffffffffff)
  ------------------
  380|  6.82k|  set->redir_protocols = CURLPROTO_REDIR;
  ------------------
  |  |   71|  6.82k|#define CURLPROTO_REDIR (CURLPROTO_HTTP | CURLPROTO_HTTPS | CURLPROTO_FTP | \
  |  |  ------------------
  |  |  |  | 1078|  6.82k|#define CURLPROTO_HTTP    (1L << 0)
  |  |  ------------------
  |  |               #define CURLPROTO_REDIR (CURLPROTO_HTTP | CURLPROTO_HTTPS | CURLPROTO_FTP | \
  |  |  ------------------
  |  |  |  | 1079|  6.82k|#define CURLPROTO_HTTPS   (1L << 1)
  |  |  ------------------
  |  |               #define CURLPROTO_REDIR (CURLPROTO_HTTP | CURLPROTO_HTTPS | CURLPROTO_FTP | \
  |  |  ------------------
  |  |  |  | 1080|  6.82k|#define CURLPROTO_FTP     (1L << 2)
  |  |  ------------------
  |  |   72|  6.82k|                         CURLPROTO_FTPS)
  |  |  ------------------
  |  |  |  | 1081|  6.82k|#define CURLPROTO_FTPS    (1L << 3)
  |  |  ------------------
  ------------------
  381|       |
  382|       |#if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI)
  383|       |  /*
  384|       |   * disallow unprotected protection negotiation NEC reference implementation
  385|       |   * seem not to follow rfc1961 section 4.3/4.4
  386|       |   */
  387|       |  set->socks5_gssapi_nec = FALSE;
  388|       |#endif
  389|       |
  390|       |  /* set default minimum TLS version */
  391|  6.82k|#ifdef USE_SSL
  392|  6.82k|  Curl_setopt_SSLVERSION(data, CURLOPT_SSLVERSION, CURL_SSLVERSION_DEFAULT);
  ------------------
  |  | 2374|  6.82k|#define CURL_SSLVERSION_DEFAULT 0L
  ------------------
  393|  6.82k|#ifndef CURL_DISABLE_PROXY
  394|  6.82k|  Curl_setopt_SSLVERSION(data, CURLOPT_PROXY_SSLVERSION,
  395|  6.82k|                         CURL_SSLVERSION_DEFAULT);
  ------------------
  |  | 2374|  6.82k|#define CURL_SSLVERSION_DEFAULT 0L
  ------------------
  396|  6.82k|#endif
  397|  6.82k|#endif
  398|  6.82k|#ifndef CURL_DISABLE_FTP
  399|  6.82k|  set->wildcard_enabled = FALSE;
  ------------------
  |  | 1054|  6.82k|#define FALSE false
  ------------------
  400|  6.82k|  set->chunk_bgn = ZERO_NULL;
  ------------------
  |  | 1160|  6.82k|#define ZERO_NULL 0
  ------------------
  401|  6.82k|  set->chunk_end = ZERO_NULL;
  ------------------
  |  | 1160|  6.82k|#define ZERO_NULL 0
  ------------------
  402|  6.82k|  set->fnmatch = ZERO_NULL;
  ------------------
  |  | 1160|  6.82k|#define ZERO_NULL 0
  ------------------
  403|  6.82k|#endif
  404|  6.82k|  set->tcp_keepalive = FALSE;
  ------------------
  |  | 1054|  6.82k|#define FALSE false
  ------------------
  405|  6.82k|  set->tcp_keepintvl = 60;
  406|  6.82k|  set->tcp_keepidle = 60;
  407|  6.82k|  set->tcp_keepcnt = 9;
  408|  6.82k|  set->tcp_fastopen = FALSE;
  ------------------
  |  | 1054|  6.82k|#define FALSE false
  ------------------
  409|  6.82k|  set->tcp_nodelay = TRUE;
  ------------------
  |  | 1051|  6.82k|#define TRUE true
  ------------------
  410|  6.82k|  set->ssl_enable_alpn = TRUE;
  ------------------
  |  | 1051|  6.82k|#define TRUE true
  ------------------
  411|  6.82k|  set->expect_100_timeout = 1000L; /* Wait for a second by default. */
  412|  6.82k|  set->sep_headers = TRUE; /* separated header lists by default */
  ------------------
  |  | 1051|  6.82k|#define TRUE true
  ------------------
  413|  6.82k|  set->buffer_size = READBUFFER_SIZE;
  ------------------
  |  |  119|  6.82k|#define READBUFFER_SIZE CURL_MAX_WRITE_SIZE
  |  |  ------------------
  |  |  |  |  265|  6.82k|#define CURL_MAX_WRITE_SIZE 16384
  |  |  ------------------
  ------------------
  414|  6.82k|  set->upload_buffer_size = UPLOADBUFFER_DEFAULT;
  ------------------
  |  |  131|  6.82k|#define UPLOADBUFFER_DEFAULT 65536
  ------------------
  415|  6.82k|  set->upload_flags = CURLULFLAG_SEEN;
  ------------------
  |  | 1044|  6.82k|#define CURLULFLAG_SEEN     (1L << 4)
  ------------------
  416|  6.82k|  set->happy_eyeballs_timeout = CURL_HET_DEFAULT;
  ------------------
  |  |  969|  6.82k|#define CURL_HET_DEFAULT 200L
  ------------------
  417|  6.82k|  set->upkeep_interval_ms = CURL_UPKEEP_INTERVAL_DEFAULT;
  ------------------
  |  |  972|  6.82k|#define CURL_UPKEEP_INTERVAL_DEFAULT 60000L
  ------------------
  418|  6.82k|  set->maxconnects = DEFAULT_CONNCACHE_SIZE; /* for easy handles */
  ------------------
  |  |   38|  6.82k|#define DEFAULT_CONNCACHE_SIZE 5
  ------------------
  419|  6.82k|  set->conn_max_idle_ms = 118 * 1000;
  420|  6.82k|  set->conn_max_age_ms = 24 * 3600 * 1000;
  421|  6.82k|  set->http09_allowed = FALSE;
  ------------------
  |  | 1054|  6.82k|#define FALSE false
  ------------------
  422|  6.82k|  set->httpwant = CURL_HTTP_VERSION_NONE;
  ------------------
  |  | 2318|  6.82k|#define CURL_HTTP_VERSION_NONE  0L /* setting this means we do not care, and
  ------------------
  423|  6.82k|#if defined(USE_HTTP2) || defined(USE_HTTP3)
  424|  6.82k|  memset(&set->priority, 0, sizeof(set->priority));
  425|  6.82k|#endif
  426|  6.82k|  set->quick_exit = 0L;
  427|  6.82k|#ifndef CURL_DISABLE_WEBSOCKETS
  428|  6.82k|  set->ws_raw_mode = FALSE;
  ------------------
  |  | 1054|  6.82k|#define FALSE false
  ------------------
  429|       |  set->ws_no_auto_pong = FALSE;
  ------------------
  |  | 1054|  6.82k|#define FALSE false
  ------------------
  430|  6.82k|#endif
  431|  6.82k|}
Curl_open:
  453|  6.82k|{
  454|  6.82k|  struct Curl_easy *data;
  455|       |
  456|       |  /* simple start-up: alloc the struct, init it with zeroes and return */
  457|  6.82k|  data = curlx_calloc(1, sizeof(struct Curl_easy));
  ------------------
  |  | 1485|  6.82k|  curl_dbg_calloc(nbelem, size, __LINE__, __FILE__)
  ------------------
  458|  6.82k|  if(!data) {
  ------------------
  |  Branch (458:6): [True: 0, False: 6.82k]
  ------------------
  459|       |    /* this is a serious error */
  460|      0|    DEBUGF(curl_mfprintf(stderr, "Error: calloc of Curl_easy failed\n"));
  ------------------
  |  | 1063|      0|#define DEBUGF(x) x
  ------------------
  461|      0|    return CURLE_OUT_OF_MEMORY;
  462|      0|  }
  463|       |
  464|  6.82k|  data->magic = CURLEASY_MAGIC_NUMBER;
  ------------------
  |  |  135|  6.82k|#define CURLEASY_MAGIC_NUMBER 0xc0dedbadU
  ------------------
  465|       |  /* most recent connection is not yet defined */
  466|  6.82k|  data->state.lastconnect_id = -1;
  467|  6.82k|  data->state.recent_conn_id = -1;
  468|       |  /* and not assigned an id yet */
  469|  6.82k|  data->id = -1;
  470|  6.82k|  data->mid = UINT32_MAX;
  471|  6.82k|  data->master_mid = UINT32_MAX;
  472|  6.82k|  data->progress.hide = TRUE;
  ------------------
  |  | 1051|  6.82k|#define TRUE true
  ------------------
  473|  6.82k|  data->state.current_speed = -1; /* init to negative == impossible */
  474|       |
  475|  6.82k|  Curl_hash_init(&data->meta_hash, 23,
  476|  6.82k|                 Curl_hash_str, curlx_str_key_compare, easy_meta_freeentry);
  477|  6.82k|  curlx_dyn_init(&data->state.headerb, CURL_MAX_HTTP_HEADER);
  ------------------
  |  |  272|  6.82k|#define CURL_MAX_HTTP_HEADER (100 * 1024)
  ------------------
  478|  6.82k|  Curl_bufref_init(&data->state.url);
  479|  6.82k|  Curl_bufref_init(&data->state.referer);
  480|  6.82k|  Curl_req_init(&data->req);
  481|  6.82k|  Curl_initinfo(data);
  482|  6.82k|#ifndef CURL_DISABLE_HTTP
  483|  6.82k|  Curl_llist_init(&data->state.httphdrs, NULL);
  484|  6.82k|#endif
  485|  6.82k|  Curl_netrc_init(&data->state.netrc);
  486|  6.82k|  Curl_init_userdefined(data);
  487|       |
  488|  6.82k|  *curl = data;
  489|  6.82k|  return CURLE_OK;
  490|  6.82k|}
Curl_parse_login_details:
 1758|    184|{
 1759|    184|  char *ubuf = NULL;
 1760|    184|  char *pbuf = NULL;
 1761|    184|  const char *psep = NULL;
 1762|    184|  const char *osep = NULL;
 1763|    184|  size_t ulen;
 1764|    184|  size_t plen;
 1765|    184|  size_t olen;
 1766|       |
 1767|    184|  DEBUGASSERT(userp);
  ------------------
  |  | 1077|    184|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (1767:3): [True: 0, False: 184]
  |  Branch (1767:3): [True: 184, False: 0]
  ------------------
 1768|    184|  DEBUGASSERT(passwdp);
  ------------------
  |  | 1077|    184|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (1768:3): [True: 0, False: 184]
  |  Branch (1768:3): [True: 184, False: 0]
  ------------------
 1769|       |
 1770|       |  /* Attempt to find the password separator */
 1771|    184|  psep = memchr(login, ':', len);
 1772|       |
 1773|       |  /* Attempt to find the options separator */
 1774|    184|  if(optionsp)
  ------------------
  |  Branch (1774:6): [True: 0, False: 184]
  ------------------
 1775|      0|    osep = memchr(login, ';', len);
 1776|       |
 1777|       |  /* Calculate the portion lengths */
 1778|    184|  ulen = (psep ?
  ------------------
  |  Branch (1778:11): [True: 32, False: 152]
  ------------------
 1779|     32|          (size_t)(osep && psep > osep ? osep - login : psep - login) :
  ------------------
  |  Branch (1779:20): [True: 0, False: 32]
  |  Branch (1779:28): [True: 0, False: 0]
  ------------------
 1780|    184|          (osep ? (size_t)(osep - login) : len));
  ------------------
  |  Branch (1780:12): [True: 0, False: 152]
  ------------------
 1781|    184|  plen = (psep ?
  ------------------
  |  Branch (1781:11): [True: 32, False: 152]
  ------------------
 1782|     32|          (osep && osep > psep ? (size_t)(osep - psep) :
  ------------------
  |  Branch (1782:12): [True: 0, False: 32]
  |  Branch (1782:20): [True: 0, False: 0]
  ------------------
 1783|    152|           (size_t)(login + len - psep)) - 1 : 0);
 1784|    184|  olen = (osep ?
  ------------------
  |  Branch (1784:11): [True: 0, False: 184]
  ------------------
 1785|      0|          (psep && psep > osep ? (size_t)(psep - osep) :
  ------------------
  |  Branch (1785:12): [True: 0, False: 0]
  |  Branch (1785:20): [True: 0, False: 0]
  ------------------
 1786|    184|           (size_t)(login + len - osep)) - 1 : 0);
 1787|       |
 1788|       |  /* Clone the user portion buffer, which can be zero length */
 1789|    184|  ubuf = curlx_memdup0(login, ulen);
 1790|    184|  if(!ubuf)
  ------------------
  |  Branch (1790:6): [True: 0, False: 184]
  ------------------
 1791|      0|    goto error;
 1792|       |
 1793|       |  /* Clone the password portion buffer */
 1794|    184|  if(psep) {
  ------------------
  |  Branch (1794:6): [True: 32, False: 152]
  ------------------
 1795|     32|    pbuf = curlx_memdup0(&psep[1], plen);
 1796|     32|    if(!pbuf)
  ------------------
  |  Branch (1796:8): [True: 0, False: 32]
  ------------------
 1797|      0|      goto error;
 1798|     32|  }
 1799|       |
 1800|       |  /* Allocate the options portion buffer */
 1801|    184|  if(optionsp) {
  ------------------
  |  Branch (1801:6): [True: 0, False: 184]
  ------------------
 1802|      0|    char *obuf = NULL;
 1803|      0|    if(olen) {
  ------------------
  |  Branch (1803:8): [True: 0, False: 0]
  ------------------
 1804|      0|      obuf = curlx_memdup0(&osep[1], olen);
 1805|      0|      if(!obuf)
  ------------------
  |  Branch (1805:10): [True: 0, False: 0]
  ------------------
 1806|      0|        goto error;
 1807|      0|    }
 1808|      0|    *optionsp = obuf;
 1809|      0|  }
 1810|    184|  *userp = ubuf;
 1811|    184|  *passwdp = pbuf;
 1812|    184|  return CURLE_OK;
 1813|      0|error:
 1814|      0|  curlx_free(ubuf);
  ------------------
  |  | 1488|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
 1815|      0|  curlx_free(pbuf);
  ------------------
  |  | 1488|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
 1816|      0|  return CURLE_OUT_OF_MEMORY;
 1817|    184|}
url.c:up_free:
  179|  6.82k|{
  180|  6.82k|  struct urlpieces *up = &data->state.up;
  181|  6.82k|  curlx_safefree(up->options);
  ------------------
  |  | 1332|  6.82k|  do {                      \
  |  | 1333|  6.82k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1488|  6.82k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  6.82k|    (ptr) = NULL;           \
  |  | 1335|  6.82k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 6.82k]
  |  |  ------------------
  ------------------
  182|  6.82k|  curlx_safefree(up->path);
  ------------------
  |  | 1332|  6.82k|  do {                      \
  |  | 1333|  6.82k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1488|  6.82k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  6.82k|    (ptr) = NULL;           \
  |  | 1335|  6.82k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 6.82k]
  |  |  ------------------
  ------------------
  183|  6.82k|  curlx_safefree(up->query);
  ------------------
  |  | 1332|  6.82k|  do {                      \
  |  | 1333|  6.82k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1488|  6.82k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  6.82k|    (ptr) = NULL;           \
  |  | 1335|  6.82k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 6.82k]
  |  |  ------------------
  ------------------
  184|  6.82k|  curl_url_cleanup(data->state.uh);
  185|       |  data->state.uh = NULL;
  186|  6.82k|}

curl_url_cleanup:
 1323|  6.82k|{
 1324|  6.82k|  if(u) {
  ------------------
  |  Branch (1324:6): [True: 0, False: 6.82k]
  ------------------
 1325|      0|    free_urlhandle(u);
 1326|      0|    curlx_free(u);
  ------------------
  |  | 1488|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  ------------------
 1327|      0|  }
 1328|  6.82k|}

Curl_auth_digest_cleanup:
 1042|  13.6k|{
 1043|  13.6k|  Curl_peer_unlink(&digest->origin);
 1044|  13.6k|  Curl_creds_unlink(&digest->creds);
 1045|  13.6k|  curlx_safefree(digest->nonce);
  ------------------
  |  | 1332|  13.6k|  do {                      \
  |  | 1333|  13.6k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1488|  13.6k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  13.6k|    (ptr) = NULL;           \
  |  | 1335|  13.6k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 13.6k]
  |  |  ------------------
  ------------------
 1046|  13.6k|  curlx_safefree(digest->cnonce);
  ------------------
  |  | 1332|  13.6k|  do {                      \
  |  | 1333|  13.6k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1488|  13.6k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  13.6k|    (ptr) = NULL;           \
  |  | 1335|  13.6k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 13.6k]
  |  |  ------------------
  ------------------
 1047|  13.6k|  curlx_safefree(digest->realm);
  ------------------
  |  | 1332|  13.6k|  do {                      \
  |  | 1333|  13.6k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1488|  13.6k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  13.6k|    (ptr) = NULL;           \
  |  | 1335|  13.6k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 13.6k]
  |  |  ------------------
  ------------------
 1048|  13.6k|  curlx_safefree(digest->opaque);
  ------------------
  |  | 1332|  13.6k|  do {                      \
  |  | 1333|  13.6k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1488|  13.6k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  13.6k|    (ptr) = NULL;           \
  |  | 1335|  13.6k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 13.6k]
  |  |  ------------------
  ------------------
 1049|  13.6k|  curlx_safefree(digest->qop);
  ------------------
  |  | 1332|  13.6k|  do {                      \
  |  | 1333|  13.6k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1488|  13.6k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  13.6k|    (ptr) = NULL;           \
  |  | 1335|  13.6k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 13.6k]
  |  |  ------------------
  ------------------
 1050|  13.6k|  curlx_safefree(digest->algorithm);
  ------------------
  |  | 1332|  13.6k|  do {                      \
  |  | 1333|  13.6k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1488|  13.6k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  13.6k|    (ptr) = NULL;           \
  |  | 1335|  13.6k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 13.6k]
  |  |  ------------------
  ------------------
 1051|       |
 1052|  13.6k|  digest->nc = 0;
 1053|  13.6k|  digest->algo = ALGO_MD5; /* default algorithm */
  ------------------
  |  |   44|  13.6k|#define ALGO_MD5 0
  ------------------
 1054|  13.6k|  digest->stale = FALSE;   /* default means normal, not stale */
  ------------------
  |  | 1054|  13.6k|#define FALSE false
  ------------------
 1055|       |  digest->userhash = FALSE;
  ------------------
  |  | 1054|  13.6k|#define FALSE false
  ------------------
 1056|  13.6k|}

Curl_tls_keylog_open:
   39|      1|{
   40|      1|  if(!keylog_file_fp) {
  ------------------
  |  Branch (40:6): [True: 1, False: 0]
  ------------------
   41|      1|    keylog_file_name = getenv("SSLKEYLOGFILE");
   42|      1|    if(keylog_file_name) {
  ------------------
  |  Branch (42:8): [True: 0, False: 1]
  ------------------
   43|      0|      keylog_file_fp = curlx_fopen(keylog_file_name, FOPEN_APPENDTEXT);
  ------------------
  |  |   74|      0|#define curlx_fopen(file, mode) curl_dbg_fopen(file, mode, __LINE__, __FILE__)
  ------------------
   44|      0|      if(keylog_file_fp) {
  ------------------
  |  Branch (44:10): [True: 0, False: 0]
  ------------------
   45|       |#ifdef _WIN32
   46|       |        if(setvbuf(keylog_file_fp, NULL, _IONBF, 0))
   47|       |#else
   48|      0|        if(setvbuf(keylog_file_fp, NULL, _IOLBF, 4096))
  ------------------
  |  Branch (48:12): [True: 0, False: 0]
  ------------------
   49|      0|#endif
   50|      0|        {
   51|      0|          curlx_fclose(keylog_file_fp);
  ------------------
  |  |   79|      0|#define curlx_fclose(file)      curl_dbg_fclose(file, __LINE__, __FILE__)
  ------------------
   52|       |          keylog_file_fp = NULL;
   53|      0|        }
   54|      0|      }
   55|      0|    }
   56|      1|  }
   57|      1|}

Curl_ossl_version:
 5423|    104|{
 5424|       |#ifdef LIBRESSL_VERSION_NUMBER
 5425|       |  char *p;
 5426|       |  size_t count;
 5427|       |  const char *ver = OpenSSL_version(OPENSSL_VERSION);
 5428|       |  const char expected[] = OSSL_PACKAGE " "; /* ie "LibreSSL " */
 5429|       |  if(curl_strnequal(ver, expected, sizeof(expected) - 1)) {
 5430|       |    ver += sizeof(expected) - 1;
 5431|       |  }
 5432|       |  count = curl_msnprintf(buffer, size, "%s/%s", OSSL_PACKAGE, ver);
 5433|       |  for(p = buffer; *p; ++p) {
 5434|       |    if(ISBLANK(*p))
 5435|       |      *p = '_';
 5436|       |  }
 5437|       |  return count;
 5438|       |#elif defined(OPENSSL_IS_AWSLC)
 5439|       |  return curl_msnprintf(buffer, size, "%s/%s",
 5440|       |                        OSSL_PACKAGE, AWSLC_VERSION_NUMBER_STRING);
 5441|       |#elif defined(OPENSSL_IS_BORINGSSL)
 5442|       |#ifdef CURL_BORINGSSL_VERSION
 5443|       |  return curl_msnprintf(buffer, size, "%s/%s",
 5444|       |                        OSSL_PACKAGE, CURL_BORINGSSL_VERSION);
 5445|       |#else
 5446|       |  return curl_msnprintf(buffer, size, OSSL_PACKAGE);
 5447|       |#endif
 5448|       |#else /* OpenSSL 3+ */
 5449|    104|  return curl_msnprintf(buffer, size, "%s/%s",
 5450|    104|                        OSSL_PACKAGE, OpenSSL_version(OPENSSL_VERSION_STRING));
  ------------------
  |  |  163|    104|#define OSSL_PACKAGE "OpenSSL"
  ------------------
 5451|    104|#endif
 5452|    104|}
openssl.c:ossl_seed:
  801|  6.53k|{
  802|       |  /* This might get called before it has been added to a multi handle */
  803|  6.53k|  if(data->multi && data->multi->ssl_seeded)
  ------------------
  |  Branch (803:6): [True: 0, False: 6.53k]
  |  Branch (803:21): [True: 0, False: 0]
  ------------------
  804|      0|    return CURLE_OK;
  805|       |
  806|  6.53k|  if(rand_enough()) {
  ------------------
  |  Branch (806:6): [True: 6.53k, False: 0]
  ------------------
  807|       |    /* OpenSSL 1.1.0+ should return here */
  808|  6.53k|    if(data->multi)
  ------------------
  |  Branch (808:8): [True: 0, False: 6.53k]
  ------------------
  809|      0|      data->multi->ssl_seeded = TRUE;
  ------------------
  |  | 1051|      0|#define TRUE true
  ------------------
  810|  6.53k|    return CURLE_OK;
  811|  6.53k|  }
  812|      0|  failf(data, "Insufficient randomness");
  ------------------
  |  |   62|      0|#define failf Curl_failf
  ------------------
  813|      0|  return CURLE_SSL_CONNECT_ERROR;
  814|  6.53k|}
openssl.c:rand_enough:
  796|  6.53k|{
  797|  6.53k|  return RAND_status() != 0;
  798|  6.53k|}
openssl.c:ossl_strerror:
  749|    104|{
  750|    104|  size_t len;
  751|    104|  DEBUGASSERT(size);
  ------------------
  |  | 1077|    104|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (751:3): [True: 0, False: 104]
  |  Branch (751:3): [True: 104, False: 0]
  ------------------
  752|    104|  *buf = '\0';
  753|       |
  754|    104|  len = Curl_ossl_version(buf, size);
  755|    104|  DEBUGASSERT(len < (size - 2));
  ------------------
  |  | 1077|    104|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (755:3): [True: 0, False: 104]
  |  Branch (755:3): [True: 104, False: 0]
  ------------------
  756|    104|  if(len < (size - 2)) {
  ------------------
  |  Branch (756:6): [True: 104, False: 0]
  ------------------
  757|    104|    buf += len;
  758|    104|    size -= (len + 2);
  759|    104|    *buf++ = ':';
  760|    104|    *buf++ = ' ';
  761|    104|    *buf = '\0';
  762|    104|  }
  763|       |
  764|       |#ifdef HAVE_BORINGSSL_LIKE
  765|       |  ERR_error_string_n((uint32_t)error, buf, size);
  766|       |#else
  767|    104|  ERR_error_string_n(error, buf, size);
  768|    104|#endif
  769|       |
  770|    104|  if(!*buf) {
  ------------------
  |  Branch (770:6): [True: 0, False: 104]
  ------------------
  771|      0|    const char *msg = error ? "Unknown error" : "No error";
  ------------------
  |  Branch (771:23): [True: 0, False: 0]
  ------------------
  772|      0|    curlx_strcopy(buf, size, msg, strlen(msg));
  773|      0|  }
  774|       |
  775|    104|  return buf;
  776|    104|}
openssl.c:ossl_set_provider:
 1768|    112|{
 1769|    112|  char name[MAX_PROVIDER_LEN + 1];
 1770|    112|  struct Curl_str prov;
 1771|    112|  const char *propq = NULL;
 1772|       |
 1773|    112|  if(!iname) {
  ------------------
  |  Branch (1773:6): [True: 0, False: 112]
  ------------------
 1774|       |    /* clear and cleanup provider use */
 1775|      0|    ossl_provider_cleanup(data);
 1776|      0|    return CURLE_OK;
 1777|      0|  }
 1778|    112|  if(curlx_str_until(&iname, &prov, MAX_PROVIDER_LEN, ':'))
  ------------------
  |  | 1757|    112|#define MAX_PROVIDER_LEN 128 /* reasonable */
  ------------------
  |  Branch (1778:6): [True: 3, False: 109]
  ------------------
 1779|      3|    return CURLE_BAD_FUNCTION_ARGUMENT;
 1780|       |
 1781|    109|  if(!curlx_str_single(&iname, ':'))
  ------------------
  |  Branch (1781:6): [True: 6, False: 103]
  ------------------
 1782|       |    /* there was a colon, get the propq until the end of string */
 1783|      6|    propq = iname;
 1784|       |
 1785|       |  /* we need the name in a buffer, null-terminated */
 1786|    109|  memcpy(name, curlx_str(&prov), curlx_strlen(&prov));
  ------------------
  |  |   49|    109|#define curlx_str(x)    ((x)->str)
  ------------------
                memcpy(name, curlx_str(&prov), curlx_strlen(&prov));
  ------------------
  |  |   50|    109|#define curlx_strlen(x) ((x)->len)
  ------------------
 1787|    109|  name[curlx_strlen(&prov)] = 0;
  ------------------
  |  |   50|    109|#define curlx_strlen(x) ((x)->len)
  ------------------
 1788|       |
 1789|    109|  if(!data->state.libctx) {
  ------------------
  |  Branch (1789:6): [True: 109, False: 0]
  ------------------
 1790|    109|    OSSL_LIB_CTX *libctx = OSSL_LIB_CTX_new();
 1791|    109|    if(!libctx)
  ------------------
  |  Branch (1791:8): [True: 0, False: 109]
  ------------------
 1792|      0|      return CURLE_OUT_OF_MEMORY;
 1793|    109|    if(propq) {
  ------------------
  |  Branch (1793:8): [True: 6, False: 103]
  ------------------
 1794|      6|      data->state.propq = curlx_strdup(propq);
  ------------------
  |  | 1482|      6|#define curlx_strdup(ptr)          curl_dbg_strdup(ptr, __LINE__, __FILE__)
  ------------------
 1795|      6|      if(!data->state.propq) {
  ------------------
  |  Branch (1795:10): [True: 0, False: 6]
  ------------------
 1796|      0|        OSSL_LIB_CTX_free(libctx);
 1797|      0|        return CURLE_OUT_OF_MEMORY;
 1798|      0|      }
 1799|      6|    }
 1800|    109|    data->state.libctx = libctx;
 1801|    109|  }
 1802|       |
 1803|    109|#ifndef CURL_DISABLE_OPENSSL_AUTO_LOAD_CONFIG
 1804|       |  /* load the configuration file into the library context before checking the
 1805|       |   * provider availability */
 1806|    109|  if(!OSSL_LIB_CTX_load_config(data->state.libctx, NULL)) {
  ------------------
  |  Branch (1806:6): [True: 109, False: 0]
  ------------------
 1807|    109|    infof(data, "Failed to load default openssl config. Proceeding.");
  ------------------
  |  |  143|    109|  do {                               \
  |  |  144|    109|    if(Curl_trc_is_verbose(data))    \
  |  |  ------------------
  |  |  |  |  319|    109|  ((data) && (data)->set.verbose &&                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (319:4): [True: 109, False: 0]
  |  |  |  |  |  Branch (319:14): [True: 0, False: 109]
  |  |  |  |  ------------------
  |  |  |  |  320|    109|   (!(data)->state.feat ||                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (320:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  321|      0|    ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|#define CURL_LOG_LVL_INFO  1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (321:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|    109|      Curl_infof(data, __VA_ARGS__); \
  |  |  146|    109|  } while(0)
  |  |  ------------------
  |  |  |  Branch (146:11): [Folded, False: 109]
  |  |  ------------------
  ------------------
 1808|    109|  }
 1809|    109|#endif
 1810|       |
 1811|    109|  if(OSSL_PROVIDER_available(data->state.libctx, name)) {
  ------------------
  |  Branch (1811:6): [True: 1, False: 108]
  ------------------
 1812|       |    /* already loaded through the configuration - no action needed */
 1813|      1|    data->state.provider_loaded = TRUE;
  ------------------
  |  | 1051|      1|#define TRUE true
  ------------------
 1814|      1|    return CURLE_OK;
 1815|      1|  }
 1816|       |
 1817|    108|  data->state.provider = OSSL_PROVIDER_try_load(data->state.libctx, name, 1);
 1818|    108|  if(!data->state.provider) {
  ------------------
  |  Branch (1818:6): [True: 104, False: 4]
  ------------------
 1819|    104|    char error_buffer[256];
 1820|    104|    failf(data, "Failed to initialize provider: %s",
  ------------------
  |  |   62|    104|#define failf Curl_failf
  ------------------
 1821|    104|          ossl_strerror(ERR_get_error(), error_buffer, sizeof(error_buffer)));
 1822|    104|    ossl_provider_cleanup(data);
 1823|    104|    return CURLE_SSL_ENGINE_NOTFOUND;
 1824|    104|  }
 1825|       |
 1826|       |  /* load the base provider as well */
 1827|      4|  data->state.baseprov = OSSL_PROVIDER_try_load(data->state.libctx, "base", 1);
 1828|      4|  if(!data->state.baseprov) {
  ------------------
  |  Branch (1828:6): [True: 0, False: 4]
  ------------------
 1829|      0|    ossl_provider_cleanup(data);
 1830|      0|    failf(data, "Failed to load base");
  ------------------
  |  |   62|      0|#define failf Curl_failf
  ------------------
 1831|      0|    return CURLE_SSL_ENGINE_NOTFOUND;
 1832|      0|  }
 1833|      4|  else
 1834|      4|    data->state.provider_loaded = TRUE;
  ------------------
  |  | 1051|      4|#define TRUE true
  ------------------
 1835|      4|  return CURLE_OK;
 1836|      4|}
openssl.c:ossl_provider_cleanup:
 1742|  6.92k|{
 1743|  6.92k|  if(data->state.baseprov) {
  ------------------
  |  Branch (1743:6): [True: 4, False: 6.92k]
  ------------------
 1744|      4|    OSSL_PROVIDER_unload(data->state.baseprov);
 1745|      4|    data->state.baseprov = NULL;
 1746|      4|  }
 1747|  6.92k|  if(data->state.provider) {
  ------------------
  |  Branch (1747:6): [True: 4, False: 6.92k]
  ------------------
 1748|      4|    OSSL_PROVIDER_unload(data->state.provider);
 1749|      4|    data->state.provider = NULL;
 1750|      4|  }
 1751|  6.92k|  OSSL_LIB_CTX_free(data->state.libctx);
 1752|  6.92k|  data->state.libctx = NULL;
 1753|  6.92k|  curlx_safefree(data->state.propq);
  ------------------
  |  | 1332|  6.92k|  do {                      \
  |  | 1333|  6.92k|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1488|  6.92k|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|  6.92k|    (ptr) = NULL;           \
  |  | 1335|  6.92k|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 6.92k]
  |  |  ------------------
  ------------------
 1754|       |  data->state.provider_loaded = FALSE;
  ------------------
  |  | 1054|  6.92k|#define FALSE false
  ------------------
 1755|  6.92k|}
openssl.c:ossl_init:
 1626|      1|{
 1627|      1|  const uint64_t flags =
 1628|      1|#ifdef OPENSSL_INIT_ENGINE_ALL_BUILTIN
 1629|       |    /* not present in BoringSSL */
 1630|      1|    OPENSSL_INIT_ENGINE_ALL_BUILTIN |
 1631|      1|#endif
 1632|       |#ifdef CURL_DISABLE_OPENSSL_AUTO_LOAD_CONFIG
 1633|       |    OPENSSL_INIT_NO_LOAD_CONFIG |
 1634|       |#else
 1635|      1|    OPENSSL_INIT_LOAD_CONFIG |
 1636|      1|#endif
 1637|      1|    0;
 1638|      1|  OPENSSL_init_ssl(flags, NULL);
 1639|       |
 1640|      1|#ifndef HAVE_KEYLOG_UPSTREAM
 1641|      1|  Curl_tls_keylog_open();
 1642|      1|#endif
 1643|       |
 1644|      1|  return 1;
 1645|      1|}
openssl.c:ossl_random:
 5457|  6.53k|{
 5458|  6.53k|  int rc;
 5459|  6.53k|  if(data) {
  ------------------
  |  Branch (5459:6): [True: 6.53k, False: 0]
  ------------------
 5460|  6.53k|    if(ossl_seed(data)) /* Initiate the seed if not already done */
  ------------------
  |  Branch (5460:8): [True: 0, False: 6.53k]
  ------------------
 5461|      0|      return CURLE_FAILED_INIT; /* could not seed for some reason */
 5462|  6.53k|  }
 5463|      0|  else {
 5464|      0|    if(!rand_enough())
  ------------------
  |  Branch (5464:8): [True: 0, False: 0]
  ------------------
 5465|      0|      return CURLE_FAILED_INIT;
 5466|      0|  }
 5467|       |  /* RAND_bytes() returns 1 on success, 0 otherwise. */
 5468|  6.53k|  rc = RAND_bytes(entropy, (ossl_valsize_t)curlx_uztosi(length));
 5469|  6.53k|  return rc == 1 ? CURLE_OK : CURLE_FAILED_INIT;
  ------------------
  |  Branch (5469:10): [True: 6.53k, False: 0]
  ------------------
 5470|  6.53k|}
openssl.c:ossl_cert_status_request:
 5497|     10|{
 5498|     10|#ifndef OPENSSL_NO_OCSP
 5499|     10|  return TRUE;
  ------------------
  |  | 1051|     10|#define TRUE true
  ------------------
 5500|       |#else
 5501|       |  return FALSE;
 5502|       |#endif
 5503|     10|}
openssl.c:ossl_close_all:
 1989|  6.82k|{
 1990|       |#ifdef USE_OPENSSL_ENGINE
 1991|       |  if(data->state.engine) {
 1992|       |    ENGINE_finish(data->state.engine);
 1993|       |    ENGINE_free(data->state.engine);
 1994|       |    data->state.engine = NULL;
 1995|       |  }
 1996|       |#else
 1997|  6.82k|  (void)data;
 1998|  6.82k|#endif
 1999|  6.82k|#ifdef OPENSSL_HAS_PROVIDERS
 2000|  6.82k|  ossl_provider_cleanup(data);
 2001|  6.82k|#endif
 2002|  6.82k|}
openssl.c:ossl_set_engine:
 1658|    112|{
 1659|       |#ifdef USE_OPENSSL_ENGINE
 1660|       |  CURLcode result = CURLE_SSL_ENGINE_NOTFOUND;
 1661|       |  ENGINE *e = ENGINE_by_id(name);
 1662|       |
 1663|       |  if(e) {
 1664|       |
 1665|       |    if(data->state.engine) {
 1666|       |      ENGINE_finish(data->state.engine);
 1667|       |      ENGINE_free(data->state.engine);
 1668|       |      data->state.engine = NULL;
 1669|       |    }
 1670|       |    if(!ENGINE_init(e)) {
 1671|       |      char buf[256];
 1672|       |
 1673|       |      ENGINE_free(e);
 1674|       |      failf(data, "Failed to initialize SSL Engine '%s': %s",
 1675|       |            name, ossl_strerror(ERR_get_error(), buf, sizeof(buf)));
 1676|       |      result = CURLE_SSL_ENGINE_INITFAILED;
 1677|       |      e = NULL;
 1678|       |    }
 1679|       |    else {
 1680|       |      result = CURLE_OK;
 1681|       |    }
 1682|       |    data->state.engine = e;
 1683|       |    return result;
 1684|       |  }
 1685|       |#endif
 1686|    112|#ifdef OPENSSL_HAS_PROVIDERS
 1687|    112|  return ossl_set_provider(data, name);
 1688|       |#else
 1689|       |  (void)name;
 1690|       |  failf(data, "OpenSSL engine not found");
 1691|       |  return CURLE_SSL_ENGINE_NOTFOUND;
 1692|       |#endif
 1693|    112|}
openssl.c:ossl_set_engine_default:
 1698|      2|{
 1699|       |#ifdef USE_OPENSSL_ENGINE
 1700|       |  if(data->state.engine) {
 1701|       |    if(ENGINE_set_default(data->state.engine, ENGINE_METHOD_ALL) > 0) {
 1702|       |      infof(data, "set default crypto engine '%s'",
 1703|       |            ENGINE_get_id(data->state.engine));
 1704|       |    }
 1705|       |    else {
 1706|       |      failf(data, "set default crypto engine '%s' failed",
 1707|       |            ENGINE_get_id(data->state.engine));
 1708|       |      return CURLE_SSL_ENGINE_SETFAILED;
 1709|       |    }
 1710|       |  }
 1711|       |#else
 1712|      2|  (void)data;
 1713|      2|#endif
 1714|      2|  return CURLE_OK;
 1715|      2|}

Curl_ssl_init:
  155|      1|{
  156|       |  /* make sure this is only done once */
  157|      1|  if(init_ssl)
  ------------------
  |  Branch (157:6): [True: 0, False: 1]
  ------------------
  158|      0|    return 1;
  159|      1|  init_ssl = TRUE; /* never again */
  ------------------
  |  | 1051|      1|#define TRUE true
  ------------------
  160|       |
  161|      1|  if(Curl_ssl->init)
  ------------------
  |  Branch (161:6): [True: 1, False: 0]
  ------------------
  162|      1|    return Curl_ssl->init();
  163|      0|  return 1;
  164|      1|}
Curl_ssl_close_all:
  230|  6.82k|{
  231|  6.82k|  if(Curl_ssl->close_all)
  ------------------
  |  Branch (231:6): [True: 6.82k, False: 0]
  ------------------
  232|  6.82k|    Curl_ssl->close_all(data);
  233|  6.82k|}
Curl_ssl_set_engine:
  264|    112|{
  265|    112|  if(Curl_ssl->set_engine)
  ------------------
  |  Branch (265:6): [True: 112, False: 0]
  ------------------
  266|    112|    return Curl_ssl->set_engine(data, engine);
  267|      0|  return CURLE_NOT_BUILT_IN;
  268|    112|}
Curl_ssl_set_engine_default:
  273|      2|{
  274|      2|  if(Curl_ssl->set_engine_default)
  ------------------
  |  Branch (274:6): [True: 2, False: 0]
  ------------------
  275|      2|    return Curl_ssl->set_engine_default(data);
  276|      0|  return CURLE_NOT_BUILT_IN;
  277|      2|}
Curl_ssl_free_certinfo:
  299|  13.6k|{
  300|  13.6k|  struct curl_certinfo *ci = &data->info.certs;
  301|       |
  302|  13.6k|  if(ci->num_of_certs) {
  ------------------
  |  Branch (302:6): [True: 0, False: 13.6k]
  ------------------
  303|       |    /* free all individual lists used */
  304|      0|    int i;
  305|      0|    for(i = 0; i < ci->num_of_certs; i++) {
  ------------------
  |  Branch (305:16): [True: 0, False: 0]
  ------------------
  306|      0|      curl_slist_free_all(ci->certinfo[i]);
  307|      0|      ci->certinfo[i] = NULL;
  308|      0|    }
  309|       |
  310|       |    curlx_safefree(ci->certinfo); /* free the actual array too */
  ------------------
  |  | 1332|      0|  do {                      \
  |  | 1333|      0|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1488|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|      0|    (ptr) = NULL;           \
  |  | 1335|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  311|      0|    ci->num_of_certs = 0;
  312|      0|  }
  313|  13.6k|}
Curl_ssl_random:
  371|  6.53k|{
  372|  6.53k|  DEBUGASSERT(length == sizeof(int));
  ------------------
  |  | 1077|  6.53k|#define DEBUGASSERT(x) assert(x)
  ------------------
  |  Branch (372:3): [True: 0, False: 6.53k]
  |  Branch (372:3): [True: 6.53k, False: 0]
  ------------------
  373|  6.53k|  if(Curl_ssl->random)
  ------------------
  |  Branch (373:6): [True: 6.53k, False: 0]
  ------------------
  374|  6.53k|    return Curl_ssl->random(data, buffer, length);
  375|      0|  else
  376|      0|    return CURLE_NOT_BUILT_IN;
  377|  6.53k|}
Curl_ssl_cert_status_request:
  589|     10|{
  590|     10|  if(Curl_ssl->cert_status_request)
  ------------------
  |  Branch (590:6): [True: 10, False: 0]
  ------------------
  591|     10|    return Curl_ssl->cert_status_request();
  592|      0|  return FALSE;
  ------------------
  |  | 1054|      0|#define FALSE false
  ------------------
  593|     10|}
Curl_ssl_supports:
 1486|  4.94k|{
 1487|  4.94k|  (void)data;
 1488|  4.94k|  return (Curl_ssl->supports & ssl_option);
 1489|  4.94k|}

Curl_ssl_config_init:
  105|  13.6k|{
  106|       |  /*
  107|       |   * libcurl 7.10 introduced SSL verification *by default*! This needs to be
  108|       |   * switched off unless wanted.
  109|       |   */
  110|  13.6k|  sslc->verifypeer = TRUE;
  ------------------
  |  | 1051|  13.6k|#define TRUE true
  ------------------
  111|  13.6k|  sslc->verifyhost = TRUE;
  ------------------
  |  | 1051|  13.6k|#define TRUE true
  ------------------
  112|       |  sslc->cache_session = TRUE; /* caching by default */
  ------------------
  |  | 1051|  13.6k|#define TRUE true
  ------------------
  113|  13.6k|}
Curl_ssl_config_cleanup:
  116|  13.6k|{
  117|  13.6k|  if(sslc->deep_copy) {
  ------------------
  |  Branch (117:6): [True: 0, False: 13.6k]
  ------------------
  118|      0|    curlx_safefree(sslc->CApath);
  ------------------
  |  | 1332|      0|  do {                      \
  |  | 1333|      0|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1488|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|      0|    (ptr) = NULL;           \
  |  | 1335|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  119|      0|    curlx_safefree(sslc->CAfile);
  ------------------
  |  | 1332|      0|  do {                      \
  |  | 1333|      0|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1488|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|      0|    (ptr) = NULL;           \
  |  | 1335|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  120|      0|    curlx_safefree(sslc->issuercert);
  ------------------
  |  | 1332|      0|  do {                      \
  |  | 1333|      0|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1488|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|      0|    (ptr) = NULL;           \
  |  | 1335|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  121|      0|    curlx_safefree(sslc->clientcert);
  ------------------
  |  | 1332|      0|  do {                      \
  |  | 1333|      0|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1488|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|      0|    (ptr) = NULL;           \
  |  | 1335|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  122|      0|    curlx_safefree(sslc->cipher_list);
  ------------------
  |  | 1332|      0|  do {                      \
  |  | 1333|      0|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1488|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|      0|    (ptr) = NULL;           \
  |  | 1335|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  123|      0|    curlx_safefree(sslc->cipher_list13);
  ------------------
  |  | 1332|      0|  do {                      \
  |  | 1333|      0|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1488|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|      0|    (ptr) = NULL;           \
  |  | 1335|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  124|      0|    curlx_safefree(sslc->pinned_key);
  ------------------
  |  | 1332|      0|  do {                      \
  |  | 1333|      0|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1488|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|      0|    (ptr) = NULL;           \
  |  | 1335|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  125|      0|    curlx_safefree(sslc->cert_blob);
  ------------------
  |  | 1332|      0|  do {                      \
  |  | 1333|      0|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1488|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|      0|    (ptr) = NULL;           \
  |  | 1335|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  126|      0|    curlx_safefree(sslc->ca_info_blob);
  ------------------
  |  | 1332|      0|  do {                      \
  |  | 1333|      0|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1488|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|      0|    (ptr) = NULL;           \
  |  | 1335|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  127|      0|    curlx_safefree(sslc->issuercert_blob);
  ------------------
  |  | 1332|      0|  do {                      \
  |  | 1333|      0|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1488|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|      0|    (ptr) = NULL;           \
  |  | 1335|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  128|      0|    curlx_safefree(sslc->key_blob);
  ------------------
  |  | 1332|      0|  do {                      \
  |  | 1333|      0|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1488|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|      0|    (ptr) = NULL;           \
  |  | 1335|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  129|      0|    curlx_safefree(sslc->curves);
  ------------------
  |  | 1332|      0|  do {                      \
  |  | 1333|      0|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1488|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|      0|    (ptr) = NULL;           \
  |  | 1335|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  130|      0|    curlx_safefree(sslc->signature_algorithms);
  ------------------
  |  | 1332|      0|  do {                      \
  |  | 1333|      0|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1488|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|      0|    (ptr) = NULL;           \
  |  | 1335|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  131|      0|    curlx_safefree(sslc->CRLfile);
  ------------------
  |  | 1332|      0|  do {                      \
  |  | 1333|      0|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1488|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|      0|    (ptr) = NULL;           \
  |  | 1335|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  132|      0|    curlx_safefree(sslc->cert_type);
  ------------------
  |  | 1332|      0|  do {                      \
  |  | 1333|      0|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1488|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|      0|    (ptr) = NULL;           \
  |  | 1335|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  133|      0|    curlx_safefree(sslc->key);
  ------------------
  |  | 1332|      0|  do {                      \
  |  | 1333|      0|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1488|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|      0|    (ptr) = NULL;           \
  |  | 1335|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  134|      0|    curlx_safefree(sslc->key_type);
  ------------------
  |  | 1332|      0|  do {                      \
  |  | 1333|      0|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1488|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|      0|    (ptr) = NULL;           \
  |  | 1335|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  135|      0|    curlx_safefree(sslc->key_passwd);
  ------------------
  |  | 1332|      0|  do {                      \
  |  | 1333|      0|    curlx_free(ptr);        \
  |  |  ------------------
  |  |  |  | 1488|      0|#define curlx_free(ptr)            curl_dbg_free(ptr, __LINE__, __FILE__)
  |  |  ------------------
  |  | 1334|      0|    (ptr) = NULL;           \
  |  | 1335|      0|  } while(0)
  |  |  ------------------
  |  |  |  Branch (1335:11): [Folded, False: 0]
  |  |  ------------------
  ------------------
  136|       |    sslc->deep_copy = FALSE;
  ------------------
  |  | 1054|      0|#define FALSE false
  ------------------
  137|      0|  }
  138|  13.6k|}
Curl_ssl_conn_config_update:
  382|     44|{
  383|       |  /* May be called on an easy that has no connection yet */
  384|     44|  if(data->conn) {
  ------------------
  |  Branch (384:6): [True: 0, False: 44]
  ------------------
  385|      0|    struct ssl_primary_config *src, *dest;
  386|      0|#ifndef CURL_DISABLE_PROXY
  387|      0|    src = for_proxy ? &data->set.proxy_ssl.primary : &data->set.ssl.primary;
  ------------------
  |  Branch (387:11): [True: 0, False: 0]
  ------------------
  388|      0|    dest = for_proxy ? &data->conn->proxy_ssl_config : &data->conn->ssl_config;
  ------------------
  |  Branch (388:12): [True: 0, False: 0]
  ------------------
  389|       |#else
  390|       |    (void)for_proxy;
  391|       |    src = &data->set.ssl.primary;
  392|       |    dest = &data->conn->ssl_config;
  393|       |#endif
  394|      0|    dest->verifyhost = src->verifyhost;
  395|      0|    dest->verifypeer = src->verifypeer;
  396|      0|    dest->verifystatus = src->verifystatus;
  397|      0|  }
  398|     44|}

CRYPTO_calloc:
   29|  2.22k|{
   30|  2.22k|    size_t bytes;
   31|       |
   32|  2.22k|    if (ossl_unlikely(!ossl_size_mul(num, size, &bytes, file, line)))
  ------------------
  |  |   23|  2.22k|#define ossl_unlikely(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (23:26): [True: 0, False: 2.22k]
  |  |  ------------------
  ------------------
   33|      0|        return NULL;
   34|       |
   35|  2.22k|    return CRYPTO_zalloc(bytes, file, line);
   36|  2.22k|}
CRYPTO_aligned_alloc_array:
   40|    219|{
   41|    219|    size_t bytes;
   42|       |
   43|    219|    if (ossl_unlikely(!ossl_size_mul(num, size, &bytes, file, line))) {
  ------------------
  |  |   23|    219|#define ossl_unlikely(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (23:26): [True: 0, False: 219]
  |  |  ------------------
  ------------------
   44|      0|        *freeptr = NULL;
   45|       |
   46|      0|        return NULL;
   47|      0|    }
   48|       |
   49|    219|    return CRYPTO_aligned_alloc(bytes, align, freeptr, file, line);
   50|    219|}
CRYPTO_realloc_array:
   54|    131|{
   55|    131|    size_t bytes;
   56|       |
   57|    131|    if (ossl_unlikely(!ossl_size_mul(num, size, &bytes, file, line)))
  ------------------
  |  |   23|    131|#define ossl_unlikely(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (23:26): [True: 0, False: 131]
  |  |  ------------------
  ------------------
   58|      0|        return NULL;
   59|       |
   60|    131|    return CRYPTO_realloc(addr, bytes, file, line);
   61|    131|}

ASN1_OBJECT_free:
  360|    159|{
  361|    159|    if (a == NULL)
  ------------------
  |  Branch (361:9): [True: 0, False: 159]
  ------------------
  362|      0|        return;
  363|    159|    if (a->flags & ASN1_OBJECT_FLAG_DYNAMIC_STRINGS) {
  ------------------
  |  |  148|    159|#define ASN1_OBJECT_FLAG_DYNAMIC_STRINGS 0x04 /* internal use */
  ------------------
  |  Branch (363:9): [True: 0, False: 159]
  ------------------
  364|      0|#ifndef CONST_STRICT
  365|       |        /*
  366|       |         * Disable purely for compile-time strict const checking.  Doing this
  367|       |         * on a "real" compile will cause memory leaks
  368|       |         */
  369|      0|        OPENSSL_free((void *)a->sn);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  370|      0|        OPENSSL_free((void *)a->ln);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  371|      0|#endif
  372|      0|        a->sn = a->ln = NULL;
  373|      0|    }
  374|    159|    if (a->flags & ASN1_OBJECT_FLAG_DYNAMIC_DATA) {
  ------------------
  |  |  149|    159|#define ASN1_OBJECT_FLAG_DYNAMIC_DATA 0x08 /* internal use */
  ------------------
  |  Branch (374:9): [True: 0, False: 159]
  ------------------
  375|      0|        OPENSSL_free((void *)a->data);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  376|      0|        a->data = NULL;
  377|      0|        a->length = 0;
  378|      0|    }
  379|    159|    if (a->flags & ASN1_OBJECT_FLAG_DYNAMIC)
  ------------------
  |  |  146|    159|#define ASN1_OBJECT_FLAG_DYNAMIC 0x01 /* internal use */
  ------------------
  |  Branch (379:9): [True: 0, False: 159]
  ------------------
  380|      0|        OPENSSL_free(a);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  381|    159|}

evp_pkey_asn1_get_count:
   34|      1|{
   35|      1|    int num = OSSL_NELEM(standard_methods);
  ------------------
  |  |   14|      1|#define OSSL_NELEM(x) (sizeof(x) / sizeof((x)[0]))
  ------------------
   36|      1|    return num;
   37|      1|}
evp_pkey_asn1_get0:
   40|     15|{
   41|     15|    int num = OSSL_NELEM(standard_methods);
  ------------------
  |  |   14|     15|#define OSSL_NELEM(x) (sizeof(x) / sizeof((x)[0]))
  ------------------
   42|       |
   43|     15|    if (idx < 0 || idx >= num)
  ------------------
  |  Branch (43:9): [True: 0, False: 15]
  |  Branch (43:20): [True: 0, False: 15]
  ------------------
   44|      0|        return NULL;
   45|       |
   46|     15|    return standard_methods[idx];
   47|     15|}
evp_pkey_asn1_get0_info:
  101|     15|{
  102|     15|    if (!ameth)
  ------------------
  |  Branch (102:9): [True: 0, False: 15]
  ------------------
  103|      0|        return 0;
  104|     15|    if (ppkey_id)
  ------------------
  |  Branch (104:9): [True: 15, False: 0]
  ------------------
  105|     15|        *ppkey_id = ameth->pkey_id;
  106|     15|    if (ppkey_base_id)
  ------------------
  |  Branch (106:9): [True: 15, False: 0]
  ------------------
  107|     15|        *ppkey_base_id = ameth->pkey_base_id;
  108|     15|    if (ppkey_flags)
  ------------------
  |  Branch (108:9): [True: 15, False: 0]
  ------------------
  109|     15|        *ppkey_flags = ameth->pkey_flags;
  110|     15|    if (pinfo)
  ------------------
  |  Branch (110:9): [True: 0, False: 15]
  ------------------
  111|      0|        *pinfo = ameth->info;
  112|     15|    if (ppem_str)
  ------------------
  |  Branch (112:9): [True: 15, False: 0]
  ------------------
  113|     15|        *ppem_str = ameth->pem_str;
  114|     15|    return 1;
  115|     15|}

ossl_err_load_ASN1_strings:
  210|      1|{
  211|      1|#ifndef OPENSSL_NO_ERR
  212|      1|    if (ERR_reason_error_string(ASN1_str_reasons[0].error) == NULL)
  ------------------
  |  Branch (212:9): [True: 1, False: 0]
  ------------------
  213|      1|        ERR_load_strings_const(ASN1_str_reasons);
  214|      1|#endif
  215|      1|    return 1;
  216|      1|}

ossl_err_load_ASYNC_strings:
   31|      1|{
   32|      1|#ifndef OPENSSL_NO_ERR
   33|      1|    if (ERR_reason_error_string(ASYNC_str_reasons[0].error) == NULL)
  ------------------
  |  Branch (33:9): [True: 1, False: 0]
  ------------------
   34|      1|        ERR_load_strings_const(ASYNC_str_reasons);
   35|      1|#endif
   36|      1|    return 1;
   37|      1|}

ossl_err_load_BIO_strings:
   93|      1|{
   94|      1|#ifndef OPENSSL_NO_ERR
   95|      1|    if (ERR_reason_error_string(BIO_str_reasons[0].error) == NULL)
  ------------------
  |  Branch (95:9): [True: 1, False: 0]
  ------------------
   96|      1|        ERR_load_strings_const(BIO_str_reasons);
   97|      1|#endif
   98|      1|    return 1;
   99|      1|}

BIO_meth_new:
   38|    114|{
   39|    114|    BIO_METHOD *biom = OPENSSL_zalloc(sizeof(BIO_METHOD));
  ------------------
  |  |  109|    114|    CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   40|       |
   41|    114|    if (biom == NULL
  ------------------
  |  Branch (41:9): [True: 0, False: 114]
  ------------------
   42|    114|        || (biom->name = OPENSSL_strdup(name)) == NULL) {
  ------------------
  |  |  136|    114|    CRYPTO_strdup(str, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_strdup(str, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  |  Branch (42:12): [True: 0, False: 114]
  ------------------
   43|      0|        OPENSSL_free(biom);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   44|      0|        return NULL;
   45|      0|    }
   46|    114|    biom->type = type;
   47|    114|    return biom;
   48|    114|}
BIO_meth_free:
   51|    113|{
   52|    113|    if (biom != NULL) {
  ------------------
  |  Branch (52:9): [True: 113, False: 0]
  ------------------
   53|    113|        OPENSSL_free(biom->name);
  ------------------
  |  |  132|    113|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   54|    113|        OPENSSL_free(biom);
  ------------------
  |  |  132|    113|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   55|    113|    }
   56|    113|}
BIO_meth_set_write_ex:
  101|    114|{
  102|       |    biom->bwrite_old = NULL;
  103|    114|    biom->bwrite = bwrite;
  104|    114|    return 1;
  105|    114|}
BIO_meth_set_read_ex:
  162|    114|{
  163|       |    biom->bread_old = NULL;
  164|    114|    biom->bread = bread;
  165|    114|    return 1;
  166|    114|}
BIO_meth_set_puts:
  177|    114|{
  178|    114|    biom->bputs = bputs;
  179|    114|    return 1;
  180|    114|}
BIO_meth_set_gets:
  191|    114|{
  192|    114|    biom->bgets = bgets;
  193|    114|    return 1;
  194|    114|}
BIO_meth_set_ctrl:
  205|    114|{
  206|    114|    biom->ctrl = ctrl;
  207|    114|    return 1;
  208|    114|}
BIO_meth_set_create:
  218|    114|{
  219|    114|    biom->create = create;
  220|    114|    return 1;
  221|    114|}
BIO_meth_set_destroy:
  231|    114|{
  232|    114|    biom->destroy = destroy;
  233|    114|    return 1;
  234|    114|}

BIO_snprintf:
  142|  1.78k|{
  143|  1.78k|    va_list args;
  144|  1.78k|    int ret;
  145|       |
  146|  1.78k|    va_start(args, format);
  147|       |
  148|       |#if defined(_MSC_VER) && _MSC_VER < 1900
  149|       |    ret = _vsnprintf_s(buf, n, _TRUNCATE, format, args);
  150|       |#else
  151|  1.78k|    ret = vsnprintf(buf, n, format, args);
  152|  1.78k|    if ((size_t)ret >= n)
  ------------------
  |  Branch (152:9): [True: 0, False: 1.78k]
  ------------------
  153|      0|        ret = -1;
  154|  1.78k|#endif
  155|  1.78k|    va_end(args);
  156|       |
  157|  1.78k|    return ret;
  158|  1.78k|}
BIO_vsnprintf:
  161|    318|{
  162|    318|    int ret;
  163|       |
  164|       |#if defined(_MSC_VER) && _MSC_VER < 1900
  165|       |    ret = _vsnprintf_s(buf, n, _TRUNCATE, format, args);
  166|       |#else
  167|    318|    ret = vsnprintf(buf, n, format, args);
  168|    318|    if ((size_t)ret >= n)
  ------------------
  |  Branch (168:9): [True: 0, False: 318]
  ------------------
  169|      0|        ret = -1;
  170|    318|#endif
  171|    318|    return ret;
  172|    318|}

ossl_bio_core_globals_free:
   26|    109|{
   27|    109|    OPENSSL_free(vbcg);
  ------------------
  |  |  132|    109|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   28|    109|}
ossl_bio_core_globals_new:
   31|    110|{
   32|    110|    return OPENSSL_zalloc(sizeof(BIO_CORE_GLOBALS));
  ------------------
  |  |  109|    110|    CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   33|    110|}

BIO_new_file:
   58|    110|{
   59|    110|    BIO *ret;
   60|    110|    FILE *file;
   61|    110|    int fp_flags = BIO_CLOSE;
  ------------------
  |  |   85|    110|#define BIO_CLOSE 0x01
  ------------------
   62|       |
   63|    110|    if (strchr(mode, 'b') == NULL)
  ------------------
  |  Branch (63:9): [True: 0, False: 110]
  ------------------
   64|      0|        fp_flags |= BIO_FP_TEXT;
  ------------------
  |  |  220|      0|#define BIO_FP_TEXT 0x10
  ------------------
   65|       |
   66|    110|    if (filename == NULL) {
  ------------------
  |  Branch (66:9): [True: 0, False: 110]
  ------------------
   67|      0|        ERR_raise(ERR_LIB_CRYPTO, ERR_R_PASSED_NULL_PARAMETER);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
   68|      0|        return NULL;
   69|      0|    }
   70|       |
   71|    110|    file = openssl_fopen(filename, mode);
   72|    110|    if (file == NULL) {
  ------------------
  |  Branch (72:9): [True: 110, False: 0]
  ------------------
   73|    110|        ERR_raise_data(ERR_LIB_SYS, get_last_sys_error(),
  ------------------
  |  |  359|    110|    (ERR_new(),                                                  \
  |  |  360|    110|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  366|    110|#define OPENSSL_FUNC __func__
  |  |  ------------------
  |  |  361|    110|        ERR_set_error)
  ------------------
                      ERR_raise_data(ERR_LIB_SYS, get_last_sys_error(),
  ------------------
  |  |   55|    110|#define ERR_LIB_SYS 2
  ------------------
                      ERR_raise_data(ERR_LIB_SYS, get_last_sys_error(),
  ------------------
  |  |   30|    110|#define get_last_sys_error() errno
  ------------------
   74|    110|            "calling fopen(%s, %s)",
   75|    110|            filename, mode);
   76|    110|        if (errno == ENOENT
  ------------------
  |  Branch (76:13): [True: 110, False: 0]
  ------------------
   77|      0|#ifdef ENXIO
   78|    110|            || errno == ENXIO
  ------------------
  |  Branch (78:16): [True: 0, False: 0]
  ------------------
   79|    110|#endif
   80|    110|        )
   81|    110|            ERR_raise(ERR_LIB_BIO, BIO_R_NO_SUCH_FILE);
  ------------------
  |  |  357|    110|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|    110|    (ERR_new(),                                                  \
  |  |  |  |  360|    110|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|    110|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|    110|        ERR_set_error)
  |  |  ------------------
  ------------------
   82|      0|        else
   83|    110|            ERR_raise(ERR_LIB_BIO, ERR_R_SYS_LIB);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
   84|    110|        return NULL;
   85|    110|    }
   86|      0|    if ((ret = BIO_new(BIO_s_file())) == NULL) {
  ------------------
  |  Branch (86:9): [True: 0, False: 0]
  ------------------
   87|      0|        fclose(file);
   88|      0|        return NULL;
   89|      0|    }
   90|       |
   91|       |    /* we did fopen -> we disengage UPLINK */
   92|      0|    BIO_clear_flags(ret, BIO_FLAGS_UPLINK_INTERNAL);
  ------------------
  |  |   18|      0|#define BIO_FLAGS_UPLINK_INTERNAL 0
  ------------------
   93|      0|    BIO_set_fp(ret, file, fp_flags);
  ------------------
  |  |  578|      0|#define BIO_set_fp(b, fp, c) BIO_ctrl(b, BIO_C_SET_FILE_PTR, c, (char *)(fp))
  |  |  ------------------
  |  |  |  |  449|      0|#define BIO_C_SET_FILE_PTR 106
  |  |  ------------------
  ------------------
   94|      0|    return ret;
   95|      0|}

ossl_err_load_BN_strings:
   50|      1|{
   51|      1|#ifndef OPENSSL_NO_ERR
   52|      1|    if (ERR_reason_error_string(BN_str_reasons[0].error) == NULL)
  ------------------
  |  Branch (52:9): [True: 1, False: 0]
  ------------------
   53|      1|        ERR_load_strings_const(BN_str_reasons);
   54|      1|#endif
   55|      1|    return 1;
   56|      1|}

BN_free:
  225|    206|{
  226|    206|    if (a == NULL)
  ------------------
  |  Branch (226:9): [True: 206, False: 0]
  ------------------
  227|    206|        return;
  228|      0|    if (!BN_get_flags(a, BN_FLG_STATIC_DATA))
  ------------------
  |  |   59|      0|#define BN_FLG_STATIC_DATA 0x02
  ------------------
  |  Branch (228:9): [True: 0, False: 0]
  ------------------
  229|      0|        bn_free_d(a, 0);
  230|      0|    if (a->flags & BN_FLG_MALLOCED)
  ------------------
  |  |   58|      0|#define BN_FLG_MALLOCED 0x01
  ------------------
  |  Branch (230:9): [True: 0, False: 0]
  ------------------
  231|      0|        OPENSSL_free(a);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  232|      0|}

ossl_bsearch:
   18|    228|{
   19|    228|    const char *base_ = base;
   20|    228|    int l, h, i = 0, c = 0;
   21|    228|    const char *p = NULL;
   22|       |
   23|    228|    if (num == 0)
  ------------------
  |  Branch (23:9): [True: 0, False: 228]
  ------------------
   24|      0|        return NULL;
   25|    228|    l = 0;
   26|    228|    h = num;
   27|    455|    while (l < h) {
  ------------------
  |  Branch (27:12): [True: 233, False: 222]
  ------------------
   28|    233|        i = l + (h - l) / 2;
   29|    233|        p = &(base_[i * size]);
   30|    233|        if (cmp_thunk != NULL)
  ------------------
  |  Branch (30:13): [True: 233, False: 0]
  ------------------
   31|    233|            c = cmp_thunk((cmpthunk_fn)cmp, key, (const void *)p);
   32|      0|        else
   33|      0|            c = cmp(key, p);
   34|    233|        if (c < 0)
  ------------------
  |  Branch (34:13): [True: 126, False: 107]
  ------------------
   35|    126|            h = i;
   36|    107|        else if (c > 0)
  ------------------
  |  Branch (36:18): [True: 101, False: 6]
  ------------------
   37|    101|            l = i + 1;
   38|      6|        else
   39|      6|            break;
   40|    233|    }
   41|    228|    if (c != 0 && !(flags & OSSL_BSEARCH_VALUE_ON_NOMATCH))
  ------------------
  |  |  149|    222|#define OSSL_BSEARCH_VALUE_ON_NOMATCH 0x01
  ------------------
  |  Branch (41:9): [True: 222, False: 6]
  |  Branch (41:19): [True: 222, False: 0]
  ------------------
   42|    222|        p = NULL;
   43|      6|    else if (c == 0 && (flags & OSSL_BSEARCH_FIRST_VALUE_ON_MATCH)) {
  ------------------
  |  |  150|      6|#define OSSL_BSEARCH_FIRST_VALUE_ON_MATCH 0x02
  ------------------
  |  Branch (43:14): [True: 6, False: 0]
  |  Branch (43:24): [True: 6, False: 0]
  ------------------
   44|      6|        while (i > 0) {
  ------------------
  |  Branch (44:16): [True: 0, False: 6]
  ------------------
   45|      0|            if (cmp_thunk != NULL) {
  ------------------
  |  Branch (45:17): [True: 0, False: 0]
  ------------------
   46|      0|                if (cmp_thunk((cmpthunk_fn)cmp, key, (const void *)&(base_[(i - 1) * size])))
  ------------------
  |  Branch (46:21): [True: 0, False: 0]
  ------------------
   47|      0|                    break;
   48|      0|            } else {
   49|      0|                if (cmp(key, &(base_[(i - 1) * size])))
  ------------------
  |  Branch (49:21): [True: 0, False: 0]
  ------------------
   50|      0|                    break;
   51|      0|            }
   52|      0|            i--;
   53|      0|        }
   54|      6|        p = &(base_[i * size]);
   55|      6|    }
   56|    228|    return p;
   57|    228|}

ossl_err_load_BUF_strings:
   24|      1|{
   25|      1|#ifndef OPENSSL_NO_ERR
   26|      1|    if (ERR_reason_error_string(BUF_str_reasons[0].error) == NULL)
  ------------------
  |  Branch (26:9): [True: 1, False: 0]
  ------------------
   27|      1|        ERR_load_strings_const(BUF_str_reasons);
   28|      1|#endif
   29|      1|    return 1;
   30|      1|}

ossl_err_load_CMP_strings:
  199|      1|{
  200|      1|#ifndef OPENSSL_NO_ERR
  201|      1|    if (ERR_reason_error_string(CMP_str_reasons[0].error) == NULL)
  ------------------
  |  Branch (201:9): [True: 1, False: 0]
  ------------------
  202|      1|        ERR_load_strings_const(CMP_str_reasons);
  203|      1|#endif
  204|      1|    return 1;
  205|      1|}

ossl_err_load_CMS_strings:
  182|      1|{
  183|      1|#ifndef OPENSSL_NO_ERR
  184|      1|    if (ERR_reason_error_string(CMS_str_reasons[0].error) == NULL)
  ------------------
  |  Branch (184:9): [True: 1, False: 0]
  ------------------
  185|      1|        ERR_load_strings_const(CMS_str_reasons);
  186|      1|#endif
  187|      1|    return 1;
  188|      1|}

COMP_zlib:
  310|    110|{
  311|    110|    COMP_METHOD *meth = NULL;
  312|       |
  313|       |#ifndef OPENSSL_NO_ZLIB
  314|       |    if (RUN_ONCE(&zlib_once, ossl_comp_zlib_init))
  315|       |        meth = &zlib_stateful_method;
  316|       |#endif
  317|       |
  318|    110|    return meth;
  319|    110|}

ossl_err_load_COMP_strings:
   45|      1|{
   46|      1|#ifndef OPENSSL_NO_ERR
   47|      1|    if (ERR_reason_error_string(COMP_str_reasons[0].error) == NULL)
  ------------------
  |  Branch (47:9): [True: 1, False: 0]
  ------------------
   48|      1|        ERR_load_strings_const(COMP_str_reasons);
   49|      1|#endif
   50|      1|    return 1;
   51|      1|}

COMP_get_type:
   41|    110|{
   42|    110|    if (meth == NULL)
  ------------------
  |  Branch (42:9): [True: 110, False: 0]
  ------------------
   43|    110|        return NID_undef;
  ------------------
  |  |   18|    110|#define NID_undef                       0
  ------------------
   44|      0|    return meth->type;
   45|    110|}

ossl_load_builtin_compressions:
   29|    110|{
   30|    110|    STACK_OF(SSL_COMP) *comp_methods = NULL;
  ------------------
  |  |   33|    110|#define STACK_OF(type) struct stack_st_##type
  ------------------
   31|    110|#ifndef OPENSSL_NO_COMP
   32|    110|    SSL_COMP *comp = NULL;
   33|    110|    COMP_METHOD *method = COMP_zlib();
   34|       |
   35|    110|    comp_methods = sk_SSL_COMP_new(sk_comp_cmp);
  ------------------
  |  |   72|    110|#define sk_SSL_COMP_new(cmp) ((STACK_OF(SSL_COMP) *)OPENSSL_sk_set_cmp_thunks(OPENSSL_sk_new(ossl_check_SSL_COMP_compfunc_type(cmp)), sk_SSL_COMP_cmpfunc_thunk))
  ------------------
   36|       |
   37|    110|    if (COMP_get_type(method) != NID_undef && comp_methods != NULL) {
  ------------------
  |  |   18|    220|#define NID_undef                       0
  ------------------
  |  Branch (37:9): [True: 0, False: 110]
  |  Branch (37:47): [True: 0, False: 0]
  ------------------
   38|      0|        comp = OPENSSL_malloc(sizeof(*comp));
  ------------------
  |  |  107|      0|    CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   39|      0|        if (comp != NULL) {
  ------------------
  |  Branch (39:13): [True: 0, False: 0]
  ------------------
   40|      0|            comp->method = method;
   41|      0|            comp->id = SSL_COMP_ZLIB_IDX;
  ------------------
  |  |   18|      0|#define SSL_COMP_ZLIB_IDX 1
  ------------------
   42|      0|            comp->name = COMP_get_name(method);
   43|      0|            if (!sk_SSL_COMP_push(comp_methods, comp))
  ------------------
  |  |   80|      0|#define sk_SSL_COMP_push(sk, ptr) OPENSSL_sk_push(ossl_check_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_type(ptr))
  ------------------
  |  Branch (43:17): [True: 0, False: 0]
  ------------------
   44|      0|                OPENSSL_free(comp);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   45|      0|        }
   46|      0|    }
   47|    110|#endif
   48|    110|    return comp_methods;
   49|    110|}
ossl_free_compression_methods_int:
   57|    109|{
   58|    109|    sk_SSL_COMP_pop_free(methods, cmeth_free);
  ------------------
  |  |   84|    109|#define sk_SSL_COMP_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_SSL_COMP_sk_type(sk), ossl_check_SSL_COMP_freefunc_type(freefunc))
  ------------------
   59|    109|}

_CONF_free_data:
  137|    110|{
  138|    110|    if (conf == NULL)
  ------------------
  |  Branch (138:9): [True: 0, False: 110]
  ------------------
  139|      0|        return;
  140|       |
  141|    110|    OPENSSL_free(conf->includedir);
  ------------------
  |  |  132|    110|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  142|    110|    if (conf->data == NULL)
  ------------------
  |  Branch (142:9): [True: 110, False: 0]
  ------------------
  143|    110|        return;
  144|       |
  145|       |    /* evil thing to make sure the 'OPENSSL_free()' works as expected */
  146|      0|    lh_CONF_VALUE_set_down_load(conf->data, 0);
  ------------------
  |  |   86|      0|#define lh_CONF_VALUE_set_down_load(lh, dl) OPENSSL_LH_set_down_load(ossl_check_CONF_VALUE_lh_type(lh), dl)
  ------------------
  147|      0|    lh_CONF_VALUE_doall_LH_CONF_VALUE(conf->data, value_free_hash, conf->data);
  148|       |
  149|       |    /*
  150|       |     * We now have only 'section' entries in the hash table. Due to problems
  151|       |     * with
  152|       |     */
  153|       |
  154|      0|    lh_CONF_VALUE_doall(conf->data, value_free_stack_doall);
  ------------------
  |  |   87|      0|#define lh_CONF_VALUE_doall(lh, dfn) OPENSSL_LH_doall(ossl_check_CONF_VALUE_lh_type(lh), ossl_check_CONF_VALUE_lh_doallfunc_type(dfn))
  ------------------
  155|      0|    lh_CONF_VALUE_free(conf->data);
  ------------------
  |  |   75|      0|#define lh_CONF_VALUE_free(lh) OPENSSL_LH_free(ossl_check_CONF_VALUE_lh_type(lh))
  ------------------
  156|      0|}

NCONF_default:
   87|    110|{
   88|    110|    return &default_method;
   89|    110|}
conf_def.c:def_create:
  112|    110|{
  113|    110|    CONF *ret;
  114|       |
  115|    110|    ret = OPENSSL_malloc(sizeof(*ret));
  ------------------
  |  |  107|    110|    CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  116|    110|    if (ret != NULL)
  ------------------
  |  Branch (116:9): [True: 110, False: 0]
  ------------------
  117|    110|        if (meth->init(ret) == 0) {
  ------------------
  |  Branch (117:13): [True: 0, False: 110]
  ------------------
  118|      0|            OPENSSL_free(ret);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  119|       |            ret = NULL;
  120|      0|        }
  121|    110|    return ret;
  122|    110|}
conf_def.c:def_init_default:
  125|    110|{
  126|    110|    if (conf == NULL)
  ------------------
  |  Branch (126:9): [True: 0, False: 110]
  ------------------
  127|      0|        return 0;
  128|       |
  129|    110|    memset(conf, 0, sizeof(*conf));
  130|    110|    conf->meth = &default_method;
  131|    110|    conf->meth_data = (void *)CONF_type_default;
  132|       |
  133|    110|    return 1;
  134|    110|}
conf_def.c:def_destroy:
  151|    110|{
  152|    110|    if (def_destroy_data(conf)) {
  ------------------
  |  Branch (152:9): [True: 110, False: 0]
  ------------------
  153|    110|        OPENSSL_free(conf);
  ------------------
  |  |  132|    110|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  154|    110|        return 1;
  155|    110|    }
  156|      0|    return 0;
  157|    110|}
conf_def.c:def_destroy_data:
  160|    110|{
  161|    110|    if (conf == NULL)
  ------------------
  |  Branch (161:9): [True: 0, False: 110]
  ------------------
  162|      0|        return 0;
  163|    110|    _CONF_free_data(conf);
  164|    110|    return 1;
  165|    110|}
conf_def.c:def_load:
  168|    110|{
  169|    110|    int ret;
  170|    110|    BIO *in = NULL;
  171|       |
  172|       |#ifdef OPENSSL_SYS_VMS
  173|       |    in = BIO_new_file(name, "r");
  174|       |#else
  175|    110|    in = BIO_new_file(name, "rb");
  176|    110|#endif
  177|    110|    if (in == NULL) {
  ------------------
  |  Branch (177:9): [True: 110, False: 0]
  ------------------
  178|    110|        if (ERR_GET_REASON(ERR_peek_last_error()) == BIO_R_NO_SUCH_FILE)
  ------------------
  |  |   46|    110|#define BIO_R_NO_SUCH_FILE 128
  ------------------
  |  Branch (178:13): [True: 110, False: 0]
  ------------------
  179|    110|            ERR_raise(ERR_LIB_CONF, CONF_R_NO_SUCH_FILE);
  ------------------
  |  |  357|    110|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|    110|    (ERR_new(),                                                  \
  |  |  |  |  360|    110|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|    110|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|    110|        ERR_set_error)
  |  |  ------------------
  ------------------
  180|      0|        else
  181|    110|            ERR_raise(ERR_LIB_CONF, ERR_R_SYS_LIB);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  182|    110|        return 0;
  183|    110|    }
  184|       |
  185|      0|    ret = def_load_bio(conf, in, line);
  186|      0|    BIO_free(in);
  187|       |
  188|      0|    return ret;
  189|    110|}

ossl_err_load_CONF_strings:
   68|      1|{
   69|      1|#ifndef OPENSSL_NO_ERR
   70|      1|    if (ERR_reason_error_string(CONF_str_reasons[0].error) == NULL)
  ------------------
  |  Branch (70:9): [True: 1, False: 0]
  ------------------
   71|      1|        ERR_load_strings_const(CONF_str_reasons);
   72|      1|#endif
   73|      1|    return 1;
   74|      1|}

NCONF_new_ex:
  183|    110|{
  184|    110|    CONF *ret;
  185|       |
  186|    110|    if (meth == NULL)
  ------------------
  |  Branch (186:9): [True: 110, False: 0]
  ------------------
  187|    110|        meth = NCONF_default();
  188|       |
  189|    110|    ret = meth->create(meth);
  190|    110|    if (ret == NULL) {
  ------------------
  |  Branch (190:9): [True: 0, False: 110]
  ------------------
  191|      0|        ERR_raise(ERR_LIB_CONF, ERR_R_CONF_LIB);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  192|      0|        return NULL;
  193|      0|    }
  194|    110|    ret->libctx = libctx;
  195|       |
  196|    110|    return ret;
  197|    110|}
NCONF_free:
  205|    110|{
  206|    110|    if (conf == NULL)
  ------------------
  |  Branch (206:9): [True: 0, False: 110]
  ------------------
  207|      0|        return;
  208|    110|    conf->meth->destroy(conf);
  209|    110|}
NCONF_load:
  252|    110|{
  253|    110|    if (conf == NULL) {
  ------------------
  |  Branch (253:9): [True: 0, False: 110]
  ------------------
  254|      0|        ERR_raise(ERR_LIB_CONF, CONF_R_NO_CONF);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  255|      0|        return 0;
  256|      0|    }
  257|       |
  258|    110|    return conf->meth->load(conf, file, eline);
  259|    110|}

CONF_modules_load_file_ex:
  156|    110|{
  157|    110|    char *file = NULL;
  158|    110|    CONF *conf = NULL;
  159|    110|    int ret = 0, diagnostics = OSSL_LIB_CTX_get_conf_diagnostics(libctx);
  160|       |
  161|    110|    ERR_set_mark();
  162|       |
  163|    110|    if (filename == NULL) {
  ------------------
  |  Branch (163:9): [True: 110, False: 0]
  ------------------
  164|    110|        file = CONF_get1_default_config_file();
  165|    110|        if (file == NULL)
  ------------------
  |  Branch (165:13): [True: 0, False: 110]
  ------------------
  166|      0|            goto err;
  167|    110|        if (*file == '\0') {
  ------------------
  |  Branch (167:13): [True: 0, False: 110]
  ------------------
  168|       |            /* Do not try to load an empty file name but do not error out */
  169|      0|            ret = 1;
  170|      0|            goto err;
  171|      0|        }
  172|    110|    } else {
  173|      0|        file = (char *)filename;
  174|      0|    }
  175|       |
  176|    110|    conf = NCONF_new_ex(libctx, NULL);
  177|    110|    if (conf == NULL)
  ------------------
  |  Branch (177:9): [True: 0, False: 110]
  ------------------
  178|      0|        goto err;
  179|       |
  180|    110|    if (NCONF_load(conf, file, NULL) <= 0) {
  ------------------
  |  Branch (180:9): [True: 110, False: 0]
  ------------------
  181|    110|        if ((flags & CONF_MFLAGS_IGNORE_MISSING_FILE) && (ERR_GET_REASON(ERR_peek_last_error()) == CONF_R_NO_SUCH_FILE)) {
  ------------------
  |  |  114|    110|#define CONF_MFLAGS_IGNORE_MISSING_FILE 0x10
  ------------------
                      if ((flags & CONF_MFLAGS_IGNORE_MISSING_FILE) && (ERR_GET_REASON(ERR_peek_last_error()) == CONF_R_NO_SUCH_FILE)) {
  ------------------
  |  |   34|      1|#define CONF_R_NO_SUCH_FILE 114
  ------------------
  |  Branch (181:13): [True: 1, False: 109]
  |  Branch (181:58): [True: 1, False: 0]
  ------------------
  182|      1|            ret = 1;
  183|      1|        }
  184|    110|        goto err;
  185|    110|    }
  186|       |
  187|      0|    ret = CONF_modules_load(conf, appname, flags);
  188|       |    /* CONF_modules_load() might change the diagnostics setting, reread it. */
  189|      0|    diagnostics = OSSL_LIB_CTX_get_conf_diagnostics(libctx);
  190|       |
  191|    110|err:
  192|    110|    if (filename == NULL)
  ------------------
  |  Branch (192:9): [True: 110, False: 0]
  ------------------
  193|    110|        OPENSSL_free(file);
  ------------------
  |  |  132|    110|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  194|    110|    NCONF_free(conf);
  195|       |
  196|    110|    if ((flags & CONF_MFLAGS_IGNORE_RETURN_CODES) != 0 && !diagnostics)
  ------------------
  |  |  111|    110|#define CONF_MFLAGS_IGNORE_RETURN_CODES 0x2
  ------------------
  |  Branch (196:9): [True: 1, False: 109]
  |  Branch (196:59): [True: 1, False: 0]
  ------------------
  197|      1|        ret = 1;
  198|       |
  199|    110|    if (ret > 0)
  ------------------
  |  Branch (199:9): [True: 1, False: 109]
  ------------------
  200|      1|        ERR_pop_to_mark();
  201|    109|    else
  202|    109|        ERR_clear_last_mark();
  203|       |
  204|    110|    return ret;
  205|      0|}
CONF_get1_default_config_file:
  646|    110|{
  647|    110|    const char *t;
  648|    110|    char *file, *sep = "";
  649|    110|    size_t size;
  650|       |
  651|    110|    if ((file = ossl_safe_getenv("OPENSSL_CONF")) != NULL)
  ------------------
  |  Branch (651:9): [True: 0, False: 110]
  ------------------
  652|      0|        return OPENSSL_strdup(file);
  ------------------
  |  |  136|      0|    CRYPTO_strdup(str, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_strdup(str, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  653|       |
  654|    110|    t = X509_get_default_cert_area();
  655|       |    /*
  656|       |     * On windows systems with -DOSSL_WINCTX set, if the needed registry
  657|       |     * keys are not yet set, openssl applets will return, due to an inability
  658|       |     * to locate various directories, like the default cert area.  In that
  659|       |     * event, clone an empty string here, so that commands like openssl version
  660|       |     * continue to operate properly without needing to set OPENSSL_CONF.
  661|       |     * Applets like cms will fail gracefully later when they try to parse an
  662|       |     * empty config file
  663|       |     */
  664|    110|    if (t == NULL)
  ------------------
  |  Branch (664:9): [True: 0, False: 110]
  ------------------
  665|      0|        return OPENSSL_strdup("");
  ------------------
  |  |  136|      0|    CRYPTO_strdup(str, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_strdup(str, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  666|       |
  667|    110|#ifndef OPENSSL_SYS_VMS
  668|    110|    sep = "/";
  669|    110|#endif
  670|    110|    size = strlen(t) + strlen(sep) + strlen(OPENSSL_CONF) + 1;
  ------------------
  |  |   80|    110|#define OPENSSL_CONF "openssl.cnf"
  ------------------
  671|    110|    file = OPENSSL_malloc(size);
  ------------------
  |  |  107|    110|    CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  672|       |
  673|    110|    if (file == NULL)
  ------------------
  |  Branch (673:9): [True: 0, False: 110]
  ------------------
  674|      0|        return NULL;
  675|    110|    BIO_snprintf(file, size, "%s%s%s", t, sep, OPENSSL_CONF);
  ------------------
  |  |   80|    110|#define OPENSSL_CONF "openssl.cnf"
  ------------------
  676|       |
  677|    110|    return file;
  678|    110|}

ossl_config_int:
   46|      1|{
   47|      1|    int ret = 0;
   48|      1|#if defined(OPENSSL_INIT_DEBUG) || !defined(OPENSSL_SYS_UEFI)
   49|      1|    const char *filename;
   50|      1|    const char *appname;
   51|      1|    unsigned long flags;
   52|      1|#endif
   53|       |
   54|      1|    if (openssl_configured)
  ------------------
  |  Branch (54:9): [True: 0, False: 1]
  ------------------
   55|      0|        return 1;
   56|       |
   57|      1|#if defined(OPENSSL_INIT_DEBUG) || !defined(OPENSSL_SYS_UEFI)
   58|      1|    filename = settings ? settings->filename : NULL;
  ------------------
  |  Branch (58:16): [True: 0, False: 1]
  ------------------
   59|      1|    appname = settings ? settings->appname : NULL;
  ------------------
  |  Branch (59:15): [True: 0, False: 1]
  ------------------
   60|      1|    flags = settings ? settings->flags : DEFAULT_CONF_MFLAGS;
  ------------------
  |  |   20|      2|    (CONF_MFLAGS_DEFAULT_SECTION | CONF_MFLAGS_IGNORE_MISSING_FILE | CONF_MFLAGS_IGNORE_RETURN_CODES)
  |  |  ------------------
  |  |  |  |  115|      1|#define CONF_MFLAGS_DEFAULT_SECTION 0x20
  |  |  ------------------
  |  |                   (CONF_MFLAGS_DEFAULT_SECTION | CONF_MFLAGS_IGNORE_MISSING_FILE | CONF_MFLAGS_IGNORE_RETURN_CODES)
  |  |  ------------------
  |  |  |  |  114|      1|#define CONF_MFLAGS_IGNORE_MISSING_FILE 0x10
  |  |  ------------------
  |  |                   (CONF_MFLAGS_DEFAULT_SECTION | CONF_MFLAGS_IGNORE_MISSING_FILE | CONF_MFLAGS_IGNORE_RETURN_CODES)
  |  |  ------------------
  |  |  |  |  111|      1|#define CONF_MFLAGS_IGNORE_RETURN_CODES 0x2
  |  |  ------------------
  ------------------
  |  Branch (60:13): [True: 0, False: 1]
  ------------------
   61|      1|#endif
   62|       |
   63|       |#ifdef OPENSSL_INIT_DEBUG
   64|       |    fprintf(stderr, "OPENSSL_INIT: ossl_config_int(%s, %s, %lu)\n",
   65|       |        filename, appname, flags);
   66|       |#endif
   67|       |
   68|      1|#ifndef OPENSSL_SYS_UEFI
   69|      1|    ret = CONF_modules_load_file_ex(OSSL_LIB_CTX_get0_global_default(),
   70|      1|        filename, appname, flags);
   71|       |#else
   72|       |    ret = 1;
   73|       |#endif
   74|      1|    openssl_configured = 1;
   75|      1|    return ret;
   76|      1|}

ossl_lib_ctx_write_lock:
   59|      1|{
   60|      1|    if ((ctx = ossl_lib_ctx_get_concrete(ctx)) == NULL)
  ------------------
  |  Branch (60:9): [True: 0, False: 1]
  ------------------
   61|      0|        return 0;
   62|      1|    return CRYPTO_THREAD_write_lock(ctx->lock);
   63|      1|}
ossl_lib_ctx_read_lock:
   66|    135|{
   67|    135|    if ((ctx = ossl_lib_ctx_get_concrete(ctx)) == NULL)
  ------------------
  |  Branch (67:9): [True: 0, False: 135]
  ------------------
   68|      0|        return 0;
   69|    135|    return CRYPTO_THREAD_read_lock(ctx->lock);
   70|    135|}
ossl_lib_ctx_unlock:
   73|    136|{
   74|    136|    if ((ctx = ossl_lib_ctx_get_concrete(ctx)) == NULL)
  ------------------
  |  Branch (74:9): [True: 0, False: 136]
  ------------------
   75|      0|        return 0;
   76|    136|    return CRYPTO_THREAD_unlock(ctx->lock);
   77|    136|}
ossl_lib_ctx_detach_ssl_conf_imodule:
   99|    109|{
  100|    109|    if (ctx != NULL && md != NULL)
  ------------------
  |  Branch (100:9): [True: 109, False: 0]
  |  Branch (100:24): [True: 0, False: 109]
  ------------------
  101|      0|        return 0;
  102|       |
  103|    109|    if (ctx != NULL && ctx->ssl_imod) {
  ------------------
  |  Branch (103:9): [True: 109, False: 0]
  |  Branch (103:24): [True: 0, False: 109]
  ------------------
  104|      0|        ctx->ssl_imod->libctx = NULL;
  105|      0|        ctx->ssl_imod = NULL;
  106|      0|    }
  107|       |
  108|    109|    if (md != NULL && md->libctx) {
  ------------------
  |  Branch (108:9): [True: 0, False: 109]
  |  Branch (108:23): [True: 0, False: 0]
  ------------------
  109|      0|        md->libctx->ssl_imod = NULL;
  110|      0|        md->libctx = NULL;
  111|      0|    }
  112|       |
  113|    109|    return 1;
  114|    109|}
OSSL_LIB_CTX_new:
  485|    109|{
  486|    109|    OSSL_LIB_CTX *ctx = OPENSSL_zalloc(sizeof(*ctx));
  ------------------
  |  |  109|    109|    CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  487|       |
  488|    109|    if (ctx != NULL && !context_init(ctx)) {
  ------------------
  |  Branch (488:9): [True: 109, False: 0]
  |  Branch (488:24): [True: 0, False: 109]
  ------------------
  489|      0|        OPENSSL_free(ctx);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  490|       |        ctx = NULL;
  491|      0|    }
  492|    109|    return ctx;
  493|    109|}
OSSL_LIB_CTX_load_config:
  530|    109|{
  531|       |    return CONF_modules_load_file_ex(ctx, config_file, NULL, 0) > 0;
  532|    109|}
OSSL_LIB_CTX_free:
  536|  6.92k|{
  537|  6.92k|    if (ctx == NULL || ossl_lib_ctx_is_default_nocreate(ctx))
  ------------------
  |  Branch (537:9): [True: 6.81k, False: 109]
  |  Branch (537:24): [True: 0, False: 109]
  ------------------
  538|  6.81k|        return;
  539|       |
  540|    109|#ifndef FIPS_MODULE
  541|    109|    if (ctx->ischild)
  ------------------
  |  Branch (541:9): [True: 0, False: 109]
  ------------------
  542|      0|        ossl_provider_deinit_child(ctx);
  543|    109|#endif
  544|    109|    context_deinit(ctx);
  545|    109|    OPENSSL_free(ctx);
  ------------------
  |  |  132|    109|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  546|    109|}
OSSL_LIB_CTX_get0_global_default:
  550|      1|{
  551|      1|    if (!RUN_ONCE(&default_context_thread_key_init, default_context_do_thread_key_init))
  ------------------
  |  |  130|      1|    (CRYPTO_THREAD_run_once(once, init##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (130:6): [True: 1, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (551:9): [True: 0, False: 1]
  ------------------
  552|      0|        return NULL;
  553|       |
  554|      1|    if (!RUN_ONCE(&default_context_init, default_context_do_init))
  ------------------
  |  |  130|      1|    (CRYPTO_THREAD_run_once(once, init##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (130:6): [True: 1, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (554:9): [True: 0, False: 1]
  ------------------
  555|      0|        return NULL;
  556|       |
  557|      1|    return &default_context_int;
  558|      1|}
ossl_lib_ctx_get_concrete:
  584|  29.3k|{
  585|  29.3k|#ifndef FIPS_MODULE
  586|  29.3k|    if (ctx == NULL)
  ------------------
  |  Branch (586:9): [True: 19.6k, False: 9.76k]
  ------------------
  587|  19.6k|        return get_default_context();
  588|  9.76k|#endif
  589|  9.76k|    return ctx;
  590|  29.3k|}
ossl_lib_ctx_is_default:
  593|    227|{
  594|    227|#ifndef FIPS_MODULE
  595|    227|    if (ctx == NULL || ctx == get_default_context())
  ------------------
  |  Branch (595:9): [True: 2, False: 225]
  |  Branch (595:24): [True: 4, False: 221]
  ------------------
  596|      6|        return 1;
  597|    221|#endif
  598|    221|    return 0;
  599|    227|}
ossl_lib_ctx_is_default_nocreate:
  602|    109|{
  603|    109|#ifndef FIPS_MODULE
  604|    109|    if (ctx == NULL || ctx == check_default_context())
  ------------------
  |  Branch (604:9): [True: 0, False: 109]
  |  Branch (604:24): [True: 0, False: 109]
  ------------------
  605|      0|        return 1;
  606|    109|#endif
  607|    109|    return 0;
  608|    109|}
ossl_lib_ctx_get_data:
  620|  15.6k|{
  621|  15.6k|    ctx = ossl_lib_ctx_get_concrete(ctx);
  622|  15.6k|    if (ctx == NULL)
  ------------------
  |  Branch (622:9): [True: 0, False: 15.6k]
  ------------------
  623|      0|        return NULL;
  624|       |
  625|  15.6k|    switch (index) {
  626|    882|    case OSSL_LIB_CTX_PROPERTY_STRING_INDEX:
  ------------------
  |  |   98|    882|#define OSSL_LIB_CTX_PROPERTY_STRING_INDEX 3
  ------------------
  |  Branch (626:5): [True: 882, False: 14.7k]
  ------------------
  627|    882|        return ctx->property_string_data;
  628|    164|    case OSSL_LIB_CTX_EVP_METHOD_STORE_INDEX:
  ------------------
  |  |   95|    164|#define OSSL_LIB_CTX_EVP_METHOD_STORE_INDEX 0
  ------------------
  |  Branch (628:5): [True: 164, False: 15.4k]
  ------------------
  629|    164|        return ctx->evp_method_store;
  630|    788|    case OSSL_LIB_CTX_PROVIDER_STORE_INDEX:
  ------------------
  |  |   96|    788|#define OSSL_LIB_CTX_PROVIDER_STORE_INDEX 1
  ------------------
  |  Branch (630:5): [True: 788, False: 14.8k]
  ------------------
  631|    788|        return ctx->provider_store;
  632|    409|    case OSSL_LIB_CTX_NAMEMAP_INDEX:
  ------------------
  |  |   99|    409|#define OSSL_LIB_CTX_NAMEMAP_INDEX 4
  ------------------
  |  Branch (632:5): [True: 409, False: 15.1k]
  ------------------
  633|    409|        return ctx->namemap;
  634|    136|    case OSSL_LIB_CTX_PROPERTY_DEFN_INDEX:
  ------------------
  |  |   97|    136|#define OSSL_LIB_CTX_PROPERTY_DEFN_INDEX 2
  ------------------
  |  Branch (634:5): [True: 136, False: 15.4k]
  ------------------
  635|    136|        return ctx->property_defns;
  636|      4|    case OSSL_LIB_CTX_GLOBAL_PROPERTIES:
  ------------------
  |  |  111|      4|#define OSSL_LIB_CTX_GLOBAL_PROPERTIES 14
  ------------------
  |  Branch (636:5): [True: 4, False: 15.6k]
  ------------------
  637|      4|        return ctx->global_properties;
  638|  13.0k|    case OSSL_LIB_CTX_DRBG_INDEX:
  ------------------
  |  |  100|  13.0k|#define OSSL_LIB_CTX_DRBG_INDEX 5
  ------------------
  |  Branch (638:5): [True: 13.0k, False: 2.53k]
  ------------------
  639|  13.0k|        return ctx->drbg;
  640|      0|    case OSSL_LIB_CTX_DRBG_NONCE_INDEX:
  ------------------
  |  |  101|      0|#define OSSL_LIB_CTX_DRBG_NONCE_INDEX 6
  ------------------
  |  Branch (640:5): [True: 0, False: 15.6k]
  ------------------
  641|      0|        return ctx->drbg_nonce;
  642|      0|#ifndef FIPS_MODULE
  643|      0|    case OSSL_LIB_CTX_PROVIDER_CONF_INDEX:
  ------------------
  |  |  113|      0|#define OSSL_LIB_CTX_PROVIDER_CONF_INDEX 16
  ------------------
  |  Branch (643:5): [True: 0, False: 15.6k]
  ------------------
  644|      0|        return ctx->provider_conf;
  645|      0|    case OSSL_LIB_CTX_BIO_CORE_INDEX:
  ------------------
  |  |  114|      0|#define OSSL_LIB_CTX_BIO_CORE_INDEX 17
  ------------------
  |  Branch (645:5): [True: 0, False: 15.6k]
  ------------------
  646|      0|        return ctx->bio_core;
  647|      0|    case OSSL_LIB_CTX_CHILD_PROVIDER_INDEX:
  ------------------
  |  |  115|      0|#define OSSL_LIB_CTX_CHILD_PROVIDER_INDEX 18
  ------------------
  |  Branch (647:5): [True: 0, False: 15.6k]
  ------------------
  648|      0|        return ctx->child_provider;
  649|     10|    case OSSL_LIB_CTX_DECODER_STORE_INDEX:
  ------------------
  |  |  108|     10|#define OSSL_LIB_CTX_DECODER_STORE_INDEX 11
  ------------------
  |  Branch (649:5): [True: 10, False: 15.5k]
  ------------------
  650|     10|        return ctx->decoder_store;
  651|    119|    case OSSL_LIB_CTX_DECODER_CACHE_INDEX:
  ------------------
  |  |  117|    119|#define OSSL_LIB_CTX_DECODER_CACHE_INDEX 20
  ------------------
  |  Branch (651:5): [True: 119, False: 15.4k]
  ------------------
  652|    119|        return ctx->decoder_cache;
  653|     10|    case OSSL_LIB_CTX_ENCODER_STORE_INDEX:
  ------------------
  |  |  107|     10|#define OSSL_LIB_CTX_ENCODER_STORE_INDEX 10
  ------------------
  |  Branch (653:5): [True: 10, False: 15.5k]
  ------------------
  654|     10|        return ctx->encoder_store;
  655|     10|    case OSSL_LIB_CTX_STORE_LOADER_STORE_INDEX:
  ------------------
  |  |  112|     10|#define OSSL_LIB_CTX_STORE_LOADER_STORE_INDEX 15
  ------------------
  |  Branch (655:5): [True: 10, False: 15.5k]
  ------------------
  656|     10|        return ctx->store_loader_store;
  657|      0|    case OSSL_LIB_CTX_SELF_TEST_CB_INDEX:
  ------------------
  |  |  109|      0|#define OSSL_LIB_CTX_SELF_TEST_CB_INDEX 12
  ------------------
  |  Branch (657:5): [True: 0, False: 15.6k]
  ------------------
  658|      0|        return ctx->self_test_cb;
  659|      0|    case OSSL_LIB_CTX_INDICATOR_CB_INDEX:
  ------------------
  |  |  119|      0|#define OSSL_LIB_CTX_INDICATOR_CB_INDEX 22
  ------------------
  |  Branch (659:5): [True: 0, False: 15.6k]
  ------------------
  660|      0|        return ctx->indicator_cb;
  661|      0|#endif
  662|      0|#ifndef OPENSSL_NO_THREAD_POOL
  663|      0|    case OSSL_LIB_CTX_THREAD_INDEX:
  ------------------
  |  |  116|      0|#define OSSL_LIB_CTX_THREAD_INDEX 19
  ------------------
  |  Branch (663:5): [True: 0, False: 15.6k]
  ------------------
  664|      0|        return ctx->threads;
  665|      0|#endif
  666|       |
  667|       |#ifdef FIPS_MODULE
  668|       |    case OSSL_LIB_CTX_FIPS_PROV_INDEX:
  669|       |        return ctx->fips_prov;
  670|       |#endif
  671|       |
  672|      1|    case OSSL_LIB_CTX_COMP_METHODS:
  ------------------
  |  |  118|      1|#define OSSL_LIB_CTX_COMP_METHODS 21
  ------------------
  |  Branch (672:5): [True: 1, False: 15.6k]
  ------------------
  673|      1|        return (void *)&ctx->comp_methods;
  674|       |
  675|      0|    case OSSL_LIB_CTX_SSL_CONF_IMODULE:
  ------------------
  |  |  120|      0|#define OSSL_LIB_CTX_SSL_CONF_IMODULE 23
  ------------------
  |  Branch (675:5): [True: 0, False: 15.6k]
  ------------------
  676|      0|        return (void *)ctx->ssl_imod;
  677|       |
  678|      0|    default:
  ------------------
  |  Branch (678:5): [True: 0, False: 15.6k]
  ------------------
  679|       |        return NULL;
  680|  15.6k|    }
  681|  15.6k|}
OSSL_LIB_CTX_get_data:
  684|      1|{
  685|      1|    return ossl_lib_ctx_get_data(ctx, index);
  686|      1|}
ossl_lib_ctx_get_ex_data_global:
  689|    219|{
  690|    219|    ctx = ossl_lib_ctx_get_concrete(ctx);
  691|    219|    if (ctx == NULL)
  ------------------
  |  Branch (691:9): [True: 0, False: 219]
  ------------------
  692|      0|        return NULL;
  693|    219|    return &ctx->global;
  694|    219|}
OSSL_LIB_CTX_get_conf_diagnostics:
  710|    110|{
  711|    110|    libctx = ossl_lib_ctx_get_concrete(libctx);
  712|    110|    if (libctx == NULL)
  ------------------
  |  Branch (712:9): [True: 0, False: 110]
  ------------------
  713|      0|        return 0;
  714|    110|    return libctx->conf_diagnostics;
  715|    110|}
context.c:context_deinit:
  387|    109|{
  388|    109|    if (ctx == NULL)
  ------------------
  |  Branch (388:9): [True: 0, False: 109]
  ------------------
  389|      0|        return 1;
  390|       |
  391|    109|    ossl_lib_ctx_detach_ssl_conf_imodule(ctx, NULL);
  392|       |
  393|    109|    ossl_ctx_thread_stop(ctx);
  394|       |
  395|    109|    context_deinit_objs(ctx);
  396|       |
  397|    109|    ossl_crypto_cleanup_all_ex_data_int(ctx);
  398|       |
  399|    109|    CRYPTO_THREAD_lock_free(ctx->lock);
  400|       |    ctx->lock = NULL;
  401|    109|    return 1;
  402|    109|}
context.c:context_deinit_objs:
  257|    109|{
  258|       |    /* P2. We want evp_method_store to be cleaned up before the provider store */
  259|    109|    if (ctx->evp_method_store != NULL) {
  ------------------
  |  Branch (259:9): [True: 109, False: 0]
  ------------------
  260|    109|        ossl_method_store_free(ctx->evp_method_store);
  261|    109|        ctx->evp_method_store = NULL;
  262|    109|    }
  263|       |
  264|       |    /* P2. */
  265|    109|    if (ctx->drbg != NULL) {
  ------------------
  |  Branch (265:9): [True: 109, False: 0]
  ------------------
  266|    109|        ossl_rand_ctx_free(ctx->drbg);
  267|    109|        ctx->drbg = NULL;
  268|    109|    }
  269|       |
  270|    109|#ifndef FIPS_MODULE
  271|       |    /* P2. */
  272|    109|    if (ctx->provider_conf != NULL) {
  ------------------
  |  Branch (272:9): [True: 109, False: 0]
  ------------------
  273|    109|        ossl_prov_conf_ctx_free(ctx->provider_conf);
  274|    109|        ctx->provider_conf = NULL;
  275|    109|    }
  276|       |
  277|       |    /*
  278|       |     * P2. We want decoder_store/decoder_cache to be cleaned up before the
  279|       |     * provider store
  280|       |     */
  281|    109|    if (ctx->decoder_store != NULL) {
  ------------------
  |  Branch (281:9): [True: 109, False: 0]
  ------------------
  282|    109|        ossl_method_store_free(ctx->decoder_store);
  283|    109|        ctx->decoder_store = NULL;
  284|    109|    }
  285|    109|    if (ctx->decoder_cache != NULL) {
  ------------------
  |  Branch (285:9): [True: 109, False: 0]
  ------------------
  286|    109|        ossl_decoder_cache_free(ctx->decoder_cache);
  287|    109|        ctx->decoder_cache = NULL;
  288|    109|    }
  289|       |
  290|       |    /* P2. We want encoder_store to be cleaned up before the provider store */
  291|    109|    if (ctx->encoder_store != NULL) {
  ------------------
  |  Branch (291:9): [True: 109, False: 0]
  ------------------
  292|    109|        ossl_method_store_free(ctx->encoder_store);
  293|    109|        ctx->encoder_store = NULL;
  294|    109|    }
  295|       |
  296|       |    /* P2. We want loader_store to be cleaned up before the provider store */
  297|    109|    if (ctx->store_loader_store != NULL) {
  ------------------
  |  Branch (297:9): [True: 109, False: 0]
  ------------------
  298|    109|        ossl_method_store_free(ctx->store_loader_store);
  299|    109|        ctx->store_loader_store = NULL;
  300|    109|    }
  301|    109|#endif
  302|       |
  303|       |    /* P1. Needs to be freed before the child provider data is freed */
  304|    109|    if (ctx->provider_store != NULL) {
  ------------------
  |  Branch (304:9): [True: 109, False: 0]
  ------------------
  305|    109|        ossl_provider_store_free(ctx->provider_store);
  306|    109|        ctx->provider_store = NULL;
  307|    109|    }
  308|       |
  309|       |    /* Default priority. */
  310|    109|    if (ctx->property_string_data != NULL) {
  ------------------
  |  Branch (310:9): [True: 109, False: 0]
  ------------------
  311|    109|        ossl_property_string_data_free(ctx->property_string_data);
  312|    109|        ctx->property_string_data = NULL;
  313|    109|    }
  314|       |
  315|    109|    if (ctx->namemap != NULL) {
  ------------------
  |  Branch (315:9): [True: 109, False: 0]
  ------------------
  316|    109|        ossl_stored_namemap_free(ctx->namemap);
  317|    109|        ctx->namemap = NULL;
  318|    109|    }
  319|       |
  320|    109|    if (ctx->property_defns != NULL) {
  ------------------
  |  Branch (320:9): [True: 109, False: 0]
  ------------------
  321|    109|        ossl_property_defns_free(ctx->property_defns);
  322|    109|        ctx->property_defns = NULL;
  323|    109|    }
  324|       |
  325|    109|    if (ctx->global_properties != NULL) {
  ------------------
  |  Branch (325:9): [True: 109, False: 0]
  ------------------
  326|    109|        ossl_ctx_global_properties_free(ctx->global_properties);
  327|    109|        ctx->global_properties = NULL;
  328|    109|    }
  329|       |
  330|    109|#ifndef FIPS_MODULE
  331|    109|    if (ctx->bio_core != NULL) {
  ------------------
  |  Branch (331:9): [True: 109, False: 0]
  ------------------
  332|    109|        ossl_bio_core_globals_free(ctx->bio_core);
  333|    109|        ctx->bio_core = NULL;
  334|    109|    }
  335|    109|#endif
  336|       |
  337|    109|    if (ctx->drbg_nonce != NULL) {
  ------------------
  |  Branch (337:9): [True: 109, False: 0]
  ------------------
  338|    109|        ossl_prov_drbg_nonce_ctx_free(ctx->drbg_nonce);
  339|    109|        ctx->drbg_nonce = NULL;
  340|    109|    }
  341|       |
  342|    109|#ifndef FIPS_MODULE
  343|    109|    if (ctx->indicator_cb != NULL) {
  ------------------
  |  Branch (343:9): [True: 109, False: 0]
  ------------------
  344|    109|        ossl_indicator_set_callback_free(ctx->indicator_cb);
  345|    109|        ctx->indicator_cb = NULL;
  346|    109|    }
  347|       |
  348|    109|    if (ctx->self_test_cb != NULL) {
  ------------------
  |  Branch (348:9): [True: 109, False: 0]
  ------------------
  349|    109|        ossl_self_test_set_callback_free(ctx->self_test_cb);
  350|    109|        ctx->self_test_cb = NULL;
  351|    109|    }
  352|    109|#endif
  353|       |
  354|       |#ifdef FIPS_MODULE
  355|       |    ossl_thread_event_ctx_free(ctx);
  356|       |
  357|       |    if (ctx->fips_prov != NULL) {
  358|       |        ossl_fips_prov_ossl_ctx_free(ctx->fips_prov);
  359|       |        ctx->fips_prov = NULL;
  360|       |    }
  361|       |#endif
  362|       |
  363|    109|#ifndef OPENSSL_NO_THREAD_POOL
  364|    109|    if (ctx->threads != NULL) {
  ------------------
  |  Branch (364:9): [True: 109, False: 0]
  ------------------
  365|    109|        ossl_threads_ctx_free(ctx->threads);
  366|    109|        ctx->threads = NULL;
  367|    109|    }
  368|    109|#endif
  369|       |
  370|       |    /* Low priority. */
  371|    109|#ifndef FIPS_MODULE
  372|    109|    if (ctx->child_provider != NULL) {
  ------------------
  |  Branch (372:9): [True: 109, False: 0]
  ------------------
  373|    109|        ossl_child_prov_ctx_free(ctx->child_provider);
  374|    109|        ctx->child_provider = NULL;
  375|    109|    }
  376|    109|#endif
  377|       |
  378|    109|#ifndef FIPS_MODULE
  379|    109|    if (ctx->comp_methods != NULL) {
  ------------------
  |  Branch (379:9): [True: 109, False: 0]
  ------------------
  380|    109|        ossl_free_compression_methods_int(ctx->comp_methods);
  381|       |        ctx->comp_methods = NULL;
  382|    109|    }
  383|    109|#endif
  384|    109|}
context.c:context_init:
  119|    110|{
  120|    110|    int exdata_done = 0;
  121|       |
  122|    110|    ctx->lock = CRYPTO_THREAD_lock_new();
  123|    110|    if (ctx->lock == NULL)
  ------------------
  |  Branch (123:9): [True: 0, False: 110]
  ------------------
  124|      0|        goto err;
  125|       |
  126|       |    /* Initialize ex_data. */
  127|    110|    if (!ossl_do_ex_data_init(ctx))
  ------------------
  |  Branch (127:9): [True: 0, False: 110]
  ------------------
  128|      0|        goto err;
  129|    110|    exdata_done = 1;
  130|       |
  131|       |    /* P2. We want evp_method_store to be cleaned up before the provider store */
  132|    110|    ctx->evp_method_store = ossl_method_store_new(ctx);
  133|    110|    if (ctx->evp_method_store == NULL)
  ------------------
  |  Branch (133:9): [True: 0, False: 110]
  ------------------
  134|      0|        goto err;
  135|    110|    OSSL_TRACE1(QUERY, "context_init: allocating store %p\n", ctx->evp_method_store);
  ------------------
  |  |  291|    110|    OSSL_TRACEV(category, (trc_out, format, arg1))
  |  |  ------------------
  |  |  |  |  283|    110|#define OSSL_TRACEV(category, args) ((void)0)
  |  |  ------------------
  ------------------
  136|       |
  137|    110|#ifndef FIPS_MODULE
  138|       |    /* P2. Must be freed before the provider store is freed */
  139|    110|    ctx->provider_conf = ossl_prov_conf_ctx_new(ctx);
  140|    110|    if (ctx->provider_conf == NULL)
  ------------------
  |  Branch (140:9): [True: 0, False: 110]
  ------------------
  141|      0|        goto err;
  142|    110|#endif
  143|       |
  144|       |    /* P2. */
  145|    110|    ctx->drbg = ossl_rand_ctx_new(ctx);
  146|    110|    if (ctx->drbg == NULL)
  ------------------
  |  Branch (146:9): [True: 0, False: 110]
  ------------------
  147|      0|        goto err;
  148|       |
  149|    110|#ifndef FIPS_MODULE
  150|       |    /*
  151|       |     * P2. We want decoder_store/decoder_cache to be cleaned up before the
  152|       |     * provider store
  153|       |     */
  154|    110|    ctx->decoder_store = ossl_method_store_new(ctx);
  155|    110|    if (ctx->decoder_store == NULL)
  ------------------
  |  Branch (155:9): [True: 0, False: 110]
  ------------------
  156|      0|        goto err;
  157|    110|    ctx->decoder_cache = ossl_decoder_cache_new(ctx);
  158|    110|    if (ctx->decoder_cache == NULL)
  ------------------
  |  Branch (158:9): [True: 0, False: 110]
  ------------------
  159|      0|        goto err;
  160|       |
  161|       |    /* P2. We want encoder_store to be cleaned up before the provider store */
  162|    110|    ctx->encoder_store = ossl_method_store_new(ctx);
  163|    110|    if (ctx->encoder_store == NULL)
  ------------------
  |  Branch (163:9): [True: 0, False: 110]
  ------------------
  164|      0|        goto err;
  165|       |
  166|       |    /* P2. We want loader_store to be cleaned up before the provider store */
  167|    110|    ctx->store_loader_store = ossl_method_store_new(ctx);
  168|    110|    if (ctx->store_loader_store == NULL)
  ------------------
  |  Branch (168:9): [True: 0, False: 110]
  ------------------
  169|      0|        goto err;
  170|    110|#endif
  171|       |
  172|       |    /* P1. Needs to be freed before the child provider data is freed */
  173|    110|    ctx->provider_store = ossl_provider_store_new(ctx);
  174|    110|    if (ctx->provider_store == NULL)
  ------------------
  |  Branch (174:9): [True: 0, False: 110]
  ------------------
  175|      0|        goto err;
  176|       |
  177|       |    /* Default priority. */
  178|    110|    ctx->property_string_data = ossl_property_string_data_new(ctx);
  179|    110|    if (ctx->property_string_data == NULL)
  ------------------
  |  Branch (179:9): [True: 0, False: 110]
  ------------------
  180|      0|        goto err;
  181|       |
  182|    110|    ctx->namemap = ossl_stored_namemap_new(ctx);
  183|    110|    if (ctx->namemap == NULL)
  ------------------
  |  Branch (183:9): [True: 0, False: 110]
  ------------------
  184|      0|        goto err;
  185|       |
  186|    110|    ctx->property_defns = ossl_property_defns_new(ctx);
  187|    110|    if (ctx->property_defns == NULL)
  ------------------
  |  Branch (187:9): [True: 0, False: 110]
  ------------------
  188|      0|        goto err;
  189|       |
  190|    110|    ctx->global_properties = ossl_ctx_global_properties_new(ctx);
  191|    110|    if (ctx->global_properties == NULL)
  ------------------
  |  Branch (191:9): [True: 0, False: 110]
  ------------------
  192|      0|        goto err;
  193|       |
  194|    110|#ifndef FIPS_MODULE
  195|    110|    ctx->bio_core = ossl_bio_core_globals_new(ctx);
  196|    110|    if (ctx->bio_core == NULL)
  ------------------
  |  Branch (196:9): [True: 0, False: 110]
  ------------------
  197|      0|        goto err;
  198|    110|#endif
  199|       |
  200|    110|    ctx->drbg_nonce = ossl_prov_drbg_nonce_ctx_new(ctx);
  201|    110|    if (ctx->drbg_nonce == NULL)
  ------------------
  |  Branch (201:9): [True: 0, False: 110]
  ------------------
  202|      0|        goto err;
  203|       |
  204|    110|#ifndef FIPS_MODULE
  205|    110|    ctx->self_test_cb = ossl_self_test_set_callback_new(ctx);
  206|    110|    if (ctx->self_test_cb == NULL)
  ------------------
  |  Branch (206:9): [True: 0, False: 110]
  ------------------
  207|      0|        goto err;
  208|    110|    ctx->indicator_cb = ossl_indicator_set_callback_new(ctx);
  209|    110|    if (ctx->indicator_cb == NULL)
  ------------------
  |  Branch (209:9): [True: 0, False: 110]
  ------------------
  210|      0|        goto err;
  211|    110|#endif
  212|       |
  213|       |#ifdef FIPS_MODULE
  214|       |    if (!ossl_thread_event_ctx_new(ctx))
  215|       |        goto err;
  216|       |
  217|       |    ctx->fips_prov = ossl_fips_prov_ossl_ctx_new(ctx);
  218|       |    if (ctx->fips_prov == NULL)
  219|       |        goto err;
  220|       |#endif
  221|       |
  222|    110|#ifndef OPENSSL_NO_THREAD_POOL
  223|    110|    ctx->threads = ossl_threads_ctx_new(ctx);
  224|    110|    if (ctx->threads == NULL)
  ------------------
  |  Branch (224:9): [True: 0, False: 110]
  ------------------
  225|      0|        goto err;
  226|    110|#endif
  227|       |
  228|       |    /* Low priority. */
  229|    110|#ifndef FIPS_MODULE
  230|    110|    ctx->child_provider = ossl_child_prov_ctx_new(ctx);
  231|    110|    if (ctx->child_provider == NULL)
  ------------------
  |  Branch (231:9): [True: 0, False: 110]
  ------------------
  232|      0|        goto err;
  233|    110|#endif
  234|       |
  235|       |    /* Everything depends on properties, so we also pre-initialise that */
  236|    110|    if (!ossl_property_parse_init(ctx))
  ------------------
  |  Branch (236:9): [True: 0, False: 110]
  ------------------
  237|      0|        goto err;
  238|       |
  239|    110|#ifndef FIPS_MODULE
  240|    110|    ctx->comp_methods = ossl_load_builtin_compressions();
  241|    110|#endif
  242|       |
  243|    110|    return 1;
  244|       |
  245|      0|err:
  246|      0|    context_deinit_objs(ctx);
  247|       |
  248|      0|    if (exdata_done)
  ------------------
  |  Branch (248:9): [True: 0, False: 0]
  ------------------
  249|      0|        ossl_crypto_cleanup_all_ex_data_int(ctx);
  250|       |
  251|      0|    CRYPTO_THREAD_lock_free(ctx->lock);
  252|      0|    memset(ctx, '\0', sizeof(*ctx));
  253|      0|    return 0;
  254|    110|}
context.c:default_context_do_thread_key_init:
  414|      1|{
  415|      1|    if (!CRYPTO_THREAD_init_local(&default_context_thread_local, NULL))
  ------------------
  |  Branch (415:9): [True: 0, False: 1]
  ------------------
  416|      0|        return 0;
  417|      1|    return 1;
  418|      1|}
context.c:default_context_do_init:
  421|      1|{
  422|      1|    if (!context_init(&default_context_int))
  ------------------
  |  Branch (422:9): [True: 0, False: 1]
  ------------------
  423|      0|        return 0;
  424|       |
  425|      1|    default_context_inited = 1;
  426|      1|    return 1;
  427|      1|}
context.c:get_default_context:
  458|  19.8k|{
  459|  19.8k|    OSSL_LIB_CTX *current_defctx = get_thread_default_context();
  460|       |
  461|  19.8k|    if (current_defctx == NULL && default_context_inited)
  ------------------
  |  Branch (461:9): [True: 19.8k, False: 0]
  |  Branch (461:35): [True: 19.8k, False: 0]
  ------------------
  462|  19.8k|        current_defctx = &default_context_int;
  463|  19.8k|    return current_defctx;
  464|  19.8k|}
context.c:get_thread_default_context:
  439|  19.8k|{
  440|  19.8k|    if (!RUN_ONCE(&default_context_thread_key_init, default_context_do_thread_key_init))
  ------------------
  |  |  130|  19.8k|    (CRYPTO_THREAD_run_once(once, init##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (130:6): [True: 19.8k, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (440:9): [True: 0, False: 19.8k]
  ------------------
  441|      0|        return NULL;
  442|       |
  443|  19.8k|    if (!RUN_ONCE(&default_context_init, default_context_do_init))
  ------------------
  |  |  130|  19.8k|    (CRYPTO_THREAD_run_once(once, init##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (130:6): [True: 19.8k, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (443:9): [True: 0, False: 19.8k]
  ------------------
  444|      0|        return NULL;
  445|       |
  446|  19.8k|    return CRYPTO_THREAD_get_local(&default_context_thread_local);
  447|  19.8k|}
context.c:check_default_context:
  467|    109|{
  468|    109|    OSSL_LIB_CTX *current_defctx = check_thread_default_context();
  469|       |
  470|    109|    if (current_defctx == NULL && default_context_inited)
  ------------------
  |  Branch (470:9): [True: 109, False: 0]
  |  Branch (470:35): [True: 109, False: 0]
  ------------------
  471|    109|        current_defctx = &default_context_int;
  472|    109|    return current_defctx;
  473|    109|}
context.c:check_thread_default_context:
  450|    109|{
  451|    109|    if (!RUN_ONCE(&default_context_thread_key_init, default_context_do_thread_key_init))
  ------------------
  |  |  130|    109|    (CRYPTO_THREAD_run_once(once, init##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (130:6): [True: 109, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (451:9): [True: 0, False: 109]
  ------------------
  452|      0|        return NULL;
  453|       |
  454|    109|    return CRYPTO_THREAD_get_local(&default_context_thread_local);
  455|    109|}

ossl_algorithm_do_all:
  149|      4|{
  150|      4|    struct algorithm_data_st cbdata = {
  151|      4|        0,
  152|      4|    };
  153|       |
  154|      4|    cbdata.libctx = libctx;
  155|      4|    cbdata.operation_id = operation_id;
  156|      4|    cbdata.pre = pre;
  157|      4|    cbdata.reserve_store = reserve_store;
  158|      4|    cbdata.fn = fn;
  159|      4|    cbdata.unreserve_store = unreserve_store;
  160|      4|    cbdata.post = post;
  161|      4|    cbdata.data = data;
  162|       |
  163|      4|    if (provider == NULL) {
  ------------------
  |  Branch (163:9): [True: 2, False: 2]
  ------------------
  164|      2|        ossl_provider_doall_activated(libctx, algorithm_do_this, &cbdata);
  165|      2|    } else {
  166|      2|        OSSL_LIB_CTX *libctx2 = ossl_provider_libctx(provider);
  167|       |
  168|       |        /*
  169|       |         * If a provider is given, its library context MUST match the library
  170|       |         * context we're passed.  If this turns out not to be true, there is
  171|       |         * a programming error in the functions up the call stack.
  172|       |         */
  173|      2|        if (!ossl_assert(ossl_lib_ctx_get_concrete(libctx)
  ------------------
  |  |   52|      2|#define ossl_assert(x) ossl_assert_int((x) != 0, "Assertion failed: " #x, \
  |  |   53|      2|    __FILE__, __LINE__)
  ------------------
  |  Branch (173:13): [True: 0, False: 2]
  ------------------
  174|      2|                == ossl_lib_ctx_get_concrete(libctx2)))
  175|      0|            return;
  176|       |
  177|      2|        cbdata.libctx = libctx2;
  178|      2|        algorithm_do_this(provider, &cbdata);
  179|      2|    }
  180|      4|}
ossl_algorithm_get1_first_name:
  183|    135|{
  184|    135|    const char *first_name_end = NULL;
  185|    135|    size_t first_name_len = 0;
  186|    135|    char *ret;
  187|       |
  188|    135|    if (algo->algorithm_names == NULL)
  ------------------
  |  Branch (188:9): [True: 0, False: 135]
  ------------------
  189|      0|        return NULL;
  190|       |
  191|    135|    first_name_end = strchr(algo->algorithm_names, ':');
  192|    135|    if (first_name_end == NULL)
  ------------------
  |  Branch (192:9): [True: 55, False: 80]
  ------------------
  193|     55|        first_name_len = strlen(algo->algorithm_names);
  194|     80|    else
  195|     80|        first_name_len = first_name_end - algo->algorithm_names;
  196|       |
  197|    135|    ret = OPENSSL_strndup(algo->algorithm_names, first_name_len);
  ------------------
  |  |  138|    135|    CRYPTO_strndup(str, n, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_strndup(str, n, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  198|    135|    return ret;
  199|    135|}
core_algorithm.c:algorithm_do_this:
  103|      4|{
  104|      4|    struct algorithm_data_st *data = cbdata;
  105|      4|    int first_operation = 1;
  106|      4|    int last_operation = OSSL_OP__HIGHEST;
  ------------------
  |  |  299|      4|#define OSSL_OP__HIGHEST 22
  ------------------
  107|      4|    int cur_operation;
  108|      4|    int ok = 1;
  109|       |
  110|      4|    if (data->operation_id != 0)
  ------------------
  |  Branch (110:9): [True: 4, False: 0]
  ------------------
  111|      4|        first_operation = last_operation = data->operation_id;
  112|       |
  113|      4|    for (cur_operation = first_operation;
  114|      8|        cur_operation <= last_operation;
  ------------------
  |  Branch (114:9): [True: 4, False: 4]
  ------------------
  115|      4|        cur_operation++) {
  116|      4|        int no_store = 0; /* Assume caching is ok */
  117|      4|        const OSSL_ALGORITHM *map = NULL;
  118|      4|        int ret = 0;
  119|       |
  120|      4|        map = ossl_provider_query_operation(provider, cur_operation,
  121|      4|            &no_store);
  122|      4|        ret = algorithm_do_map(provider, map, cur_operation, no_store, data);
  123|      4|        ossl_provider_unquery_operation(provider, cur_operation, map);
  124|       |
  125|      4|        if (ret < 0)
  ------------------
  |  Branch (125:13): [True: 0, False: 4]
  ------------------
  126|       |            /* Hard error, bail out immediately! */
  127|      0|            return 0;
  128|       |
  129|       |        /* If post-condition not fulfilled, set general failure */
  130|      4|        if (!ret)
  ------------------
  |  Branch (130:13): [True: 0, False: 4]
  ------------------
  131|      0|            ok = 0;
  132|      4|    }
  133|       |
  134|      4|    return ok;
  135|      4|}
core_algorithm.c:algorithm_do_map:
   44|      4|{
   45|      4|    struct algorithm_data_st *data = cbdata;
   46|      4|    int ret = 0;
   47|       |
   48|      4|    if (!data->reserve_store(no_store, data->data))
  ------------------
  |  Branch (48:9): [True: 0, False: 4]
  ------------------
   49|       |        /* Error, bail out! */
   50|      0|        return -1;
   51|       |
   52|       |    /* Do we fulfill pre-conditions? */
   53|      4|    if (data->pre == NULL) {
  ------------------
  |  Branch (53:9): [True: 0, False: 4]
  ------------------
   54|       |        /* If there is no pre-condition function, assume "yes" */
   55|      0|        ret = 1;
   56|      4|    } else if (!data->pre(provider, cur_operation, no_store, data->data,
  ------------------
  |  Branch (56:16): [True: 0, False: 4]
  ------------------
   57|      4|                   &ret)) {
   58|       |        /* Error, bail out! */
   59|      0|        ret = -1;
   60|      0|        goto end;
   61|      0|    }
   62|       |
   63|       |    /*
   64|       |     * If pre-condition not fulfilled don't add this set of implementations,
   65|       |     * but do continue with the next.  This simply means that another thread
   66|       |     * got to it first.
   67|       |     */
   68|      4|    if (ret == 0) {
  ------------------
  |  Branch (68:9): [True: 2, False: 2]
  ------------------
   69|      2|        ret = 1;
   70|      2|        goto end;
   71|      2|    }
   72|       |
   73|      2|    if (map != NULL) {
  ------------------
  |  Branch (73:9): [True: 2, False: 0]
  ------------------
   74|      2|        const OSSL_ALGORITHM *thismap;
   75|       |
   76|    137|        for (thismap = map; thismap->algorithm_names != NULL; thismap++)
  ------------------
  |  Branch (76:29): [True: 135, False: 2]
  ------------------
   77|    135|            data->fn(provider, thismap, no_store, data->data);
   78|      2|    }
   79|       |
   80|       |    /* Do we fulfill post-conditions? */
   81|      2|    if (data->post == NULL) {
  ------------------
  |  Branch (81:9): [True: 0, False: 2]
  ------------------
   82|       |        /* If there is no post-condition function, assume "yes" */
   83|      0|        ret = 1;
   84|      2|    } else if (!data->post(provider, cur_operation, no_store, data->data,
  ------------------
  |  Branch (84:16): [True: 0, False: 2]
  ------------------
   85|      2|                   &ret)) {
   86|       |        /* Error, bail out! */
   87|      0|        ret = -1;
   88|      0|    }
   89|       |
   90|      4|end:
   91|      4|    data->unreserve_store(data->data);
   92|       |
   93|      4|    return ret;
   94|      2|}

ossl_method_construct:
  137|      4|{
  138|      4|    void *method = NULL;
  139|      4|    OSSL_PROVIDER *provider = provider_rw != NULL ? *provider_rw : NULL;
  ------------------
  |  Branch (139:31): [True: 4, False: 0]
  ------------------
  140|      4|    struct construct_data_st cbdata;
  141|       |
  142|       |    /*
  143|       |     * We might be tempted to try to look into the method store without
  144|       |     * constructing to see if we can find our method there already.
  145|       |     * Unfortunately that does not work well if the query contains
  146|       |     * optional properties as newly loaded providers can match them better.
  147|       |     * We trust that ossl_method_construct_precondition() and
  148|       |     * ossl_method_construct_postcondition() make sure that the
  149|       |     * ossl_algorithm_do_all() does very little when methods from
  150|       |     * a provider have already been constructed.
  151|       |     */
  152|       |
  153|      4|    cbdata.store = NULL;
  154|      4|    cbdata.force_store = force_store;
  155|      4|    cbdata.mcm = mcm;
  156|      4|    cbdata.mcm_data = mcm_data;
  157|      4|    ossl_algorithm_do_all(libctx, operation_id, provider,
  158|      4|        ossl_method_construct_precondition,
  159|      4|        ossl_method_construct_reserve_store,
  160|      4|        ossl_method_construct_this,
  161|      4|        ossl_method_construct_unreserve_store,
  162|      4|        ossl_method_construct_postcondition,
  163|      4|        &cbdata);
  164|       |
  165|       |    /* If there is a temporary store, try there first */
  166|      4|    if (cbdata.store != NULL)
  ------------------
  |  Branch (166:9): [True: 0, False: 4]
  ------------------
  167|      0|        method = mcm->get(cbdata.store, (const OSSL_PROVIDER **)provider_rw,
  168|      0|            mcm_data);
  169|       |
  170|       |    /* If no method was found yet, try the global store */
  171|      4|    if (method == NULL)
  ------------------
  |  Branch (171:9): [True: 4, False: 0]
  ------------------
  172|      4|        method = mcm->get(NULL, (const OSSL_PROVIDER **)provider_rw, mcm_data);
  173|       |
  174|      4|    return method;
  175|      4|}
core_fetch.c:ossl_method_construct_precondition:
   63|      4|{
   64|      4|    if (!ossl_assert(result != NULL)) {
  ------------------
  |  |   52|      4|#define ossl_assert(x) ossl_assert_int((x) != 0, "Assertion failed: " #x, \
  |  |   53|      4|    __FILE__, __LINE__)
  ------------------
  |  Branch (64:9): [True: 0, False: 4]
  ------------------
   65|      0|        ERR_raise(ERR_LIB_CRYPTO, ERR_R_PASSED_NULL_PARAMETER);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
   66|      0|        return 0;
   67|      0|    }
   68|       |
   69|       |    /* Assume that no bits are set */
   70|      4|    *result = 0;
   71|       |
   72|       |    /* No flag bits for temporary stores */
   73|      4|    if (!is_temporary_method_store(no_store, cbdata)
  ------------------
  |  Branch (73:9): [True: 4, False: 0]
  ------------------
   74|      4|        && !ossl_provider_test_operation_bit(provider, operation_id, result))
  ------------------
  |  Branch (74:12): [True: 0, False: 4]
  ------------------
   75|      0|        return 0;
   76|       |
   77|       |    /*
   78|       |     * The result we get tells if methods have already been constructed.
   79|       |     * However, we want to tell whether construction should happen (true)
   80|       |     * or not (false), which is the opposite of what we got.
   81|       |     */
   82|      4|    *result = !*result;
   83|       |
   84|      4|    return 1;
   85|      4|}
core_fetch.c:is_temporary_method_store:
   29|     10|{
   30|     10|    struct construct_data_st *data = cbdata;
   31|       |
   32|     10|    return no_store && !data->force_store;
  ------------------
  |  Branch (32:12): [True: 0, False: 10]
  |  Branch (32:24): [True: 0, False: 0]
  ------------------
   33|     10|}
core_fetch.c:ossl_method_construct_reserve_store:
   36|      4|{
   37|      4|    struct construct_data_st *data = cbdata;
   38|       |
   39|      4|    if (is_temporary_method_store(no_store, data) && data->store == NULL) {
  ------------------
  |  Branch (39:9): [True: 0, False: 4]
  |  Branch (39:54): [True: 0, False: 0]
  ------------------
   40|       |        /*
   41|       |         * If we have been told not to store the method "permanently", we
   42|       |         * ask for a temporary store, and store the method there.
   43|       |         * The owner of |data->mcm| is completely responsible for managing
   44|       |         * that temporary store.
   45|       |         */
   46|      0|        if ((data->store = data->mcm->get_tmp_store(data->mcm_data)) == NULL)
  ------------------
  |  Branch (46:13): [True: 0, False: 0]
  ------------------
   47|      0|            return 0;
   48|      0|    }
   49|       |
   50|      4|    return data->mcm->lock_store(data->store, data->mcm_data);
   51|      4|}
core_fetch.c:ossl_method_construct_this:
  106|    135|{
  107|    135|    struct construct_data_st *data = cbdata;
  108|    135|    void *method = NULL;
  109|       |
  110|    135|    if ((method = data->mcm->construct(algo, provider, data->mcm_data))
  ------------------
  |  Branch (110:9): [True: 0, False: 135]
  ------------------
  111|    135|        == NULL)
  112|      0|        return;
  113|       |
  114|    135|    OSSL_TRACE2(QUERY,
  ------------------
  |  |  293|    135|    OSSL_TRACEV(category, (trc_out, format, arg1, arg2))
  |  |  ------------------
  |  |  |  |  283|    135|#define OSSL_TRACEV(category, args) ((void)0)
  |  |  ------------------
  ------------------
  115|    135|        "ossl_method_construct_this: putting an algo to the store %p with no_store %d\n",
  116|    135|        (void *)data->store, no_store);
  117|       |    /*
  118|       |     * Note regarding putting the method in stores:
  119|       |     *
  120|       |     * we don't need to care if it actually got in or not here.
  121|       |     * If it didn't get in, it will simply not be available when
  122|       |     * ossl_method_construct() tries to get it from the store.
  123|       |     *
  124|       |     * It is *expected* that the put function increments the refcnt
  125|       |     * of the passed method.
  126|       |     */
  127|    135|    data->mcm->put(no_store ? data->store : NULL, method, provider, algo->algorithm_names,
  ------------------
  |  Branch (127:20): [True: 0, False: 135]
  ------------------
  128|    135|        algo->property_definition, data->mcm_data);
  129|       |
  130|       |    /* refcnt-- because we're dropping the reference */
  131|    135|    data->mcm->destruct(method, data->mcm_data);
  132|    135|}
core_fetch.c:ossl_method_construct_unreserve_store:
   54|      4|{
   55|      4|    struct construct_data_st *data = cbdata;
   56|       |
   57|      4|    return data->mcm->unlock_store(data->store, data->mcm_data);
   58|      4|}
core_fetch.c:ossl_method_construct_postcondition:
   90|      2|{
   91|      2|    if (!ossl_assert(result != NULL)) {
  ------------------
  |  |   52|      2|#define ossl_assert(x) ossl_assert_int((x) != 0, "Assertion failed: " #x, \
  |  |   53|      2|    __FILE__, __LINE__)
  ------------------
  |  Branch (91:9): [True: 0, False: 2]
  ------------------
   92|      0|        ERR_raise(ERR_LIB_CRYPTO, ERR_R_PASSED_NULL_PARAMETER);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
   93|      0|        return 0;
   94|      0|    }
   95|       |
   96|      2|    *result = 1;
   97|       |
   98|       |    /* No flag bits for temporary stores */
   99|      2|    return is_temporary_method_store(no_store, cbdata)
  ------------------
  |  Branch (99:12): [True: 0, False: 2]
  ------------------
  100|      2|        || ossl_provider_set_operation_bit(provider, operation_id);
  ------------------
  |  Branch (100:12): [True: 2, False: 0]
  ------------------
  101|      2|}

ossl_stored_namemap_new:
   58|    110|{
   59|    110|    OSSL_NAMEMAP *namemap = ossl_namemap_new(libctx);
   60|       |
   61|    110|    if (namemap != NULL)
  ------------------
  |  Branch (61:9): [True: 110, False: 0]
  ------------------
   62|    110|        namemap->stored = 1;
   63|       |
   64|    110|    return namemap;
   65|    110|}
ossl_stored_namemap_free:
   68|    109|{
   69|    109|    OSSL_NAMEMAP *namemap = vnamemap;
   70|       |
   71|    109|    if (namemap != NULL) {
  ------------------
  |  Branch (71:9): [True: 109, False: 0]
  ------------------
   72|       |        /* Pretend it isn't stored, or ossl_namemap_free() will do nothing */
   73|    109|        namemap->stored = 0;
   74|    109|        ossl_namemap_free(namemap);
   75|    109|    }
   76|    109|}
ossl_namemap_empty:
   84|    409|{
   85|       |#ifdef TSAN_REQUIRES_LOCKING
   86|       |    /* No TSAN support */
   87|       |    int rv;
   88|       |
   89|       |    if (namemap == NULL)
   90|       |        return 1;
   91|       |
   92|       |    if (!CRYPTO_THREAD_read_lock(namemap->lock))
   93|       |        return -1;
   94|       |    rv = namemap->max_number == 0;
   95|       |    CRYPTO_THREAD_unlock(namemap->lock);
   96|       |    return rv;
   97|       |#else
   98|       |    /* Have TSAN support */
   99|    409|    return namemap == NULL || tsan_load(&namemap->max_number) == 0;
  ------------------
  |  |   61|    409|#define tsan_load(ptr) atomic_load_explicit((ptr), memory_order_relaxed)
  ------------------
  |  Branch (99:12): [True: 0, False: 409]
  |  Branch (99:31): [True: 1, False: 408]
  ------------------
  100|    409|#endif
  101|    409|}
ossl_namemap_doall_names:
  111|    130|{
  112|    130|    int i;
  113|    130|    NAMES *names;
  114|       |
  115|    130|    if (namemap == NULL || number <= 0)
  ------------------
  |  Branch (115:9): [True: 0, False: 130]
  |  Branch (115:28): [True: 0, False: 130]
  ------------------
  116|      0|        return 0;
  117|       |
  118|       |    /*
  119|       |     * We duplicate the NAMES stack under a read lock. Subsequently we call
  120|       |     * the user function, so that we're not holding the read lock when in user
  121|       |     * code. This could lead to deadlocks.
  122|       |     */
  123|    130|    if (!CRYPTO_THREAD_read_lock(namemap->lock))
  ------------------
  |  Branch (123:9): [True: 0, False: 130]
  ------------------
  124|      0|        return 0;
  125|       |
  126|    130|    names = sk_NAMES_value(namemap->numnames, number - 1);
  127|    130|    if (names != NULL)
  ------------------
  |  Branch (127:9): [True: 130, False: 0]
  ------------------
  128|    130|        names = sk_OPENSSL_STRING_dup(names);
  ------------------
  |  |  278|    130|#define sk_OPENSSL_STRING_dup(sk) ((STACK_OF(OPENSSL_STRING) *)OPENSSL_sk_dup(ossl_check_const_OPENSSL_STRING_sk_type(sk)))
  ------------------
  129|       |
  130|    130|    CRYPTO_THREAD_unlock(namemap->lock);
  131|       |
  132|    130|    if (names == NULL)
  ------------------
  |  Branch (132:9): [True: 0, False: 130]
  ------------------
  133|      0|        return 0;
  134|       |
  135|    373|    for (i = 0; i < sk_OPENSSL_STRING_num(names); i++)
  ------------------
  |  |  256|    373|#define sk_OPENSSL_STRING_num(sk) OPENSSL_sk_num(ossl_check_const_OPENSSL_STRING_sk_type(sk))
  ------------------
  |  Branch (135:17): [True: 243, False: 130]
  ------------------
  136|    243|        fn(sk_OPENSSL_STRING_value(names, i), data);
  ------------------
  |  |  257|    243|#define sk_OPENSSL_STRING_value(sk, idx) ((char *)OPENSSL_sk_value(ossl_check_const_OPENSSL_STRING_sk_type(sk), (idx)))
  ------------------
  137|       |
  138|    130|    sk_OPENSSL_STRING_free(names);
  ------------------
  |  |  262|    130|#define sk_OPENSSL_STRING_free(sk) OPENSSL_sk_free(ossl_check_OPENSSL_STRING_sk_type(sk))
  ------------------
  139|    130|    return i > 0;
  140|    130|}
ossl_namemap_name2num:
  143|  1.15k|{
  144|  1.15k|    int number = 0;
  145|  1.15k|    HT_VALUE *val;
  146|  1.15k|    NAMENUM_KEY key;
  147|       |
  148|  1.15k|#ifndef FIPS_MODULE
  149|  1.15k|    if (namemap == NULL)
  ------------------
  |  Branch (149:9): [True: 0, False: 1.15k]
  ------------------
  150|      0|        namemap = ossl_namemap_stored(NULL);
  151|  1.15k|#endif
  152|       |
  153|  1.15k|    if (namemap == NULL || name == NULL)
  ------------------
  |  Branch (153:9): [True: 0, False: 1.15k]
  |  Branch (153:28): [True: 0, False: 1.15k]
  ------------------
  154|      0|        return 0;
  155|       |
  156|  1.15k|    HT_INIT_RAW_KEY(&key);
  ------------------
  |  |  130|  1.15k|    do {                               \
  |  |  131|  1.15k|        HT_INIT_KEY((key));            \
  |  |  ------------------
  |  |  |  |  112|  1.15k|    do {                                                                                           \
  |  |  |  |  113|  1.15k|        memset((key), 0, sizeof(*(key)));                                                          \
  |  |  |  |  114|  1.15k|        (key)->key_header.keysize = (key)->key_header.bufsize = (sizeof(*(key)) - sizeof(HT_KEY)); \
  |  |  |  |  115|  1.15k|        (key)->key_header.keybuf = (((uint8_t *)key) + sizeof(HT_KEY));                            \
  |  |  |  |  116|  1.15k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (116:14): [Folded, False: 1.15k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  132|  1.15k|        (key)->key_header.keysize = 0; \
  |  |  133|  1.15k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (133:14): [Folded, False: 1.15k]
  |  |  ------------------
  ------------------
  157|  1.15k|    HT_COPY_RAW_KEY_CASE(TO_HT_KEY(&key), name, strlen(name));
  ------------------
  |  |  164|  1.15k|    do {                                                                               \
  |  |  165|  1.15k|        size_t tmplen = (size_t)(len);                                                 \
  |  |  166|  1.15k|        if (tmplen > (key)->bufsize - (key)->keysize)                                  \
  |  |  ------------------
  |  |  |  Branch (166:13): [True: 0, False: 1.15k]
  |  |  ------------------
  |  |  167|  1.15k|            tmplen = (key)->bufsize - (key)->keysize;                                  \
  |  |  168|  1.15k|        ossl_ht_strcase((key), (char *)&((key)->keybuf[(key)->keysize]), buf, tmplen); \
  |  |  169|  1.15k|        (key)->keysize += tmplen;                                                      \
  |  |  170|  1.15k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (170:14): [Folded, False: 1.15k]
  |  |  ------------------
  ------------------
  158|       |
  159|  1.15k|    val = ossl_ht_get(namemap->namenum_ht, TO_HT_KEY(&key));
  ------------------
  |  |  237|  1.15k|#define TO_HT_KEY(key) &(key)->key_header
  ------------------
  160|       |
  161|  1.15k|    if (val != NULL)
  ------------------
  |  Branch (161:9): [True: 690, False: 464]
  ------------------
  162|       |        /* We store a (small) int directly instead of a pointer to it. */
  163|    690|        number = (int)(intptr_t)val->value;
  164|       |
  165|  1.15k|    return number;
  166|  1.15k|}
ossl_namemap_name2num_n:
  170|    137|{
  171|    137|    int number = 0;
  172|    137|    HT_VALUE *val;
  173|    137|    NAMENUM_KEY key;
  174|       |
  175|    137|#ifndef FIPS_MODULE
  176|    137|    if (namemap == NULL)
  ------------------
  |  Branch (176:9): [True: 0, False: 137]
  ------------------
  177|      0|        namemap = ossl_namemap_stored(NULL);
  178|    137|#endif
  179|       |
  180|    137|    if (namemap == NULL)
  ------------------
  |  Branch (180:9): [True: 0, False: 137]
  ------------------
  181|      0|        return 0;
  182|       |
  183|    137|    if (name_len > NAMEMAP_NAME_LEN)
  ------------------
  |  |   19|    137|#define NAMEMAP_NAME_LEN 64
  ------------------
  |  Branch (183:9): [True: 0, False: 137]
  ------------------
  184|      0|        name_len = NAMEMAP_NAME_LEN;
  ------------------
  |  |   19|      0|#define NAMEMAP_NAME_LEN 64
  ------------------
  185|       |
  186|    137|    HT_INIT_RAW_KEY(&key);
  ------------------
  |  |  130|    137|    do {                               \
  |  |  131|    137|        HT_INIT_KEY((key));            \
  |  |  ------------------
  |  |  |  |  112|    137|    do {                                                                                           \
  |  |  |  |  113|    137|        memset((key), 0, sizeof(*(key)));                                                          \
  |  |  |  |  114|    137|        (key)->key_header.keysize = (key)->key_header.bufsize = (sizeof(*(key)) - sizeof(HT_KEY)); \
  |  |  |  |  115|    137|        (key)->key_header.keybuf = (((uint8_t *)key) + sizeof(HT_KEY));                            \
  |  |  |  |  116|    137|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (116:14): [Folded, False: 137]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  132|    137|        (key)->key_header.keysize = 0; \
  |  |  133|    137|    } while (0)
  |  |  ------------------
  |  |  |  Branch (133:14): [Folded, False: 137]
  |  |  ------------------
  ------------------
  187|    137|    HT_COPY_RAW_KEY_CASE(TO_HT_KEY(&key), name, name_len);
  ------------------
  |  |  164|    137|    do {                                                                               \
  |  |  165|    137|        size_t tmplen = (size_t)(len);                                                 \
  |  |  166|    137|        if (tmplen > (key)->bufsize - (key)->keysize)                                  \
  |  |  ------------------
  |  |  |  Branch (166:13): [True: 0, False: 137]
  |  |  ------------------
  |  |  167|    137|            tmplen = (key)->bufsize - (key)->keysize;                                  \
  |  |  168|    137|        ossl_ht_strcase((key), (char *)&((key)->keybuf[(key)->keysize]), buf, tmplen); \
  |  |  169|    137|        (key)->keysize += tmplen;                                                      \
  |  |  170|    137|    } while (0)
  |  |  ------------------
  |  |  |  Branch (170:14): [Folded, False: 137]
  |  |  ------------------
  ------------------
  188|       |
  189|    137|    val = ossl_ht_get(namemap->namenum_ht, TO_HT_KEY(&key));
  ------------------
  |  |  237|    137|#define TO_HT_KEY(key) &(key)->key_header
  ------------------
  190|       |
  191|    137|    if (val != NULL)
  ------------------
  |  Branch (191:9): [True: 137, False: 0]
  ------------------
  192|       |        /* We store a (small) int directly instead of a pointer to it. */
  193|    137|        number = (int)(intptr_t)val->value;
  194|       |
  195|    137|    return number;
  196|    137|}
ossl_namemap_add_name:
  296|    649|{
  297|    649|    int tmp_number;
  298|       |
  299|    649|#ifndef FIPS_MODULE
  300|    649|    if (namemap == NULL)
  ------------------
  |  Branch (300:9): [True: 0, False: 649]
  ------------------
  301|      0|        namemap = ossl_namemap_stored(NULL);
  302|    649|#endif
  303|       |
  304|    649|    if (name == NULL || *name == 0 || namemap == NULL)
  ------------------
  |  Branch (304:9): [True: 0, False: 649]
  |  Branch (304:25): [True: 0, False: 649]
  |  Branch (304:39): [True: 0, False: 649]
  ------------------
  305|      0|        return 0;
  306|       |
  307|    649|    if (!CRYPTO_THREAD_write_lock(namemap->lock))
  ------------------
  |  Branch (307:9): [True: 0, False: 649]
  ------------------
  308|      0|        return 0;
  309|    649|    tmp_number = namemap_add_name(namemap, number, name);
  310|    649|    CRYPTO_THREAD_unlock(namemap->lock);
  311|    649|    return tmp_number;
  312|    649|}
ossl_namemap_add_names:
  316|    135|{
  317|    135|    char *tmp, *p, *q, *endp;
  318|       |
  319|       |    /* Check that we have a namemap */
  320|    135|    if (!ossl_assert(namemap != NULL)) {
  ------------------
  |  |   52|    135|#define ossl_assert(x) ossl_assert_int((x) != 0, "Assertion failed: " #x, \
  |  |   53|    135|    __FILE__, __LINE__)
  ------------------
  |  Branch (320:9): [True: 0, False: 135]
  ------------------
  321|      0|        ERR_raise(ERR_LIB_CRYPTO, ERR_R_PASSED_NULL_PARAMETER);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  322|      0|        return 0;
  323|      0|    }
  324|       |
  325|    135|    if ((tmp = OPENSSL_strdup(names)) == NULL)
  ------------------
  |  |  136|    135|    CRYPTO_strdup(str, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_strdup(str, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  |  Branch (325:9): [True: 0, False: 135]
  ------------------
  326|      0|        return 0;
  327|       |
  328|    135|    if (!CRYPTO_THREAD_write_lock(namemap->lock)) {
  ------------------
  |  Branch (328:9): [True: 0, False: 135]
  ------------------
  329|      0|        OPENSSL_free(tmp);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  330|      0|        return 0;
  331|      0|    }
  332|       |    /*
  333|       |     * Check that no name is an empty string, and that all names have at
  334|       |     * most one numeric identity together.
  335|       |     */
  336|    383|    for (p = tmp; *p != '\0'; p = q) {
  ------------------
  |  Branch (336:19): [True: 248, False: 135]
  ------------------
  337|    248|        int this_number;
  338|    248|        size_t l;
  339|       |
  340|    248|        if ((q = strchr(p, separator)) == NULL) {
  ------------------
  |  Branch (340:13): [True: 135, False: 113]
  ------------------
  341|    135|            l = strlen(p); /* offset to \0 */
  342|    135|            q = p + l;
  343|    135|        } else {
  344|    113|            l = q - p; /* offset to the next separator */
  345|    113|            *q++ = '\0';
  346|    113|        }
  347|       |
  348|    248|        if (*p == '\0') {
  ------------------
  |  Branch (348:13): [True: 0, False: 248]
  ------------------
  349|      0|            ERR_raise(ERR_LIB_CRYPTO, CRYPTO_R_BAD_ALGORITHM_NAME);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  350|      0|            number = 0;
  351|      0|            goto end;
  352|      0|        }
  353|       |
  354|    248|        this_number = ossl_namemap_name2num(namemap, p);
  355|       |
  356|    248|        if (number == 0) {
  ------------------
  |  Branch (356:13): [True: 153, False: 95]
  ------------------
  357|    153|            number = this_number;
  358|    153|        } else if (this_number != 0 && this_number != number) {
  ------------------
  |  Branch (358:20): [True: 76, False: 19]
  |  Branch (358:40): [True: 0, False: 76]
  ------------------
  359|      0|            ERR_raise_data(ERR_LIB_CRYPTO, CRYPTO_R_CONFLICTING_NAMES,
  ------------------
  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  ------------------
  |  |  361|      0|        ERR_set_error)
  ------------------
                          ERR_raise_data(ERR_LIB_CRYPTO, CRYPTO_R_CONFLICTING_NAMES,
  ------------------
  |  |   68|      0|#define ERR_LIB_CRYPTO 15
  ------------------
                          ERR_raise_data(ERR_LIB_CRYPTO, CRYPTO_R_CONFLICTING_NAMES,
  ------------------
  |  |   23|      0|#define CRYPTO_R_CONFLICTING_NAMES 118
  ------------------
  360|      0|                "\"%s\" has an existing different identity %d (from \"%s\")",
  361|      0|                p, this_number, names);
  362|      0|            number = 0;
  363|      0|            goto end;
  364|      0|        }
  365|    248|    }
  366|    135|    endp = p;
  367|       |
  368|       |    /* Now that we have checked, register all names */
  369|    383|    for (p = tmp; p < endp; p = q) {
  ------------------
  |  Branch (369:19): [True: 248, False: 135]
  ------------------
  370|    248|        int this_number;
  371|       |
  372|    248|        q = p + strlen(p) + 1;
  373|       |
  374|    248|        this_number = namemap_add_name(namemap, number, p);
  375|    248|        if (number == 0) {
  ------------------
  |  Branch (375:13): [True: 64, False: 184]
  ------------------
  376|     64|            number = this_number;
  377|    184|        } else if (this_number != number) {
  ------------------
  |  Branch (377:20): [True: 0, False: 184]
  ------------------
  378|      0|            ERR_raise_data(ERR_LIB_CRYPTO, ERR_R_INTERNAL_ERROR,
  ------------------
  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  ------------------
  |  |  361|      0|        ERR_set_error)
  ------------------
                          ERR_raise_data(ERR_LIB_CRYPTO, ERR_R_INTERNAL_ERROR,
  ------------------
  |  |   68|      0|#define ERR_LIB_CRYPTO 15
  ------------------
                          ERR_raise_data(ERR_LIB_CRYPTO, ERR_R_INTERNAL_ERROR,
  ------------------
  |  |  308|      0|#define ERR_R_INTERNAL_ERROR (259 | ERR_R_FATAL)
  |  |  ------------------
  |  |  |  |  304|      0|#define ERR_R_FATAL (ERR_RFLAG_FATAL | ERR_RFLAG_COMMON)
  |  |  |  |  ------------------
  |  |  |  |  |  |  219|      0|#define ERR_RFLAG_FATAL (0x1 << ERR_RFLAGS_OFFSET)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  211|      0|#define ERR_RFLAGS_OFFSET 18L
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define ERR_R_FATAL (ERR_RFLAG_FATAL | ERR_RFLAG_COMMON)
  |  |  |  |  ------------------
  |  |  |  |  |  |  220|      0|#define ERR_RFLAG_COMMON (0x2 << ERR_RFLAGS_OFFSET)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  211|      0|#define ERR_RFLAGS_OFFSET 18L
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  379|      0|                "Got number %d when expecting %d",
  380|      0|                this_number, number);
  381|      0|            number = 0;
  382|      0|            goto end;
  383|      0|        }
  384|    248|    }
  385|       |
  386|    135|end:
  387|    135|    CRYPTO_THREAD_unlock(namemap->lock);
  388|    135|    OPENSSL_free(tmp);
  ------------------
  |  |  132|    135|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  389|    135|    return number;
  390|    135|}
ossl_namemap_stored:
  490|    409|{
  491|    409|#ifndef FIPS_MODULE
  492|    409|    int nms;
  493|    409|#endif
  494|    409|    OSSL_NAMEMAP *namemap = ossl_lib_ctx_get_data(libctx, OSSL_LIB_CTX_NAMEMAP_INDEX);
  ------------------
  |  |   99|    409|#define OSSL_LIB_CTX_NAMEMAP_INDEX 4
  ------------------
  495|       |
  496|    409|    if (namemap == NULL)
  ------------------
  |  Branch (496:9): [True: 0, False: 409]
  ------------------
  497|      0|        return NULL;
  498|       |
  499|    409|#ifndef FIPS_MODULE
  500|    409|    nms = ossl_namemap_empty(namemap);
  501|    409|    if (nms < 0) {
  ------------------
  |  Branch (501:9): [True: 0, False: 409]
  ------------------
  502|       |        /*
  503|       |         * Could not get lock to make the count, so maybe internal objects
  504|       |         * weren't added. This seems safest.
  505|       |         */
  506|      0|        return NULL;
  507|      0|    }
  508|    409|    if (nms == 1) {
  ------------------
  |  Branch (508:9): [True: 1, False: 408]
  ------------------
  509|      1|        int num;
  510|       |
  511|       |        /* Before pilfering, we make sure the legacy database is populated */
  512|      1|        OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_CIPHERS
  ------------------
  |  |  507|      1|#define OPENSSL_INIT_ADD_ALL_CIPHERS 0x00000004L
  ------------------
  513|      1|                | OPENSSL_INIT_ADD_ALL_DIGESTS,
  ------------------
  |  |  508|      1|#define OPENSSL_INIT_ADD_ALL_DIGESTS 0x00000008L
  ------------------
  514|      1|            NULL);
  515|       |
  516|      1|        OBJ_NAME_do_all(OBJ_NAME_TYPE_CIPHER_METH,
  ------------------
  |  |   26|      1|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  ------------------
  517|      1|            get_legacy_cipher_names, namemap);
  518|      1|        OBJ_NAME_do_all(OBJ_NAME_TYPE_MD_METH,
  ------------------
  |  |   25|      1|#define OBJ_NAME_TYPE_MD_METH 0x01
  ------------------
  519|      1|            get_legacy_md_names, namemap);
  520|       |
  521|       |        /*
  522|       |         * Some old providers (<= 3.5) may not have the rsassaPSS alias which
  523|       |         * may cause problems in some cases. We add it manually here
  524|       |         */
  525|      1|        num = ossl_namemap_add_name(namemap, 0, "RSA-PSS");
  526|      1|        if (num != 0) {
  ------------------
  |  Branch (526:13): [True: 1, False: 0]
  ------------------
  527|      1|            ossl_namemap_add_name(namemap, num, "rsassaPss");
  528|       |            /* Add other RSA-PSS aliases as well */
  529|      1|            ossl_namemap_add_name(namemap, num, "RSASSA-PSS");
  530|      1|            ossl_namemap_add_name(namemap, num, "1.2.840.113549.1.1.10");
  531|      1|        }
  532|      1|#ifndef OPENSSL_NO_DEPRECATED_3_6
  533|      1|        {
  534|      1|            int i, end;
  535|       |
  536|       |            /* We also pilfer data from the legacy EVP_PKEY_ASN1_METHODs */
  537|     16|            for (i = 0, end = evp_pkey_asn1_get_count(); i < end; i++)
  ------------------
  |  Branch (537:58): [True: 15, False: 1]
  ------------------
  538|     15|                get_legacy_pkey_meth_names(evp_pkey_asn1_get0(i), namemap);
  539|      1|        }
  540|      1|#endif
  541|      1|    }
  542|    409|#endif
  543|       |
  544|    409|    return namemap;
  545|    409|}
ossl_namemap_new:
  548|    110|{
  549|    110|    OSSL_NAMEMAP *namemap;
  550|    110|    HT_CONFIG htconf = { NULL, NULL, NULL, NAMEMAP_HT_BUCKETS, 1, 1, 0 };
  ------------------
  |  |   17|    110|#define NAMEMAP_HT_BUCKETS 512
  ------------------
  551|       |
  552|    110|    htconf.ctx = libctx;
  553|       |
  554|    110|    if ((namemap = OPENSSL_zalloc(sizeof(*namemap))) == NULL)
  ------------------
  |  |  109|    110|    CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  |  Branch (554:9): [True: 0, False: 110]
  ------------------
  555|      0|        goto err;
  556|       |
  557|    110|    if ((namemap->lock = CRYPTO_THREAD_lock_new()) == NULL)
  ------------------
  |  Branch (557:9): [True: 0, False: 110]
  ------------------
  558|      0|        goto err;
  559|       |
  560|    110|    if ((namemap->namenum_ht = ossl_ht_new(&htconf)) == NULL)
  ------------------
  |  Branch (560:9): [True: 0, False: 110]
  ------------------
  561|      0|        goto err;
  562|       |
  563|    110|    if ((namemap->numnames = sk_NAMES_new_null()) == NULL)
  ------------------
  |  Branch (563:9): [True: 0, False: 110]
  ------------------
  564|      0|        goto err;
  565|       |
  566|    110|    return namemap;
  567|       |
  568|      0|err:
  569|      0|    ossl_namemap_free(namemap);
  570|       |    return NULL;
  571|    110|}
ossl_namemap_free:
  574|    109|{
  575|    109|    if (namemap == NULL || namemap->stored)
  ------------------
  |  Branch (575:9): [True: 0, False: 109]
  |  Branch (575:28): [True: 0, False: 109]
  ------------------
  576|      0|        return;
  577|       |
  578|    109|    sk_NAMES_pop_free(namemap->numnames, names_free);
  579|       |
  580|    109|    ossl_ht_free(namemap->namenum_ht);
  581|       |
  582|    109|    CRYPTO_THREAD_lock_free(namemap->lock);
  583|    109|    OPENSSL_free(namemap);
  ------------------
  |  |  132|    109|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  584|    109|}
core_namemap.c:namemap_add_name:
  263|    897|{
  264|    897|    int ret;
  265|    897|    HT_VALUE val = { 0 };
  266|    897|    NAMENUM_KEY key;
  267|       |
  268|       |    /* If it already exists, we don't add it */
  269|    897|    if ((ret = ossl_namemap_name2num(namemap, name)) != 0)
  ------------------
  |  Branch (269:9): [True: 536, False: 361]
  ------------------
  270|    536|        return ret;
  271|       |
  272|    361|    if ((number = numname_insert(namemap, number, name)) == 0)
  ------------------
  |  Branch (272:9): [True: 0, False: 361]
  ------------------
  273|      0|        return 0;
  274|       |
  275|       |    /* Using tsan_store alone here is safe since we're under lock */
  276|    361|    tsan_store(&namemap->max_number, number);
  ------------------
  |  |   62|    361|#define tsan_store(ptr, val) atomic_store_explicit((ptr), (val), memory_order_relaxed)
  ------------------
  277|       |
  278|    361|    HT_INIT_RAW_KEY(&key);
  ------------------
  |  |  130|    361|    do {                               \
  |  |  131|    361|        HT_INIT_KEY((key));            \
  |  |  ------------------
  |  |  |  |  112|    361|    do {                                                                                           \
  |  |  |  |  113|    361|        memset((key), 0, sizeof(*(key)));                                                          \
  |  |  |  |  114|    361|        (key)->key_header.keysize = (key)->key_header.bufsize = (sizeof(*(key)) - sizeof(HT_KEY)); \
  |  |  |  |  115|    361|        (key)->key_header.keybuf = (((uint8_t *)key) + sizeof(HT_KEY));                            \
  |  |  |  |  116|    361|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (116:14): [Folded, False: 361]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  132|    361|        (key)->key_header.keysize = 0; \
  |  |  133|    361|    } while (0)
  |  |  ------------------
  |  |  |  Branch (133:14): [Folded, False: 361]
  |  |  ------------------
  ------------------
  279|    361|    HT_COPY_RAW_KEY_CASE(TO_HT_KEY(&key), name, strlen(name));
  ------------------
  |  |  164|    361|    do {                                                                               \
  |  |  165|    361|        size_t tmplen = (size_t)(len);                                                 \
  |  |  166|    361|        if (tmplen > (key)->bufsize - (key)->keysize)                                  \
  |  |  ------------------
  |  |  |  Branch (166:13): [True: 0, False: 361]
  |  |  ------------------
  |  |  167|    361|            tmplen = (key)->bufsize - (key)->keysize;                                  \
  |  |  168|    361|        ossl_ht_strcase((key), (char *)&((key)->keybuf[(key)->keysize]), buf, tmplen); \
  |  |  169|    361|        (key)->keysize += tmplen;                                                      \
  |  |  170|    361|    } while (0)
  |  |  ------------------
  |  |  |  Branch (170:14): [Folded, False: 361]
  |  |  ------------------
  ------------------
  280|       |
  281|    361|    val.value = (void *)(intptr_t)number;
  282|    361|    ret = ossl_ht_insert(namemap->namenum_ht, TO_HT_KEY(&key), &val, NULL);
  ------------------
  |  |  237|    361|#define TO_HT_KEY(key) &(key)->key_header
  ------------------
  283|    361|    if (ret <= 0) {
  ------------------
  |  Branch (283:9): [True: 0, False: 361]
  ------------------
  284|       |        /*
  285|       |         * We either got an allocation failure (INTERNAL_ERROR), or
  286|       |         * hit too many conflicts in the table (TOO_MANY_NAMES)
  287|       |         */
  288|      0|        ERR_raise(ERR_LIB_CRYPTO, (ret < 0) ? CRYPTO_R_TOO_MANY_NAMES : ERR_R_INTERNAL_ERROR);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  |  |  |  Branch (357:55): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  289|      0|        return 0;
  290|      0|    }
  291|    361|    return number;
  292|    361|}
core_namemap.c:numname_insert:
  222|    361|{
  223|    361|    NAMES *names;
  224|    361|    char *tmpname;
  225|       |
  226|    361|    if (number > 0) {
  ------------------
  |  Branch (226:9): [True: 178, False: 183]
  ------------------
  227|    178|        names = sk_NAMES_value(namemap->numnames, number - 1);
  228|    178|        if (!ossl_assert(names != NULL)) {
  ------------------
  |  |   52|    178|#define ossl_assert(x) ossl_assert_int((x) != 0, "Assertion failed: " #x, \
  |  |   53|    178|    __FILE__, __LINE__)
  ------------------
  |  Branch (228:13): [True: 0, False: 178]
  ------------------
  229|       |            /* cannot happen */
  230|      0|            return 0;
  231|      0|        }
  232|    183|    } else {
  233|       |        /* a completely new entry */
  234|    183|        names = sk_OPENSSL_STRING_new_null();
  ------------------
  |  |  259|    183|#define sk_OPENSSL_STRING_new_null() ((STACK_OF(OPENSSL_STRING) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_OPENSSL_STRING_freefunc_thunk))
  ------------------
  235|    183|        if (names == NULL)
  ------------------
  |  Branch (235:13): [True: 0, False: 183]
  ------------------
  236|      0|            return 0;
  237|    183|    }
  238|       |
  239|    361|    if ((tmpname = OPENSSL_strdup(name)) == NULL)
  ------------------
  |  |  136|    361|    CRYPTO_strdup(str, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_strdup(str, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  |  Branch (239:9): [True: 0, False: 361]
  ------------------
  240|      0|        goto err;
  241|       |
  242|    361|    if (!sk_OPENSSL_STRING_push(names, tmpname))
  ------------------
  |  |  266|    361|#define sk_OPENSSL_STRING_push(sk, ptr) OPENSSL_sk_push(ossl_check_OPENSSL_STRING_sk_type(sk), ossl_check_OPENSSL_STRING_type(ptr))
  ------------------
  |  Branch (242:9): [True: 0, False: 361]
  ------------------
  243|      0|        goto err;
  244|    361|    tmpname = NULL;
  245|       |
  246|    361|    if (number <= 0) {
  ------------------
  |  Branch (246:9): [True: 183, False: 178]
  ------------------
  247|    183|        if (!sk_NAMES_push(namemap->numnames, names))
  ------------------
  |  Branch (247:13): [True: 0, False: 183]
  ------------------
  248|      0|            goto err;
  249|    183|        number = sk_NAMES_num(namemap->numnames);
  250|    183|    }
  251|    361|    return number;
  252|       |
  253|      0|err:
  254|      0|    if (number <= 0)
  ------------------
  |  Branch (254:9): [True: 0, False: 0]
  ------------------
  255|      0|        sk_OPENSSL_STRING_pop_free(names, name_string_free);
  ------------------
  |  |  270|      0|#define sk_OPENSSL_STRING_pop_free(sk, freefunc) OPENSSL_sk_pop_free(ossl_check_OPENSSL_STRING_sk_type(sk), ossl_check_OPENSSL_STRING_freefunc_type(freefunc))
  ------------------
  256|      0|    OPENSSL_free(tmpname);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  257|      0|    return 0;
  258|    361|}
core_namemap.c:get_legacy_cipher_names:
  427|    183|{
  428|    183|    const EVP_CIPHER *cipher = (void *)OBJ_NAME_get(on->name, on->type);
  429|       |
  430|    183|    if (cipher != NULL)
  ------------------
  |  Branch (430:9): [True: 183, False: 0]
  ------------------
  431|    183|        get_legacy_evp_names(NID_undef, EVP_CIPHER_get_type(cipher), NULL, arg);
  ------------------
  |  |   18|    183|#define NID_undef                       0
  ------------------
  432|    183|}
core_namemap.c:get_legacy_evp_names:
  403|    258|{
  404|    258|    int num = 0;
  405|    258|    ASN1_OBJECT *obj;
  406|       |
  407|    258|    if (base_nid != NID_undef) {
  ------------------
  |  |   18|    258|#define NID_undef                       0
  ------------------
  |  Branch (407:9): [True: 4, False: 254]
  ------------------
  408|      4|        num = ossl_namemap_add_name(arg, num, OBJ_nid2sn(base_nid));
  409|      4|        num = ossl_namemap_add_name(arg, num, OBJ_nid2ln(base_nid));
  410|      4|    }
  411|       |
  412|    258|    if (nid != NID_undef) {
  ------------------
  |  |   18|    258|#define NID_undef                       0
  ------------------
  |  Branch (412:9): [True: 210, False: 48]
  ------------------
  413|    210|        num = ossl_namemap_add_name(arg, num, OBJ_nid2sn(nid));
  414|    210|        num = ossl_namemap_add_name(arg, num, OBJ_nid2ln(nid));
  415|    210|        if ((obj = OBJ_nid2obj(nid)) != NULL) {
  ------------------
  |  Branch (415:13): [True: 210, False: 0]
  ------------------
  416|    210|            char txtoid[OSSL_MAX_NAME_SIZE];
  417|       |
  418|    210|            if (OBJ_obj2txt(txtoid, sizeof(txtoid), obj, 1) > 0)
  ------------------
  |  Branch (418:17): [True: 206, False: 4]
  ------------------
  419|    206|                num = ossl_namemap_add_name(arg, num, txtoid);
  420|    210|        }
  421|    210|    }
  422|    258|    if (pem_name != NULL)
  ------------------
  |  Branch (422:9): [True: 11, False: 247]
  ------------------
  423|     11|        num = ossl_namemap_add_name(arg, num, pem_name);
  424|    258|}
core_namemap.c:get_legacy_md_names:
  435|     59|{
  436|     59|    const EVP_MD *md = (void *)OBJ_NAME_get(on->name, on->type);
  437|       |
  438|     59|    if (md != NULL)
  ------------------
  |  Branch (438:9): [True: 59, False: 0]
  ------------------
  439|     59|        get_legacy_evp_names(NID_undef, EVP_MD_get_type(md), NULL, arg);
  ------------------
  |  |   18|     59|#define NID_undef                       0
  ------------------
  440|     59|}
core_namemap.c:get_legacy_pkey_meth_names:
  445|     15|{
  446|     15|    int nid = 0, base_nid = 0, flags = 0;
  447|     15|    const char *pem_name = NULL;
  448|       |
  449|     15|    evp_pkey_asn1_get0_info(&nid, &base_nid, &flags, NULL, &pem_name, ameth);
  450|     15|    if (nid != NID_undef) {
  ------------------
  |  |   18|     15|#define NID_undef                       0
  ------------------
  |  Branch (450:9): [True: 15, False: 0]
  ------------------
  451|     15|        if ((flags & ASN1_PKEY_ALIAS) == 0) {
  ------------------
  |  | 1501|     15|#define ASN1_PKEY_ALIAS 0x1
  ------------------
  |  Branch (451:13): [True: 10, False: 5]
  ------------------
  452|     10|            switch (nid) {
  453|      1|            case EVP_PKEY_DHX:
  ------------------
  |  |   72|      1|#define EVP_PKEY_DHX NID_dhpublicnumber
  |  |  ------------------
  |  |  |  | 5526|      1|#define NID_dhpublicnumber              920
  |  |  ------------------
  ------------------
  |  Branch (453:13): [True: 1, False: 9]
  ------------------
  454|       |                /* We know that the name "DHX" is used too */
  455|      1|                get_legacy_evp_names(0, nid, "DHX", arg);
  456|       |                /* FALLTHRU */
  457|     10|            default:
  ------------------
  |  Branch (457:13): [True: 9, False: 1]
  ------------------
  458|     10|                get_legacy_evp_names(0, nid, pem_name, arg);
  459|     10|            }
  460|     10|        } else {
  461|       |            /*
  462|       |             * Treat aliases carefully, some of them are undesirable, or
  463|       |             * should not be treated as such for providers.
  464|       |             */
  465|       |
  466|      5|            switch (nid) {
  467|      1|            case EVP_PKEY_SM2:
  ------------------
  |  |   74|      1|#define EVP_PKEY_SM2 NID_sm2
  |  |  ------------------
  |  |  |  | 1259|      1|#define NID_sm2         1172
  |  |  ------------------
  ------------------
  |  Branch (467:13): [True: 1, False: 4]
  ------------------
  468|       |                /*
  469|       |                 * SM2 is a separate keytype with providers, not an alias for
  470|       |                 * EC.
  471|       |                 */
  472|      1|                get_legacy_evp_names(0, nid, pem_name, arg);
  473|      1|                break;
  474|      4|            default:
  ------------------
  |  Branch (474:13): [True: 4, False: 1]
  ------------------
  475|       |                /* Use the short name of the base nid as the common reference */
  476|      4|                get_legacy_evp_names(base_nid, nid, pem_name, arg);
  477|      5|            }
  478|      5|        }
  479|     15|    }
  480|     15|}

ossl_err_load_CRYPTO_strings:
   83|      1|{
   84|      1|#ifndef OPENSSL_NO_ERR
   85|      1|    if (ERR_reason_error_string(CRYPTO_str_reasons[0].error) == NULL)
  ------------------
  |  Branch (85:9): [True: 1, False: 0]
  ------------------
   86|      1|        ERR_load_strings_const(CRYPTO_str_reasons);
   87|      1|#endif
   88|      1|    return 1;
   89|      1|}

OPENSSL_cpuid_setup:
   95|      3|{
   96|      3|    static int trigger = 0;
   97|      3|    IA32CAP OPENSSL_ia32_cpuid(unsigned int *);
   98|      3|    IA32CAP vec;
   99|      3|    const variant_char *env;
  100|      3|    int index = 2;
  101|       |
  102|      3|    if (trigger)
  ------------------
  |  Branch (102:9): [True: 1, False: 2]
  ------------------
  103|      1|        return;
  104|       |
  105|      2|    trigger = 1;
  106|      2|    if ((env = ossl_getenv("OPENSSL_ia32cap")) != NULL) {
  ------------------
  |  |   45|      2|#define ossl_getenv getenv
  ------------------
  |  Branch (106:9): [True: 0, False: 2]
  ------------------
  107|      0|        int off = (env[0] == '~') ? 1 : 0;
  ------------------
  |  Branch (107:19): [True: 0, False: 0]
  ------------------
  108|       |
  109|      0|        vec = ossl_strtouint64(env + off);
  110|       |
  111|      0|        if (off) {
  ------------------
  |  Branch (111:13): [True: 0, False: 0]
  ------------------
  112|      0|            IA32CAP mask = vec;
  113|      0|            vec = OPENSSL_ia32_cpuid(OPENSSL_ia32cap_P) & ~mask;
  114|      0|            if (mask & (1 << 24)) {
  ------------------
  |  Branch (114:17): [True: 0, False: 0]
  ------------------
  115|       |                /*
  116|       |                 * User disables FXSR bit, mask even other capabilities
  117|       |                 * that operate exclusively on XMM, so we don't have to
  118|       |                 * double-check all the time. We mask PCLMULQDQ, AMD XOP,
  119|       |                 * AES-NI and AVX. Formally speaking we don't have to
  120|       |                 * do it in x86_64 case, but we can safely assume that
  121|       |                 * x86_64 users won't actually flip this flag.
  122|       |                 */
  123|      0|                vec &= ~((IA32CAP)(1 << 1 | 1 << 11 | 1 << 25 | 1 << 28) << 32);
  124|      0|            }
  125|      0|        } else if (env[0] == ':') {
  ------------------
  |  Branch (125:20): [True: 0, False: 0]
  ------------------
  126|      0|            vec = OPENSSL_ia32_cpuid(OPENSSL_ia32cap_P);
  127|      0|        }
  128|       |
  129|       |        /* Processed indexes 0, 1 */
  130|      0|        if ((env = ossl_strchr(env, ':')) != NULL)
  ------------------
  |  Branch (130:13): [True: 0, False: 0]
  ------------------
  131|      0|            env++;
  132|      0|        for (; index < OPENSSL_IA32CAP_P_MAX_INDEXES; index += 2) {
  ------------------
  |  |   37|      0|#define OPENSSL_IA32CAP_P_MAX_INDEXES 10
  ------------------
  |  Branch (132:16): [True: 0, False: 0]
  ------------------
  133|      0|            if ((env != NULL) && (env[0] != '\0')) {
  ------------------
  |  Branch (133:17): [True: 0, False: 0]
  |  Branch (133:34): [True: 0, False: 0]
  ------------------
  134|       |                /* if env[0] == ':' current index is skipped */
  135|      0|                if (env[0] != ':') {
  ------------------
  |  Branch (135:21): [True: 0, False: 0]
  ------------------
  136|      0|                    IA32CAP vecx;
  137|       |
  138|      0|                    off = (env[0] == '~') ? 1 : 0;
  ------------------
  |  Branch (138:27): [True: 0, False: 0]
  ------------------
  139|      0|                    vecx = ossl_strtouint64(env + off);
  140|      0|                    if (off) {
  ------------------
  |  Branch (140:25): [True: 0, False: 0]
  ------------------
  141|      0|                        OPENSSL_ia32cap_P[index] &= ~(unsigned int)vecx;
  142|      0|                        OPENSSL_ia32cap_P[index + 1] &= ~(unsigned int)(vecx >> 32);
  143|      0|                    } else {
  144|      0|                        OPENSSL_ia32cap_P[index] = (unsigned int)vecx;
  145|      0|                        OPENSSL_ia32cap_P[index + 1] = (unsigned int)(vecx >> 32);
  146|      0|                    }
  147|      0|                }
  148|       |                /* skip delimiter */
  149|      0|                if ((env = ossl_strchr(env, ':')) != NULL)
  ------------------
  |  Branch (149:21): [True: 0, False: 0]
  ------------------
  150|      0|                    env++;
  151|      0|            } else { /* zeroize the next two indexes */
  152|      0|                OPENSSL_ia32cap_P[index] = 0;
  153|      0|                OPENSSL_ia32cap_P[index + 1] = 0;
  154|      0|            }
  155|      0|        }
  156|       |
  157|       |        /* If AVX10 is disabled, zero out its detailed cap bits */
  158|      0|        if (!(OPENSSL_ia32cap_P[6] & (1 << 19)))
  ------------------
  |  Branch (158:13): [True: 0, False: 0]
  ------------------
  159|      0|            OPENSSL_ia32cap_P[9] = 0;
  160|      2|    } else {
  161|      2|        vec = OPENSSL_ia32_cpuid(OPENSSL_ia32cap_P);
  162|      2|    }
  163|       |
  164|       |    /*
  165|       |     * |(1<<10) sets a reserved bit to signal that variable
  166|       |     * was initialized already... This is to avoid interference
  167|       |     * with cpuid snippets in ELF .init segment.
  168|       |     */
  169|      2|    OPENSSL_ia32cap_P[0] = (unsigned int)vec | (1 << 10);
  170|      2|    OPENSSL_ia32cap_P[1] = (unsigned int)(vec >> 32);
  171|      2|}

ossl_err_load_CRMF_strings:
   80|      1|{
   81|      1|#ifndef OPENSSL_NO_ERR
   82|      1|    if (ERR_reason_error_string(CRMF_str_reasons[0].error) == NULL)
  ------------------
  |  Branch (82:9): [True: 1, False: 0]
  ------------------
   83|      1|        ERR_load_strings_const(CRMF_str_reasons);
   84|      1|#endif
   85|      1|    return 1;
   86|      1|}

ossl_err_load_CT_strings:
   52|      1|{
   53|      1|#ifndef OPENSSL_NO_ERR
   54|      1|    if (ERR_reason_error_string(CT_str_reasons[0].error) == NULL)
  ------------------
  |  Branch (54:9): [True: 1, False: 0]
  ------------------
   55|      1|        ERR_load_strings_const(CT_str_reasons);
   56|      1|#endif
   57|      1|    return 1;
   58|      1|}

ossl_ctype_check:
  253|     34|{
  254|     34|    const int max = sizeof(ctype_char_map) / sizeof(*ctype_char_map);
  255|     34|    const int a = ossl_toascii(c);
  ------------------
  |  |   56|     34|#define ossl_toascii(c) (c)
  ------------------
  256|       |
  257|     34|    return a >= 0 && a < max && (ctype_char_map[a] & mask) != 0;
  ------------------
  |  Branch (257:12): [True: 34, False: 0]
  |  Branch (257:22): [True: 34, False: 0]
  |  Branch (257:33): [True: 16, False: 18]
  ------------------
  258|     34|}
ossl_isdigit:
  270|      1|{
  271|      1|    int a = ossl_toascii(c);
  ------------------
  |  |   56|      1|#define ossl_toascii(c) (c)
  ------------------
  272|       |
  273|      1|    return ASCII_IS_DIGIT(a);
  ------------------
  |  |  265|      1|#define ASCII_IS_DIGIT(c) (c >= 0x30 && c <= 0x39)
  |  |  ------------------
  |  |  |  Branch (265:28): [True: 1, False: 0]
  |  |  |  Branch (265:41): [True: 0, False: 1]
  |  |  ------------------
  ------------------
  274|      1|}
ossl_tolower:
  297|  15.7k|{
  298|  15.7k|    int a = ossl_toascii(c);
  ------------------
  |  |   56|  15.7k|#define ossl_toascii(c) (c)
  ------------------
  299|       |
  300|  15.7k|    return ASCII_IS_UPPER(a) ? c ^ case_change : c;
  ------------------
  |  |  266|  15.7k|#define ASCII_IS_UPPER(c) (c >= 0x41 && c <= 0x5A)
  |  |  ------------------
  |  |  |  Branch (266:28): [True: 9.31k, False: 6.46k]
  |  |  |  Branch (266:41): [True: 2.85k, False: 6.46k]
  |  |  ------------------
  ------------------
  301|  15.7k|}

OpenSSL_version:
   75|    104|{
   76|       |#if defined(_WIN32) && defined(OSSL_WINCTX)
   77|       |    /* Cannot really fail but we would return empty strings anyway */
   78|       |    (void)RUN_ONCE(&version_strings_once, version_strings_setup);
   79|       |#endif
   80|       |
   81|    104|    switch (t) {
  ------------------
  |  Branch (81:13): [True: 104, False: 0]
  ------------------
   82|      0|    case OPENSSL_VERSION:
  ------------------
  |  |  184|      0|#define OPENSSL_VERSION 0
  ------------------
  |  Branch (82:5): [True: 0, False: 104]
  ------------------
   83|      0|        return OPENSSL_VERSION_TEXT;
  ------------------
  |  |  110|      0|# define OPENSSL_VERSION_TEXT "OpenSSL 4.0.1 9 Jun 2026"
  ------------------
   84|    104|    case OPENSSL_VERSION_STRING:
  ------------------
  |  |  190|    104|#define OPENSSL_VERSION_STRING 6
  ------------------
  |  Branch (84:5): [True: 104, False: 0]
  ------------------
   85|    104|        return OPENSSL_VERSION_STR;
  ------------------
  |  |   90|    104|# define OPENSSL_VERSION_STR "4.0.1"
  ------------------
   86|      0|    case OPENSSL_FULL_VERSION_STRING:
  ------------------
  |  |  191|      0|#define OPENSSL_FULL_VERSION_STRING 7
  ------------------
  |  Branch (86:5): [True: 0, False: 104]
  ------------------
   87|      0|        return OPENSSL_FULL_VERSION_STR;
  ------------------
  |  |   93|      0|# define OPENSSL_FULL_VERSION_STR "4.0.1"
  ------------------
   88|      0|    case OPENSSL_BUILT_ON:
  ------------------
  |  |  186|      0|#define OPENSSL_BUILT_ON 2
  ------------------
  |  Branch (88:5): [True: 0, False: 104]
  ------------------
   89|      0|        return DATE;
  ------------------
  |  |   14|      0|#define DATE "built on: Thu Jul 16 06:06:11 2026 UTC"
  ------------------
   90|      0|    case OPENSSL_CFLAGS:
  ------------------
  |  |  185|      0|#define OPENSSL_CFLAGS 1
  ------------------
  |  Branch (90:5): [True: 0, False: 104]
  ------------------
   91|      0|        return compiler_flags;
   92|      0|    case OPENSSL_PLATFORM:
  ------------------
  |  |  187|      0|#define OPENSSL_PLATFORM 3
  ------------------
  |  Branch (92:5): [True: 0, False: 104]
  ------------------
   93|      0|        return PLATFORM;
  ------------------
  |  |   13|      0|#define PLATFORM "platform: linux-x86_64-clang"
  ------------------
   94|       |#if defined(_WIN32) && defined(OSSL_WINCTX)
   95|       |    case OPENSSL_DIR:
   96|       |        return openssldir;
   97|       |    case OPENSSL_MODULES_DIR:
   98|       |        return modulesdir;
   99|       |#else
  100|      0|    case OPENSSL_DIR:
  ------------------
  |  |  188|      0|#define OPENSSL_DIR 4
  ------------------
  |  Branch (100:5): [True: 0, False: 104]
  ------------------
  101|      0|#ifdef OPENSSLDIR
  102|      0|        return "OPENSSLDIR: \"" OPENSSLDIR "\"";
  103|       |#else
  104|       |        return "OPENSSLDIR: N/A";
  105|       |#endif
  106|      0|    case OPENSSL_MODULES_DIR:
  ------------------
  |  |  192|      0|#define OPENSSL_MODULES_DIR 8
  ------------------
  |  Branch (106:5): [True: 0, False: 104]
  ------------------
  107|      0|#ifdef MODULESDIR
  108|      0|        return "MODULESDIR: \"" MODULESDIR "\"";
  109|       |#else
  110|       |        return "MODULESDIR: N/A";
  111|       |#endif
  112|      0|#endif
  113|      0|    case OPENSSL_CPU_INFO:
  ------------------
  |  |  193|      0|#define OPENSSL_CPU_INFO 9
  ------------------
  |  Branch (113:5): [True: 0, False: 104]
  ------------------
  114|      0|        if (OPENSSL_info(OPENSSL_INFO_CPU_SETTINGS) != NULL)
  ------------------
  |  |  208|      0|#define OPENSSL_INFO_CPU_SETTINGS 1008
  ------------------
  |  Branch (114:13): [True: 0, False: 0]
  ------------------
  115|      0|            return ossl_cpu_info_str;
  116|      0|        else
  117|      0|            return "CPUINFO: N/A";
  118|      0|    case OPENSSL_WINCTX:
  ------------------
  |  |  194|      0|#define OPENSSL_WINCTX 10
  ------------------
  |  Branch (118:5): [True: 0, False: 104]
  ------------------
  119|       |#if defined(_WIN32) && defined(OSSL_WINCTX)
  120|       |        return OSSL_WINCTX_STRING;
  121|       |#else
  122|      0|        return "OSSL_WINCTX: Undefined";
  123|      0|#endif
  124|      0|    case OPENSSL_ENGINES_DIR:
  ------------------
  |  |  189|      0|#define OPENSSL_ENGINES_DIR 5
  ------------------
  |  Branch (124:5): [True: 0, False: 104]
  ------------------
  125|      0|        return "ENGINESDIR: N/A";
  126|    104|    }
  127|      0|    return "not available";
  128|    104|}

ossl_get_modulesdir:
  153|    104|{
  154|       |#if defined(_WIN32) && defined(OSSL_WINCTX)
  155|       |    if (!RUN_ONCE(&defaults_setup_init, do_defaults_setup))
  156|       |        return NULL;
  157|       |    return (const char *)modulesdirptr;
  158|       |#else
  159|    104|    return MODULESDIR;
  160|    104|#endif
  161|    104|}

ossl_err_load_DH_strings:
   68|      1|{
   69|      1|#ifndef OPENSSL_NO_ERR
   70|      1|    if (ERR_reason_error_string(DH_str_reasons[0].error) == NULL)
  ------------------
  |  Branch (70:9): [True: 1, False: 0]
  ------------------
   71|      1|        ERR_load_strings_const(DH_str_reasons);
   72|      1|#endif
   73|      1|    return 1;
   74|      1|}

ossl_err_load_DSA_strings:
   46|      1|{
   47|      1|#ifndef OPENSSL_NO_ERR
   48|      1|    if (ERR_reason_error_string(DSA_str_reasons[0].error) == NULL)
  ------------------
  |  Branch (48:9): [True: 1, False: 0]
  ------------------
   49|      1|        ERR_load_strings_const(DSA_str_reasons);
   50|      1|#endif
   51|      1|    return 1;
   52|      1|}

DSO_METHOD_openssl:
   62|    104|{
   63|    104|    return &dso_meth_dlfcn;
   64|    104|}
dso_dlfcn.c:dlfcn_load:
   94|    104|{
   95|    104|    void *ptr = NULL;
   96|       |    /* See applicable comments in dso_dl.c */
   97|    104|    char *filename = DSO_convert_filename(dso, NULL);
   98|    104|    int flags = DLOPEN_FLAG;
  ------------------
  |  |   85|    104|#define DLOPEN_FLAG RTLD_NOW /* Hope this works everywhere else */
  ------------------
   99|    104|    int saveerrno = get_last_sys_error();
  ------------------
  |  |   30|    104|#define get_last_sys_error() errno
  ------------------
  100|       |
  101|    104|    if (filename == NULL) {
  ------------------
  |  Branch (101:9): [True: 0, False: 104]
  ------------------
  102|      0|        ERR_raise(ERR_LIB_DSO, DSO_R_NO_FILENAME);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  103|      0|        goto err;
  104|      0|    }
  105|    104|#ifdef RTLD_GLOBAL
  106|    104|    if (dso->flags & DSO_FLAG_GLOBAL_SYMBOLS)
  ------------------
  |  |   53|    104|#define DSO_FLAG_GLOBAL_SYMBOLS 0x20
  ------------------
  |  Branch (106:9): [True: 0, False: 104]
  ------------------
  107|      0|        flags |= RTLD_GLOBAL;
  108|    104|#endif
  109|       |#ifdef _AIX
  110|       |    if (filename[strlen(filename) - 1] == ')')
  111|       |        flags |= RTLD_MEMBER;
  112|       |#endif
  113|    104|    ptr = dlopen(filename, flags);
  114|    104|    if (ptr == NULL) {
  ------------------
  |  Branch (114:9): [True: 104, False: 0]
  ------------------
  115|    104|        ERR_raise_data(ERR_LIB_DSO, DSO_R_LOAD_FAILED,
  ------------------
  |  |  359|    104|    (ERR_new(),                                                  \
  |  |  360|    104|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  366|    104|#define OPENSSL_FUNC __func__
  |  |  ------------------
  |  |  361|    104|        ERR_set_error)
  ------------------
                      ERR_raise_data(ERR_LIB_DSO, DSO_R_LOAD_FAILED,
  ------------------
  |  |   81|    104|#define ERR_LIB_DSO 37
  ------------------
                      ERR_raise_data(ERR_LIB_DSO, DSO_R_LOAD_FAILED,
  ------------------
  |  |   34|    104|#define DSO_R_LOAD_FAILED 103
  ------------------
  116|    104|            "filename(%s): %s", filename, dlerror());
  117|    104|        goto err;
  118|    104|    }
  119|       |    /*
  120|       |     * Some dlopen() implementations (e.g. solaris) do no preserve errno, even
  121|       |     * on a successful call.
  122|       |     */
  123|    104|    set_sys_error(saveerrno);
  ------------------
  |  |   32|    104|#define set_sys_error(e) errno = (e)
  ------------------
  124|      0|    if (!sk_void_push(dso->meth_data, (char *)ptr)) {
  ------------------
  |  |  230|      0|#define sk_void_push(sk, ptr) OPENSSL_sk_push(ossl_check_void_sk_type(sk), ossl_check_void_type(ptr))
  ------------------
  |  Branch (124:9): [True: 0, False: 0]
  ------------------
  125|      0|        ERR_raise(ERR_LIB_DSO, DSO_R_STACK_ERROR);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  126|      0|        goto err;
  127|      0|    }
  128|       |    /* Success */
  129|      0|    dso->loaded_filename = filename;
  130|      0|    return 1;
  131|    104|err:
  132|       |    /* Cleanup! */
  133|    104|    OPENSSL_free(filename);
  ------------------
  |  |  132|    104|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  134|    104|    if (ptr != NULL)
  ------------------
  |  Branch (134:9): [True: 0, False: 104]
  ------------------
  135|      0|        dlclose(ptr);
  136|    104|    return 0;
  137|      0|}
dso_dlfcn.c:dlfcn_unload:
  140|    104|{
  141|    104|    void *ptr;
  142|    104|    if (dso == NULL) {
  ------------------
  |  Branch (142:9): [True: 0, False: 104]
  ------------------
  143|      0|        ERR_raise(ERR_LIB_DSO, ERR_R_PASSED_NULL_PARAMETER);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  144|      0|        return 0;
  145|      0|    }
  146|    104|    if (sk_void_num(dso->meth_data) < 1)
  ------------------
  |  |  220|    104|#define sk_void_num(sk) OPENSSL_sk_num(ossl_check_const_void_sk_type(sk))
  ------------------
  |  Branch (146:9): [True: 104, False: 0]
  ------------------
  147|    104|        return 1;
  148|      0|    ptr = sk_void_pop(dso->meth_data);
  ------------------
  |  |  232|      0|#define sk_void_pop(sk) ((void *)OPENSSL_sk_pop(ossl_check_void_sk_type(sk)))
  ------------------
  149|      0|    if (ptr == NULL) {
  ------------------
  |  Branch (149:9): [True: 0, False: 0]
  ------------------
  150|      0|        ERR_raise(ERR_LIB_DSO, DSO_R_NULL_HANDLE);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  151|       |        /*
  152|       |         * Should push the value back onto the stack in case of a retry.
  153|       |         */
  154|      0|        sk_void_push(dso->meth_data, ptr);
  ------------------
  |  |  230|      0|#define sk_void_push(sk, ptr) OPENSSL_sk_push(ossl_check_void_sk_type(sk), ossl_check_void_type(ptr))
  ------------------
  155|      0|        return 0;
  156|      0|    }
  157|       |    /* For now I'm not aware of any errors associated with dlclose() */
  158|      0|    dlclose(ptr);
  159|      0|    return 1;
  160|      0|}
dso_dlfcn.c:dlfcn_name_converter:
  245|    208|{
  246|    208|    char *translated;
  247|    208|    int len, rsize, transform;
  248|       |
  249|    208|    len = strlen(filename);
  250|    208|    rsize = len + 1;
  251|    208|    transform = (strchr(filename, '/') == NULL);
  252|    208|    if (transform) {
  ------------------
  |  Branch (252:9): [True: 100, False: 108]
  ------------------
  253|       |        /* We will convert this to "%s.so" or "lib%s.so" etc */
  254|    100|        rsize += strlen(DSO_EXTENSION); /* The length of ".so" */
  ------------------
  |  |   23|    100|# define DSO_EXTENSION ".so"
  ------------------
  255|    100|        if ((DSO_flags(dso) & DSO_FLAG_NAME_TRANSLATION_EXT_ONLY) == 0)
  ------------------
  |  |   41|    100|#define DSO_FLAG_NAME_TRANSLATION_EXT_ONLY 0x02
  ------------------
  |  Branch (255:13): [True: 0, False: 100]
  ------------------
  256|      0|            rsize += 3; /* The length of "lib" */
  257|    100|    }
  258|    208|    translated = OPENSSL_malloc(rsize);
  ------------------
  |  |  107|    208|    CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  259|    208|    if (translated == NULL) {
  ------------------
  |  Branch (259:9): [True: 0, False: 208]
  ------------------
  260|      0|        ERR_raise(ERR_LIB_DSO, DSO_R_NAME_TRANSLATION_FAILED);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  261|      0|        return NULL;
  262|      0|    }
  263|    208|    if (transform) {
  ------------------
  |  Branch (263:9): [True: 100, False: 108]
  ------------------
  264|    100|        if ((DSO_flags(dso) & DSO_FLAG_NAME_TRANSLATION_EXT_ONLY) == 0)
  ------------------
  |  |   41|    100|#define DSO_FLAG_NAME_TRANSLATION_EXT_ONLY 0x02
  ------------------
  |  Branch (264:13): [True: 0, False: 100]
  ------------------
  265|      0|            BIO_snprintf(translated, rsize, "lib%s" DSO_EXTENSION, filename);
  ------------------
  |  |   23|      0|# define DSO_EXTENSION ".so"
  ------------------
  266|    100|        else
  267|    100|            BIO_snprintf(translated, rsize, "%s" DSO_EXTENSION, filename);
  ------------------
  |  |   23|    100|# define DSO_EXTENSION ".so"
  ------------------
  268|    108|    } else {
  269|    108|        BIO_snprintf(translated, rsize, "%s", filename);
  270|    108|    }
  271|    208|    return translated;
  272|    208|}
dso_dlfcn.c:dlfcn_merger:
  194|    104|{
  195|    104|    char *merged;
  196|       |
  197|    104|    if (!filespec1 && !filespec2) {
  ------------------
  |  Branch (197:9): [True: 0, False: 104]
  |  Branch (197:23): [True: 0, False: 0]
  ------------------
  198|      0|        ERR_raise(ERR_LIB_DSO, ERR_R_PASSED_NULL_PARAMETER);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  199|      0|        return NULL;
  200|      0|    }
  201|       |    /*
  202|       |     * If the first file specification is a rooted path, it rules. same goes
  203|       |     * if the second file specification is missing.
  204|       |     */
  205|    104|    if (!filespec2 || (filespec1 != NULL && filespec1[0] == '/')) {
  ------------------
  |  Branch (205:9): [True: 0, False: 104]
  |  Branch (205:24): [True: 104, False: 0]
  |  Branch (205:45): [True: 3, False: 101]
  ------------------
  206|      3|        merged = OPENSSL_strdup(filespec1);
  ------------------
  |  |  136|      3|    CRYPTO_strdup(str, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_strdup(str, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  207|      3|        if (merged == NULL)
  ------------------
  |  Branch (207:13): [True: 0, False: 3]
  ------------------
  208|      0|            return NULL;
  209|      3|    }
  210|       |    /*
  211|       |     * If the first file specification is missing, the second one rules.
  212|       |     */
  213|    101|    else if (!filespec1) {
  ------------------
  |  Branch (213:14): [True: 0, False: 101]
  ------------------
  214|      0|        merged = OPENSSL_strdup(filespec2);
  ------------------
  |  |  136|      0|    CRYPTO_strdup(str, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_strdup(str, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  215|      0|        if (merged == NULL)
  ------------------
  |  Branch (215:13): [True: 0, False: 0]
  ------------------
  216|      0|            return NULL;
  217|    101|    } else {
  218|       |        /*
  219|       |         * This part isn't as trivial as it looks.  It assumes that the
  220|       |         * second file specification really is a directory, and makes no
  221|       |         * checks whatsoever.  Therefore, the result becomes the
  222|       |         * concatenation of filespec2 followed by a slash followed by
  223|       |         * filespec1.
  224|       |         */
  225|    101|        int spec2len, len;
  226|       |
  227|    101|        spec2len = strlen(filespec2);
  228|    101|        len = spec2len + strlen(filespec1);
  229|       |
  230|    101|        if (spec2len && filespec2[spec2len - 1] == '/') {
  ------------------
  |  Branch (230:13): [True: 101, False: 0]
  |  Branch (230:25): [True: 0, False: 101]
  ------------------
  231|      0|            spec2len--;
  232|      0|            len--;
  233|      0|        }
  234|    101|        merged = OPENSSL_malloc(len + 2);
  ------------------
  |  |  107|    101|    CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  235|    101|        if (merged == NULL)
  ------------------
  |  Branch (235:13): [True: 0, False: 101]
  ------------------
  236|      0|            return NULL;
  237|    101|        strcpy(merged, filespec2);
  238|    101|        merged[spec2len] = '/';
  239|    101|        strcpy(&merged[spec2len + 1], filespec1);
  240|    101|    }
  241|    104|    return merged;
  242|    104|}

ossl_err_load_DSO_strings:
   50|      1|{
   51|      1|#ifndef OPENSSL_NO_ERR
   52|      1|    if (ERR_reason_error_string(DSO_str_reasons[0].error) == NULL)
  ------------------
  |  Branch (52:9): [True: 1, False: 0]
  ------------------
   53|      1|        ERR_load_strings_const(DSO_str_reasons);
   54|      1|#endif
   55|      1|    return 1;
   56|      1|}

DSO_new:
   43|    104|{
   44|       |    return DSO_new_method(NULL);
   45|    104|}
DSO_free:
   48|    322|{
   49|    322|    int i;
   50|       |
   51|    322|    if (dso == NULL)
  ------------------
  |  Branch (51:9): [True: 218, False: 104]
  ------------------
   52|    218|        return 1;
   53|       |
   54|    104|    if (CRYPTO_DOWN_REF(&dso->references, &i) <= 0)
  ------------------
  |  Branch (54:9): [True: 0, False: 104]
  ------------------
   55|      0|        return 0;
   56|       |
   57|    104|    REF_PRINT_COUNT("DSO", i, dso);
  ------------------
  |  |  301|    104|    REF_PRINT_EX(text, val, (void *)object)
  |  |  ------------------
  |  |  |  |  299|    104|    OSSL_TRACE3(REF_COUNT, "%p:%4d:%s\n", (object), (count), (text));
  |  |  |  |  ------------------
  |  |  |  |  |  |  295|    104|    OSSL_TRACEV(category, (trc_out, format, arg1, arg2, arg3))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  283|    104|#define OSSL_TRACEV(category, args) ((void)0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   58|    104|    if (i > 0)
  ------------------
  |  Branch (58:9): [True: 0, False: 104]
  ------------------
   59|      0|        return 1;
   60|    104|    REF_ASSERT_ISNT(i < 0);
  ------------------
  |  |  293|    104|    (void)((test) ? (OPENSSL_die("refcount error", __FILE__, __LINE__), 1) : 0)
  |  |  ------------------
  |  |  |  Branch (293:12): [True: 0, False: 104]
  |  |  ------------------
  ------------------
   61|       |
   62|    104|    if ((dso->flags & DSO_FLAG_NO_UNLOAD_ON_FREE) == 0) {
  ------------------
  |  |   46|    104|#define DSO_FLAG_NO_UNLOAD_ON_FREE 0x04
  ------------------
  |  Branch (62:9): [True: 104, False: 0]
  ------------------
   63|    104|        if ((dso->meth->dso_unload != NULL) && !dso->meth->dso_unload(dso)) {
  ------------------
  |  Branch (63:13): [True: 104, False: 0]
  |  Branch (63:48): [True: 0, False: 104]
  ------------------
   64|      0|            ERR_raise(ERR_LIB_DSO, DSO_R_UNLOAD_FAILED);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
   65|      0|            return 0;
   66|      0|        }
   67|    104|    }
   68|       |
   69|    104|    if ((dso->meth->finish != NULL) && !dso->meth->finish(dso)) {
  ------------------
  |  Branch (69:9): [True: 0, False: 104]
  |  Branch (69:40): [True: 0, False: 0]
  ------------------
   70|      0|        ERR_raise(ERR_LIB_DSO, DSO_R_FINISH_FAILED);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
   71|      0|        return 0;
   72|      0|    }
   73|       |
   74|    104|    sk_void_free(dso->meth_data);
  ------------------
  |  |  226|    104|#define sk_void_free(sk) OPENSSL_sk_free(ossl_check_void_sk_type(sk))
  ------------------
   75|    104|    OPENSSL_free(dso->filename);
  ------------------
  |  |  132|    104|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   76|    104|    OPENSSL_free(dso->loaded_filename);
  ------------------
  |  |  132|    104|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   77|    104|    CRYPTO_FREE_REF(&dso->references);
   78|    104|    OPENSSL_free(dso);
  ------------------
  |  |  132|    104|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   79|    104|    return 1;
   80|    104|}
DSO_flags:
   83|    200|{
   84|    200|    return ((dso == NULL) ? 0 : dso->flags);
  ------------------
  |  Branch (84:13): [True: 0, False: 200]
  ------------------
   85|    200|}
DSO_load:
  105|    104|{
  106|    104|    DSO *ret;
  107|    104|    int allocated = 0;
  108|       |
  109|    104|    if (dso == NULL) {
  ------------------
  |  Branch (109:9): [True: 0, False: 104]
  ------------------
  110|      0|        ret = DSO_new_method(meth);
  111|      0|        if (ret == NULL) {
  ------------------
  |  Branch (111:13): [True: 0, False: 0]
  ------------------
  112|      0|            ERR_raise(ERR_LIB_DSO, ERR_R_DSO_LIB);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  113|      0|            goto err;
  114|      0|        }
  115|      0|        allocated = 1;
  116|       |        /* Pass the provided flags to the new DSO object */
  117|      0|        if (DSO_ctrl(ret, DSO_CTRL_SET_FLAGS, flags, NULL) < 0) {
  ------------------
  |  |   19|      0|#define DSO_CTRL_SET_FLAGS 2
  ------------------
  |  Branch (117:13): [True: 0, False: 0]
  ------------------
  118|      0|            ERR_raise(ERR_LIB_DSO, DSO_R_CTRL_FAILED);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  119|      0|            goto err;
  120|      0|        }
  121|      0|    } else
  122|    104|        ret = dso;
  123|       |    /* Don't load if we're currently already loaded */
  124|    104|    if (ret->filename != NULL) {
  ------------------
  |  Branch (124:9): [True: 0, False: 104]
  ------------------
  125|      0|        ERR_raise(ERR_LIB_DSO, DSO_R_DSO_ALREADY_LOADED);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  126|      0|        goto err;
  127|      0|    }
  128|       |    /*
  129|       |     * filename can only be NULL if we were passed a dso that already has one
  130|       |     * set.
  131|       |     */
  132|    104|    if (filename != NULL)
  ------------------
  |  Branch (132:9): [True: 104, False: 0]
  ------------------
  133|    104|        if (!DSO_set_filename(ret, filename)) {
  ------------------
  |  Branch (133:13): [True: 0, False: 104]
  ------------------
  134|      0|            ERR_raise(ERR_LIB_DSO, DSO_R_SET_FILENAME_FAILED);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  135|      0|            goto err;
  136|      0|        }
  137|    104|    filename = ret->filename;
  138|    104|    if (filename == NULL) {
  ------------------
  |  Branch (138:9): [True: 0, False: 104]
  ------------------
  139|      0|        ERR_raise(ERR_LIB_DSO, DSO_R_NO_FILENAME);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  140|      0|        goto err;
  141|      0|    }
  142|    104|    if (ret->meth->dso_load == NULL) {
  ------------------
  |  Branch (142:9): [True: 0, False: 104]
  ------------------
  143|      0|        ERR_raise(ERR_LIB_DSO, DSO_R_UNSUPPORTED);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  144|      0|        goto err;
  145|      0|    }
  146|    104|    if (!ret->meth->dso_load(ret)) {
  ------------------
  |  Branch (146:9): [True: 104, False: 0]
  ------------------
  147|    104|        ERR_raise(ERR_LIB_DSO, DSO_R_LOAD_FAILED);
  ------------------
  |  |  357|    104|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|    104|    (ERR_new(),                                                  \
  |  |  |  |  360|    104|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|    104|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|    104|        ERR_set_error)
  |  |  ------------------
  ------------------
  148|    104|        goto err;
  149|    104|    }
  150|       |    /* Load succeeded */
  151|      0|    return ret;
  152|    104|err:
  153|    104|    if (allocated)
  ------------------
  |  Branch (153:9): [True: 0, False: 104]
  ------------------
  154|      0|        DSO_free(ret);
  155|       |    return NULL;
  156|    104|}
DSO_ctrl:
  188|    104|{
  189|    104|    if (dso == NULL) {
  ------------------
  |  Branch (189:9): [True: 0, False: 104]
  ------------------
  190|      0|        ERR_raise(ERR_LIB_DSO, ERR_R_PASSED_NULL_PARAMETER);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  191|      0|        return -1;
  192|      0|    }
  193|       |    /*
  194|       |     * We should intercept certain generic commands and only pass control to
  195|       |     * the method-specific ctrl() function if it's something we don't handle.
  196|       |     */
  197|    104|    switch (cmd) {
  198|      0|    case DSO_CTRL_GET_FLAGS:
  ------------------
  |  |   18|      0|#define DSO_CTRL_GET_FLAGS 1
  ------------------
  |  Branch (198:5): [True: 0, False: 104]
  ------------------
  199|      0|        return dso->flags;
  200|    104|    case DSO_CTRL_SET_FLAGS:
  ------------------
  |  |   19|    104|#define DSO_CTRL_SET_FLAGS 2
  ------------------
  |  Branch (200:5): [True: 104, False: 0]
  ------------------
  201|    104|        dso->flags = (int)larg;
  202|    104|        return 0;
  203|      0|    case DSO_CTRL_OR_FLAGS:
  ------------------
  |  |   20|      0|#define DSO_CTRL_OR_FLAGS 3
  ------------------
  |  Branch (203:5): [True: 0, False: 104]
  ------------------
  204|      0|        dso->flags |= (int)larg;
  205|      0|        return 0;
  206|      0|    default:
  ------------------
  |  Branch (206:5): [True: 0, False: 104]
  ------------------
  207|      0|        break;
  208|    104|    }
  209|      0|    if ((dso->meth == NULL) || (dso->meth->dso_ctrl == NULL)) {
  ------------------
  |  Branch (209:9): [True: 0, False: 0]
  |  Branch (209:32): [True: 0, False: 0]
  ------------------
  210|      0|        ERR_raise(ERR_LIB_DSO, DSO_R_UNSUPPORTED);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  211|      0|        return -1;
  212|      0|    }
  213|      0|    return dso->meth->dso_ctrl(dso, cmd, larg, parg);
  214|      0|}
DSO_set_filename:
  226|    104|{
  227|    104|    char *copied;
  228|       |
  229|    104|    if ((dso == NULL) || (filename == NULL)) {
  ------------------
  |  Branch (229:9): [True: 0, False: 104]
  |  Branch (229:26): [True: 0, False: 104]
  ------------------
  230|      0|        ERR_raise(ERR_LIB_DSO, ERR_R_PASSED_NULL_PARAMETER);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  231|      0|        return 0;
  232|      0|    }
  233|    104|    if (dso->loaded_filename) {
  ------------------
  |  Branch (233:9): [True: 0, False: 104]
  ------------------
  234|      0|        ERR_raise(ERR_LIB_DSO, DSO_R_DSO_ALREADY_LOADED);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  235|      0|        return 0;
  236|      0|    }
  237|       |    /* We'll duplicate filename */
  238|    104|    copied = OPENSSL_strdup(filename);
  ------------------
  |  |  136|    104|    CRYPTO_strdup(str, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_strdup(str, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  239|    104|    if (copied == NULL)
  ------------------
  |  Branch (239:9): [True: 0, False: 104]
  ------------------
  240|      0|        return 0;
  241|    104|    OPENSSL_free(dso->filename);
  ------------------
  |  |  132|    104|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  242|    104|    dso->filename = copied;
  243|    104|    return 1;
  244|    104|}
DSO_merge:
  247|    104|{
  248|    104|    char *result = NULL;
  249|       |
  250|    104|    if (dso == NULL || filespec1 == NULL) {
  ------------------
  |  Branch (250:9): [True: 0, False: 104]
  |  Branch (250:24): [True: 0, False: 104]
  ------------------
  251|      0|        ERR_raise(ERR_LIB_DSO, ERR_R_PASSED_NULL_PARAMETER);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  252|      0|        return NULL;
  253|      0|    }
  254|    104|    if ((dso->flags & DSO_FLAG_NO_NAME_TRANSLATION) == 0) {
  ------------------
  |  |   33|    104|#define DSO_FLAG_NO_NAME_TRANSLATION 0x01
  ------------------
  |  Branch (254:9): [True: 104, False: 0]
  ------------------
  255|    104|        if (dso->merger != NULL)
  ------------------
  |  Branch (255:13): [True: 0, False: 104]
  ------------------
  256|      0|            result = dso->merger(dso, filespec1, filespec2);
  257|    104|        else if (dso->meth->dso_merger != NULL)
  ------------------
  |  Branch (257:18): [True: 104, False: 0]
  ------------------
  258|    104|            result = dso->meth->dso_merger(dso, filespec1, filespec2);
  259|    104|    }
  260|    104|    return result;
  261|    104|}
DSO_convert_filename:
  264|    208|{
  265|    208|    char *result = NULL;
  266|       |
  267|    208|    if (dso == NULL) {
  ------------------
  |  Branch (267:9): [True: 0, False: 208]
  ------------------
  268|      0|        ERR_raise(ERR_LIB_DSO, ERR_R_PASSED_NULL_PARAMETER);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  269|      0|        return NULL;
  270|      0|    }
  271|    208|    if (filename == NULL)
  ------------------
  |  Branch (271:9): [True: 104, False: 104]
  ------------------
  272|    104|        filename = dso->filename;
  273|    208|    if (filename == NULL) {
  ------------------
  |  Branch (273:9): [True: 0, False: 208]
  ------------------
  274|      0|        ERR_raise(ERR_LIB_DSO, DSO_R_NO_FILENAME);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  275|      0|        return NULL;
  276|      0|    }
  277|    208|    if ((dso->flags & DSO_FLAG_NO_NAME_TRANSLATION) == 0) {
  ------------------
  |  |   33|    208|#define DSO_FLAG_NO_NAME_TRANSLATION 0x01
  ------------------
  |  Branch (277:9): [True: 208, False: 0]
  ------------------
  278|    208|        if (dso->name_converter != NULL)
  ------------------
  |  Branch (278:13): [True: 0, False: 208]
  ------------------
  279|      0|            result = dso->name_converter(dso, filename);
  280|    208|        else if (dso->meth->dso_name_converter != NULL)
  ------------------
  |  Branch (280:18): [True: 208, False: 0]
  ------------------
  281|    208|            result = dso->meth->dso_name_converter(dso, filename);
  282|    208|    }
  283|    208|    if (result == NULL) {
  ------------------
  |  Branch (283:9): [True: 0, False: 208]
  ------------------
  284|      0|        result = OPENSSL_strdup(filename);
  ------------------
  |  |  136|      0|    CRYPTO_strdup(str, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_strdup(str, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  285|      0|        if (result == NULL)
  ------------------
  |  Branch (285:13): [True: 0, False: 0]
  ------------------
  286|      0|            return NULL;
  287|      0|    }
  288|    208|    return result;
  289|    208|}
dso_lib.c:DSO_new_method:
   14|    104|{
   15|    104|    DSO *ret;
   16|       |
   17|    104|    ret = OPENSSL_zalloc(sizeof(*ret));
  ------------------
  |  |  109|    104|    CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   18|    104|    if (ret == NULL)
  ------------------
  |  Branch (18:9): [True: 0, False: 104]
  ------------------
   19|      0|        return NULL;
   20|    104|    ret->meth_data = sk_void_new_null();
  ------------------
  |  |  223|    104|#define sk_void_new_null() ((STACK_OF(void) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_void_freefunc_thunk))
  ------------------
   21|    104|    if (ret->meth_data == NULL) {
  ------------------
  |  Branch (21:9): [True: 0, False: 104]
  ------------------
   22|       |        /* sk_new doesn't generate any errors so we do */
   23|      0|        ERR_raise(ERR_LIB_DSO, ERR_R_CRYPTO_LIB);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
   24|      0|        OPENSSL_free(ret);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   25|      0|        return NULL;
   26|      0|    }
   27|    104|    ret->meth = DSO_METHOD_openssl();
   28|    104|    if (!CRYPTO_NEW_REF(&ret->references, 1)) {
  ------------------
  |  Branch (28:9): [True: 0, False: 104]
  ------------------
   29|      0|        sk_void_free(ret->meth_data);
  ------------------
  |  |  226|      0|#define sk_void_free(sk) OPENSSL_sk_free(ossl_check_void_sk_type(sk))
  ------------------
   30|      0|        OPENSSL_free(ret);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   31|      0|        return NULL;
   32|      0|    }
   33|       |
   34|    104|    if ((ret->meth->init != NULL) && !ret->meth->init(ret)) {
  ------------------
  |  Branch (34:9): [True: 0, False: 104]
  |  Branch (34:38): [True: 0, False: 0]
  ------------------
   35|      0|        DSO_free(ret);
   36|      0|        ret = NULL;
   37|      0|    }
   38|       |
   39|    104|    return ret;
   40|    104|}

ossl_err_load_EC_strings:
  127|      1|{
  128|      1|#ifndef OPENSSL_NO_ERR
  129|      1|    if (ERR_reason_error_string(EC_str_reasons[0].error) == NULL)
  ------------------
  |  Branch (129:9): [True: 1, False: 0]
  ------------------
  130|      1|        ERR_load_strings_const(EC_str_reasons);
  131|      1|#endif
  132|      1|    return 1;
  133|      1|}

ossl_decoder_store_cache_flush:
  438|      5|{
  439|      5|    OSSL_METHOD_STORE *store = get_decoder_store(libctx);
  440|       |
  441|      5|    if (store != NULL)
  ------------------
  |  Branch (441:9): [True: 5, False: 0]
  ------------------
  442|      5|        return ossl_method_store_cache_flush_all(store);
  443|      0|    return 1;
  444|      5|}
ossl_decoder_store_remove_all_provided:
  447|      5|{
  448|      5|    OSSL_LIB_CTX *libctx = ossl_provider_libctx(prov);
  449|      5|    OSSL_METHOD_STORE *store = get_decoder_store(libctx);
  450|       |
  451|      5|    if (store != NULL)
  ------------------
  |  Branch (451:9): [True: 5, False: 0]
  ------------------
  452|      5|        return ossl_method_store_remove_all_provided(store, prov);
  453|      0|    return 1;
  454|      5|}
decoder_meth.c:get_decoder_store:
  112|     10|{
  113|     10|    return ossl_lib_ctx_get_data(libctx, OSSL_LIB_CTX_DECODER_STORE_INDEX);
  ------------------
  |  |  108|     10|#define OSSL_LIB_CTX_DECODER_STORE_INDEX 11
  ------------------
  114|     10|}

ossl_decoder_cache_new:
  774|    110|{
  775|    110|    DECODER_CACHE *cache = OPENSSL_malloc(sizeof(*cache));
  ------------------
  |  |  107|    110|    CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  776|       |
  777|    110|    if (cache == NULL)
  ------------------
  |  Branch (777:9): [True: 0, False: 110]
  ------------------
  778|      0|        return NULL;
  779|       |
  780|    110|    cache->lock = CRYPTO_THREAD_lock_new();
  781|    110|    if (cache->lock == NULL) {
  ------------------
  |  Branch (781:9): [True: 0, False: 110]
  ------------------
  782|      0|        OPENSSL_free(cache);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  783|      0|        return NULL;
  784|      0|    }
  785|    110|    cache->hashtable = lh_DECODER_CACHE_ENTRY_new(decoder_cache_entry_hash,
  786|    110|        decoder_cache_entry_cmp);
  787|    110|    if (cache->hashtable == NULL) {
  ------------------
  |  Branch (787:9): [True: 0, False: 110]
  ------------------
  788|      0|        CRYPTO_THREAD_lock_free(cache->lock);
  789|      0|        OPENSSL_free(cache);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  790|      0|        return NULL;
  791|      0|    }
  792|       |
  793|    110|    return cache;
  794|    110|}
ossl_decoder_cache_free:
  797|    109|{
  798|    109|    DECODER_CACHE *cache = (DECODER_CACHE *)vcache;
  799|       |
  800|    109|    lh_DECODER_CACHE_ENTRY_doall(cache->hashtable, decoder_cache_entry_free);
  801|    109|    lh_DECODER_CACHE_ENTRY_free(cache->hashtable);
  802|    109|    CRYPTO_THREAD_lock_free(cache->lock);
  803|    109|    OPENSSL_free(cache);
  ------------------
  |  |  132|    109|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  804|    109|}
ossl_decoder_cache_flush:
  811|    119|{
  812|    119|    DECODER_CACHE *cache
  813|    119|        = ossl_lib_ctx_get_data(libctx, OSSL_LIB_CTX_DECODER_CACHE_INDEX);
  ------------------
  |  |  117|    119|#define OSSL_LIB_CTX_DECODER_CACHE_INDEX 20
  ------------------
  814|       |
  815|    119|    if (cache == NULL)
  ------------------
  |  Branch (815:9): [True: 109, False: 10]
  ------------------
  816|    109|        return 0;
  817|       |
  818|     10|    if (!CRYPTO_THREAD_write_lock(cache->lock)) {
  ------------------
  |  Branch (818:9): [True: 0, False: 10]
  ------------------
  819|      0|        ERR_raise(ERR_LIB_OSSL_DECODER, ERR_R_OSSL_DECODER_LIB);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  820|      0|        return 0;
  821|      0|    }
  822|       |
  823|     10|    lh_DECODER_CACHE_ENTRY_doall(cache->hashtable, decoder_cache_entry_free);
  824|     10|    lh_DECODER_CACHE_ENTRY_flush(cache->hashtable);
  825|       |
  826|     10|    CRYPTO_THREAD_unlock(cache->lock);
  827|     10|    return 1;
  828|     10|}

ossl_encoder_store_cache_flush:
  444|      5|{
  445|      5|    OSSL_METHOD_STORE *store = get_encoder_store(libctx);
  446|       |
  447|      5|    if (store != NULL)
  ------------------
  |  Branch (447:9): [True: 5, False: 0]
  ------------------
  448|      5|        return ossl_method_store_cache_flush_all(store);
  449|      0|    return 1;
  450|      5|}
ossl_encoder_store_remove_all_provided:
  453|      5|{
  454|      5|    OSSL_LIB_CTX *libctx = ossl_provider_libctx(prov);
  455|      5|    OSSL_METHOD_STORE *store = get_encoder_store(libctx);
  456|       |
  457|      5|    if (store != NULL)
  ------------------
  |  Branch (457:9): [True: 5, False: 0]
  ------------------
  458|      5|        return ossl_method_store_remove_all_provided(store, prov);
  459|      0|    return 1;
  460|      5|}
encoder_meth.c:get_encoder_store:
  113|     10|{
  114|     10|    return ossl_lib_ctx_get_data(libctx, OSSL_LIB_CTX_ENCODER_STORE_INDEX);
  ------------------
  |  |  107|     10|#define OSSL_LIB_CTX_ENCODER_STORE_INDEX 10
  ------------------
  115|     10|}

ossl_err_load_ERR_strings:
  267|     35|{
  268|     35|#ifndef OPENSSL_NO_ERR
  269|     35|    if (!RUN_ONCE(&err_string_init, do_err_strings_init))
  ------------------
  |  |  130|     35|    (CRYPTO_THREAD_run_once(once, init##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (130:6): [True: 35, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (269:9): [True: 0, False: 35]
  ------------------
  270|      0|        return 0;
  271|       |
  272|     35|    err_load_strings(ERR_str_libraries);
  273|     35|    err_load_strings(ERR_str_reasons);
  274|     35|#endif
  275|     35|    return 1;
  276|     35|}
ERR_load_strings_const:
  292|     34|{
  293|     34|#ifndef OPENSSL_NO_ERR
  294|     34|    if (ossl_err_load_ERR_strings() == 0)
  ------------------
  |  Branch (294:9): [True: 0, False: 34]
  ------------------
  295|      0|        return 0;
  296|     34|    err_load_strings(str);
  297|     34|#endif
  298|       |
  299|     34|    return 1;
  300|     34|}
ERR_get_error:
  345|    104|{
  346|    104|    return get_error_values(EV_POP, NULL, NULL, NULL, NULL, NULL);
  347|    104|}
ERR_peek_last_error:
  405|    111|{
  406|    111|    return get_error_values(EV_PEEK_LAST, NULL, NULL, NULL, NULL, NULL);
  407|    111|}
ossl_err_string_int:
  518|    104|{
  519|    104|    char lsbuf[64], rsbuf[256];
  520|    104|    const char *ls, *rs = NULL;
  521|    104|    unsigned long l, r;
  522|       |
  523|    104|    if (len == 0)
  ------------------
  |  Branch (523:9): [True: 0, False: 104]
  ------------------
  524|      0|        return;
  525|       |
  526|    104|    l = ERR_GET_LIB(e);
  527|    104|    ls = ERR_lib_error_string(e);
  528|    104|    if (ls == NULL) {
  ------------------
  |  Branch (528:9): [True: 0, False: 104]
  ------------------
  529|      0|        BIO_snprintf(lsbuf, sizeof(lsbuf), "lib(%lu)", l);
  530|      0|        ls = lsbuf;
  531|      0|    }
  532|       |
  533|       |    /*
  534|       |     * ERR_reason_error_string() can't safely return system error strings,
  535|       |     * since it would call openssl_strerror_r(), which needs a buffer for
  536|       |     * thread safety.  So for system errors, we call openssl_strerror_r()
  537|       |     * directly instead.
  538|       |     */
  539|    104|    r = ERR_GET_REASON(e);
  540|    104|#ifndef OPENSSL_NO_ERR
  541|    104|    if (ERR_SYSTEM_ERROR(e)) {
  ------------------
  |  |  222|    104|#define ERR_SYSTEM_ERROR(errcode) (((errcode) & ERR_SYSTEM_FLAG) != 0)
  |  |  ------------------
  |  |  |  |  201|    104|#define ERR_SYSTEM_FLAG ((unsigned int)INT_MAX + 1)
  |  |  ------------------
  |  |  |  Branch (222:35): [True: 8, False: 96]
  |  |  ------------------
  ------------------
  542|      8|        if (openssl_strerror_r(r, rsbuf, sizeof(rsbuf)))
  ------------------
  |  Branch (542:13): [True: 8, False: 0]
  ------------------
  543|      8|            rs = rsbuf;
  544|     96|    } else {
  545|     96|        rs = ERR_reason_error_string(e);
  546|     96|    }
  547|    104|#endif
  548|    104|    if (rs == NULL) {
  ------------------
  |  Branch (548:9): [True: 0, False: 104]
  ------------------
  549|      0|        BIO_snprintf(rsbuf, sizeof(rsbuf), "reason(%lu)",
  550|      0|            r & ~(ERR_RFLAGS_MASK << ERR_RFLAGS_OFFSET));
  ------------------
  |  |  212|      0|#define ERR_RFLAGS_MASK 0x1F
  ------------------
                          r & ~(ERR_RFLAGS_MASK << ERR_RFLAGS_OFFSET));
  ------------------
  |  |  211|      0|#define ERR_RFLAGS_OFFSET 18L
  ------------------
  551|      0|        rs = rsbuf;
  552|      0|    }
  553|       |
  554|    104|    BIO_snprintf(buf, len, "error:%08lX:%s:%s:%s", e, ls, func, rs);
  555|    104|    if (strlen(buf) == len - 1) {
  ------------------
  |  Branch (555:9): [True: 0, False: 104]
  ------------------
  556|       |        /* Didn't fit; use a minimal format. */
  557|      0|        BIO_snprintf(buf, len, "err:%lx:%lx:%lx:%lx", e, l, 0L, r);
  558|      0|    }
  559|    104|}
ERR_error_string_n:
  562|    104|{
  563|    104|    ossl_err_string_int(e, "", buf, len);
  564|    104|}
ERR_lib_error_string:
  581|    104|{
  582|    104|#ifndef OPENSSL_NO_ERR
  583|    104|    ERR_STRING_DATA d, *p;
  584|    104|    unsigned long l;
  585|       |
  586|    104|    if (!RUN_ONCE(&err_string_init, do_err_strings_init)) {
  ------------------
  |  |  130|    104|    (CRYPTO_THREAD_run_once(once, init##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (130:6): [True: 104, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (586:9): [True: 0, False: 104]
  ------------------
  587|      0|        return NULL;
  588|      0|    }
  589|       |
  590|    104|    l = ERR_GET_LIB(e);
  591|    104|    d.error = ERR_PACK(l, 0, 0);
  ------------------
  |  |  262|    104|    ((((unsigned long)(lib) & ERR_LIB_MASK) << ERR_LIB_OFFSET) | (((unsigned long)(reason) & ERR_REASON_MASK)))
  |  |  ------------------
  |  |  |  |  210|    104|#define ERR_LIB_MASK 0xFF
  |  |  ------------------
  |  |                   ((((unsigned long)(lib) & ERR_LIB_MASK) << ERR_LIB_OFFSET) | (((unsigned long)(reason) & ERR_REASON_MASK)))
  |  |  ------------------
  |  |  |  |  209|    104|#define ERR_LIB_OFFSET 23L
  |  |  ------------------
  |  |                   ((((unsigned long)(lib) & ERR_LIB_MASK) << ERR_LIB_OFFSET) | (((unsigned long)(reason) & ERR_REASON_MASK)))
  |  |  ------------------
  |  |  |  |  213|    104|#define ERR_REASON_MASK 0X7FFFFF
  |  |  ------------------
  ------------------
  592|    104|    p = int_err_get_item(&d);
  593|    104|    return ((p == NULL) ? NULL : p->string);
  ------------------
  |  Branch (593:13): [True: 0, False: 104]
  ------------------
  594|       |#else
  595|       |    return NULL;
  596|       |#endif
  597|    104|}
ERR_reason_error_string:
  607|    130|{
  608|    130|#ifndef OPENSSL_NO_ERR
  609|    130|    ERR_STRING_DATA d, *p = NULL;
  610|    130|    unsigned long l, r;
  611|       |
  612|    130|    if (!RUN_ONCE(&err_string_init, do_err_strings_init)) {
  ------------------
  |  |  130|    130|    (CRYPTO_THREAD_run_once(once, init##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (130:6): [True: 130, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (612:9): [True: 0, False: 130]
  ------------------
  613|      0|        return NULL;
  614|      0|    }
  615|       |
  616|       |    /*
  617|       |     * ERR_reason_error_string() can't safely return system error strings,
  618|       |     * since openssl_strerror_r() needs a buffer for thread safety, and we
  619|       |     * haven't got one that would serve any sensible purpose.
  620|       |     */
  621|    130|    if (ERR_SYSTEM_ERROR(e))
  ------------------
  |  |  222|    130|#define ERR_SYSTEM_ERROR(errcode) (((errcode) & ERR_SYSTEM_FLAG) != 0)
  |  |  ------------------
  |  |  |  |  201|    130|#define ERR_SYSTEM_FLAG ((unsigned int)INT_MAX + 1)
  |  |  ------------------
  |  |  |  Branch (222:35): [True: 0, False: 130]
  |  |  ------------------
  ------------------
  622|      0|        return NULL;
  623|       |
  624|    130|    l = ERR_GET_LIB(e);
  625|    130|    r = ERR_GET_REASON(e);
  626|    130|    d.error = ERR_PACK(l, 0, r);
  ------------------
  |  |  262|    130|    ((((unsigned long)(lib) & ERR_LIB_MASK) << ERR_LIB_OFFSET) | (((unsigned long)(reason) & ERR_REASON_MASK)))
  |  |  ------------------
  |  |  |  |  210|    130|#define ERR_LIB_MASK 0xFF
  |  |  ------------------
  |  |                   ((((unsigned long)(lib) & ERR_LIB_MASK) << ERR_LIB_OFFSET) | (((unsigned long)(reason) & ERR_REASON_MASK)))
  |  |  ------------------
  |  |  |  |  209|    130|#define ERR_LIB_OFFSET 23L
  |  |  ------------------
  |  |                   ((((unsigned long)(lib) & ERR_LIB_MASK) << ERR_LIB_OFFSET) | (((unsigned long)(reason) & ERR_REASON_MASK)))
  |  |  ------------------
  |  |  |  |  213|    130|#define ERR_REASON_MASK 0X7FFFFF
  |  |  ------------------
  ------------------
  627|    130|    p = int_err_get_item(&d);
  628|    130|    if (p == NULL) {
  ------------------
  |  Branch (628:9): [True: 34, False: 96]
  ------------------
  629|     34|        d.error = ERR_PACK(0, 0, r);
  ------------------
  |  |  262|     34|    ((((unsigned long)(lib) & ERR_LIB_MASK) << ERR_LIB_OFFSET) | (((unsigned long)(reason) & ERR_REASON_MASK)))
  |  |  ------------------
  |  |  |  |  210|     34|#define ERR_LIB_MASK 0xFF
  |  |  ------------------
  |  |                   ((((unsigned long)(lib) & ERR_LIB_MASK) << ERR_LIB_OFFSET) | (((unsigned long)(reason) & ERR_REASON_MASK)))
  |  |  ------------------
  |  |  |  |  209|     34|#define ERR_LIB_OFFSET 23L
  |  |  ------------------
  |  |                   ((((unsigned long)(lib) & ERR_LIB_MASK) << ERR_LIB_OFFSET) | (((unsigned long)(reason) & ERR_REASON_MASK)))
  |  |  ------------------
  |  |  |  |  213|     34|#define ERR_REASON_MASK 0X7FFFFF
  |  |  ------------------
  ------------------
  630|     34|        p = int_err_get_item(&d);
  631|     34|    }
  632|    130|    return ((p == NULL) ? NULL : p->string);
  ------------------
  |  Branch (632:13): [True: 34, False: 96]
  ------------------
  633|       |#else
  634|       |    return NULL;
  635|       |#endif
  636|    130|}
ossl_err_get_state_int:
  652|  2.37k|{
  653|  2.37k|    ERR_STATE *state;
  654|  2.37k|    int saveerrno = get_last_sys_error();
  ------------------
  |  |   30|  2.37k|#define get_last_sys_error() errno
  ------------------
  655|       |
  656|  2.37k|    if (!OPENSSL_init_crypto(OPENSSL_INIT_BASE_ONLY, NULL))
  ------------------
  |  |   31|  2.37k|#define OPENSSL_INIT_BASE_ONLY 0x00040000L
  ------------------
  |  Branch (656:9): [True: 0, False: 2.37k]
  ------------------
  657|      0|        return NULL;
  658|       |
  659|  2.37k|    state = CRYPTO_THREAD_get_local_ex(CRYPTO_THREAD_LOCAL_ERR_KEY,
  660|  2.37k|        CRYPTO_THREAD_NO_CONTEXT);
  ------------------
  |  |   42|  2.37k|#define CRYPTO_THREAD_NO_CONTEXT (void *)1
  ------------------
  661|  2.37k|    if (state == (ERR_STATE *)-1)
  ------------------
  |  Branch (661:9): [True: 0, False: 2.37k]
  ------------------
  662|      0|        return NULL;
  663|       |
  664|  2.37k|    if (state == NULL) {
  ------------------
  |  Branch (664:9): [True: 1, False: 2.37k]
  ------------------
  665|      1|        if (!CRYPTO_THREAD_set_local_ex(CRYPTO_THREAD_LOCAL_ERR_KEY,
  ------------------
  |  Branch (665:13): [True: 0, False: 1]
  ------------------
  666|      1|                CRYPTO_THREAD_NO_CONTEXT, (ERR_STATE *)-1))
  ------------------
  |  |   42|      1|#define CRYPTO_THREAD_NO_CONTEXT (void *)1
  ------------------
  667|      0|            return NULL;
  668|       |
  669|      1|        state = OSSL_ERR_STATE_new();
  670|      1|        if (state == NULL) {
  ------------------
  |  Branch (670:13): [True: 0, False: 1]
  ------------------
  671|      0|            CRYPTO_THREAD_set_local_ex(CRYPTO_THREAD_LOCAL_ERR_KEY,
  672|      0|                CRYPTO_THREAD_NO_CONTEXT, NULL);
  ------------------
  |  |   42|      0|#define CRYPTO_THREAD_NO_CONTEXT (void *)1
  ------------------
  673|      0|            return NULL;
  674|      0|        }
  675|       |
  676|      1|        if (!ossl_init_thread_start(NULL, NULL, err_delete_thread_state)
  ------------------
  |  Branch (676:13): [True: 0, False: 1]
  ------------------
  677|      1|            || !CRYPTO_THREAD_set_local_ex(CRYPTO_THREAD_LOCAL_ERR_KEY,
  ------------------
  |  Branch (677:16): [True: 0, False: 1]
  ------------------
  678|      1|                CRYPTO_THREAD_NO_CONTEXT, state)) {
  ------------------
  |  |   42|      1|#define CRYPTO_THREAD_NO_CONTEXT (void *)1
  ------------------
  679|      0|            OSSL_ERR_STATE_free(state);
  680|      0|            CRYPTO_THREAD_set_local_ex(CRYPTO_THREAD_LOCAL_ERR_KEY,
  681|      0|                CRYPTO_THREAD_NO_CONTEXT, NULL);
  ------------------
  |  |   42|      0|#define CRYPTO_THREAD_NO_CONTEXT (void *)1
  ------------------
  682|      0|            return NULL;
  683|      0|        }
  684|       |
  685|       |        /* Ignore failures from these */
  686|      1|        OPENSSL_init_crypto(OPENSSL_INIT_LOAD_CRYPTO_STRINGS, NULL);
  ------------------
  |  |  506|      1|#define OPENSSL_INIT_LOAD_CRYPTO_STRINGS 0x00000002L
  ------------------
  687|      1|    }
  688|       |
  689|  2.37k|    set_sys_error(saveerrno);
  ------------------
  |  |   32|  2.37k|#define set_sys_error(e) errno = (e)
  ------------------
  690|  2.37k|    return state;
  691|  2.37k|}
err_shelve_state:
  698|      1|{
  699|      1|    int saveerrno = get_last_sys_error();
  ------------------
  |  |   30|      1|#define get_last_sys_error() errno
  ------------------
  700|       |
  701|       |    /*
  702|       |     * Note, at present our only caller is OPENSSL_init_crypto(), indirectly
  703|       |     * via ossl_init_load_crypto_nodelete(), by which point the requested
  704|       |     * "base" initialization has already been performed, so the below call is a
  705|       |     * NOOP, that re-enters OPENSSL_init_crypto() only to quickly return.
  706|       |     *
  707|       |     * If are no other valid callers of this function, the call below can be
  708|       |     * removed, avoiding the re-entry into OPENSSL_init_crypto().  If there are
  709|       |     * potential uses that are not from inside OPENSSL_init_crypto(), then this
  710|       |     * call is needed, but some care is required to make sure that the re-entry
  711|       |     * remains a NOOP.
  712|       |     */
  713|      1|    if (!OPENSSL_init_crypto(OPENSSL_INIT_BASE_ONLY, NULL))
  ------------------
  |  |   31|      1|#define OPENSSL_INIT_BASE_ONLY 0x00040000L
  ------------------
  |  Branch (713:9): [True: 0, False: 1]
  ------------------
  714|      0|        return 0;
  715|       |
  716|      1|    *state = CRYPTO_THREAD_get_local_ex(CRYPTO_THREAD_LOCAL_ERR_KEY,
  717|      1|        CRYPTO_THREAD_NO_CONTEXT);
  ------------------
  |  |   42|      1|#define CRYPTO_THREAD_NO_CONTEXT (void *)1
  ------------------
  718|      1|    if (!CRYPTO_THREAD_set_local_ex(CRYPTO_THREAD_LOCAL_ERR_KEY,
  ------------------
  |  Branch (718:9): [True: 0, False: 1]
  ------------------
  719|      1|            CRYPTO_THREAD_NO_CONTEXT, (ERR_STATE *)-1))
  ------------------
  |  |   42|      1|#define CRYPTO_THREAD_NO_CONTEXT (void *)1
  ------------------
  720|      0|        return 0;
  721|       |
  722|      1|    set_sys_error(saveerrno);
  ------------------
  |  |   32|      1|#define set_sys_error(e) errno = (e)
  ------------------
  723|      1|    return 1;
  724|      1|}
err_unshelve_state:
  731|      1|{
  732|      1|    if (state != (void *)-1)
  ------------------
  |  Branch (732:9): [True: 1, False: 0]
  ------------------
  733|      1|        CRYPTO_THREAD_set_local_ex(CRYPTO_THREAD_LOCAL_ERR_KEY,
  734|      1|            CRYPTO_THREAD_NO_CONTEXT, (ERR_STATE *)state);
  ------------------
  |  |   42|      1|#define CRYPTO_THREAD_NO_CONTEXT (void *)1
  ------------------
  735|      1|}
ERR_get_next_error_library:
  738|    219|{
  739|    219|    int ret;
  740|       |
  741|    219|    if (!RUN_ONCE(&err_string_init, do_err_strings_init))
  ------------------
  |  |  130|    219|    (CRYPTO_THREAD_run_once(once, init##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (130:6): [True: 219, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (741:9): [True: 0, False: 219]
  ------------------
  742|      0|        return 0;
  743|       |
  744|    219|    if (!CRYPTO_THREAD_write_lock(err_string_lock))
  ------------------
  |  Branch (744:9): [True: 0, False: 219]
  ------------------
  745|      0|        return 0;
  746|    219|    ret = int_err_library_number++;
  747|    219|    CRYPTO_THREAD_unlock(err_string_lock);
  748|    219|    return ret;
  749|    219|}
err.c:do_err_strings_init:
  211|      1|{
  212|      1|    if (!OPENSSL_init_crypto(OPENSSL_INIT_BASE_ONLY, NULL))
  ------------------
  |  |   31|      1|#define OPENSSL_INIT_BASE_ONLY 0x00040000L
  ------------------
  |  Branch (212:9): [True: 0, False: 1]
  ------------------
  213|      0|        return 0;
  214|      1|    err_string_lock = CRYPTO_THREAD_lock_new();
  215|      1|    if (err_string_lock == NULL)
  ------------------
  |  Branch (215:9): [True: 0, False: 1]
  ------------------
  216|      0|        return 0;
  217|      1|#ifndef OPENSSL_NO_ERR
  218|      1|    int_error_hash = lh_ERR_STRING_DATA_new(err_string_data_hash,
  ------------------
  |  |  330|      1|#define lh_ERR_STRING_DATA_new(hfn, cmp) ((LHASH_OF(ERR_STRING_DATA) *)OPENSSL_LH_set_thunks(OPENSSL_LH_new(ossl_check_ERR_STRING_DATA_lh_hashfunc_type(hfn), ossl_check_ERR_STRING_DATA_lh_compfunc_type(cmp)), lh_ERR_STRING_DATA_hash_thunk, lh_ERR_STRING_DATA_comp_thunk, lh_ERR_STRING_DATA_doall_thunk, lh_ERR_STRING_DATA_doall_arg_thunk))
  ------------------
  219|      1|        err_string_data_cmp);
  220|      1|    if (int_error_hash == NULL) {
  ------------------
  |  Branch (220:9): [True: 0, False: 1]
  ------------------
  221|      0|        CRYPTO_THREAD_lock_free(err_string_lock);
  222|      0|        err_string_lock = NULL;
  223|      0|        return 0;
  224|      0|    }
  225|      1|#endif
  226|      1|    return 1;
  227|      1|}
err.c:err_string_data_hash:
  169|  4.57k|{
  170|  4.57k|    unsigned long ret, l;
  171|       |
  172|  4.57k|    l = a->error;
  173|  4.57k|    ret = l ^ ERR_GET_LIB(l);
  174|  4.57k|    return (ret ^ ret % 19 * 13);
  175|  4.57k|}
err.c:err_string_data_cmp:
  179|  3.14k|{
  180|  3.14k|    if (a->error == b->error)
  ------------------
  |  Branch (180:9): [True: 2.98k, False: 156]
  ------------------
  181|  2.98k|        return 0;
  182|    156|    return a->error > b->error ? 1 : -1;
  ------------------
  |  Branch (182:12): [True: 82, False: 74]
  ------------------
  183|  3.14k|}
err.c:err_load_strings:
  255|    104|{
  256|    104|    if (!CRYPTO_THREAD_write_lock(err_string_lock))
  ------------------
  |  Branch (256:9): [True: 0, False: 104]
  ------------------
  257|      0|        return 0;
  258|  4.41k|    for (; str->error; str++)
  ------------------
  |  Branch (258:12): [True: 4.30k, False: 104]
  ------------------
  259|  4.30k|        (void)lh_ERR_STRING_DATA_insert(int_error_hash,
  ------------------
  |  |  333|  4.41k|#define lh_ERR_STRING_DATA_insert(lh, ptr) ((ERR_STRING_DATA *)OPENSSL_LH_insert(ossl_check_ERR_STRING_DATA_lh_type(lh), ossl_check_ERR_STRING_DATA_lh_plain_type(ptr)))
  ------------------
  260|    104|            (ERR_STRING_DATA *)str);
  261|    104|    CRYPTO_THREAD_unlock(err_string_lock);
  262|    104|    return 1;
  263|    104|}
err.c:get_error_values:
  443|    215|{
  444|    215|    int i = 0;
  445|    215|    ERR_STATE *es;
  446|    215|    unsigned long ret;
  447|       |
  448|    215|    es = ossl_err_get_state_int();
  449|    215|    if (es == NULL)
  ------------------
  |  Branch (449:9): [True: 0, False: 215]
  ------------------
  450|      0|        return 0;
  451|       |
  452|       |    /*
  453|       |     * Clear anything that should have been cleared earlier. We do this
  454|       |     * here because this doesn't have constant-time issues.
  455|       |     */
  456|    215|    while (es->bottom != es->top) {
  ------------------
  |  Branch (456:12): [True: 215, False: 0]
  ------------------
  457|    215|        if (es->err_flags[es->top] & ERR_FLAG_CLEAR) {
  ------------------
  |  |   16|    215|#define ERR_FLAG_CLEAR 0x02
  ------------------
  |  Branch (457:13): [True: 0, False: 215]
  ------------------
  458|      0|            err_clear(es, es->top, 0);
  459|      0|            es->top = es->top > 0 ? es->top - 1 : ERR_NUM_ERRORS - 1;
  ------------------
  |  |   14|      0|#define ERR_NUM_ERRORS 16
  ------------------
  |  Branch (459:23): [True: 0, False: 0]
  ------------------
  460|      0|            continue;
  461|      0|        }
  462|    215|        i = (es->bottom + 1) % ERR_NUM_ERRORS;
  ------------------
  |  |   14|    215|#define ERR_NUM_ERRORS 16
  ------------------
  463|    215|        if (es->err_flags[i] & ERR_FLAG_CLEAR) {
  ------------------
  |  |   16|    215|#define ERR_FLAG_CLEAR 0x02
  ------------------
  |  Branch (463:13): [True: 0, False: 215]
  ------------------
  464|      0|            es->bottom = i;
  465|      0|            err_clear(es, es->bottom, 0);
  466|      0|            continue;
  467|      0|        }
  468|    215|        break;
  469|    215|    }
  470|       |
  471|       |    /* If everything has been cleared, the stack is empty. */
  472|    215|    if (es->bottom == es->top)
  ------------------
  |  Branch (472:9): [True: 0, False: 215]
  ------------------
  473|      0|        return 0;
  474|       |
  475|       |    /* Which error, the top of stack (latest one) or the first one? */
  476|    215|    if (g == EV_PEEK_LAST)
  ------------------
  |  Branch (476:9): [True: 111, False: 104]
  ------------------
  477|    111|        i = es->top;
  478|    104|    else
  479|    104|        i = (es->bottom + 1) % ERR_NUM_ERRORS;
  ------------------
  |  |   14|    104|#define ERR_NUM_ERRORS 16
  ------------------
  480|       |
  481|    215|    ret = es->err_buffer[i];
  482|    215|    if (g == EV_POP) {
  ------------------
  |  Branch (482:9): [True: 104, False: 111]
  ------------------
  483|    104|        es->bottom = i;
  484|    104|        es->err_buffer[i] = 0;
  485|    104|    }
  486|       |
  487|    215|    if (file != NULL) {
  ------------------
  |  Branch (487:9): [True: 0, False: 215]
  ------------------
  488|      0|        *file = es->err_file[i];
  489|      0|        if (*file == NULL)
  ------------------
  |  Branch (489:13): [True: 0, False: 0]
  ------------------
  490|      0|            *file = "";
  491|      0|    }
  492|    215|    if (line != NULL)
  ------------------
  |  Branch (492:9): [True: 0, False: 215]
  ------------------
  493|      0|        *line = es->err_line[i];
  494|    215|    if (func != NULL) {
  ------------------
  |  Branch (494:9): [True: 0, False: 215]
  ------------------
  495|      0|        *func = es->err_func[i];
  496|      0|        if (*func == NULL)
  ------------------
  |  Branch (496:13): [True: 0, False: 0]
  ------------------
  497|      0|            *func = "";
  498|      0|    }
  499|    215|    if (flags != NULL)
  ------------------
  |  Branch (499:9): [True: 0, False: 215]
  ------------------
  500|      0|        *flags = es->err_data_flags[i];
  501|    215|    if (data == NULL) {
  ------------------
  |  Branch (501:9): [True: 215, False: 0]
  ------------------
  502|    215|        if (g == EV_POP) {
  ------------------
  |  Branch (502:13): [True: 104, False: 111]
  ------------------
  503|    104|            err_clear_data(es, i, 0);
  504|    104|        }
  505|    215|    } else {
  506|      0|        *data = es->err_data[i];
  507|      0|        if (*data == NULL) {
  ------------------
  |  Branch (507:13): [True: 0, False: 0]
  ------------------
  508|      0|            *data = "";
  509|      0|            if (flags != NULL)
  ------------------
  |  Branch (509:17): [True: 0, False: 0]
  ------------------
  510|      0|                *flags = 0;
  511|      0|        }
  512|      0|    }
  513|    215|    return ret;
  514|    215|}
err.c:int_err_get_item:
  186|    268|{
  187|    268|    ERR_STRING_DATA *p = NULL;
  188|       |
  189|    268|    if (!CRYPTO_THREAD_read_lock(err_string_lock))
  ------------------
  |  Branch (189:9): [True: 0, False: 268]
  ------------------
  190|      0|        return NULL;
  191|    268|    p = lh_ERR_STRING_DATA_retrieve(int_error_hash, d);
  ------------------
  |  |  335|    268|#define lh_ERR_STRING_DATA_retrieve(lh, ptr) ((ERR_STRING_DATA *)OPENSSL_LH_retrieve(ossl_check_ERR_STRING_DATA_lh_type(lh), ossl_check_const_ERR_STRING_DATA_lh_plain_type(ptr)))
  ------------------
  192|    268|    CRYPTO_THREAD_unlock(err_string_lock);
  193|       |
  194|    268|    return p;
  195|    268|}

ossl_err_load_crypto_strings:
   49|      1|{
   50|      1|    if (0
  ------------------
  |  Branch (50:9): [Folded, False: 1]
  ------------------
   51|      1|#ifndef OPENSSL_NO_ERR
   52|      1|        || ossl_err_load_ERR_strings() == 0 /* include error strings for SYSerr */
  ------------------
  |  Branch (52:12): [True: 0, False: 1]
  ------------------
   53|      1|        || ossl_err_load_BN_strings() == 0
  ------------------
  |  Branch (53:12): [True: 0, False: 1]
  ------------------
   54|      1|        || ossl_err_load_RSA_strings() == 0
  ------------------
  |  Branch (54:12): [True: 0, False: 1]
  ------------------
   55|      1|#ifndef OPENSSL_NO_DH
   56|      1|        || ossl_err_load_DH_strings() == 0
  ------------------
  |  Branch (56:12): [True: 0, False: 1]
  ------------------
   57|      1|#endif
   58|      1|        || ossl_err_load_EVP_strings() == 0
  ------------------
  |  Branch (58:12): [True: 0, False: 1]
  ------------------
   59|      1|        || ossl_err_load_BUF_strings() == 0
  ------------------
  |  Branch (59:12): [True: 0, False: 1]
  ------------------
   60|      1|        || ossl_err_load_OBJ_strings() == 0
  ------------------
  |  Branch (60:12): [True: 0, False: 1]
  ------------------
   61|      1|        || ossl_err_load_PEM_strings() == 0
  ------------------
  |  Branch (61:12): [True: 0, False: 1]
  ------------------
   62|      1|#ifndef OPENSSL_NO_DSA
   63|      1|        || ossl_err_load_DSA_strings() == 0
  ------------------
  |  Branch (63:12): [True: 0, False: 1]
  ------------------
   64|      1|#endif
   65|      1|        || ossl_err_load_X509_strings() == 0
  ------------------
  |  Branch (65:12): [True: 0, False: 1]
  ------------------
   66|      1|        || ossl_err_load_ASN1_strings() == 0
  ------------------
  |  Branch (66:12): [True: 0, False: 1]
  ------------------
   67|      1|        || ossl_err_load_CONF_strings() == 0
  ------------------
  |  Branch (67:12): [True: 0, False: 1]
  ------------------
   68|      1|        || ossl_err_load_CRYPTO_strings() == 0
  ------------------
  |  Branch (68:12): [True: 0, False: 1]
  ------------------
   69|      1|#ifndef OPENSSL_NO_COMP
   70|      1|        || ossl_err_load_COMP_strings() == 0
  ------------------
  |  Branch (70:12): [True: 0, False: 1]
  ------------------
   71|      1|#endif
   72|      1|#ifndef OPENSSL_NO_EC
   73|      1|        || ossl_err_load_EC_strings() == 0
  ------------------
  |  Branch (73:12): [True: 0, False: 1]
  ------------------
   74|      1|#endif
   75|       |        /* skip ossl_err_load_SSL_strings() because it is not in this library */
   76|      1|        || ossl_err_load_BIO_strings() == 0
  ------------------
  |  Branch (76:12): [True: 0, False: 1]
  ------------------
   77|      1|        || ossl_err_load_PKCS7_strings() == 0
  ------------------
  |  Branch (77:12): [True: 0, False: 1]
  ------------------
   78|      1|        || ossl_err_load_X509V3_strings() == 0
  ------------------
  |  Branch (78:12): [True: 0, False: 1]
  ------------------
   79|      1|        || ossl_err_load_PKCS12_strings() == 0
  ------------------
  |  Branch (79:12): [True: 0, False: 1]
  ------------------
   80|      1|        || ossl_err_load_RAND_strings() == 0
  ------------------
  |  Branch (80:12): [True: 0, False: 1]
  ------------------
   81|      1|        || ossl_err_load_DSO_strings() == 0
  ------------------
  |  Branch (81:12): [True: 0, False: 1]
  ------------------
   82|      1|#ifndef OPENSSL_NO_TS
   83|      1|        || ossl_err_load_TS_strings() == 0
  ------------------
  |  Branch (83:12): [True: 0, False: 1]
  ------------------
   84|      1|#endif
   85|      1|#ifndef OPENSSL_NO_HTTP
   86|      1|        || ossl_err_load_HTTP_strings() == 0
  ------------------
  |  Branch (86:12): [True: 0, False: 1]
  ------------------
   87|      1|#endif
   88|      1|#ifndef OPENSSL_NO_OCSP
   89|      1|        || ossl_err_load_OCSP_strings() == 0
  ------------------
  |  Branch (89:12): [True: 0, False: 1]
  ------------------
   90|      1|#endif
   91|      1|        || ossl_err_load_UI_strings() == 0
  ------------------
  |  Branch (91:12): [True: 0, False: 1]
  ------------------
   92|      1|#ifndef OPENSSL_NO_CMS
   93|      1|        || ossl_err_load_CMS_strings() == 0
  ------------------
  |  Branch (93:12): [True: 0, False: 1]
  ------------------
   94|      1|#endif
   95|      1|#ifndef OPENSSL_NO_CRMF
   96|      1|        || ossl_err_load_CRMF_strings() == 0
  ------------------
  |  Branch (96:12): [True: 0, False: 1]
  ------------------
   97|      1|        || ossl_err_load_CMP_strings() == 0
  ------------------
  |  Branch (97:12): [True: 0, False: 1]
  ------------------
   98|      1|#endif
   99|      1|#ifndef OPENSSL_NO_CT
  100|      1|        || ossl_err_load_CT_strings() == 0
  ------------------
  |  Branch (100:12): [True: 0, False: 1]
  ------------------
  101|      1|#endif
  102|      1|        || ossl_err_load_ESS_strings() == 0
  ------------------
  |  Branch (102:12): [True: 0, False: 1]
  ------------------
  103|      1|        || ossl_err_load_ASYNC_strings() == 0
  ------------------
  |  Branch (103:12): [True: 0, False: 1]
  ------------------
  104|      1|#ifndef OPENSSL_NO_SM2
  105|      1|        || ossl_err_load_SM2_strings() == 0
  ------------------
  |  Branch (105:12): [True: 0, False: 1]
  ------------------
  106|      1|#endif
  107|      1|        || ossl_err_load_OSSL_STORE_strings() == 0
  ------------------
  |  Branch (107:12): [True: 0, False: 1]
  ------------------
  108|      1|        || ossl_err_load_PROP_strings() == 0
  ------------------
  |  Branch (108:12): [True: 0, False: 1]
  ------------------
  109|      1|        || ossl_err_load_PROV_strings() == 0
  ------------------
  |  Branch (109:12): [True: 0, False: 1]
  ------------------
  110|      1|#endif
  111|      1|    )
  112|      0|        return 0;
  113|       |
  114|      1|    return 1;
  115|      1|}

ERR_new:
   15|    642|{
   16|    642|    ERR_STATE *es;
   17|       |
   18|    642|    es = ossl_err_get_state_int();
   19|    642|    if (es == NULL)
  ------------------
  |  Branch (19:9): [True: 0, False: 642]
  ------------------
   20|      0|        return;
   21|       |
   22|       |    /* Allocate a slot */
   23|    642|    err_get_slot(es);
   24|    642|    err_clear(es, es->top, 0);
   25|    642|}
ERR_set_debug:
   28|    642|{
   29|    642|    ERR_STATE *es;
   30|       |
   31|    642|    es = ossl_err_get_state_int();
   32|    642|    if (es == NULL)
  ------------------
  |  Branch (32:9): [True: 0, False: 642]
  ------------------
   33|      0|        return;
   34|       |
   35|    642|    err_set_debug(es, es->top, file, line, func);
   36|    642|}
ERR_set_error:
   39|    642|{
   40|    642|    va_list args;
   41|       |
   42|    642|    va_start(args, fmt);
   43|    642|    ERR_vset_error(lib, reason, fmt, args);
   44|       |    va_end(args);
   45|    642|}
ERR_vset_error:
   48|    642|{
   49|    642|    ERR_STATE *es;
   50|    642|    char *buf = NULL;
   51|    642|    size_t buf_size = 0;
   52|    642|    unsigned long flags = 0;
   53|    642|    size_t i;
   54|       |
   55|    642|    es = ossl_err_get_state_int();
   56|    642|    if (es == NULL)
  ------------------
  |  Branch (56:9): [True: 0, False: 642]
  ------------------
   57|      0|        return;
   58|    642|    i = es->top;
   59|       |
   60|    642|    if (fmt != NULL) {
  ------------------
  |  Branch (60:9): [True: 318, False: 324]
  ------------------
   61|    318|        int printed_len = 0;
   62|    318|        char *rbuf = NULL;
   63|       |
   64|    318|        buf = es->err_data[i];
   65|    318|        buf_size = es->err_data_size[i];
   66|       |
   67|       |        /*
   68|       |         * To protect the string we just grabbed from tampering by other
   69|       |         * functions we may call, or to protect them from freeing a pointer
   70|       |         * that may no longer be valid at that point, we clear away the
   71|       |         * data pointer and the flags.  We will set them again at the end
   72|       |         * of this function.
   73|       |         */
   74|    318|        es->err_data[i] = NULL;
   75|    318|        es->err_data_flags[i] = 0;
   76|       |
   77|       |        /*
   78|       |         * Try to maximize the space available.  If that fails, we use what
   79|       |         * we have.
   80|       |         */
   81|    318|        if (buf_size < ERR_MAX_DATA_SIZE
  ------------------
  |  |  348|    636|#define ERR_MAX_DATA_SIZE 1024
  ------------------
  |  Branch (81:13): [True: 318, False: 0]
  ------------------
   82|    318|            && (rbuf = OPENSSL_realloc(buf, ERR_MAX_DATA_SIZE)) != NULL) {
  ------------------
  |  |  121|    318|    CRYPTO_realloc(addr, num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_realloc(addr, num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  |  Branch (82:16): [True: 318, False: 0]
  ------------------
   83|    318|            buf = rbuf;
   84|    318|            buf_size = ERR_MAX_DATA_SIZE;
  ------------------
  |  |  348|    318|#define ERR_MAX_DATA_SIZE 1024
  ------------------
   85|    318|        }
   86|       |
   87|    318|        if (buf != NULL) {
  ------------------
  |  Branch (87:13): [True: 318, False: 0]
  ------------------
   88|    318|            printed_len = BIO_vsnprintf(buf, buf_size, fmt, args);
   89|    318|        }
   90|    318|        if (printed_len < 0)
  ------------------
  |  Branch (90:13): [True: 0, False: 318]
  ------------------
   91|      0|            printed_len = 0;
   92|    318|        if (buf != NULL)
  ------------------
  |  Branch (92:13): [True: 318, False: 0]
  ------------------
   93|    318|            buf[printed_len] = '\0';
   94|       |
   95|       |        /*
   96|       |         * Try to reduce the size, but only if we maximized above.  If that
   97|       |         * fails, we keep what we have.
   98|       |         * (According to documentation, realloc leaves the old buffer untouched
   99|       |         * if it fails)
  100|       |         */
  101|    318|        if ((rbuf = OPENSSL_realloc(buf, printed_len + 1)) != NULL) {
  ------------------
  |  |  121|    318|    CRYPTO_realloc(addr, num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_realloc(addr, num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  |  Branch (101:13): [True: 318, False: 0]
  ------------------
  102|    318|            buf = rbuf;
  103|    318|            buf_size = printed_len + 1;
  104|    318|            buf[printed_len] = '\0';
  105|    318|        }
  106|       |
  107|    318|        if (buf != NULL)
  ------------------
  |  Branch (107:13): [True: 318, False: 0]
  ------------------
  108|    318|            flags = ERR_TXT_MALLOCED | ERR_TXT_STRING;
  ------------------
  |  |   50|    318|#define ERR_TXT_MALLOCED 0x01
  ------------------
                          flags = ERR_TXT_MALLOCED | ERR_TXT_STRING;
  ------------------
  |  |   51|    318|#define ERR_TXT_STRING 0x02
  ------------------
  109|    318|    }
  110|       |
  111|    642|    err_clear_data(es, es->top, 0);
  112|    642|    err_set_error(es, es->top, lib, reason);
  113|    642|    if (fmt != NULL)
  ------------------
  |  Branch (113:9): [True: 318, False: 324]
  ------------------
  114|    318|        err_set_data(es, es->top, buf, buf_size, flags);
  115|    642|}

err.c:err_clear_data:
   39|    104|{
   40|    104|    if (es->err_data_flags[i] & ERR_TXT_MALLOCED) {
  ------------------
  |  |   50|    104|#define ERR_TXT_MALLOCED 0x01
  ------------------
  |  Branch (40:9): [True: 103, False: 1]
  ------------------
   41|    103|        if (deall) {
  ------------------
  |  Branch (41:13): [True: 0, False: 103]
  ------------------
   42|      0|            OPENSSL_free(es->err_data[i]);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   43|      0|            es->err_data[i] = NULL;
   44|      0|            es->err_data_size[i] = 0;
   45|      0|            es->err_data_flags[i] = 0;
   46|    103|        } else if (es->err_data[i] != NULL) {
  ------------------
  |  Branch (46:20): [True: 103, False: 0]
  ------------------
   47|    103|            es->err_data[i][0] = '\0';
   48|    103|            es->err_data_flags[i] = ERR_TXT_MALLOCED;
  ------------------
  |  |   50|    103|#define ERR_TXT_MALLOCED 0x01
  ------------------
   49|    103|        }
   50|    103|    } else {
   51|       |        es->err_data[i] = NULL;
   52|      1|        es->err_data_size[i] = 0;
   53|      1|        es->err_data_flags[i] = 0;
   54|      1|    }
   55|    104|}
err_blocks.c:err_get_slot:
   32|    642|{
   33|    642|    es->top = (es->top + 1) % ERR_NUM_ERRORS;
  ------------------
  |  |   14|    642|#define ERR_NUM_ERRORS 16
  ------------------
   34|    642|    if (es->top == es->bottom)
  ------------------
  |  Branch (34:9): [True: 521, False: 121]
  ------------------
   35|    521|        es->bottom = (es->bottom + 1) % ERR_NUM_ERRORS;
  ------------------
  |  |   14|    521|#define ERR_NUM_ERRORS 16
  ------------------
   36|    642|}
err_blocks.c:err_clear:
  103|    642|{
  104|    642|    err_clear_data(es, i, (deall));
  105|    642|    es->err_marks[i] = 0;
  106|    642|    es->err_flags[i] = 0;
  107|    642|    es->err_buffer[i] = 0;
  108|    642|    es->err_line[i] = -1;
  109|    642|    OPENSSL_free(es->err_file[i]);
  ------------------
  |  |  132|    642|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  110|    642|    es->err_file[i] = NULL;
  111|    642|    OPENSSL_free(es->err_func[i]);
  ------------------
  |  |  132|    642|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  112|       |    es->err_func[i] = NULL;
  113|    642|}
err_blocks.c:err_set_debug:
   68|    642|{
   69|       |    /*
   70|       |     * We dup the file and fn strings because they may be provider owned. If the
   71|       |     * provider gets unloaded, they may not be valid anymore.
   72|       |     */
   73|    642|    OPENSSL_free(es->err_file[i]);
  ------------------
  |  |  132|    642|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   74|    642|    if (file == NULL || file[0] == '\0')
  ------------------
  |  Branch (74:9): [True: 0, False: 642]
  |  Branch (74:25): [True: 0, False: 642]
  ------------------
   75|      0|        es->err_file[i] = NULL;
   76|    642|    else if ((es->err_file[i] = CRYPTO_malloc(strlen(file) + 1,
  ------------------
  |  Branch (76:14): [True: 642, False: 0]
  ------------------
   77|    642|                  NULL, 0))
   78|    642|        != NULL)
   79|       |        /* We cannot use OPENSSL_strdup due to possible recursion */
   80|    642|        strcpy(es->err_file[i], file);
   81|       |
   82|    642|    es->err_line[i] = line;
   83|    642|    OPENSSL_free(es->err_func[i]);
  ------------------
  |  |  132|    642|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   84|    642|    if (fn == NULL || fn[0] == '\0')
  ------------------
  |  Branch (84:9): [True: 0, False: 642]
  |  Branch (84:23): [True: 0, False: 642]
  ------------------
   85|      0|        es->err_func[i] = NULL;
   86|    642|    else if ((es->err_func[i] = CRYPTO_malloc(strlen(fn) + 1,
  ------------------
  |  Branch (86:14): [True: 642, False: 0]
  ------------------
   87|    642|                  NULL, 0))
   88|    642|        != NULL)
   89|    642|        strcpy(es->err_func[i], fn);
   90|    642|}
err_blocks.c:err_clear_data:
   39|  1.28k|{
   40|  1.28k|    if (es->err_data_flags[i] & ERR_TXT_MALLOCED) {
  ------------------
  |  |   50|  1.28k|#define ERR_TXT_MALLOCED 0x01
  ------------------
  |  Branch (40:9): [True: 926, False: 358]
  ------------------
   41|    926|        if (deall) {
  ------------------
  |  Branch (41:13): [True: 0, False: 926]
  ------------------
   42|      0|            OPENSSL_free(es->err_data[i]);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   43|      0|            es->err_data[i] = NULL;
   44|      0|            es->err_data_size[i] = 0;
   45|      0|            es->err_data_flags[i] = 0;
   46|    926|        } else if (es->err_data[i] != NULL) {
  ------------------
  |  Branch (46:20): [True: 926, False: 0]
  ------------------
   47|    926|            es->err_data[i][0] = '\0';
   48|    926|            es->err_data_flags[i] = ERR_TXT_MALLOCED;
  ------------------
  |  |   50|    926|#define ERR_TXT_MALLOCED 0x01
  ------------------
   49|    926|        }
   50|    926|    } else {
   51|       |        es->err_data[i] = NULL;
   52|    358|        es->err_data_size[i] = 0;
   53|    358|        es->err_data_flags[i] = 0;
   54|    358|    }
   55|  1.28k|}
err_blocks.c:err_set_error:
   59|    642|{
   60|    642|    es->err_buffer[i] = lib == ERR_LIB_SYS
  ------------------
  |  |   55|    642|#define ERR_LIB_SYS 2
  ------------------
  |  Branch (60:25): [True: 110, False: 532]
  ------------------
   61|    642|        ? (unsigned int)(ERR_SYSTEM_FLAG | reason)
  ------------------
  |  |  201|    110|#define ERR_SYSTEM_FLAG ((unsigned int)INT_MAX + 1)
  ------------------
   62|    642|        : ERR_PACK(lib, 0, reason);
  ------------------
  |  |  262|  1.17k|    ((((unsigned long)(lib) & ERR_LIB_MASK) << ERR_LIB_OFFSET) | (((unsigned long)(reason) & ERR_REASON_MASK)))
  |  |  ------------------
  |  |  |  |  210|    532|#define ERR_LIB_MASK 0xFF
  |  |  ------------------
  |  |                   ((((unsigned long)(lib) & ERR_LIB_MASK) << ERR_LIB_OFFSET) | (((unsigned long)(reason) & ERR_REASON_MASK)))
  |  |  ------------------
  |  |  |  |  209|    532|#define ERR_LIB_OFFSET 23L
  |  |  ------------------
  |  |                   ((((unsigned long)(lib) & ERR_LIB_MASK) << ERR_LIB_OFFSET) | (((unsigned long)(reason) & ERR_REASON_MASK)))
  |  |  ------------------
  |  |  |  |  213|    532|#define ERR_REASON_MASK 0X7FFFFF
  |  |  ------------------
  ------------------
   63|    642|}
err_blocks.c:err_set_data:
   94|    318|{
   95|    318|    if ((es->err_data_flags[i] & ERR_TXT_MALLOCED) != 0)
  ------------------
  |  |   50|    318|#define ERR_TXT_MALLOCED 0x01
  ------------------
  |  Branch (95:9): [True: 0, False: 318]
  ------------------
   96|      0|        OPENSSL_free(es->err_data[i]);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   97|    318|    es->err_data[i] = data;
   98|    318|    es->err_data_size[i] = datasz;
   99|    318|    es->err_data_flags[i] = flags;
  100|    318|}
err_mark.c:err_clear:
  103|      3|{
  104|      3|    err_clear_data(es, i, (deall));
  105|      3|    es->err_marks[i] = 0;
  106|      3|    es->err_flags[i] = 0;
  107|      3|    es->err_buffer[i] = 0;
  108|      3|    es->err_line[i] = -1;
  109|      3|    OPENSSL_free(es->err_file[i]);
  ------------------
  |  |  132|      3|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  110|      3|    es->err_file[i] = NULL;
  111|      3|    OPENSSL_free(es->err_func[i]);
  ------------------
  |  |  132|      3|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  112|       |    es->err_func[i] = NULL;
  113|      3|}
err_mark.c:err_clear_data:
   39|      3|{
   40|      3|    if (es->err_data_flags[i] & ERR_TXT_MALLOCED) {
  ------------------
  |  |   50|      3|#define ERR_TXT_MALLOCED 0x01
  ------------------
  |  Branch (40:9): [True: 1, False: 2]
  ------------------
   41|      1|        if (deall) {
  ------------------
  |  Branch (41:13): [True: 0, False: 1]
  ------------------
   42|      0|            OPENSSL_free(es->err_data[i]);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   43|      0|            es->err_data[i] = NULL;
   44|      0|            es->err_data_size[i] = 0;
   45|      0|            es->err_data_flags[i] = 0;
   46|      1|        } else if (es->err_data[i] != NULL) {
  ------------------
  |  Branch (46:20): [True: 1, False: 0]
  ------------------
   47|      1|            es->err_data[i][0] = '\0';
   48|      1|            es->err_data_flags[i] = ERR_TXT_MALLOCED;
  ------------------
  |  |   50|      1|#define ERR_TXT_MALLOCED 0x01
  ------------------
   49|      1|        }
   50|      2|    } else {
   51|       |        es->err_data[i] = NULL;
   52|      2|        es->err_data_size[i] = 0;
   53|      2|        es->err_data_flags[i] = 0;
   54|      2|    }
   55|      3|}

ERR_set_mark:
   14|    116|{
   15|    116|    ERR_STATE *es;
   16|       |
   17|    116|    es = ossl_err_get_state_int();
   18|    116|    if (es == NULL)
  ------------------
  |  Branch (18:9): [True: 0, False: 116]
  ------------------
   19|      0|        return 0;
   20|       |
   21|    116|    if (es->bottom == es->top)
  ------------------
  |  Branch (21:9): [True: 8, False: 108]
  ------------------
   22|      8|        return 0;
   23|    108|    es->err_marks[es->top]++;
   24|    108|    return 1;
   25|    116|}
ERR_pop_to_mark:
   41|      3|{
   42|      3|    ERR_STATE *es;
   43|       |
   44|      3|    es = ossl_err_get_state_int();
   45|      3|    if (es == NULL)
  ------------------
  |  Branch (45:9): [True: 0, False: 3]
  ------------------
   46|      0|        return 0;
   47|       |
   48|      6|    while (es->bottom != es->top
  ------------------
  |  Branch (48:12): [True: 3, False: 3]
  ------------------
   49|      3|        && es->err_marks[es->top] == 0) {
  ------------------
  |  Branch (49:12): [True: 3, False: 0]
  ------------------
   50|      3|        err_clear(es, es->top, 0);
   51|      3|        es->top = es->top > 0 ? es->top - 1 : ERR_NUM_ERRORS - 1;
  ------------------
  |  |   14|      0|#define ERR_NUM_ERRORS 16
  ------------------
  |  Branch (51:19): [True: 3, False: 0]
  ------------------
   52|      3|    }
   53|       |
   54|      3|    if (es->bottom == es->top)
  ------------------
  |  Branch (54:9): [True: 3, False: 0]
  ------------------
   55|      3|        return 0;
   56|      0|    es->err_marks[es->top]--;
   57|      0|    return 1;
   58|      3|}
ERR_count_to_mark:
   61|      1|{
   62|      1|    ERR_STATE *es;
   63|      1|    int count = 0, top;
   64|       |
   65|      1|    es = ossl_err_get_state_int();
   66|      1|    if (es == NULL)
  ------------------
  |  Branch (66:9): [True: 0, False: 1]
  ------------------
   67|      0|        return 0;
   68|       |
   69|      1|    top = es->top;
   70|      1|    while (es->bottom != top
  ------------------
  |  Branch (70:12): [True: 0, False: 1]
  ------------------
   71|      0|        && es->err_marks[top] == 0) {
  ------------------
  |  Branch (71:12): [True: 0, False: 0]
  ------------------
   72|      0|        ++count;
   73|      0|        top = top > 0 ? top - 1 : ERR_NUM_ERRORS - 1;
  ------------------
  |  |   14|      0|#define ERR_NUM_ERRORS 16
  ------------------
  |  Branch (73:15): [True: 0, False: 0]
  ------------------
   74|      0|    }
   75|       |
   76|      1|    return count;
   77|      1|}
ERR_clear_last_mark:
   80|    113|{
   81|    113|    ERR_STATE *es;
   82|    113|    int top;
   83|       |
   84|    113|    es = ossl_err_get_state_int();
   85|    113|    if (es == NULL)
  ------------------
  |  Branch (85:9): [True: 0, False: 113]
  ------------------
   86|      0|        return 0;
   87|       |
   88|    113|    top = es->top;
   89|    440|    while (es->bottom != top
  ------------------
  |  Branch (89:12): [True: 435, False: 5]
  ------------------
   90|    435|        && es->err_marks[top] == 0) {
  ------------------
  |  Branch (90:12): [True: 327, False: 108]
  ------------------
   91|    327|        top = top > 0 ? top - 1 : ERR_NUM_ERRORS - 1;
  ------------------
  |  |   14|     17|#define ERR_NUM_ERRORS 16
  ------------------
  |  Branch (91:15): [True: 310, False: 17]
  ------------------
   92|    327|    }
   93|       |
   94|    113|    if (es->bottom == top)
  ------------------
  |  Branch (94:9): [True: 5, False: 108]
  ------------------
   95|      5|        return 0;
   96|    108|    es->err_marks[top]--;
   97|    108|    return 1;
   98|    113|}

OSSL_ERR_STATE_new:
   20|      1|{
   21|       |    return CRYPTO_zalloc(sizeof(ERR_STATE), NULL, 0);
   22|      1|}

ossl_err_load_ESS_strings:
   42|      1|{
   43|      1|#ifndef OPENSSL_NO_ERR
   44|      1|    if (ERR_reason_error_string(ESS_str_reasons[0].error) == NULL)
  ------------------
  |  Branch (44:9): [True: 1, False: 0]
  ------------------
   45|      1|        ERR_load_strings_const(ESS_str_reasons);
   46|      1|#endif
   47|      1|    return 1;
   48|      1|}

openssl_add_all_ciphers_int:
   18|      1|{
   19|       |
   20|      1|#ifndef OPENSSL_NO_DES
   21|      1|    EVP_add_cipher(EVP_des_cfb());
  ------------------
  |  |  901|      1|#define EVP_des_cfb EVP_des_cfb64
  ------------------
   22|      1|    EVP_add_cipher(EVP_des_cfb1());
   23|      1|    EVP_add_cipher(EVP_des_cfb8());
   24|      1|    EVP_add_cipher(EVP_des_ede_cfb());
  ------------------
  |  |  905|      1|#define EVP_des_ede_cfb EVP_des_ede_cfb64
  ------------------
   25|      1|    EVP_add_cipher(EVP_des_ede3_cfb());
  ------------------
  |  |  907|      1|#define EVP_des_ede3_cfb EVP_des_ede3_cfb64
  ------------------
   26|      1|    EVP_add_cipher(EVP_des_ede3_cfb1());
   27|      1|    EVP_add_cipher(EVP_des_ede3_cfb8());
   28|       |
   29|      1|    EVP_add_cipher(EVP_des_ofb());
   30|      1|    EVP_add_cipher(EVP_des_ede_ofb());
   31|      1|    EVP_add_cipher(EVP_des_ede3_ofb());
   32|       |
   33|      1|    EVP_add_cipher(EVP_desx_cbc());
   34|      1|    EVP_add_cipher_alias(SN_desx_cbc, "DESX");
  ------------------
  |  |  601|      1|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      1|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      1|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
   35|      1|    EVP_add_cipher_alias(SN_desx_cbc, "desx");
  ------------------
  |  |  601|      1|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      1|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      1|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
   36|       |
   37|      1|    EVP_add_cipher(EVP_des_cbc());
   38|      1|    EVP_add_cipher_alias(SN_des_cbc, "DES");
  ------------------
  |  |  601|      1|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      1|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      1|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
   39|      1|    EVP_add_cipher_alias(SN_des_cbc, "des");
  ------------------
  |  |  601|      1|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      1|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      1|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
   40|      1|    EVP_add_cipher(EVP_des_ede_cbc());
   41|      1|    EVP_add_cipher(EVP_des_ede3_cbc());
   42|      1|    EVP_add_cipher_alias(SN_des_ede3_cbc, "DES3");
  ------------------
  |  |  601|      1|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      1|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      1|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
   43|      1|    EVP_add_cipher_alias(SN_des_ede3_cbc, "des3");
  ------------------
  |  |  601|      1|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      1|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      1|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
   44|       |
   45|      1|    EVP_add_cipher(EVP_des_ecb());
   46|      1|    EVP_add_cipher(EVP_des_ede());
   47|      1|    EVP_add_cipher_alias(SN_des_ede_ecb, "DES-EDE-ECB");
  ------------------
  |  |  601|      1|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      1|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      1|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
   48|      1|    EVP_add_cipher_alias(SN_des_ede_ecb, "des-ede-ecb");
  ------------------
  |  |  601|      1|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      1|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      1|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
   49|      1|    EVP_add_cipher(EVP_des_ede3());
   50|      1|    EVP_add_cipher_alias(SN_des_ede3_ecb, "DES-EDE3-ECB");
  ------------------
  |  |  601|      1|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      1|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      1|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
   51|      1|    EVP_add_cipher_alias(SN_des_ede3_ecb, "des-ede3-ecb");
  ------------------
  |  |  601|      1|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      1|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      1|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
   52|      1|    EVP_add_cipher(EVP_des_ede3_wrap());
   53|      1|    EVP_add_cipher_alias(SN_id_smime_alg_CMS3DESwrap, "des3-wrap");
  ------------------
  |  |  601|      1|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      1|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      1|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
   54|      1|#endif
   55|       |
   56|      1|#ifndef OPENSSL_NO_RC4
   57|      1|    EVP_add_cipher(EVP_rc4());
   58|      1|    EVP_add_cipher(EVP_rc4_40());
   59|      1|#ifndef OPENSSL_NO_MD5
   60|      1|    EVP_add_cipher(EVP_rc4_hmac_md5());
   61|      1|#endif
   62|      1|#endif
   63|       |
   64|      1|#ifndef OPENSSL_NO_IDEA
   65|      1|    EVP_add_cipher(EVP_idea_ecb());
   66|      1|    EVP_add_cipher(EVP_idea_cfb());
  ------------------
  |  |  934|      1|#define EVP_idea_cfb EVP_idea_cfb64
  ------------------
   67|      1|    EVP_add_cipher(EVP_idea_ofb());
   68|      1|    EVP_add_cipher(EVP_idea_cbc());
   69|      1|    EVP_add_cipher_alias(SN_idea_cbc, "IDEA");
  ------------------
  |  |  601|      1|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      1|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      1|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
   70|      1|    EVP_add_cipher_alias(SN_idea_cbc, "idea");
  ------------------
  |  |  601|      1|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      1|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      1|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
   71|      1|#endif
   72|       |
   73|      1|#ifndef OPENSSL_NO_SEED
   74|      1|    EVP_add_cipher(EVP_seed_ecb());
   75|      1|    EVP_add_cipher(EVP_seed_cfb());
  ------------------
  |  | 1088|      1|#define EVP_seed_cfb EVP_seed_cfb128
  ------------------
   76|      1|    EVP_add_cipher(EVP_seed_ofb());
   77|      1|    EVP_add_cipher(EVP_seed_cbc());
   78|      1|    EVP_add_cipher_alias(SN_seed_cbc, "SEED");
  ------------------
  |  |  601|      1|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      1|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      1|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
   79|      1|    EVP_add_cipher_alias(SN_seed_cbc, "seed");
  ------------------
  |  |  601|      1|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      1|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      1|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
   80|      1|#endif
   81|       |
   82|      1|#ifndef OPENSSL_NO_SM4
   83|      1|    EVP_add_cipher(EVP_sm4_ecb());
   84|      1|    EVP_add_cipher(EVP_sm4_cbc());
   85|      1|    EVP_add_cipher(EVP_sm4_cfb());
  ------------------
  |  | 1096|      1|#define EVP_sm4_cfb EVP_sm4_cfb128
  ------------------
   86|      1|    EVP_add_cipher(EVP_sm4_ofb());
   87|      1|    EVP_add_cipher(EVP_sm4_ctr());
   88|      1|    EVP_add_cipher_alias(SN_sm4_cbc, "SM4");
  ------------------
  |  |  601|      1|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      1|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      1|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
   89|      1|    EVP_add_cipher_alias(SN_sm4_cbc, "sm4");
  ------------------
  |  |  601|      1|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      1|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      1|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
   90|      1|#endif
   91|       |
   92|      1|#ifndef OPENSSL_NO_RC2
   93|      1|    EVP_add_cipher(EVP_rc2_ecb());
   94|      1|    EVP_add_cipher(EVP_rc2_cfb());
  ------------------
  |  |  944|      1|#define EVP_rc2_cfb EVP_rc2_cfb64
  ------------------
   95|      1|    EVP_add_cipher(EVP_rc2_ofb());
   96|      1|    EVP_add_cipher(EVP_rc2_cbc());
   97|      1|    EVP_add_cipher(EVP_rc2_40_cbc());
   98|      1|    EVP_add_cipher(EVP_rc2_64_cbc());
   99|      1|    EVP_add_cipher_alias(SN_rc2_cbc, "RC2");
  ------------------
  |  |  601|      1|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      1|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      1|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  100|      1|    EVP_add_cipher_alias(SN_rc2_cbc, "rc2");
  ------------------
  |  |  601|      1|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      1|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      1|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  101|      1|    EVP_add_cipher_alias(SN_rc2_cbc, "rc2-128");
  ------------------
  |  |  601|      1|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      1|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      1|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  102|      1|    EVP_add_cipher_alias(SN_rc2_64_cbc, "rc2-64");
  ------------------
  |  |  601|      1|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      1|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      1|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  103|      1|    EVP_add_cipher_alias(SN_rc2_40_cbc, "rc2-40");
  ------------------
  |  |  601|      1|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      1|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      1|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  104|      1|#endif
  105|       |
  106|      1|#ifndef OPENSSL_NO_BF
  107|      1|    EVP_add_cipher(EVP_bf_ecb());
  108|      1|    EVP_add_cipher(EVP_bf_cfb());
  ------------------
  |  |  951|      1|#define EVP_bf_cfb EVP_bf_cfb64
  ------------------
  109|      1|    EVP_add_cipher(EVP_bf_ofb());
  110|      1|    EVP_add_cipher(EVP_bf_cbc());
  111|      1|    EVP_add_cipher_alias(SN_bf_cbc, "BF");
  ------------------
  |  |  601|      1|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      1|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      1|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  112|      1|    EVP_add_cipher_alias(SN_bf_cbc, "bf");
  ------------------
  |  |  601|      1|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      1|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      1|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  113|      1|    EVP_add_cipher_alias(SN_bf_cbc, "blowfish");
  ------------------
  |  |  601|      1|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      1|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      1|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  114|      1|#endif
  115|       |
  116|      1|#ifndef OPENSSL_NO_CAST
  117|      1|    EVP_add_cipher(EVP_cast5_ecb());
  118|      1|    EVP_add_cipher(EVP_cast5_cfb());
  ------------------
  |  |  958|      1|#define EVP_cast5_cfb EVP_cast5_cfb64
  ------------------
  119|      1|    EVP_add_cipher(EVP_cast5_ofb());
  120|      1|    EVP_add_cipher(EVP_cast5_cbc());
  121|      1|    EVP_add_cipher_alias(SN_cast5_cbc, "CAST");
  ------------------
  |  |  601|      1|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      1|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      1|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  122|      1|    EVP_add_cipher_alias(SN_cast5_cbc, "cast");
  ------------------
  |  |  601|      1|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      1|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      1|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  123|      1|    EVP_add_cipher_alias(SN_cast5_cbc, "CAST-cbc");
  ------------------
  |  |  601|      1|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      1|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      1|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  124|      1|    EVP_add_cipher_alias(SN_cast5_cbc, "cast-cbc");
  ------------------
  |  |  601|      1|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      1|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      1|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  125|      1|#endif
  126|       |
  127|      1|#ifndef OPENSSL_NO_RC5
  128|      1|    EVP_add_cipher(EVP_rc5_32_12_16_ecb());
  129|      1|    EVP_add_cipher(EVP_rc5_32_12_16_cfb());
  ------------------
  |  |  965|      1|#define EVP_rc5_32_12_16_cfb EVP_rc5_32_12_16_cfb64
  ------------------
  130|      1|    EVP_add_cipher(EVP_rc5_32_12_16_ofb());
  131|      1|    EVP_add_cipher(EVP_rc5_32_12_16_cbc());
  132|      1|    EVP_add_cipher_alias(SN_rc5_cbc, "rc5");
  ------------------
  |  |  601|      1|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      1|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      1|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  133|      1|    EVP_add_cipher_alias(SN_rc5_cbc, "RC5");
  ------------------
  |  |  601|      1|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      1|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      1|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  134|      1|#endif
  135|       |
  136|      1|    EVP_add_cipher(EVP_aes_128_ecb());
  137|      1|    EVP_add_cipher(EVP_aes_128_cbc());
  138|      1|    EVP_add_cipher(EVP_aes_128_cfb());
  ------------------
  |  |  973|      1|#define EVP_aes_128_cfb EVP_aes_128_cfb128
  ------------------
  139|      1|    EVP_add_cipher(EVP_aes_128_cfb1());
  140|      1|    EVP_add_cipher(EVP_aes_128_cfb8());
  141|      1|    EVP_add_cipher(EVP_aes_128_ofb());
  142|      1|    EVP_add_cipher(EVP_aes_128_ctr());
  143|      1|    EVP_add_cipher(EVP_aes_128_gcm());
  144|      1|#ifndef OPENSSL_NO_OCB
  145|      1|    EVP_add_cipher(EVP_aes_128_ocb());
  146|      1|#endif
  147|      1|    EVP_add_cipher(EVP_aes_128_xts());
  148|      1|    EVP_add_cipher(EVP_aes_128_ccm());
  149|      1|    EVP_add_cipher(EVP_aes_128_wrap());
  150|      1|    EVP_add_cipher_alias(SN_id_aes128_wrap, "aes128-wrap");
  ------------------
  |  |  601|      1|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      1|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      1|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  151|      1|    EVP_add_cipher(EVP_aes_128_wrap_pad());
  152|      1|    EVP_add_cipher_alias(SN_id_aes128_wrap_pad, "aes128-wrap-pad");
  ------------------
  |  |  601|      1|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      1|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      1|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  153|      1|    EVP_add_cipher_alias(SN_aes_128_cbc, "AES128");
  ------------------
  |  |  601|      1|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      1|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      1|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  154|      1|    EVP_add_cipher_alias(SN_aes_128_cbc, "aes128");
  ------------------
  |  |  601|      1|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      1|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      1|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  155|      1|    EVP_add_cipher(EVP_aes_192_ecb());
  156|      1|    EVP_add_cipher(EVP_aes_192_cbc());
  157|      1|    EVP_add_cipher(EVP_aes_192_cfb());
  ------------------
  |  |  989|      1|#define EVP_aes_192_cfb EVP_aes_192_cfb128
  ------------------
  158|      1|    EVP_add_cipher(EVP_aes_192_cfb1());
  159|      1|    EVP_add_cipher(EVP_aes_192_cfb8());
  160|      1|    EVP_add_cipher(EVP_aes_192_ofb());
  161|      1|    EVP_add_cipher(EVP_aes_192_ctr());
  162|      1|    EVP_add_cipher(EVP_aes_192_gcm());
  163|      1|#ifndef OPENSSL_NO_OCB
  164|      1|    EVP_add_cipher(EVP_aes_192_ocb());
  165|      1|#endif
  166|      1|    EVP_add_cipher(EVP_aes_192_ccm());
  167|      1|    EVP_add_cipher(EVP_aes_192_wrap());
  168|      1|    EVP_add_cipher_alias(SN_id_aes192_wrap, "aes192-wrap");
  ------------------
  |  |  601|      1|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      1|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      1|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  169|      1|    EVP_add_cipher(EVP_aes_192_wrap_pad());
  170|      1|    EVP_add_cipher_alias(SN_id_aes192_wrap_pad, "aes192-wrap-pad");
  ------------------
  |  |  601|      1|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      1|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      1|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  171|      1|    EVP_add_cipher_alias(SN_aes_192_cbc, "AES192");
  ------------------
  |  |  601|      1|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      1|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      1|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  172|      1|    EVP_add_cipher_alias(SN_aes_192_cbc, "aes192");
  ------------------
  |  |  601|      1|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      1|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      1|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  173|      1|    EVP_add_cipher(EVP_aes_256_ecb());
  174|      1|    EVP_add_cipher(EVP_aes_256_cbc());
  175|      1|    EVP_add_cipher(EVP_aes_256_cfb());
  ------------------
  |  | 1004|      1|#define EVP_aes_256_cfb EVP_aes_256_cfb128
  ------------------
  176|      1|    EVP_add_cipher(EVP_aes_256_cfb1());
  177|      1|    EVP_add_cipher(EVP_aes_256_cfb8());
  178|      1|    EVP_add_cipher(EVP_aes_256_ofb());
  179|      1|    EVP_add_cipher(EVP_aes_256_ctr());
  180|      1|    EVP_add_cipher(EVP_aes_256_gcm());
  181|      1|#ifndef OPENSSL_NO_OCB
  182|      1|    EVP_add_cipher(EVP_aes_256_ocb());
  183|      1|#endif
  184|      1|    EVP_add_cipher(EVP_aes_256_xts());
  185|      1|    EVP_add_cipher(EVP_aes_256_ccm());
  186|      1|    EVP_add_cipher(EVP_aes_256_wrap());
  187|      1|    EVP_add_cipher_alias(SN_id_aes256_wrap, "aes256-wrap");
  ------------------
  |  |  601|      1|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      1|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      1|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  188|      1|    EVP_add_cipher(EVP_aes_256_wrap_pad());
  189|      1|    EVP_add_cipher_alias(SN_id_aes256_wrap_pad, "aes256-wrap-pad");
  ------------------
  |  |  601|      1|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      1|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      1|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  190|      1|    EVP_add_cipher_alias(SN_aes_256_cbc, "AES256");
  ------------------
  |  |  601|      1|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      1|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      1|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  191|      1|    EVP_add_cipher_alias(SN_aes_256_cbc, "aes256");
  ------------------
  |  |  601|      1|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      1|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      1|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  192|      1|    EVP_add_cipher(EVP_aes_128_cbc_hmac_sha1());
  193|      1|    EVP_add_cipher(EVP_aes_256_cbc_hmac_sha1());
  194|      1|    EVP_add_cipher(EVP_aes_128_cbc_hmac_sha256());
  195|      1|    EVP_add_cipher(EVP_aes_256_cbc_hmac_sha256());
  196|      1|#ifndef OPENSSL_NO_ARIA
  197|      1|    EVP_add_cipher(EVP_aria_128_ecb());
  198|      1|    EVP_add_cipher(EVP_aria_128_cbc());
  199|      1|    EVP_add_cipher(EVP_aria_128_cfb());
  ------------------
  |  | 1025|      1|#define EVP_aria_128_cfb EVP_aria_128_cfb128
  ------------------
  200|      1|    EVP_add_cipher(EVP_aria_128_cfb1());
  201|      1|    EVP_add_cipher(EVP_aria_128_cfb8());
  202|      1|    EVP_add_cipher(EVP_aria_128_ctr());
  203|      1|    EVP_add_cipher(EVP_aria_128_ofb());
  204|      1|    EVP_add_cipher(EVP_aria_128_gcm());
  205|      1|    EVP_add_cipher(EVP_aria_128_ccm());
  206|      1|    EVP_add_cipher_alias(SN_aria_128_cbc, "ARIA128");
  ------------------
  |  |  601|      1|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      1|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      1|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  207|      1|    EVP_add_cipher_alias(SN_aria_128_cbc, "aria128");
  ------------------
  |  |  601|      1|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      1|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      1|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  208|      1|    EVP_add_cipher(EVP_aria_192_ecb());
  209|      1|    EVP_add_cipher(EVP_aria_192_cbc());
  210|      1|    EVP_add_cipher(EVP_aria_192_cfb());
  ------------------
  |  | 1035|      1|#define EVP_aria_192_cfb EVP_aria_192_cfb128
  ------------------
  211|      1|    EVP_add_cipher(EVP_aria_192_cfb1());
  212|      1|    EVP_add_cipher(EVP_aria_192_cfb8());
  213|      1|    EVP_add_cipher(EVP_aria_192_ctr());
  214|      1|    EVP_add_cipher(EVP_aria_192_ofb());
  215|      1|    EVP_add_cipher(EVP_aria_192_gcm());
  216|      1|    EVP_add_cipher(EVP_aria_192_ccm());
  217|      1|    EVP_add_cipher_alias(SN_aria_192_cbc, "ARIA192");
  ------------------
  |  |  601|      1|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      1|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      1|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  218|      1|    EVP_add_cipher_alias(SN_aria_192_cbc, "aria192");
  ------------------
  |  |  601|      1|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      1|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      1|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  219|      1|    EVP_add_cipher(EVP_aria_256_ecb());
  220|      1|    EVP_add_cipher(EVP_aria_256_cbc());
  221|      1|    EVP_add_cipher(EVP_aria_256_cfb());
  ------------------
  |  | 1045|      1|#define EVP_aria_256_cfb EVP_aria_256_cfb128
  ------------------
  222|      1|    EVP_add_cipher(EVP_aria_256_cfb1());
  223|      1|    EVP_add_cipher(EVP_aria_256_cfb8());
  224|      1|    EVP_add_cipher(EVP_aria_256_ctr());
  225|      1|    EVP_add_cipher(EVP_aria_256_ofb());
  226|      1|    EVP_add_cipher(EVP_aria_256_gcm());
  227|      1|    EVP_add_cipher(EVP_aria_256_ccm());
  228|      1|    EVP_add_cipher_alias(SN_aria_256_cbc, "ARIA256");
  ------------------
  |  |  601|      1|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      1|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      1|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  229|      1|    EVP_add_cipher_alias(SN_aria_256_cbc, "aria256");
  ------------------
  |  |  601|      1|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      1|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      1|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  230|      1|#endif
  231|       |
  232|      1|#ifndef OPENSSL_NO_CAMELLIA
  233|      1|    EVP_add_cipher(EVP_camellia_128_ecb());
  234|      1|    EVP_add_cipher(EVP_camellia_128_cbc());
  235|      1|    EVP_add_cipher(EVP_camellia_128_cfb());
  ------------------
  |  | 1057|      1|#define EVP_camellia_128_cfb EVP_camellia_128_cfb128
  ------------------
  236|      1|    EVP_add_cipher(EVP_camellia_128_cfb1());
  237|      1|    EVP_add_cipher(EVP_camellia_128_cfb8());
  238|      1|    EVP_add_cipher(EVP_camellia_128_ofb());
  239|      1|    EVP_add_cipher_alias(SN_camellia_128_cbc, "CAMELLIA128");
  ------------------
  |  |  601|      1|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      1|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      1|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  240|      1|    EVP_add_cipher_alias(SN_camellia_128_cbc, "camellia128");
  ------------------
  |  |  601|      1|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      1|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      1|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  241|      1|    EVP_add_cipher(EVP_camellia_192_ecb());
  242|      1|    EVP_add_cipher(EVP_camellia_192_cbc());
  243|      1|    EVP_add_cipher(EVP_camellia_192_cfb());
  ------------------
  |  | 1065|      1|#define EVP_camellia_192_cfb EVP_camellia_192_cfb128
  ------------------
  244|      1|    EVP_add_cipher(EVP_camellia_192_cfb1());
  245|      1|    EVP_add_cipher(EVP_camellia_192_cfb8());
  246|      1|    EVP_add_cipher(EVP_camellia_192_ofb());
  247|      1|    EVP_add_cipher_alias(SN_camellia_192_cbc, "CAMELLIA192");
  ------------------
  |  |  601|      1|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      1|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      1|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  248|      1|    EVP_add_cipher_alias(SN_camellia_192_cbc, "camellia192");
  ------------------
  |  |  601|      1|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      1|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      1|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  249|      1|    EVP_add_cipher(EVP_camellia_256_ecb());
  250|      1|    EVP_add_cipher(EVP_camellia_256_cbc());
  251|      1|    EVP_add_cipher(EVP_camellia_256_cfb());
  ------------------
  |  | 1073|      1|#define EVP_camellia_256_cfb EVP_camellia_256_cfb128
  ------------------
  252|      1|    EVP_add_cipher(EVP_camellia_256_cfb1());
  253|      1|    EVP_add_cipher(EVP_camellia_256_cfb8());
  254|      1|    EVP_add_cipher(EVP_camellia_256_ofb());
  255|      1|    EVP_add_cipher_alias(SN_camellia_256_cbc, "CAMELLIA256");
  ------------------
  |  |  601|      1|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      1|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      1|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  256|      1|    EVP_add_cipher_alias(SN_camellia_256_cbc, "camellia256");
  ------------------
  |  |  601|      1|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   26|      1|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      1|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
  257|      1|    EVP_add_cipher(EVP_camellia_128_ctr());
  258|      1|    EVP_add_cipher(EVP_camellia_192_ctr());
  259|      1|    EVP_add_cipher(EVP_camellia_256_ctr());
  260|      1|#endif
  261|       |
  262|      1|#ifndef OPENSSL_NO_CHACHA
  263|      1|    EVP_add_cipher(EVP_chacha20());
  264|      1|#ifndef OPENSSL_NO_POLY1305
  265|      1|    EVP_add_cipher(EVP_chacha20_poly1305());
  266|      1|#endif
  267|      1|#endif
  268|      1|}

openssl_add_all_digests_int:
   18|      1|{
   19|      1|#ifndef OPENSSL_NO_MD4
   20|      1|    EVP_add_digest(EVP_md4());
   21|      1|#endif
   22|      1|#ifndef OPENSSL_NO_MD5
   23|      1|    EVP_add_digest(EVP_md5());
   24|      1|    EVP_add_digest_alias(SN_md5, "ssl3-md5");
  ------------------
  |  |  603|      1|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_MD_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   25|      1|#define OBJ_NAME_TYPE_MD_METH 0x01
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_MD_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      1|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
   25|      1|    EVP_add_digest(EVP_md5_sha1());
   26|      1|#endif
   27|      1|    EVP_add_digest(EVP_sha1());
   28|      1|    EVP_add_digest_alias(SN_sha1, "ssl3-sha1");
  ------------------
  |  |  603|      1|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_MD_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   25|      1|#define OBJ_NAME_TYPE_MD_METH 0x01
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_MD_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      1|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
   29|      1|    EVP_add_digest_alias(SN_sha1WithRSAEncryption, SN_sha1WithRSA);
  ------------------
  |  |  603|      1|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_MD_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   25|      1|#define OBJ_NAME_TYPE_MD_METH 0x01
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_MD_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      1|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
   30|      1|#if !defined(OPENSSL_NO_MDC2) && !defined(OPENSSL_NO_DES)
   31|      1|    EVP_add_digest(EVP_mdc2());
   32|      1|#endif
   33|      1|#ifndef OPENSSL_NO_RMD160
   34|      1|    EVP_add_digest(EVP_ripemd160());
   35|      1|    EVP_add_digest_alias(SN_ripemd160, "ripemd");
  ------------------
  |  |  603|      1|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_MD_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   25|      1|#define OBJ_NAME_TYPE_MD_METH 0x01
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_MD_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      1|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
   36|      1|    EVP_add_digest_alias(SN_ripemd160, "rmd160");
  ------------------
  |  |  603|      1|    OBJ_NAME_add((alias), OBJ_NAME_TYPE_MD_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   25|      1|#define OBJ_NAME_TYPE_MD_METH 0x01
  |  |  ------------------
  |  |                   OBJ_NAME_add((alias), OBJ_NAME_TYPE_MD_METH | OBJ_NAME_ALIAS, (n))
  |  |  ------------------
  |  |  |  |   33|      1|#define OBJ_NAME_ALIAS 0x8000
  |  |  ------------------
  ------------------
   37|      1|#endif
   38|      1|    EVP_add_digest(EVP_sha224());
   39|      1|    EVP_add_digest(EVP_sha256());
   40|      1|    EVP_add_digest(EVP_sha384());
   41|      1|    EVP_add_digest(EVP_sha512());
   42|      1|    EVP_add_digest(EVP_sha512_224());
   43|      1|    EVP_add_digest(EVP_sha512_256());
   44|      1|#ifndef OPENSSL_NO_WHIRLPOOL
   45|      1|    EVP_add_digest(EVP_whirlpool());
   46|      1|#endif
   47|      1|#ifndef OPENSSL_NO_SM3
   48|      1|    EVP_add_digest(EVP_sm3());
   49|      1|#endif
   50|      1|#ifndef OPENSSL_NO_BLAKE2
   51|      1|    EVP_add_digest(EVP_blake2b512());
   52|      1|    EVP_add_digest(EVP_blake2s256());
   53|      1|#endif
   54|      1|    EVP_add_digest(EVP_sha3_224());
   55|      1|    EVP_add_digest(EVP_sha3_256());
   56|      1|    EVP_add_digest(EVP_sha3_384());
   57|      1|    EVP_add_digest(EVP_sha3_512());
   58|      1|    EVP_add_digest(EVP_shake128());
   59|      1|    EVP_add_digest(EVP_shake256());
   60|      1|}

EVP_aes_128_cbc:
   22|      1|    {                                                                                 \
   23|      1|        return &aes_##keylen##_##mode;                                                \
   24|      1|    }
EVP_aes_128_ecb:
   22|      1|    {                                                                                 \
   23|      1|        return &aes_##keylen##_##mode;                                                \
   24|      1|    }
EVP_aes_128_ofb:
   22|      1|    {                                                                                 \
   23|      1|        return &aes_##keylen##_##mode;                                                \
   24|      1|    }
EVP_aes_128_cfb128:
   22|      1|    {                                                                                 \
   23|      1|        return &aes_##keylen##_##mode;                                                \
   24|      1|    }
EVP_aes_128_cfb1:
   22|      1|    {                                                                                 \
   23|      1|        return &aes_##keylen##_##mode;                                                \
   24|      1|    }
EVP_aes_128_cfb8:
   22|      1|    {                                                                                 \
   23|      1|        return &aes_##keylen##_##mode;                                                \
   24|      1|    }
EVP_aes_128_ctr:
   22|      1|    {                                                                                 \
   23|      1|        return &aes_##keylen##_##mode;                                                \
   24|      1|    }
EVP_aes_192_cbc:
   22|      1|    {                                                                                 \
   23|      1|        return &aes_##keylen##_##mode;                                                \
   24|      1|    }
EVP_aes_192_ecb:
   22|      1|    {                                                                                 \
   23|      1|        return &aes_##keylen##_##mode;                                                \
   24|      1|    }
EVP_aes_192_ofb:
   22|      1|    {                                                                                 \
   23|      1|        return &aes_##keylen##_##mode;                                                \
   24|      1|    }
EVP_aes_192_cfb128:
   22|      1|    {                                                                                 \
   23|      1|        return &aes_##keylen##_##mode;                                                \
   24|      1|    }
EVP_aes_192_cfb1:
   22|      1|    {                                                                                 \
   23|      1|        return &aes_##keylen##_##mode;                                                \
   24|      1|    }
EVP_aes_192_cfb8:
   22|      1|    {                                                                                 \
   23|      1|        return &aes_##keylen##_##mode;                                                \
   24|      1|    }
EVP_aes_192_ctr:
   22|      1|    {                                                                                 \
   23|      1|        return &aes_##keylen##_##mode;                                                \
   24|      1|    }
EVP_aes_256_cbc:
   22|      1|    {                                                                                 \
   23|      1|        return &aes_##keylen##_##mode;                                                \
   24|      1|    }
EVP_aes_256_ecb:
   22|      1|    {                                                                                 \
   23|      1|        return &aes_##keylen##_##mode;                                                \
   24|      1|    }
EVP_aes_256_ofb:
   22|      1|    {                                                                                 \
   23|      1|        return &aes_##keylen##_##mode;                                                \
   24|      1|    }
EVP_aes_256_cfb128:
   22|      1|    {                                                                                 \
   23|      1|        return &aes_##keylen##_##mode;                                                \
   24|      1|    }
EVP_aes_256_cfb1:
   22|      1|    {                                                                                 \
   23|      1|        return &aes_##keylen##_##mode;                                                \
   24|      1|    }
EVP_aes_256_cfb8:
   22|      1|    {                                                                                 \
   23|      1|        return &aes_##keylen##_##mode;                                                \
   24|      1|    }
EVP_aes_256_ctr:
   22|      1|    {                                                                                 \
   23|      1|        return &aes_##keylen##_##mode;                                                \
   24|      1|    }
EVP_aes_128_gcm:
   36|      1|    {                                                                                                                      \
   37|      1|        return &aes_##keylen##_##mode;                                                                                     \
   38|      1|    }
EVP_aes_192_gcm:
   36|      1|    {                                                                                                                      \
   37|      1|        return &aes_##keylen##_##mode;                                                                                     \
   38|      1|    }
EVP_aes_256_gcm:
   36|      1|    {                                                                                                                      \
   37|      1|        return &aes_##keylen##_##mode;                                                                                     \
   38|      1|    }
EVP_aes_128_xts:
   36|      1|    {                                                                                                                      \
   37|      1|        return &aes_##keylen##_##mode;                                                                                     \
   38|      1|    }
EVP_aes_256_xts:
   36|      1|    {                                                                                                                      \
   37|      1|        return &aes_##keylen##_##mode;                                                                                     \
   38|      1|    }
EVP_aes_128_ccm:
   36|      1|    {                                                                                                                      \
   37|      1|        return &aes_##keylen##_##mode;                                                                                     \
   38|      1|    }
EVP_aes_192_ccm:
   36|      1|    {                                                                                                                      \
   37|      1|        return &aes_##keylen##_##mode;                                                                                     \
   38|      1|    }
EVP_aes_256_ccm:
   36|      1|    {                                                                                                                      \
   37|      1|        return &aes_##keylen##_##mode;                                                                                     \
   38|      1|    }
EVP_aes_128_wrap:
   89|      1|{
   90|      1|    return &aes_128_wrap;
   91|      1|}
EVP_aes_192_wrap:
   99|      1|{
  100|      1|    return &aes_192_wrap;
  101|      1|}
EVP_aes_256_wrap:
  109|      1|{
  110|      1|    return &aes_256_wrap;
  111|      1|}
EVP_aes_128_wrap_pad:
  119|      1|{
  120|      1|    return &aes_128_wrap_pad;
  121|      1|}
EVP_aes_192_wrap_pad:
  129|      1|{
  130|      1|    return &aes_192_wrap_pad;
  131|      1|}
EVP_aes_256_wrap_pad:
  139|      1|{
  140|      1|    return &aes_256_wrap_pad;
  141|      1|}
EVP_aes_128_ocb:
   36|      1|    {                                                                                                                      \
   37|      1|        return &aes_##keylen##_##mode;                                                                                     \
   38|      1|    }
EVP_aes_192_ocb:
   36|      1|    {                                                                                                                      \
   37|      1|        return &aes_##keylen##_##mode;                                                                                     \
   38|      1|    }
EVP_aes_256_ocb:
   36|      1|    {                                                                                                                      \
   37|      1|        return &aes_##keylen##_##mode;                                                                                     \
   38|      1|    }

EVP_aes_128_cbc_hmac_sha1:
   41|      1|{
   42|      1|    return (OPENSSL_ia32cap_P[1] & AESNI_CAPABLE ? &aesni_128_cbc_hmac_sha1_cipher : NULL);
  ------------------
  |  |   16|      1|#define AESNI_CAPABLE (1 << (57 - 32))
  ------------------
  |  Branch (42:13): [True: 1, False: 0]
  ------------------
   43|      1|}
EVP_aes_256_cbc_hmac_sha1:
   46|      1|{
   47|      1|    return (OPENSSL_ia32cap_P[1] & AESNI_CAPABLE ? &aesni_256_cbc_hmac_sha1_cipher : NULL);
  ------------------
  |  |   16|      1|#define AESNI_CAPABLE (1 << (57 - 32))
  ------------------
  |  Branch (47:13): [True: 1, False: 0]
  ------------------
   48|      1|}

EVP_aes_128_cbc_hmac_sha256:
   53|      1|{
   54|      1|    return ((OPENSSL_ia32cap_P[1] & AESNI_CAPABLE) && aesni_cbc_sha256_enc(NULL, NULL, 0, NULL, NULL, NULL, NULL) ? &aesni_128_cbc_hmac_sha256_cipher : NULL);
  ------------------
  |  |   24|      1|#define AESNI_CAPABLE (1 << (57 - 32))
  ------------------
  |  Branch (54:13): [True: 1, False: 0]
  |  Branch (54:55): [True: 1, False: 0]
  ------------------
   55|      1|}
EVP_aes_256_cbc_hmac_sha256:
   58|      1|{
   59|      1|    return ((OPENSSL_ia32cap_P[1] & AESNI_CAPABLE) && aesni_cbc_sha256_enc(NULL, NULL, 0, NULL, NULL, NULL, NULL) ? &aesni_256_cbc_hmac_sha256_cipher : NULL);
  ------------------
  |  |   24|      1|#define AESNI_CAPABLE (1 << (57 - 32))
  ------------------
  |  Branch (59:13): [True: 1, False: 0]
  |  Branch (59:55): [True: 1, False: 0]
  ------------------
   60|      1|}

EVP_aria_128_ctr:
   42|      1|    {                                                                                 \
   43|      1|        return &aria_##keylen##_##mode;                                               \
   44|      1|    }
EVP_aria_192_ctr:
   42|      1|    {                                                                                 \
   43|      1|        return &aria_##keylen##_##mode;                                               \
   44|      1|    }
EVP_aria_256_ctr:
   42|      1|    {                                                                                 \
   43|      1|        return &aria_##keylen##_##mode;                                               \
   44|      1|    }
EVP_aria_128_gcm:
   64|      1|    {                                                  \
   65|      1|        return (EVP_CIPHER *)&aria_##keylen##_##mode;  \
   66|      1|    }
EVP_aria_192_gcm:
   64|      1|    {                                                  \
   65|      1|        return (EVP_CIPHER *)&aria_##keylen##_##mode;  \
   66|      1|    }
EVP_aria_256_gcm:
   64|      1|    {                                                  \
   65|      1|        return (EVP_CIPHER *)&aria_##keylen##_##mode;  \
   66|      1|    }
EVP_aria_128_ccm:
   64|      1|    {                                                  \
   65|      1|        return (EVP_CIPHER *)&aria_##keylen##_##mode;  \
   66|      1|    }
EVP_aria_192_ccm:
   64|      1|    {                                                  \
   65|      1|        return (EVP_CIPHER *)&aria_##keylen##_##mode;  \
   66|      1|    }
EVP_aria_256_ccm:
   64|      1|    {                                                  \
   65|      1|        return (EVP_CIPHER *)&aria_##keylen##_##mode;  \
   66|      1|    }

EVP_camellia_128_cbc:
   22|      1|    {                                                                                 \
   23|      1|        return &camellia_##keylen##_##mode;                                           \
   24|      1|    }
EVP_camellia_128_ecb:
   22|      1|    {                                                                                 \
   23|      1|        return &camellia_##keylen##_##mode;                                           \
   24|      1|    }
EVP_camellia_128_ofb:
   22|      1|    {                                                                                 \
   23|      1|        return &camellia_##keylen##_##mode;                                           \
   24|      1|    }
EVP_camellia_128_cfb128:
   22|      1|    {                                                                                 \
   23|      1|        return &camellia_##keylen##_##mode;                                           \
   24|      1|    }
EVP_camellia_128_cfb1:
   22|      1|    {                                                                                 \
   23|      1|        return &camellia_##keylen##_##mode;                                           \
   24|      1|    }
EVP_camellia_128_cfb8:
   22|      1|    {                                                                                 \
   23|      1|        return &camellia_##keylen##_##mode;                                           \
   24|      1|    }
EVP_camellia_128_ctr:
   22|      1|    {                                                                                 \
   23|      1|        return &camellia_##keylen##_##mode;                                           \
   24|      1|    }
EVP_camellia_192_cbc:
   22|      1|    {                                                                                 \
   23|      1|        return &camellia_##keylen##_##mode;                                           \
   24|      1|    }
EVP_camellia_192_ecb:
   22|      1|    {                                                                                 \
   23|      1|        return &camellia_##keylen##_##mode;                                           \
   24|      1|    }
EVP_camellia_192_ofb:
   22|      1|    {                                                                                 \
   23|      1|        return &camellia_##keylen##_##mode;                                           \
   24|      1|    }
EVP_camellia_192_cfb128:
   22|      1|    {                                                                                 \
   23|      1|        return &camellia_##keylen##_##mode;                                           \
   24|      1|    }
EVP_camellia_192_cfb1:
   22|      1|    {                                                                                 \
   23|      1|        return &camellia_##keylen##_##mode;                                           \
   24|      1|    }
EVP_camellia_192_cfb8:
   22|      1|    {                                                                                 \
   23|      1|        return &camellia_##keylen##_##mode;                                           \
   24|      1|    }
EVP_camellia_192_ctr:
   22|      1|    {                                                                                 \
   23|      1|        return &camellia_##keylen##_##mode;                                           \
   24|      1|    }
EVP_camellia_256_cbc:
   22|      1|    {                                                                                 \
   23|      1|        return &camellia_##keylen##_##mode;                                           \
   24|      1|    }
EVP_camellia_256_ecb:
   22|      1|    {                                                                                 \
   23|      1|        return &camellia_##keylen##_##mode;                                           \
   24|      1|    }
EVP_camellia_256_ofb:
   22|      1|    {                                                                                 \
   23|      1|        return &camellia_##keylen##_##mode;                                           \
   24|      1|    }
EVP_camellia_256_cfb128:
   22|      1|    {                                                                                 \
   23|      1|        return &camellia_##keylen##_##mode;                                           \
   24|      1|    }
EVP_camellia_256_cfb1:
   22|      1|    {                                                                                 \
   23|      1|        return &camellia_##keylen##_##mode;                                           \
   24|      1|    }
EVP_camellia_256_cfb8:
   22|      1|    {                                                                                 \
   23|      1|        return &camellia_##keylen##_##mode;                                           \
   24|      1|    }
EVP_camellia_256_ctr:
   22|      1|    {                                                                                 \
   23|      1|        return &camellia_##keylen##_##mode;                                           \
   24|      1|    }

EVP_chacha20:
   27|      1|{
   28|      1|    return &chacha20;
   29|      1|}
EVP_chacha20_poly1305:
   43|      1|{
   44|      1|    return (&chacha20_poly1305);
   45|      1|}

EVP_des_ede:
   28|      1|{
   29|      1|    return &des_ede_ecb;
   30|      1|}
EVP_des_ede3:
   33|      1|{
   34|      1|    return &des_ede3_ecb;
   35|      1|}
EVP_des_ede3_wrap:
   46|      1|{
   47|      1|    return &des3_wrap;
   48|      1|}

EVP_rc2_64_cbc:
   35|      1|{
   36|      1|    return &r2_64_cbc_cipher;
   37|      1|}
EVP_rc2_40_cbc:
   40|      1|{
   41|      1|    return &r2_40_cbc_cipher;
   42|      1|}

EVP_rc4:
   30|      1|{
   31|      1|    return &r4_cipher;
   32|      1|}
EVP_rc4_40:
   35|      1|{
   36|      1|    return &r4_40_cipher;
   37|      1|}

EVP_rc4_hmac_md5:
   27|      1|{
   28|      1|    return &r4_hmac_md5_cipher;
   29|      1|}

EVP_sm4_cbc:
   24|      1|    {                                                                         \
   25|      1|        return &sm4_##mode;                                                   \
   26|      1|    }
EVP_sm4_ecb:
   24|      1|    {                                                                         \
   25|      1|        return &sm4_##mode;                                                   \
   26|      1|    }
EVP_sm4_ofb:
   24|      1|    {                                                                         \
   25|      1|        return &sm4_##mode;                                                   \
   26|      1|    }
EVP_sm4_cfb128:
   24|      1|    {                                                                         \
   25|      1|        return &sm4_##mode;                                                   \
   26|      1|    }
EVP_sm4_ctr:
   24|      1|    {                                                                         \
   25|      1|        return &sm4_##mode;                                                   \
   26|      1|    }

EVP_desx_cbc:
   23|      1|{
   24|      1|    return &d_xcbc_cipher;
   25|      1|}

EVP_CIPHER_CTX_new:
   50|      6|{
   51|      6|    EVP_CIPHER_CTX *ctx;
   52|       |
   53|      6|    ctx = OPENSSL_zalloc(sizeof(EVP_CIPHER_CTX));
  ------------------
  |  |  109|      6|    CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   54|      6|    if (ctx == NULL)
  ------------------
  |  Branch (54:9): [True: 0, False: 6]
  ------------------
   55|      0|        return NULL;
   56|       |
   57|      6|    ctx->iv_len = -1;
   58|      6|    return ctx;
   59|      6|}
EVP_CipherInit_ex:
  411|  19.6k|{
  412|  19.6k|    if (!ossl_assert(impl == NULL))
  ------------------
  |  |   52|  19.6k|#define ossl_assert(x) ossl_assert_int((x) != 0, "Assertion failed: " #x, \
  |  |   53|  19.6k|    __FILE__, __LINE__)
  ------------------
  |  Branch (412:9): [True: 0, False: 19.6k]
  ------------------
  413|      0|        return 0;
  414|  19.6k|    return evp_cipher_init_internal(ctx, cipher, key, iv, enc, 0, NULL);
  415|  19.6k|}
EVP_CipherUpdate:
  479|  13.1k|{
  480|  13.1k|    if (ctx->encrypt)
  ------------------
  |  Branch (480:9): [True: 13.1k, False: 0]
  ------------------
  481|  13.1k|        return EVP_EncryptUpdate(ctx, out, outl, in, inl);
  482|      0|    else
  483|      0|        return EVP_DecryptUpdate(ctx, out, outl, in, inl);
  484|  13.1k|}
EVP_EncryptUpdate:
  652|  13.1k|{
  653|  13.1k|    int ret;
  654|  13.1k|    size_t soutl, inl_ = (size_t)inl;
  655|  13.1k|    int blocksize;
  656|       |
  657|  13.1k|    if (inl < 0) {
  ------------------
  |  Branch (657:9): [True: 0, False: 13.1k]
  ------------------
  658|      0|        ERR_raise(ERR_LIB_EVP, EVP_R_INVALID_LENGTH);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  659|      0|        return 0;
  660|      0|    }
  661|       |
  662|  13.1k|    if (ossl_likely(outl != NULL)) {
  ------------------
  |  |   22|  13.1k|#define ossl_likely(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (22:24): [True: 13.1k, False: 0]
  |  |  ------------------
  ------------------
  663|  13.1k|        *outl = 0;
  664|  13.1k|    } else {
  665|      0|        ERR_raise(ERR_LIB_EVP, ERR_R_PASSED_NULL_PARAMETER);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  666|      0|        return 0;
  667|      0|    }
  668|       |
  669|       |    /* Prevent accidental use of decryption context when encrypting */
  670|  13.1k|    if (ossl_unlikely(!ctx->encrypt)) {
  ------------------
  |  |   23|  13.1k|#define ossl_unlikely(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (23:26): [True: 0, False: 13.1k]
  |  |  ------------------
  ------------------
  671|      0|        ERR_raise(ERR_LIB_EVP, EVP_R_INVALID_OPERATION);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  672|      0|        return 0;
  673|      0|    }
  674|       |
  675|  13.1k|    if (ossl_unlikely(ctx->cipher == NULL)) {
  ------------------
  |  |   23|  13.1k|#define ossl_unlikely(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (23:26): [True: 0, False: 13.1k]
  |  |  ------------------
  ------------------
  676|      0|        ERR_raise(ERR_LIB_EVP, EVP_R_NO_CIPHER_SET);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  677|      0|        return 0;
  678|      0|    }
  679|       |
  680|  13.1k|    if (ossl_unlikely(ctx->cipher->prov == NULL))
  ------------------
  |  |   23|  13.1k|#define ossl_unlikely(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (23:26): [True: 0, False: 13.1k]
  |  |  ------------------
  ------------------
  681|      0|        return 0;
  682|       |
  683|  13.1k|    blocksize = ctx->cipher->block_size;
  684|       |
  685|  13.1k|    if (ossl_unlikely(ctx->cipher->cupdate == NULL || blocksize < 1)) {
  ------------------
  |  |   23|  26.2k|#define ossl_unlikely(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (23:26): [True: 0, False: 13.1k]
  |  |  |  Branch (23:46): [True: 0, False: 13.1k]
  |  |  |  Branch (23:46): [True: 0, False: 13.1k]
  |  |  ------------------
  ------------------
  686|      0|        ERR_raise(ERR_LIB_EVP, EVP_R_UPDATE_ERROR);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  687|      0|        return 0;
  688|      0|    }
  689|       |
  690|  13.1k|    ret = ctx->cipher->cupdate(ctx->algctx, out, &soutl,
  691|  13.1k|        inl_ + (size_t)(blocksize == 1 ? 0 : blocksize),
  ------------------
  |  Branch (691:25): [True: 6.53k, False: 6.58k]
  ------------------
  692|  13.1k|        in, inl_);
  693|       |
  694|  13.1k|    if (ossl_likely(ret)) {
  ------------------
  |  |   22|  13.1k|#define ossl_likely(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (22:24): [True: 13.1k, False: 0]
  |  |  ------------------
  ------------------
  695|  13.1k|        if (ossl_unlikely(soutl > INT_MAX)) {
  ------------------
  |  |   23|  13.1k|#define ossl_unlikely(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (23:26): [True: 0, False: 13.1k]
  |  |  ------------------
  ------------------
  696|      0|            ERR_raise(ERR_LIB_EVP, EVP_R_UPDATE_ERROR);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  697|      0|            return 0;
  698|      0|        }
  699|  13.1k|        *outl = (int)soutl;
  700|  13.1k|    }
  701|       |
  702|  13.1k|    return ret;
  703|  13.1k|}
EVP_CIPHER_gettable_ctx_params:
 1188|    130|{
 1189|    130|    void *provctx;
 1190|       |
 1191|    130|    if (cipher != NULL && cipher->gettable_ctx_params != NULL) {
  ------------------
  |  Branch (1191:9): [True: 130, False: 0]
  |  Branch (1191:27): [True: 130, False: 0]
  ------------------
 1192|    130|        provctx = ossl_provider_ctx(EVP_CIPHER_get0_provider(cipher));
 1193|    130|        return cipher->gettable_ctx_params(NULL, provctx);
 1194|    130|    }
 1195|      0|    return NULL;
 1196|    130|}
evp_cipher_new:
 1302|    130|{
 1303|    130|    EVP_CIPHER *cipher = OPENSSL_zalloc(sizeof(EVP_CIPHER));
  ------------------
  |  |  109|    130|    CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1304|       |
 1305|    130|    if (cipher != NULL && !CRYPTO_NEW_REF(&cipher->refcnt, 1)) {
  ------------------
  |  Branch (1305:9): [True: 130, False: 0]
  |  Branch (1305:27): [True: 0, False: 130]
  ------------------
 1306|      0|        OPENSSL_free(cipher);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1307|      0|        return NULL;
 1308|      0|    }
 1309|    130|    return cipher;
 1310|    130|}
evp_cipher_fetch_from_prov:
 1541|      4|{
 1542|      4|    return evp_generic_fetch_from_prov(prov, OSSL_OP_CIPHER,
  ------------------
  |  |  284|      4|#define OSSL_OP_CIPHER 2 /* Symmetric Ciphers */
  ------------------
 1543|      4|        algorithm, properties,
 1544|      4|        evp_cipher_from_algorithm,
 1545|      4|        evp_cipher_up_ref,
 1546|      4|        evp_cipher_free);
 1547|      4|}
EVP_CIPHER_up_ref:
 1559|    142|{
 1560|    142|    int ref = 0;
 1561|       |
 1562|    142|    if (cipher->origin == EVP_ORIG_DYNAMIC)
  ------------------
  |  |  186|    142|#define EVP_ORIG_DYNAMIC 0
  ------------------
  |  Branch (1562:9): [True: 142, False: 0]
  ------------------
 1563|    142|        CRYPTO_UP_REF(&cipher->refcnt, &ref);
 1564|    142|    return 1;
 1565|    142|}
EVP_CIPHER_free:
 1576|    140|{
 1577|    140|    int i;
 1578|       |
 1579|    140|    if (cipher == NULL || cipher->origin != EVP_ORIG_DYNAMIC)
  ------------------
  |  |  186|    130|#define EVP_ORIG_DYNAMIC 0
  ------------------
  |  Branch (1579:9): [True: 10, False: 130]
  |  Branch (1579:27): [True: 0, False: 130]
  ------------------
 1580|     10|        return;
 1581|       |
 1582|    130|    CRYPTO_DOWN_REF(&cipher->refcnt, &i);
 1583|    130|    if (i > 0)
  ------------------
  |  Branch (1583:9): [True: 130, False: 0]
  ------------------
 1584|    130|        return;
 1585|      0|    evp_cipher_free_int(cipher);
 1586|      0|}
evp_enc.c:evp_cipher_init_internal:
   75|  19.6k|{
   76|       |    /*
   77|       |     * enc == 1 means we are encrypting.
   78|       |     * enc == 0 means we are decrypting.
   79|       |     * enc == -1 means, use the previously initialised value for encrypt/decrypt
   80|       |     */
   81|  19.6k|    if (enc == -1) {
  ------------------
  |  Branch (81:9): [True: 19.6k, False: 6]
  ------------------
   82|  19.6k|        enc = ctx->encrypt;
   83|  19.6k|    } else {
   84|      6|        if (enc)
  ------------------
  |  Branch (84:13): [True: 6, False: 0]
  ------------------
   85|      6|            enc = 1;
   86|      6|        ctx->encrypt = enc;
   87|      6|    }
   88|       |
   89|  19.6k|    if (cipher == NULL && ctx->cipher == NULL) {
  ------------------
  |  Branch (89:9): [True: 19.6k, False: 6]
  |  Branch (89:27): [True: 0, False: 19.6k]
  ------------------
   90|      0|        ERR_raise(ERR_LIB_EVP, EVP_R_NO_CIPHER_SET);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
   91|      0|        return 0;
   92|      0|    }
   93|       |
   94|       |    /* Ensure a context left lying around from last time is cleared */
   95|  19.6k|    if (cipher != NULL && ctx->cipher != NULL) {
  ------------------
  |  Branch (95:9): [True: 6, False: 19.6k]
  |  Branch (95:27): [True: 0, False: 6]
  ------------------
   96|      0|        unsigned long flags = ctx->flags;
   97|       |
   98|      0|        EVP_CIPHER_CTX_reset(ctx);
   99|       |        /* Restore encrypt and flags */
  100|      0|        ctx->encrypt = enc;
  101|      0|        ctx->flags = flags;
  102|      0|    }
  103|       |
  104|  19.6k|    if (cipher == NULL)
  ------------------
  |  Branch (104:9): [True: 19.6k, False: 6]
  ------------------
  105|  19.6k|        cipher = ctx->cipher;
  106|       |
  107|  19.6k|    if (cipher->prov == NULL) {
  ------------------
  |  Branch (107:9): [True: 0, False: 19.6k]
  ------------------
  108|       |#ifdef FIPS_MODULE
  109|       |        /* We only do explicit fetches inside the FIPS module */
  110|       |        ERR_raise(ERR_LIB_EVP, EVP_R_INITIALIZATION_ERROR);
  111|       |        return 0;
  112|       |#else
  113|      0|        EVP_CIPHER *provciph = EVP_CIPHER_fetch(NULL,
  114|      0|            cipher->nid == NID_undef ? "NULL"
  ------------------
  |  |   18|      0|#define NID_undef                       0
  ------------------
  |  Branch (114:13): [True: 0, False: 0]
  ------------------
  115|      0|                                     : OBJ_nid2sn(cipher->nid),
  116|      0|            "");
  117|       |
  118|      0|        if (provciph == NULL)
  ------------------
  |  Branch (118:13): [True: 0, False: 0]
  ------------------
  119|      0|            return 0;
  120|      0|        cipher = provciph;
  121|      0|        EVP_CIPHER_free(ctx->fetched_cipher);
  122|      0|        ctx->fetched_cipher = provciph;
  123|      0|#endif
  124|      0|    }
  125|       |
  126|  19.6k|    if (!ossl_assert(cipher->prov != NULL)) {
  ------------------
  |  |   52|  19.6k|#define ossl_assert(x) ossl_assert_int((x) != 0, "Assertion failed: " #x, \
  |  |   53|  19.6k|    __FILE__, __LINE__)
  ------------------
  |  Branch (126:9): [True: 0, False: 19.6k]
  ------------------
  127|      0|        ERR_raise(ERR_LIB_EVP, EVP_R_INITIALIZATION_ERROR);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  128|      0|        return 0;
  129|      0|    }
  130|       |
  131|  19.6k|    if (cipher != ctx->fetched_cipher) {
  ------------------
  |  Branch (131:9): [True: 6, False: 19.6k]
  ------------------
  132|      6|        if (!EVP_CIPHER_up_ref((EVP_CIPHER *)cipher)) {
  ------------------
  |  Branch (132:13): [True: 0, False: 6]
  ------------------
  133|      0|            ERR_raise(ERR_LIB_EVP, EVP_R_INITIALIZATION_ERROR);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  134|      0|            return 0;
  135|      0|        }
  136|      6|        EVP_CIPHER_free(ctx->fetched_cipher);
  137|       |        /* Coverity false positive, the reference counting is confusing it */
  138|       |        /* coverity[use_after_free] */
  139|      6|        ctx->fetched_cipher = (EVP_CIPHER *)cipher;
  140|      6|    }
  141|  19.6k|    ctx->cipher = cipher;
  142|       |
  143|  19.6k|    if (is_pipeline && !EVP_CIPHER_can_pipeline(cipher, enc)) {
  ------------------
  |  Branch (143:9): [True: 0, False: 19.6k]
  |  Branch (143:24): [True: 0, False: 0]
  ------------------
  144|      0|        ERR_raise(ERR_LIB_EVP, EVP_R_PIPELINE_NOT_SUPPORTED);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  145|      0|        return 0;
  146|      0|    }
  147|       |
  148|  19.6k|    if (ctx->algctx == NULL) {
  ------------------
  |  Branch (148:9): [True: 6, False: 19.6k]
  ------------------
  149|      6|        ctx->algctx = ctx->cipher->newctx(ossl_provider_ctx(cipher->prov));
  150|      6|        if (ctx->algctx == NULL) {
  ------------------
  |  Branch (150:13): [True: 0, False: 6]
  ------------------
  151|      0|            ERR_raise(ERR_LIB_EVP, EVP_R_INITIALIZATION_ERROR);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  152|      0|            return 0;
  153|      0|        }
  154|      6|    }
  155|       |
  156|  19.6k|    if ((ctx->flags & EVP_CIPH_NO_PADDING) != 0) {
  ------------------
  |  |  234|  19.6k|#define EVP_CIPH_NO_PADDING 0x100
  ------------------
  |  Branch (156:9): [True: 0, False: 19.6k]
  ------------------
  157|       |        /*
  158|       |         * If this ctx was already set up for no padding then we need to tell
  159|       |         * the new cipher about it.
  160|       |         */
  161|      0|        if (!EVP_CIPHER_CTX_set_padding(ctx, 0))
  ------------------
  |  Branch (161:13): [True: 0, False: 0]
  ------------------
  162|      0|            return 0;
  163|      0|    }
  164|       |
  165|  19.6k|#ifndef FIPS_MODULE
  166|       |    /*
  167|       |     * Fix for CVE-2023-5363
  168|       |     * Passing in a size as part of the init call takes effect late
  169|       |     * so, force such to occur before the initialisation.
  170|       |     *
  171|       |     * The FIPS provider's internal library context is used in a manner
  172|       |     * such that this is not an issue.
  173|       |     */
  174|  19.6k|    if (params != NULL) {
  ------------------
  |  Branch (174:9): [True: 0, False: 19.6k]
  ------------------
  175|      0|        OSSL_PARAM param_lens[3] = { OSSL_PARAM_END, OSSL_PARAM_END,
  ------------------
  |  |   25|      0|    { NULL, 0, NULL, 0, 0 }
  ------------------
                      OSSL_PARAM param_lens[3] = { OSSL_PARAM_END, OSSL_PARAM_END,
  ------------------
  |  |   25|      0|    { NULL, 0, NULL, 0, 0 }
  ------------------
  176|      0|            OSSL_PARAM_END };
  ------------------
  |  |   25|      0|    { NULL, 0, NULL, 0, 0 }
  ------------------
  177|      0|        OSSL_PARAM *q = param_lens;
  178|      0|        const OSSL_PARAM *p;
  179|       |
  180|      0|        p = OSSL_PARAM_locate_const(params, OSSL_CIPHER_PARAM_KEYLEN);
  ------------------
  |  |  197|      0|# define OSSL_CIPHER_PARAM_KEYLEN "keylen"
  ------------------
  181|      0|        if (p != NULL)
  ------------------
  |  Branch (181:13): [True: 0, False: 0]
  ------------------
  182|      0|            memcpy(q++, p, sizeof(*q));
  183|       |
  184|       |        /*
  185|       |         * Note that OSSL_CIPHER_PARAM_AEAD_IVLEN is a synonym for
  186|       |         * OSSL_CIPHER_PARAM_IVLEN so both are covered here.
  187|       |         */
  188|      0|        p = OSSL_PARAM_locate_const(params, OSSL_CIPHER_PARAM_IVLEN);
  ------------------
  |  |  196|      0|# define OSSL_CIPHER_PARAM_IVLEN "ivlen"
  ------------------
  189|      0|        if (p != NULL)
  ------------------
  |  Branch (189:13): [True: 0, False: 0]
  ------------------
  190|      0|            memcpy(q++, p, sizeof(*q));
  191|       |
  192|      0|        if (q != param_lens) {
  ------------------
  |  Branch (192:13): [True: 0, False: 0]
  ------------------
  193|      0|            if (!EVP_CIPHER_CTX_set_params(ctx, param_lens)) {
  ------------------
  |  Branch (193:17): [True: 0, False: 0]
  ------------------
  194|      0|                ERR_raise(ERR_LIB_EVP, EVP_R_INVALID_LENGTH);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  195|      0|                return 0;
  196|      0|            }
  197|      0|        }
  198|      0|    }
  199|  19.6k|#endif
  200|       |
  201|  19.6k|    if (is_pipeline)
  ------------------
  |  Branch (201:9): [True: 0, False: 19.6k]
  ------------------
  202|      0|        return 1;
  203|       |
  204|  19.6k|    if (enc) {
  ------------------
  |  Branch (204:9): [True: 19.6k, False: 0]
  ------------------
  205|  19.6k|        if (ctx->cipher->einit == NULL) {
  ------------------
  |  Branch (205:13): [True: 0, False: 19.6k]
  ------------------
  206|       |            /*
  207|       |             * We still should be able to set the IV using the new API
  208|       |             * if the key is not specified and old API is not available
  209|       |             */
  210|      0|            if (key == NULL && ctx->cipher->einit_skey != NULL) {
  ------------------
  |  Branch (210:17): [True: 0, False: 0]
  |  Branch (210:32): [True: 0, False: 0]
  ------------------
  211|      0|                return ctx->cipher->einit_skey(ctx->algctx, NULL,
  212|      0|                    iv,
  213|      0|                    iv == NULL ? 0
  ------------------
  |  Branch (213:21): [True: 0, False: 0]
  ------------------
  214|      0|                               : EVP_CIPHER_CTX_get_iv_length(ctx),
  215|      0|                    params);
  216|      0|            }
  217|      0|            ERR_raise(ERR_LIB_EVP, EVP_R_INITIALIZATION_ERROR);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  218|      0|            return 0;
  219|      0|        }
  220|       |
  221|  19.6k|        return ctx->cipher->einit(ctx->algctx,
  222|  19.6k|            key,
  223|  19.6k|            key == NULL ? 0
  ------------------
  |  Branch (223:13): [True: 6.54k, False: 13.0k]
  ------------------
  224|  19.6k|                        : EVP_CIPHER_CTX_get_key_length(ctx),
  225|  19.6k|            iv,
  226|  19.6k|            iv == NULL ? 0
  ------------------
  |  Branch (226:13): [True: 13.0k, False: 6.53k]
  ------------------
  227|  19.6k|                       : EVP_CIPHER_CTX_get_iv_length(ctx),
  228|  19.6k|            params);
  229|  19.6k|    }
  230|       |
  231|      0|    if (ctx->cipher->dinit == NULL) {
  ------------------
  |  Branch (231:9): [True: 0, False: 0]
  ------------------
  232|       |        /*
  233|       |         * We still should be able to set the IV using the new API
  234|       |         * if the key is not specified and old API is not available
  235|       |         */
  236|      0|        if (key == NULL && ctx->cipher->dinit_skey != NULL) {
  ------------------
  |  Branch (236:13): [True: 0, False: 0]
  |  Branch (236:28): [True: 0, False: 0]
  ------------------
  237|      0|            return ctx->cipher->dinit_skey(ctx->algctx, NULL,
  238|      0|                iv,
  239|      0|                iv == NULL ? 0
  ------------------
  |  Branch (239:17): [True: 0, False: 0]
  ------------------
  240|      0|                           : EVP_CIPHER_CTX_get_iv_length(ctx),
  241|      0|                params);
  242|      0|        }
  243|      0|        ERR_raise(ERR_LIB_EVP, EVP_R_INITIALIZATION_ERROR);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  244|      0|        return 0;
  245|      0|    }
  246|       |
  247|      0|    return ctx->cipher->dinit(ctx->algctx,
  248|      0|        key,
  249|      0|        key == NULL ? 0
  ------------------
  |  Branch (249:9): [True: 0, False: 0]
  ------------------
  250|      0|                    : EVP_CIPHER_CTX_get_key_length(ctx),
  251|      0|        iv,
  252|      0|        iv == NULL ? 0
  ------------------
  |  Branch (252:9): [True: 0, False: 0]
  ------------------
  253|      0|                   : EVP_CIPHER_CTX_get_iv_length(ctx),
  254|      0|        params);
  255|      0|}
evp_enc.c:evp_cipher_from_algorithm:
 1346|    130|{
 1347|    130|    const OSSL_DISPATCH *fns = algodef->implementation;
 1348|    130|    EVP_CIPHER *cipher = NULL;
 1349|    130|    int fnciphcnt = 0, encinit = 0, decinit = 0, fnpipecnt = 0, fnctxcnt = 0;
 1350|       |
 1351|    130|    if ((cipher = evp_cipher_new()) == NULL) {
  ------------------
  |  Branch (1351:9): [True: 0, False: 130]
  ------------------
 1352|      0|        ERR_raise(ERR_LIB_EVP, ERR_R_EVP_LIB);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
 1353|      0|        return NULL;
 1354|      0|    }
 1355|       |
 1356|    130|#ifndef FIPS_MODULE
 1357|    130|    cipher->nid = NID_undef;
  ------------------
  |  |   18|    130|#define NID_undef                       0
  ------------------
 1358|    130|    if (!evp_names_do_all(prov, name_id, set_legacy_nid, &cipher->nid)
  ------------------
  |  Branch (1358:9): [True: 0, False: 130]
  ------------------
 1359|    130|        || cipher->nid == -1) {
  ------------------
  |  Branch (1359:12): [True: 0, False: 130]
  ------------------
 1360|      0|        ERR_raise(ERR_LIB_EVP, ERR_R_INTERNAL_ERROR);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
 1361|      0|        goto err;
 1362|      0|    }
 1363|    130|#endif
 1364|       |
 1365|    130|    cipher->name_id = name_id;
 1366|    130|    if ((cipher->type_name = ossl_algorithm_get1_first_name(algodef)) == NULL)
  ------------------
  |  Branch (1366:9): [True: 0, False: 130]
  ------------------
 1367|      0|        goto err;
 1368|       |
 1369|    130|    cipher->description = algodef->algorithm_description;
 1370|       |
 1371|  2.07k|    for (; fns->function_id != 0; fns++) {
  ------------------
  |  Branch (1371:12): [True: 1.94k, False: 130]
  ------------------
 1372|  1.94k|        switch (fns->function_id) {
  ------------------
  |  Branch (1372:17): [True: 1.94k, False: 0]
  ------------------
 1373|    130|        case OSSL_FUNC_CIPHER_NEWCTX:
  ------------------
  |  |  357|    130|#define OSSL_FUNC_CIPHER_NEWCTX 1
  ------------------
  |  Branch (1373:9): [True: 130, False: 1.81k]
  ------------------
 1374|    130|            if (cipher->newctx != NULL)
  ------------------
  |  Branch (1374:17): [True: 0, False: 130]
  ------------------
 1375|      0|                break;
 1376|    130|            cipher->newctx = OSSL_FUNC_cipher_newctx(fns);
 1377|    130|            fnctxcnt++;
 1378|    130|            break;
 1379|    130|        case OSSL_FUNC_CIPHER_ENCRYPT_INIT:
  ------------------
  |  |  358|    130|#define OSSL_FUNC_CIPHER_ENCRYPT_INIT 2
  ------------------
  |  Branch (1379:9): [True: 130, False: 1.81k]
  ------------------
 1380|    130|            if (cipher->einit != NULL)
  ------------------
  |  Branch (1380:17): [True: 0, False: 130]
  ------------------
 1381|      0|                break;
 1382|    130|            cipher->einit = OSSL_FUNC_cipher_encrypt_init(fns);
 1383|    130|            encinit = 1;
 1384|    130|            break;
 1385|    130|        case OSSL_FUNC_CIPHER_DECRYPT_INIT:
  ------------------
  |  |  359|    130|#define OSSL_FUNC_CIPHER_DECRYPT_INIT 3
  ------------------
  |  Branch (1385:9): [True: 130, False: 1.81k]
  ------------------
 1386|    130|            if (cipher->dinit != NULL)
  ------------------
  |  Branch (1386:17): [True: 0, False: 130]
  ------------------
 1387|      0|                break;
 1388|    130|            cipher->dinit = OSSL_FUNC_cipher_decrypt_init(fns);
 1389|    130|            decinit = 1;
 1390|    130|            break;
 1391|     68|        case OSSL_FUNC_CIPHER_ENCRYPT_SKEY_INIT:
  ------------------
  |  |  375|     68|#define OSSL_FUNC_CIPHER_ENCRYPT_SKEY_INIT 19
  ------------------
  |  Branch (1391:9): [True: 68, False: 1.87k]
  ------------------
 1392|     68|            if (cipher->einit_skey != NULL)
  ------------------
  |  Branch (1392:17): [True: 0, False: 68]
  ------------------
 1393|      0|                break;
 1394|     68|            cipher->einit_skey = OSSL_FUNC_cipher_encrypt_skey_init(fns);
 1395|     68|            encinit = 1;
 1396|     68|            break;
 1397|     68|        case OSSL_FUNC_CIPHER_DECRYPT_SKEY_INIT:
  ------------------
  |  |  376|     68|#define OSSL_FUNC_CIPHER_DECRYPT_SKEY_INIT 20
  ------------------
  |  Branch (1397:9): [True: 68, False: 1.87k]
  ------------------
 1398|     68|            if (cipher->dinit_skey != NULL)
  ------------------
  |  Branch (1398:17): [True: 0, False: 68]
  ------------------
 1399|      0|                break;
 1400|     68|            cipher->dinit_skey = OSSL_FUNC_cipher_decrypt_skey_init(fns);
 1401|     68|            decinit = 1;
 1402|     68|            break;
 1403|    130|        case OSSL_FUNC_CIPHER_UPDATE:
  ------------------
  |  |  360|    130|#define OSSL_FUNC_CIPHER_UPDATE 4
  ------------------
  |  Branch (1403:9): [True: 130, False: 1.81k]
  ------------------
 1404|    130|            if (cipher->cupdate != NULL)
  ------------------
  |  Branch (1404:17): [True: 0, False: 130]
  ------------------
 1405|      0|                break;
 1406|    130|            cipher->cupdate = OSSL_FUNC_cipher_update(fns);
 1407|    130|            fnciphcnt++;
 1408|    130|            break;
 1409|    130|        case OSSL_FUNC_CIPHER_FINAL:
  ------------------
  |  |  361|    130|#define OSSL_FUNC_CIPHER_FINAL 5
  ------------------
  |  Branch (1409:9): [True: 130, False: 1.81k]
  ------------------
 1410|    130|            if (cipher->cfinal != NULL)
  ------------------
  |  Branch (1410:17): [True: 0, False: 130]
  ------------------
 1411|      0|                break;
 1412|    130|            cipher->cfinal = OSSL_FUNC_cipher_final(fns);
 1413|    130|            fnciphcnt++;
 1414|    130|            break;
 1415|    118|        case OSSL_FUNC_CIPHER_CIPHER:
  ------------------
  |  |  362|    118|#define OSSL_FUNC_CIPHER_CIPHER 6
  ------------------
  |  Branch (1415:9): [True: 118, False: 1.82k]
  ------------------
 1416|    118|            if (cipher->ccipher != NULL)
  ------------------
  |  Branch (1416:17): [True: 0, False: 118]
  ------------------
 1417|      0|                break;
 1418|    118|            cipher->ccipher = OSSL_FUNC_cipher_cipher(fns);
 1419|    118|            break;
 1420|      0|        case OSSL_FUNC_CIPHER_PIPELINE_ENCRYPT_INIT:
  ------------------
  |  |  371|      0|#define OSSL_FUNC_CIPHER_PIPELINE_ENCRYPT_INIT 15
  ------------------
  |  Branch (1420:9): [True: 0, False: 1.94k]
  ------------------
 1421|      0|            if (cipher->p_einit != NULL)
  ------------------
  |  Branch (1421:17): [True: 0, False: 0]
  ------------------
 1422|      0|                break;
 1423|      0|            cipher->p_einit = OSSL_FUNC_cipher_pipeline_encrypt_init(fns);
 1424|      0|            fnpipecnt++;
 1425|      0|            break;
 1426|      0|        case OSSL_FUNC_CIPHER_PIPELINE_DECRYPT_INIT:
  ------------------
  |  |  372|      0|#define OSSL_FUNC_CIPHER_PIPELINE_DECRYPT_INIT 16
  ------------------
  |  Branch (1426:9): [True: 0, False: 1.94k]
  ------------------
 1427|      0|            if (cipher->p_dinit != NULL)
  ------------------
  |  Branch (1427:17): [True: 0, False: 0]
  ------------------
 1428|      0|                break;
 1429|      0|            cipher->p_dinit = OSSL_FUNC_cipher_pipeline_decrypt_init(fns);
 1430|      0|            fnpipecnt++;
 1431|      0|            break;
 1432|      0|        case OSSL_FUNC_CIPHER_PIPELINE_UPDATE:
  ------------------
  |  |  373|      0|#define OSSL_FUNC_CIPHER_PIPELINE_UPDATE 17
  ------------------
  |  Branch (1432:9): [True: 0, False: 1.94k]
  ------------------
 1433|      0|            if (cipher->p_cupdate != NULL)
  ------------------
  |  Branch (1433:17): [True: 0, False: 0]
  ------------------
 1434|      0|                break;
 1435|      0|            cipher->p_cupdate = OSSL_FUNC_cipher_pipeline_update(fns);
 1436|      0|            fnpipecnt++;
 1437|      0|            break;
 1438|      0|        case OSSL_FUNC_CIPHER_PIPELINE_FINAL:
  ------------------
  |  |  374|      0|#define OSSL_FUNC_CIPHER_PIPELINE_FINAL 18
  ------------------
  |  Branch (1438:9): [True: 0, False: 1.94k]
  ------------------
 1439|      0|            if (cipher->p_cfinal != NULL)
  ------------------
  |  Branch (1439:17): [True: 0, False: 0]
  ------------------
 1440|      0|                break;
 1441|      0|            cipher->p_cfinal = OSSL_FUNC_cipher_pipeline_final(fns);
 1442|      0|            fnpipecnt++;
 1443|      0|            break;
 1444|    130|        case OSSL_FUNC_CIPHER_FREECTX:
  ------------------
  |  |  363|    130|#define OSSL_FUNC_CIPHER_FREECTX 7
  ------------------
  |  Branch (1444:9): [True: 130, False: 1.81k]
  ------------------
 1445|    130|            if (cipher->freectx != NULL)
  ------------------
  |  Branch (1445:17): [True: 0, False: 130]
  ------------------
 1446|      0|                break;
 1447|    130|            cipher->freectx = OSSL_FUNC_cipher_freectx(fns);
 1448|    130|            fnctxcnt++;
 1449|    130|            break;
 1450|    129|        case OSSL_FUNC_CIPHER_DUPCTX:
  ------------------
  |  |  364|    129|#define OSSL_FUNC_CIPHER_DUPCTX 8
  ------------------
  |  Branch (1450:9): [True: 129, False: 1.81k]
  ------------------
 1451|    129|            if (cipher->dupctx != NULL)
  ------------------
  |  Branch (1451:17): [True: 0, False: 129]
  ------------------
 1452|      0|                break;
 1453|    129|            cipher->dupctx = OSSL_FUNC_cipher_dupctx(fns);
 1454|    129|            break;
 1455|    130|        case OSSL_FUNC_CIPHER_GET_PARAMS:
  ------------------
  |  |  365|    130|#define OSSL_FUNC_CIPHER_GET_PARAMS 9
  ------------------
  |  Branch (1455:9): [True: 130, False: 1.81k]
  ------------------
 1456|    130|            if (cipher->get_params != NULL)
  ------------------
  |  Branch (1456:17): [True: 0, False: 130]
  ------------------
 1457|      0|                break;
 1458|    130|            cipher->get_params = OSSL_FUNC_cipher_get_params(fns);
 1459|    130|            break;
 1460|    130|        case OSSL_FUNC_CIPHER_GET_CTX_PARAMS:
  ------------------
  |  |  366|    130|#define OSSL_FUNC_CIPHER_GET_CTX_PARAMS 10
  ------------------
  |  Branch (1460:9): [True: 130, False: 1.81k]
  ------------------
 1461|    130|            if (cipher->get_ctx_params != NULL)
  ------------------
  |  Branch (1461:17): [True: 0, False: 130]
  ------------------
 1462|      0|                break;
 1463|    130|            cipher->get_ctx_params = OSSL_FUNC_cipher_get_ctx_params(fns);
 1464|    130|            break;
 1465|    130|        case OSSL_FUNC_CIPHER_SET_CTX_PARAMS:
  ------------------
  |  |  367|    130|#define OSSL_FUNC_CIPHER_SET_CTX_PARAMS 11
  ------------------
  |  Branch (1465:9): [True: 130, False: 1.81k]
  ------------------
 1466|    130|            if (cipher->set_ctx_params != NULL)
  ------------------
  |  Branch (1466:17): [True: 0, False: 130]
  ------------------
 1467|      0|                break;
 1468|    130|            cipher->set_ctx_params = OSSL_FUNC_cipher_set_ctx_params(fns);
 1469|    130|            break;
 1470|    130|        case OSSL_FUNC_CIPHER_GETTABLE_PARAMS:
  ------------------
  |  |  368|    130|#define OSSL_FUNC_CIPHER_GETTABLE_PARAMS 12
  ------------------
  |  Branch (1470:9): [True: 130, False: 1.81k]
  ------------------
 1471|    130|            if (cipher->gettable_params != NULL)
  ------------------
  |  Branch (1471:17): [True: 0, False: 130]
  ------------------
 1472|      0|                break;
 1473|    130|            cipher->gettable_params = OSSL_FUNC_cipher_gettable_params(fns);
 1474|    130|            break;
 1475|    130|        case OSSL_FUNC_CIPHER_GETTABLE_CTX_PARAMS:
  ------------------
  |  |  369|    130|#define OSSL_FUNC_CIPHER_GETTABLE_CTX_PARAMS 13
  ------------------
  |  Branch (1475:9): [True: 130, False: 1.81k]
  ------------------
 1476|    130|            if (cipher->gettable_ctx_params != NULL)
  ------------------
  |  Branch (1476:17): [True: 0, False: 130]
  ------------------
 1477|      0|                break;
 1478|    130|            cipher->gettable_ctx_params = OSSL_FUNC_cipher_gettable_ctx_params(fns);
 1479|    130|            break;
 1480|    130|        case OSSL_FUNC_CIPHER_SETTABLE_CTX_PARAMS:
  ------------------
  |  |  370|    130|#define OSSL_FUNC_CIPHER_SETTABLE_CTX_PARAMS 14
  ------------------
  |  Branch (1480:9): [True: 130, False: 1.81k]
  ------------------
 1481|    130|            if (cipher->settable_ctx_params != NULL)
  ------------------
  |  Branch (1481:17): [True: 0, False: 130]
  ------------------
 1482|      0|                break;
 1483|    130|            cipher->settable_ctx_params = OSSL_FUNC_cipher_settable_ctx_params(fns);
 1484|    130|            break;
 1485|  1.94k|        }
 1486|  1.94k|    }
 1487|    130|    fnciphcnt += encinit + decinit;
 1488|    130|    if ((fnciphcnt != 0 && fnciphcnt != 3 && fnciphcnt != 4)
  ------------------
  |  Branch (1488:10): [True: 130, False: 0]
  |  Branch (1488:28): [True: 130, False: 0]
  |  Branch (1488:46): [True: 0, False: 130]
  ------------------
 1489|    130|        || (fnciphcnt == 0 && cipher->ccipher == NULL && fnpipecnt == 0)
  ------------------
  |  Branch (1489:13): [True: 0, False: 130]
  |  Branch (1489:31): [True: 0, False: 0]
  |  Branch (1489:58): [True: 0, False: 0]
  ------------------
 1490|    130|        || (fnpipecnt != 0 && (fnpipecnt < 3 || cipher->p_cupdate == NULL || cipher->p_cfinal == NULL))
  ------------------
  |  Branch (1490:13): [True: 0, False: 130]
  |  Branch (1490:32): [True: 0, False: 0]
  |  Branch (1490:49): [True: 0, False: 0]
  |  Branch (1490:78): [True: 0, False: 0]
  ------------------
 1491|    130|        || fnctxcnt != 2) {
  ------------------
  |  Branch (1491:12): [True: 0, False: 130]
  ------------------
 1492|       |        /*
 1493|       |         * In order to be a consistent set of functions we must have at least
 1494|       |         * a complete set of "encrypt" functions, or a complete set of "decrypt"
 1495|       |         * functions, or a single "cipher" function. In all cases we need both
 1496|       |         * the "newctx" and "freectx" functions.
 1497|       |         */
 1498|      0|        ERR_raise(ERR_LIB_EVP, EVP_R_INVALID_PROVIDER_FUNCTIONS);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
 1499|      0|        goto err;
 1500|      0|    }
 1501|    130|    if (prov != NULL && !ossl_provider_up_ref(prov))
  ------------------
  |  Branch (1501:9): [True: 130, False: 0]
  |  Branch (1501:25): [True: 0, False: 130]
  ------------------
 1502|      0|        goto err;
 1503|       |
 1504|    130|    cipher->prov = prov;
 1505|       |
 1506|    130|    if (!evp_cipher_cache_constants(cipher)) {
  ------------------
  |  Branch (1506:9): [True: 0, False: 130]
  ------------------
 1507|      0|        ERR_raise(ERR_LIB_EVP, EVP_R_CACHE_CONSTANTS_FAILED);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
 1508|      0|        goto err;
 1509|      0|    }
 1510|       |
 1511|    130|    return cipher;
 1512|       |
 1513|      0|err:
 1514|      0|    EVP_CIPHER_free(cipher);
 1515|       |    return NULL;
 1516|    130|}
evp_enc.c:set_legacy_nid:
 1320|    243|{
 1321|    243|    int nid;
 1322|    243|    int *legacy_nid = vlegacy_nid;
 1323|       |    /*
 1324|       |     * We use lowest level function to get the associated method, because
 1325|       |     * higher level functions such as EVP_get_cipherbyname() have changed
 1326|       |     * to look at providers too.
 1327|       |     */
 1328|    243|    const void *legacy_method = OBJ_NAME_get(name, OBJ_NAME_TYPE_CIPHER_METH);
  ------------------
  |  |   26|    243|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  ------------------
 1329|       |
 1330|    243|    if (*legacy_nid == -1) /* We found a clash already */
  ------------------
  |  Branch (1330:9): [True: 0, False: 243]
  ------------------
 1331|      0|        return;
 1332|    243|    if (legacy_method == NULL)
  ------------------
  |  Branch (1332:9): [True: 109, False: 134]
  ------------------
 1333|    109|        return;
 1334|    134|    nid = EVP_CIPHER_get_nid(legacy_method);
 1335|    134|    if (*legacy_nid != NID_undef && *legacy_nid != nid) {
  ------------------
  |  |   18|    268|#define NID_undef                       0
  ------------------
  |  Branch (1335:9): [True: 26, False: 108]
  |  Branch (1335:37): [True: 0, False: 26]
  ------------------
 1336|      0|        *legacy_nid = -1;
 1337|      0|        return;
 1338|      0|    }
 1339|    134|    *legacy_nid = nid;
 1340|    134|}
evp_enc.c:evp_cipher_up_ref:
 1519|    136|{
 1520|    136|    return EVP_CIPHER_up_ref(cipher);
 1521|    136|}
evp_enc.c:evp_cipher_free:
 1524|    130|{
 1525|    130|    EVP_CIPHER_free(cipher);
 1526|    130|}

ossl_err_load_EVP_strings:
  230|      1|{
  231|      1|#ifndef OPENSSL_NO_ERR
  232|      1|    if (ERR_reason_error_string(EVP_str_reasons[0].error) == NULL)
  ------------------
  |  Branch (232:9): [True: 1, False: 0]
  ------------------
  233|      1|        ERR_load_strings_const(EVP_str_reasons);
  234|      1|#endif
  235|      1|    return 1;
  236|      1|}

evp_generic_fetch:
  398|      3|{
  399|      3|    struct evp_method_data_st methdata;
  400|      3|    void *method;
  401|       |
  402|      3|    methdata.libctx = libctx;
  403|      3|    methdata.tmp_store = NULL;
  404|       |    method = inner_evp_generic_fetch(&methdata, NULL, operation_id,
  405|      3|        name, properties,
  406|      3|        new_method, up_ref_method, free_method);
  407|      3|    dealloc_tmp_evp_method_store(methdata.tmp_store);
  408|      3|    return method;
  409|      3|}
evp_generic_fetch_from_prov:
  424|      4|{
  425|      4|    struct evp_method_data_st methdata;
  426|      4|    void *method;
  427|       |
  428|      4|    methdata.libctx = ossl_provider_libctx(prov);
  429|       |    methdata.tmp_store = NULL;
  430|      4|    method = inner_evp_generic_fetch(&methdata, prov, operation_id,
  431|      4|        name, properties,
  432|      4|        new_method, up_ref_method, free_method);
  433|      4|    dealloc_tmp_evp_method_store(methdata.tmp_store);
  434|      4|    return method;
  435|      4|}
evp_method_store_cache_flush:
  438|      5|{
  439|      5|    OSSL_METHOD_STORE *store = get_evp_method_store(libctx);
  440|       |
  441|      5|    if (store != NULL)
  ------------------
  |  Branch (441:9): [True: 5, False: 0]
  ------------------
  442|      5|        return ossl_method_store_cache_flush_all(store);
  443|      0|    return 1;
  444|      5|}
evp_method_store_remove_all_provided:
  447|      5|{
  448|      5|    OSSL_LIB_CTX *libctx = ossl_provider_libctx(prov);
  449|      5|    OSSL_METHOD_STORE *store = get_evp_method_store(libctx);
  450|       |
  451|      5|    if (store != NULL)
  ------------------
  |  Branch (451:9): [True: 5, False: 0]
  ------------------
  452|      5|        return ossl_method_store_remove_all_provided(store, prov);
  453|      0|    return 1;
  454|      5|}
evp_names_do_all:
  675|    130|{
  676|    130|    OSSL_LIB_CTX *libctx = ossl_provider_libctx(prov);
  677|    130|    OSSL_NAMEMAP *namemap = ossl_namemap_stored(libctx);
  678|       |
  679|    130|    return ossl_namemap_doall_names(namemap, number, fn, data);
  680|    130|}
evp_fetch.c:inner_evp_generic_fetch:
  259|      7|{
  260|      7|    OSSL_METHOD_STORE *store = get_evp_method_store(methdata->libctx);
  261|      7|    OSSL_NAMEMAP *namemap = ossl_namemap_stored(methdata->libctx);
  262|       |#ifdef FIPS_MODULE
  263|       |    /*
  264|       |     * The FIPS provider has its own internal library context where only it
  265|       |     * is loaded.  Consequently, property queries aren't relevant because
  266|       |     * there is only one fetchable algorithm and it is assumed that the
  267|       |     * FIPS-ness is handled by the using algorithm.
  268|       |     */
  269|       |    const char *const propq = "";
  270|       |#else
  271|      7|    const char *const propq = properties != NULL ? properties : "";
  ------------------
  |  Branch (271:31): [True: 0, False: 7]
  ------------------
  272|      7|#endif /* FIPS_MODULE */
  273|      7|    uint32_t meth_id = 0;
  274|      7|    void *method = NULL;
  275|      7|    int unsupported, name_id;
  276|       |
  277|      7|    if (store == NULL || namemap == NULL) {
  ------------------
  |  Branch (277:9): [True: 0, False: 7]
  |  Branch (277:26): [True: 0, False: 7]
  ------------------
  278|      0|        ERR_raise(ERR_LIB_EVP, ERR_R_PASSED_INVALID_ARGUMENT);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  279|      0|        return NULL;
  280|      0|    }
  281|       |
  282|       |    /*
  283|       |     * If there's ever an operation_id == 0 passed, we have an internal
  284|       |     * programming error.
  285|       |     */
  286|      7|    if (!ossl_assert(operation_id > 0)) {
  ------------------
  |  |   52|      7|#define ossl_assert(x) ossl_assert_int((x) != 0, "Assertion failed: " #x, \
  |  |   53|      7|    __FILE__, __LINE__)
  ------------------
  |  Branch (286:9): [True: 0, False: 7]
  ------------------
  287|      0|        ERR_raise(ERR_LIB_EVP, ERR_R_INTERNAL_ERROR);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  288|      0|        return NULL;
  289|      0|    }
  290|       |
  291|       |    /* If we haven't received a name id yet, try to get one for the name */
  292|      7|    name_id = ossl_namemap_name2num(namemap, name);
  293|       |
  294|       |    /*
  295|       |     * If we have a name id, calculate a method id with evp_method_id().
  296|       |     *
  297|       |     * evp_method_id returns 0 if we have too many operations (more than
  298|       |     * about 2^8) or too many names (more than about 2^24).  In that case,
  299|       |     * we can't create any new method.
  300|       |     * For all intents and purposes, this is an internal error.
  301|       |     */
  302|      7|    if (name_id != 0 && (meth_id = evp_method_id(name_id, operation_id)) == 0) {
  ------------------
  |  Branch (302:9): [True: 5, False: 2]
  |  Branch (302:25): [True: 0, False: 5]
  ------------------
  303|      0|        ERR_raise(ERR_LIB_EVP, ERR_R_INTERNAL_ERROR);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  304|      0|        return NULL;
  305|      0|    }
  306|       |
  307|       |    /*
  308|       |     * If we haven't found the name yet, chances are that the algorithm to
  309|       |     * be fetched is unsupported.
  310|       |     */
  311|      7|    unsupported = name_id == 0;
  312|       |
  313|      7|    if (meth_id == 0
  ------------------
  |  Branch (313:9): [True: 2, False: 5]
  ------------------
  314|      5|        || !ossl_method_store_cache_get(store, prov, meth_id, propq, &method)) {
  ------------------
  |  Branch (314:12): [True: 2, False: 3]
  ------------------
  315|      4|        OSSL_METHOD_CONSTRUCT_METHOD mcm = {
  316|      4|            get_tmp_evp_method_store,
  317|      4|            reserve_evp_method_store,
  318|      4|            unreserve_evp_method_store,
  319|      4|            get_evp_method_from_store,
  320|      4|            put_evp_method_in_store,
  321|      4|            construct_evp_method,
  322|      4|            destruct_evp_method
  323|      4|        };
  324|       |
  325|      4|        methdata->operation_id = operation_id;
  326|      4|        methdata->name_id = name_id;
  327|      4|        methdata->names = name;
  328|      4|        methdata->propquery = propq;
  329|      4|        methdata->method_from_algorithm = new_method;
  330|      4|        methdata->refcnt_up_method = up_ref_method;
  331|      4|        methdata->destruct_method = free_method;
  332|      4|        methdata->flag_construct_error_occurred = 0;
  333|      4|        if ((method = ossl_method_construct(methdata->libctx, operation_id,
  ------------------
  |  Branch (333:13): [True: 4, False: 0]
  ------------------
  334|      4|                 &prov, 0 /* !force_cache */,
  335|      4|                 &mcm, methdata))
  336|      4|            != NULL) {
  337|       |            /*
  338|       |             * If construction did create a method for us, we know that
  339|       |             * there is a correct name_id and meth_id, since those have
  340|       |             * already been calculated in get_evp_method_from_store() and
  341|       |             * put_evp_method_in_store() above.
  342|       |             * Note that there is a corner case here, in which, if a user
  343|       |             * passes a name of the form name1:name2:..., then the construction
  344|       |             * will create a method against all names, but the lookup will fail
  345|       |             * as ossl_namemap_name2num treats the name string as a single name
  346|       |             * rather than introducing new features where in the EVP_<obj>_fetch
  347|       |             * parses the string and queries for each, return an error.
  348|       |             */
  349|      4|            if (name_id == 0)
  ------------------
  |  Branch (349:17): [True: 2, False: 2]
  ------------------
  350|      2|                name_id = ossl_namemap_name2num(namemap, name);
  351|      4|            if (name_id == 0) {
  ------------------
  |  Branch (351:17): [True: 0, False: 4]
  ------------------
  352|      0|                ERR_raise_data(ERR_LIB_EVP, ERR_R_FETCH_FAILED,
  ------------------
  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  ------------------
  |  |  361|      0|        ERR_set_error)
  ------------------
                              ERR_raise_data(ERR_LIB_EVP, ERR_R_FETCH_FAILED,
  ------------------
  |  |   59|      0|#define ERR_LIB_EVP 6
  ------------------
                              ERR_raise_data(ERR_LIB_EVP, ERR_R_FETCH_FAILED,
  ------------------
  |  |  318|      0|#define ERR_R_FETCH_FAILED (269 | ERR_RFLAG_COMMON)
  |  |  ------------------
  |  |  |  |  220|      0|#define ERR_RFLAG_COMMON (0x2 << ERR_RFLAGS_OFFSET)
  |  |  |  |  ------------------
  |  |  |  |  |  |  211|      0|#define ERR_RFLAGS_OFFSET 18L
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  353|      0|                    "Algorithm %s cannot be found", name != NULL ? name : "<null>");
  ------------------
  |  Branch (353:53): [True: 0, False: 0]
  ------------------
  354|      0|                free_method(method);
  355|      0|                method = NULL;
  356|      4|            } else {
  357|      4|                meth_id = evp_method_id(name_id, operation_id);
  358|      4|                if (meth_id != 0)
  ------------------
  |  Branch (358:21): [True: 4, False: 0]
  ------------------
  359|      4|                    ossl_method_store_cache_set(store, prov, meth_id, propq,
  360|      4|                        method, up_ref_method, free_method);
  361|      4|            }
  362|      4|        }
  363|       |
  364|       |        /*
  365|       |         * If we never were in the constructor, the algorithm to be fetched
  366|       |         * is unsupported.
  367|       |         */
  368|      4|        unsupported = !methdata->flag_construct_error_occurred;
  369|      4|    }
  370|       |
  371|      7|    if ((name_id != 0 || name != NULL) && method == NULL) {
  ------------------
  |  Branch (371:10): [True: 7, False: 0]
  |  Branch (371:26): [True: 0, False: 0]
  |  Branch (371:43): [True: 0, False: 7]
  ------------------
  372|      0|        int code = unsupported ? ERR_R_UNSUPPORTED : ERR_R_FETCH_FAILED;
  ------------------
  |  |  317|      0|#define ERR_R_UNSUPPORTED (268 | ERR_RFLAG_COMMON)
  |  |  ------------------
  |  |  |  |  220|      0|#define ERR_RFLAG_COMMON (0x2 << ERR_RFLAGS_OFFSET)
  |  |  |  |  ------------------
  |  |  |  |  |  |  211|      0|#define ERR_RFLAGS_OFFSET 18L
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      int code = unsupported ? ERR_R_UNSUPPORTED : ERR_R_FETCH_FAILED;
  ------------------
  |  |  318|      0|#define ERR_R_FETCH_FAILED (269 | ERR_RFLAG_COMMON)
  |  |  ------------------
  |  |  |  |  220|      0|#define ERR_RFLAG_COMMON (0x2 << ERR_RFLAGS_OFFSET)
  |  |  |  |  ------------------
  |  |  |  |  |  |  211|      0|#define ERR_RFLAGS_OFFSET 18L
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (372:20): [True: 0, False: 0]
  ------------------
  373|       |
  374|      0|        if (name == NULL)
  ------------------
  |  Branch (374:13): [True: 0, False: 0]
  ------------------
  375|      0|            name = ossl_namemap_num2name(namemap, name_id, 0);
  376|      0|        ERR_raise_data(ERR_LIB_EVP, code,
  ------------------
  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  ------------------
  |  |  361|      0|        ERR_set_error)
  ------------------
                      ERR_raise_data(ERR_LIB_EVP, code,
  ------------------
  |  |   59|      0|#define ERR_LIB_EVP 6
  ------------------
  377|      0|            "%s, Algorithm (%s : %d), Properties (%s)",
  378|      0|            ossl_lib_ctx_get_descriptor(methdata->libctx),
  379|      0|            name == NULL ? "<null>" : name, name_id,
  ------------------
  |  Branch (379:13): [True: 0, False: 0]
  ------------------
  380|      0|            properties == NULL ? "<null>" : properties);
  ------------------
  |  Branch (380:13): [True: 0, False: 0]
  ------------------
  381|      7|    } else {
  382|      7|        OSSL_TRACE4(QUERY, "%s, Algorithm (%s : %d), Properties (%s)\n",
  ------------------
  |  |  297|      7|    OSSL_TRACEV(category, (trc_out, format, arg1, arg2, arg3, arg4))
  |  |  ------------------
  |  |  |  |  283|      7|#define OSSL_TRACEV(category, args) ((void)0)
  |  |  ------------------
  ------------------
  383|      7|            ossl_lib_ctx_get_descriptor(methdata->libctx),
  384|      7|            name == NULL ? "<null>" : name, name_id,
  385|      7|            properties == NULL ? "<null>" : properties);
  386|      7|    }
  387|       |
  388|      7|    return method;
  389|      7|}
evp_fetch.c:evp_method_id:
  117|    148|{
  118|    148|    if (!ossl_assert(name_id > 0 && name_id <= METHOD_ID_NAME_MAX)
  ------------------
  |  |   52|    296|#define ossl_assert(x) ossl_assert_int((x) != 0, "Assertion failed: " #x, \
  |  |  ------------------
  |  |  |  Branch (52:41): [True: 148, False: 0]
  |  |  |  Branch (52:41): [True: 148, False: 0]
  |  |  ------------------
  |  |   53|    296|    __FILE__, __LINE__)
  ------------------
  |  Branch (118:9): [True: 0, False: 148]
  ------------------
  119|    148|        || !ossl_assert(operation_id > 0
  ------------------
  |  |   52|    296|#define ossl_assert(x) ossl_assert_int((x) != 0, "Assertion failed: " #x, \
  |  |  ------------------
  |  |  |  Branch (52:41): [True: 148, False: 0]
  |  |  |  Branch (52:41): [True: 148, False: 0]
  |  |  ------------------
  |  |   53|    148|    __FILE__, __LINE__)
  ------------------
  |  Branch (119:12): [True: 0, False: 148]
  ------------------
  120|    148|            && operation_id <= METHOD_ID_OPERATION_MAX))
  121|      0|        return 0;
  122|    148|    return (((name_id << METHOD_ID_NAME_OFFSET) & METHOD_ID_NAME_MASK)
  ------------------
  |  |  114|    148|#define METHOD_ID_NAME_OFFSET 8
  ------------------
                  return (((name_id << METHOD_ID_NAME_OFFSET) & METHOD_ID_NAME_MASK)
  ------------------
  |  |  113|    148|#define METHOD_ID_NAME_MASK 0x7FFFFF00
  ------------------
  123|    148|        | (operation_id & METHOD_ID_OPERATION_MASK));
  ------------------
  |  |  111|    148|#define METHOD_ID_OPERATION_MASK 0x000000FF
  ------------------
  124|    148|}
evp_fetch.c:reserve_evp_method_store:
   73|      4|{
   74|      4|    struct evp_method_data_st *methdata = data;
   75|       |
   76|      4|    if (store == NULL
  ------------------
  |  Branch (76:9): [True: 4, False: 0]
  ------------------
   77|      4|        && (store = get_evp_method_store(methdata->libctx)) == NULL)
  ------------------
  |  Branch (77:12): [True: 0, False: 4]
  ------------------
   78|      0|        return 0;
   79|       |
   80|      4|    return ossl_method_lock_store(store);
   81|      4|}
evp_fetch.c:unreserve_evp_method_store:
   84|      4|{
   85|      4|    struct evp_method_data_st *methdata = data;
   86|       |
   87|      4|    if (store == NULL
  ------------------
  |  Branch (87:9): [True: 4, False: 0]
  ------------------
   88|      4|        && (store = get_evp_method_store(methdata->libctx)) == NULL)
  ------------------
  |  Branch (88:12): [True: 0, False: 4]
  ------------------
   89|      0|        return 0;
   90|       |
   91|      4|    return ossl_method_unlock_store(store);
   92|      4|}
evp_fetch.c:get_evp_method_from_store:
  128|      4|{
  129|      4|    struct evp_method_data_st *methdata = data;
  130|      4|    void *method = NULL;
  131|      4|    int name_id;
  132|      4|    uint32_t meth_id;
  133|       |
  134|       |    /*
  135|       |     * get_evp_method_from_store() is only called to try and get the method
  136|       |     * that evp_generic_fetch() is asking for, and the operation id as well
  137|       |     * as the name or name id are passed via methdata.
  138|       |     */
  139|      4|    if ((name_id = methdata->name_id) == 0 && methdata->names != NULL) {
  ------------------
  |  Branch (139:9): [True: 2, False: 2]
  |  Branch (139:47): [True: 2, False: 0]
  ------------------
  140|      2|        OSSL_NAMEMAP *namemap = ossl_namemap_stored(methdata->libctx);
  141|      2|        const char *names = methdata->names;
  142|      2|        const char *q = strchr(names, NAME_SEPARATOR);
  ------------------
  |  |   24|      2|#define NAME_SEPARATOR ':'
  ------------------
  143|      2|        size_t l = (q == NULL ? strlen(names) : (size_t)(q - names));
  ------------------
  |  Branch (143:21): [True: 2, False: 0]
  ------------------
  144|       |
  145|      2|        if (namemap == 0)
  ------------------
  |  Branch (145:13): [True: 0, False: 2]
  ------------------
  146|      0|            return NULL;
  147|      2|        name_id = ossl_namemap_name2num_n(namemap, names, l);
  148|      2|    }
  149|       |
  150|      4|    if (name_id == 0
  ------------------
  |  Branch (150:9): [True: 0, False: 4]
  ------------------
  151|      4|        || (meth_id = evp_method_id(name_id, methdata->operation_id)) == 0)
  ------------------
  |  Branch (151:12): [True: 0, False: 4]
  ------------------
  152|      0|        return NULL;
  153|       |
  154|      4|    if (store == NULL
  ------------------
  |  Branch (154:9): [True: 4, False: 0]
  ------------------
  155|      4|        && (store = get_evp_method_store(methdata->libctx)) == NULL)
  ------------------
  |  Branch (155:12): [True: 0, False: 4]
  ------------------
  156|      0|        return NULL;
  157|       |
  158|      4|    if (!ossl_method_store_fetch(store, meth_id, methdata->propquery, prov,
  ------------------
  |  Branch (158:9): [True: 0, False: 4]
  ------------------
  159|      4|            &method))
  160|      0|        return NULL;
  161|      4|    return method;
  162|      4|}
evp_fetch.c:put_evp_method_in_store:
  168|    135|{
  169|    135|    struct evp_method_data_st *methdata = data;
  170|    135|    OSSL_NAMEMAP *namemap;
  171|    135|    int name_id;
  172|    135|    uint32_t meth_id;
  173|    135|    size_t l = 0;
  174|       |
  175|       |    /*
  176|       |     * put_evp_method_in_store() is only called with an EVP method that was
  177|       |     * successfully created by construct_method() below, which means that
  178|       |     * all the names should already be stored in the namemap with the same
  179|       |     * numeric identity, so just use the first to get that identity.
  180|       |     */
  181|    135|    if (names != NULL) {
  ------------------
  |  Branch (181:9): [True: 135, False: 0]
  ------------------
  182|    135|        const char *q = strchr(names, NAME_SEPARATOR);
  ------------------
  |  |   24|    135|#define NAME_SEPARATOR ':'
  ------------------
  183|       |
  184|    135|        l = (q == NULL ? strlen(names) : (size_t)(q - names));
  ------------------
  |  Branch (184:14): [True: 55, False: 80]
  ------------------
  185|    135|    }
  186|       |
  187|    135|    if ((namemap = ossl_namemap_stored(methdata->libctx)) == NULL
  ------------------
  |  Branch (187:9): [True: 0, False: 135]
  ------------------
  188|    135|        || (name_id = ossl_namemap_name2num_n(namemap, names, l)) == 0
  ------------------
  |  Branch (188:12): [True: 0, False: 135]
  ------------------
  189|    135|        || (meth_id = evp_method_id(name_id, methdata->operation_id)) == 0)
  ------------------
  |  Branch (189:12): [True: 0, False: 135]
  ------------------
  190|      0|        return 0;
  191|       |
  192|    135|    OSSL_TRACE1(QUERY, "put_evp_method_in_store: original store: %p\n", store);
  ------------------
  |  |  291|    135|    OSSL_TRACEV(category, (trc_out, format, arg1))
  |  |  ------------------
  |  |  |  |  283|    135|#define OSSL_TRACEV(category, args) ((void)0)
  |  |  ------------------
  ------------------
  193|    135|    if (store == NULL
  ------------------
  |  Branch (193:9): [True: 135, False: 0]
  ------------------
  194|    135|        && (store = get_evp_method_store(methdata->libctx)) == NULL)
  ------------------
  |  Branch (194:12): [True: 0, False: 135]
  ------------------
  195|      0|        return 0;
  196|       |
  197|    135|    OSSL_TRACE5(QUERY,
  ------------------
  |  |  299|    135|    OSSL_TRACEV(category, (trc_out, format, arg1, arg2, arg3, arg4, arg5))
  |  |  ------------------
  |  |  |  |  283|    135|#define OSSL_TRACEV(category, args) ((void)0)
  |  |  ------------------
  ------------------
  198|    135|        "put_evp_method_in_store: "
  199|    135|        "store: %p, names: %s, operation_id %d, method_id: %d, properties: %s\n",
  200|    135|        store, names, methdata->operation_id, meth_id, propdef ? propdef : "<null>");
  201|    135|    return ossl_method_store_add(store, prov, meth_id, propdef, method,
  202|    135|        methdata->refcnt_up_method,
  203|    135|        methdata->destruct_method);
  204|    135|}
evp_fetch.c:construct_evp_method:
  212|    135|{
  213|       |    /*
  214|       |     * This function is only called if get_evp_method_from_store() returned
  215|       |     * NULL, so it's safe to say that of all the spots to create a new
  216|       |     * namemap entry, this is it.  Should the name already exist there, we
  217|       |     * know that ossl_namemap_add_name() will return its corresponding
  218|       |     * number.
  219|       |     */
  220|    135|    struct evp_method_data_st *methdata = data;
  221|    135|    OSSL_LIB_CTX *libctx = ossl_provider_libctx(prov);
  222|    135|    OSSL_NAMEMAP *namemap = ossl_namemap_stored(libctx);
  223|    135|    const char *names = algodef->algorithm_names;
  224|    135|    int name_id = ossl_namemap_add_names(namemap, 0, names, NAME_SEPARATOR);
  ------------------
  |  |   24|    135|#define NAME_SEPARATOR ':'
  ------------------
  225|    135|    void *method;
  226|       |
  227|    135|    if (name_id == 0)
  ------------------
  |  Branch (227:9): [True: 0, False: 135]
  ------------------
  228|      0|        return NULL;
  229|       |
  230|    135|    method = methdata->method_from_algorithm(name_id, algodef, prov);
  231|       |
  232|       |    /*
  233|       |     * Flag to indicate that there was actual construction errors.  This
  234|       |     * helps inner_evp_generic_fetch() determine what error it should
  235|       |     * record on inaccessible algorithms.
  236|       |     */
  237|    135|    if (method == NULL)
  ------------------
  |  Branch (237:9): [True: 0, False: 135]
  ------------------
  238|      0|        methdata->flag_construct_error_occurred = 1;
  239|       |
  240|    135|    return method;
  241|    135|}
evp_fetch.c:destruct_evp_method:
  244|    135|{
  245|    135|    struct evp_method_data_st *methdata = data;
  246|       |
  247|    135|    methdata->destruct_method(method);
  248|    135|}
evp_fetch.c:dealloc_tmp_evp_method_store:
   61|      7|{
   62|      7|    OSSL_TRACE1(QUERY, "Deallocating the tmp_store %p\n", store);
  ------------------
  |  |  291|      7|    OSSL_TRACEV(category, (trc_out, format, arg1))
  |  |  ------------------
  |  |  |  |  283|      7|#define OSSL_TRACEV(category, args) ((void)0)
  |  |  ------------------
  ------------------
   63|      7|    if (store != NULL)
  ------------------
  |  Branch (63:9): [True: 0, False: 7]
  ------------------
   64|      0|        ossl_method_store_free(store);
   65|      7|}
evp_fetch.c:get_evp_method_store:
   68|    164|{
   69|    164|    return ossl_lib_ctx_get_data(libctx, OSSL_LIB_CTX_EVP_METHOD_STORE_INDEX);
  ------------------
  |  |   95|    164|#define OSSL_LIB_CTX_EVP_METHOD_STORE_INDEX 0
  ------------------
   70|    164|}

EVP_CIPHER_get_type:
  241|    183|{
  242|    183|    int nid;
  243|    183|    nid = EVP_CIPHER_get_nid(cipher);
  244|       |
  245|    183|    switch (nid) {
  246|       |
  247|      3|    case NID_rc2_cbc:
  ------------------
  |  | 1307|      3|#define NID_rc2_cbc             37
  ------------------
  |  Branch (247:5): [True: 3, False: 180]
  ------------------
  248|      5|    case NID_rc2_64_cbc:
  ------------------
  |  | 1328|      5|#define NID_rc2_64_cbc          166
  ------------------
  |  Branch (248:5): [True: 2, False: 181]
  ------------------
  249|      7|    case NID_rc2_40_cbc:
  ------------------
  |  | 1324|      7|#define NID_rc2_40_cbc          98
  ------------------
  |  Branch (249:5): [True: 2, False: 181]
  ------------------
  250|       |
  251|      7|        return NID_rc2_cbc;
  ------------------
  |  | 1307|      7|#define NID_rc2_cbc             37
  ------------------
  252|       |
  253|      1|    case NID_rc4:
  ------------------
  |  | 1332|      1|#define NID_rc4         5
  ------------------
  |  Branch (253:5): [True: 1, False: 182]
  ------------------
  254|      2|    case NID_rc4_40:
  ------------------
  |  | 1337|      2|#define NID_rc4_40              97
  ------------------
  |  Branch (254:5): [True: 1, False: 182]
  ------------------
  255|       |
  256|      2|        return NID_rc4;
  ------------------
  |  | 1332|      2|#define NID_rc4         5
  ------------------
  257|       |
  258|      1|    case NID_aes_128_cfb128:
  ------------------
  |  | 3116|      1|#define NID_aes_128_cfb128              421
  ------------------
  |  Branch (258:5): [True: 1, False: 182]
  ------------------
  259|      2|    case NID_aes_128_cfb8:
  ------------------
  |  | 3237|      2|#define NID_aes_128_cfb8                653
  ------------------
  |  Branch (259:5): [True: 1, False: 182]
  ------------------
  260|      3|    case NID_aes_128_cfb1:
  ------------------
  |  | 3225|      3|#define NID_aes_128_cfb1                650
  ------------------
  |  Branch (260:5): [True: 1, False: 182]
  ------------------
  261|       |
  262|      3|        return NID_aes_128_cfb128;
  ------------------
  |  | 3116|      3|#define NID_aes_128_cfb128              421
  ------------------
  263|       |
  264|      1|    case NID_aes_192_cfb128:
  ------------------
  |  | 3154|      1|#define NID_aes_192_cfb128              425
  ------------------
  |  Branch (264:5): [True: 1, False: 182]
  ------------------
  265|      2|    case NID_aes_192_cfb8:
  ------------------
  |  | 3241|      2|#define NID_aes_192_cfb8                654
  ------------------
  |  Branch (265:5): [True: 1, False: 182]
  ------------------
  266|      3|    case NID_aes_192_cfb1:
  ------------------
  |  | 3229|      3|#define NID_aes_192_cfb1                651
  ------------------
  |  Branch (266:5): [True: 1, False: 182]
  ------------------
  267|       |
  268|      3|        return NID_aes_192_cfb128;
  ------------------
  |  | 3154|      3|#define NID_aes_192_cfb128              425
  ------------------
  269|       |
  270|      1|    case NID_aes_256_cfb128:
  ------------------
  |  | 3192|      1|#define NID_aes_256_cfb128              429
  ------------------
  |  Branch (270:5): [True: 1, False: 182]
  ------------------
  271|      2|    case NID_aes_256_cfb8:
  ------------------
  |  | 3245|      2|#define NID_aes_256_cfb8                655
  ------------------
  |  Branch (271:5): [True: 1, False: 182]
  ------------------
  272|      3|    case NID_aes_256_cfb1:
  ------------------
  |  | 3233|      3|#define NID_aes_256_cfb1                652
  ------------------
  |  Branch (272:5): [True: 1, False: 182]
  ------------------
  273|       |
  274|      3|        return NID_aes_256_cfb128;
  ------------------
  |  | 3192|      3|#define NID_aes_256_cfb128              429
  ------------------
  275|       |
  276|      1|    case NID_des_cfb64:
  ------------------
  |  | 2286|      1|#define NID_des_cfb64           30
  ------------------
  |  Branch (276:5): [True: 1, False: 182]
  ------------------
  277|      2|    case NID_des_cfb8:
  ------------------
  |  | 3277|      2|#define NID_des_cfb8            657
  ------------------
  |  Branch (277:5): [True: 1, False: 182]
  ------------------
  278|      3|    case NID_des_cfb1:
  ------------------
  |  | 3273|      3|#define NID_des_cfb1            656
  ------------------
  |  Branch (278:5): [True: 1, False: 182]
  ------------------
  279|       |
  280|      3|        return NID_des_cfb64;
  ------------------
  |  | 2286|      3|#define NID_des_cfb64           30
  ------------------
  281|       |
  282|      1|    case NID_des_ede3_cfb64:
  ------------------
  |  | 2327|      1|#define NID_des_ede3_cfb64              61
  ------------------
  |  Branch (282:5): [True: 1, False: 182]
  ------------------
  283|      2|    case NID_des_ede3_cfb8:
  ------------------
  |  | 3285|      2|#define NID_des_ede3_cfb8               659
  ------------------
  |  Branch (283:5): [True: 1, False: 182]
  ------------------
  284|      3|    case NID_des_ede3_cfb1:
  ------------------
  |  | 3281|      3|#define NID_des_ede3_cfb1               658
  ------------------
  |  Branch (284:5): [True: 1, False: 182]
  ------------------
  285|       |
  286|      3|        return NID_des_ede3_cfb64;
  ------------------
  |  | 2327|      3|#define NID_des_ede3_cfb64              61
  ------------------
  287|       |
  288|    159|    default:
  ------------------
  |  Branch (288:5): [True: 159, False: 24]
  ------------------
  289|       |#ifdef FIPS_MODULE
  290|       |        return NID_undef;
  291|       |#else
  292|    159|    {
  293|       |        /* Check it has an OID and it is valid */
  294|    159|        ASN1_OBJECT *otmp = OBJ_nid2obj(nid);
  295|       |
  296|    159|        if (OBJ_get0_data(otmp) == NULL)
  ------------------
  |  Branch (296:13): [True: 48, False: 111]
  ------------------
  297|     48|            nid = NID_undef;
  ------------------
  |  |   18|     48|#define NID_undef                       0
  ------------------
  298|    159|        ASN1_OBJECT_free(otmp);
  299|    159|        return nid;
  300|      2|    }
  301|    183|#endif
  302|    183|    }
  303|    183|}
evp_cipher_cache_constants:
  306|    130|{
  307|    130|    int ok, aead = 0, custom_iv = 0, cts = 0, multiblock = 0, randkey = 0;
  308|    130|    int encrypt_then_mac = 0;
  309|    130|    size_t ivlen = 0;
  310|    130|    size_t blksz = 0;
  311|    130|    size_t keylen = 0;
  312|    130|    unsigned int mode = 0;
  313|    130|    OSSL_PARAM params[11];
  314|       |
  315|    130|    params[0] = OSSL_PARAM_construct_size_t(OSSL_CIPHER_PARAM_BLOCK_SIZE, &blksz);
  ------------------
  |  |  186|    130|# define OSSL_CIPHER_PARAM_BLOCK_SIZE "blocksize"
  ------------------
  316|    130|    params[1] = OSSL_PARAM_construct_size_t(OSSL_CIPHER_PARAM_IVLEN, &ivlen);
  ------------------
  |  |  196|    130|# define OSSL_CIPHER_PARAM_IVLEN "ivlen"
  ------------------
  317|    130|    params[2] = OSSL_PARAM_construct_size_t(OSSL_CIPHER_PARAM_KEYLEN, &keylen);
  ------------------
  |  |  197|    130|# define OSSL_CIPHER_PARAM_KEYLEN "keylen"
  ------------------
  318|    130|    params[3] = OSSL_PARAM_construct_uint(OSSL_CIPHER_PARAM_MODE, &mode);
  ------------------
  |  |  198|    130|# define OSSL_CIPHER_PARAM_MODE "mode"
  ------------------
  319|    130|    params[4] = OSSL_PARAM_construct_int(OSSL_CIPHER_PARAM_AEAD, &aead);
  ------------------
  |  |  172|    130|# define OSSL_CIPHER_PARAM_AEAD "aead"
  ------------------
  320|    130|    params[5] = OSSL_PARAM_construct_int(OSSL_CIPHER_PARAM_CUSTOM_IV,
  ------------------
  |  |  189|    130|# define OSSL_CIPHER_PARAM_CUSTOM_IV "custom-iv"
  ------------------
  321|    130|        &custom_iv);
  322|    130|    params[6] = OSSL_PARAM_construct_int(OSSL_CIPHER_PARAM_CTS, &cts);
  ------------------
  |  |  187|    130|# define OSSL_CIPHER_PARAM_CTS "cts"
  ------------------
  323|    130|    params[7] = OSSL_PARAM_construct_int(OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK,
  ------------------
  |  |  206|    130|# define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK "tls-multi"
  ------------------
  324|    130|        &multiblock);
  325|    130|    params[8] = OSSL_PARAM_construct_int(OSSL_CIPHER_PARAM_HAS_RAND_KEY,
  ------------------
  |  |  194|    130|# define OSSL_CIPHER_PARAM_HAS_RAND_KEY "has-randkey"
  ------------------
  326|    130|        &randkey);
  327|    130|    params[9] = OSSL_PARAM_construct_int(OSSL_CIPHER_PARAM_ENCRYPT_THEN_MAC,
  ------------------
  |  |  191|    130|# define OSSL_CIPHER_PARAM_ENCRYPT_THEN_MAC "encrypt-then-mac"
  ------------------
  328|    130|        &encrypt_then_mac);
  329|    130|    params[10] = OSSL_PARAM_construct_end();
  330|    130|    ok = evp_do_ciph_getparams(cipher, params) > 0;
  331|    130|    if (ok) {
  ------------------
  |  Branch (331:9): [True: 130, False: 0]
  ------------------
  332|    130|        cipher->block_size = (int)blksz;
  333|    130|        cipher->iv_len = (int)ivlen;
  334|    130|        cipher->key_len = (int)keylen;
  335|    130|        cipher->flags = mode;
  336|    130|        if (aead)
  ------------------
  |  Branch (336:13): [True: 28, False: 102]
  ------------------
  337|     28|            cipher->flags |= EVP_CIPH_FLAG_AEAD_CIPHER;
  ------------------
  |  |  256|     28|#define EVP_CIPH_FLAG_AEAD_CIPHER 0x200000
  ------------------
  338|    130|        if (custom_iv)
  ------------------
  |  Branch (338:13): [True: 41, False: 89]
  ------------------
  339|     41|            cipher->flags |= EVP_CIPH_CUSTOM_IV;
  ------------------
  |  |  226|     41|#define EVP_CIPH_CUSTOM_IV 0x10
  ------------------
  340|    130|        if (cts)
  ------------------
  |  Branch (340:13): [True: 6, False: 124]
  ------------------
  341|      6|            cipher->flags |= EVP_CIPH_FLAG_CTS;
  ------------------
  |  |  254|      6|#define EVP_CIPH_FLAG_CTS 0x4000
  ------------------
  342|    130|        if (multiblock)
  ------------------
  |  Branch (342:13): [True: 4, False: 126]
  ------------------
  343|      4|            cipher->flags |= EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK;
  ------------------
  |  |  257|      4|#define EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK 0x400000
  ------------------
  344|    130|        if (cipher->ccipher != NULL)
  ------------------
  |  Branch (344:13): [True: 118, False: 12]
  ------------------
  345|    118|            cipher->flags |= EVP_CIPH_FLAG_CUSTOM_CIPHER;
  ------------------
  |  |  255|    118|#define EVP_CIPH_FLAG_CUSTOM_CIPHER 0x100000
  ------------------
  346|    130|        if (randkey)
  ------------------
  |  Branch (346:13): [True: 11, False: 119]
  ------------------
  347|     11|            cipher->flags |= EVP_CIPH_RAND_KEY;
  ------------------
  |  |  236|     11|#define EVP_CIPH_RAND_KEY 0x200
  ------------------
  348|    130|        if (encrypt_then_mac)
  ------------------
  |  Branch (348:13): [True: 0, False: 130]
  ------------------
  349|      0|            cipher->flags |= EVP_CIPH_FLAG_ENC_THEN_MAC;
  ------------------
  |  |  267|      0|#define EVP_CIPH_FLAG_ENC_THEN_MAC 0x10000000
  ------------------
  350|    130|        if (OSSL_PARAM_locate_const(EVP_CIPHER_gettable_ctx_params(cipher),
  ------------------
  |  Branch (350:13): [True: 0, False: 130]
  ------------------
  351|    130|                OSSL_CIPHER_PARAM_ALGORITHM_ID_PARAMS))
  ------------------
  |  |  184|    130|# define OSSL_CIPHER_PARAM_ALGORITHM_ID_PARAMS OSSL_ALG_PARAM_ALGORITHM_ID_PARAMS
  |  |  ------------------
  |  |  |  |  125|    130|# define OSSL_ALG_PARAM_ALGORITHM_ID_PARAMS "algorithm-id-params"
  |  |  ------------------
  ------------------
  352|      0|            cipher->flags |= EVP_CIPH_FLAG_CUSTOM_ASN1;
  ------------------
  |  |  261|      0|#define EVP_CIPH_FLAG_CUSTOM_ASN1 0x1000000
  ------------------
  353|    130|    }
  354|    130|    return ok;
  355|    130|}
EVP_CIPHER_get_iv_length:
  473|      2|{
  474|      2|    return (cipher == NULL) ? 0 : cipher->iv_len;
  ------------------
  |  Branch (474:12): [True: 0, False: 2]
  ------------------
  475|      2|}
EVP_CIPHER_CTX_get_iv_length:
  478|  6.53k|{
  479|  6.53k|    if (ctx->cipher == NULL)
  ------------------
  |  Branch (479:9): [True: 0, False: 6.53k]
  ------------------
  480|      0|        return 0;
  481|       |
  482|  6.53k|    if (ctx->iv_len < 0) {
  ------------------
  |  Branch (482:9): [True: 2, False: 6.53k]
  ------------------
  483|      2|        int rv, len = EVP_CIPHER_get_iv_length(ctx->cipher);
  484|      2|        size_t v = len;
  485|      2|        OSSL_PARAM params[2] = { OSSL_PARAM_END, OSSL_PARAM_END };
  ------------------
  |  |   25|      2|    { NULL, 0, NULL, 0, 0 }
  ------------------
                      OSSL_PARAM params[2] = { OSSL_PARAM_END, OSSL_PARAM_END };
  ------------------
  |  |   25|      2|    { NULL, 0, NULL, 0, 0 }
  ------------------
  486|       |
  487|      2|        if (ctx->cipher->get_ctx_params != NULL) {
  ------------------
  |  Branch (487:13): [True: 2, False: 0]
  ------------------
  488|      2|            params[0] = OSSL_PARAM_construct_size_t(OSSL_CIPHER_PARAM_IVLEN,
  ------------------
  |  |  196|      2|# define OSSL_CIPHER_PARAM_IVLEN "ivlen"
  ------------------
  489|      2|                &v);
  490|      2|            rv = evp_do_ciph_ctx_getparams(ctx->cipher, ctx->algctx, params);
  491|      2|            if (rv > 0) {
  ------------------
  |  Branch (491:17): [True: 2, False: 0]
  ------------------
  492|      2|                if (OSSL_PARAM_modified(params)
  ------------------
  |  Branch (492:21): [True: 2, False: 0]
  ------------------
  493|      2|                    && !OSSL_PARAM_get_int(params, &len))
  ------------------
  |  Branch (493:24): [True: 0, False: 2]
  ------------------
  494|      0|                    return -1;
  495|      2|            } else if (rv != EVP_CTRL_RET_UNSUPPORTED) {
  ------------------
  |  |   13|      0|#define EVP_CTRL_RET_UNSUPPORTED -1
  ------------------
  |  Branch (495:24): [True: 0, False: 0]
  ------------------
  496|      0|                return -1;
  497|      0|            }
  498|      2|        }
  499|       |        /* Code below to be removed when legacy support is dropped. */
  500|      0|        else if ((EVP_CIPHER_get_flags(ctx->cipher)
  ------------------
  |  Branch (500:18): [True: 0, False: 0]
  ------------------
  501|      0|                     & EVP_CIPH_CUSTOM_IV_LENGTH)
  ------------------
  |  |  240|      0|#define EVP_CIPH_CUSTOM_IV_LENGTH 0x800
  ------------------
  502|      0|            != 0) {
  503|      0|            rv = EVP_CIPHER_CTX_ctrl((EVP_CIPHER_CTX *)ctx, EVP_CTRL_GET_IVLEN,
  ------------------
  |  |  341|      0|#define EVP_CTRL_GET_IVLEN 0x25
  ------------------
  504|      0|                0, &len);
  505|      0|            if (rv <= 0)
  ------------------
  |  Branch (505:17): [True: 0, False: 0]
  ------------------
  506|      0|                return -1;
  507|      0|        }
  508|       |        /*-
  509|       |         * Casting away the const is annoying but required here.  We need to
  510|       |         * cache the result for performance reasons.
  511|       |         */
  512|      2|        ((EVP_CIPHER_CTX *)ctx)->iv_len = len;
  513|      2|    }
  514|  6.53k|    return ctx->iv_len;
  515|  6.53k|}
EVP_CIPHER_get_key_length:
  620|      2|{
  621|      2|    return cipher->key_len;
  622|      2|}
EVP_CIPHER_CTX_get_key_length:
  625|  13.0k|{
  626|  13.0k|    if (ctx->cipher == NULL)
  ------------------
  |  Branch (626:9): [True: 0, False: 13.0k]
  ------------------
  627|      0|        return 0;
  628|       |
  629|  13.0k|    if (ctx->key_len <= 0 && ctx->cipher->prov != NULL) {
  ------------------
  |  Branch (629:9): [True: 6, False: 13.0k]
  |  Branch (629:30): [True: 6, False: 0]
  ------------------
  630|      6|        int ok;
  631|      6|        OSSL_PARAM params[2] = { OSSL_PARAM_END, OSSL_PARAM_END };
  ------------------
  |  |   25|      6|    { NULL, 0, NULL, 0, 0 }
  ------------------
                      OSSL_PARAM params[2] = { OSSL_PARAM_END, OSSL_PARAM_END };
  ------------------
  |  |   25|      6|    { NULL, 0, NULL, 0, 0 }
  ------------------
  632|      6|        size_t len;
  633|       |
  634|      6|        params[0] = OSSL_PARAM_construct_size_t(OSSL_CIPHER_PARAM_KEYLEN, &len);
  ------------------
  |  |  197|      6|# define OSSL_CIPHER_PARAM_KEYLEN "keylen"
  ------------------
  635|      6|        ok = evp_do_ciph_ctx_getparams(ctx->cipher, ctx->algctx, params);
  636|      6|        if (ok <= 0)
  ------------------
  |  Branch (636:13): [True: 0, False: 6]
  ------------------
  637|      0|            return EVP_CTRL_RET_UNSUPPORTED;
  ------------------
  |  |   13|      0|#define EVP_CTRL_RET_UNSUPPORTED -1
  ------------------
  638|       |
  639|       |        /*-
  640|       |         * The if branch should never be taken since EVP_MAX_KEY_LENGTH is
  641|       |         * less than INT_MAX but best to be safe.
  642|       |         *
  643|       |         * Casting away the const is annoying but required here.  We need to
  644|       |         * cache the result for performance reasons.
  645|       |         */
  646|      6|        if (!OSSL_PARAM_get_int(params, &((EVP_CIPHER_CTX *)ctx)->key_len))
  ------------------
  |  Branch (646:13): [True: 0, False: 6]
  ------------------
  647|      0|            return -1;
  648|      6|        ((EVP_CIPHER_CTX *)ctx)->key_len = (int)len;
  649|      6|    }
  650|  13.0k|    return ctx->key_len;
  651|  13.0k|}
EVP_CIPHER_get_nid:
  654|    317|{
  655|    317|    return (cipher == NULL) ? NID_undef : cipher->nid;
  ------------------
  |  |   18|      0|#define NID_undef                       0
  ------------------
  |  Branch (655:12): [True: 0, False: 317]
  ------------------
  656|    317|}
EVP_CIPHER_get0_provider:
  710|    130|{
  711|    130|    return cipher->prov;
  712|    130|}
EVP_MD_get_type:
  773|     59|{
  774|     59|    return md->type;
  775|     59|}

EVP_RAND_enable_locking:
   95|      1|{
   96|      1|    if (rand->meth->enable_locking != NULL)
  ------------------
  |  Branch (96:9): [True: 1, False: 0]
  ------------------
   97|      1|        return rand->meth->enable_locking(rand->algctx);
   98|      1|    ERR_raise(ERR_LIB_EVP, EVP_R_LOCKING_NOT_SUPPORTED);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
   99|      0|    return 0;
  100|      1|}
EVP_RAND_fetch:
  284|      3|{
  285|      3|    return evp_generic_fetch(libctx, OSSL_OP_RAND, algorithm, properties,
  ------------------
  |  |  287|      3|#define OSSL_OP_RAND 5
  ------------------
  286|      3|        evp_rand_from_algorithm, evp_rand_up_ref,
  287|      3|        evp_rand_free);
  288|      3|}
EVP_RAND_up_ref:
  291|      3|{
  292|      3|    return evp_rand_up_ref(rand);
  293|      3|}
EVP_RAND_free:
  296|      3|{
  297|      3|    evp_rand_free(rand);
  298|      3|}
EVP_RAND_get0_provider:
  321|      4|{
  322|      4|    return rand->prov;
  323|      4|}
EVP_RAND_CTX_up_ref:
  333|      2|{
  334|      2|    int ref = 0;
  335|       |
  336|      2|    return CRYPTO_UP_REF(&ctx->refcnt, &ref);
  337|      2|}
EVP_RAND_CTX_new:
  340|      3|{
  341|      3|    EVP_RAND_CTX *ctx;
  342|      3|    void *parent_ctx = NULL;
  343|      3|    const OSSL_DISPATCH *parent_dispatch = NULL;
  344|       |
  345|      3|    if (rand == NULL) {
  ------------------
  |  Branch (345:9): [True: 0, False: 3]
  ------------------
  346|      0|        ERR_raise(ERR_LIB_EVP, EVP_R_INVALID_NULL_ALGORITHM);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  347|      0|        return NULL;
  348|      0|    }
  349|       |
  350|      3|    ctx = OPENSSL_zalloc(sizeof(*ctx));
  ------------------
  |  |  109|      3|    CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  351|      3|    if (ctx == NULL)
  ------------------
  |  Branch (351:9): [True: 0, False: 3]
  ------------------
  352|      0|        return NULL;
  353|      3|    if (!CRYPTO_NEW_REF(&ctx->refcnt, 1)) {
  ------------------
  |  Branch (353:9): [True: 0, False: 3]
  ------------------
  354|      0|        OPENSSL_free(ctx);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  355|      0|        return NULL;
  356|      0|    }
  357|      3|    if (parent != NULL) {
  ------------------
  |  Branch (357:9): [True: 2, False: 1]
  ------------------
  358|      2|        if (!EVP_RAND_CTX_up_ref(parent)) {
  ------------------
  |  Branch (358:13): [True: 0, False: 2]
  ------------------
  359|      0|            ERR_raise(ERR_LIB_EVP, ERR_R_INTERNAL_ERROR);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  360|      0|            CRYPTO_FREE_REF(&ctx->refcnt);
  361|      0|            OPENSSL_free(ctx);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  362|      0|            return NULL;
  363|      0|        }
  364|      2|        parent_ctx = parent->algctx;
  365|      2|        parent_dispatch = parent->meth->dispatch;
  366|      2|    }
  367|      3|    if ((ctx->algctx = rand->newctx(ossl_provider_ctx(rand->prov), parent_ctx,
  ------------------
  |  Branch (367:9): [True: 0, False: 3]
  ------------------
  368|      3|             parent_dispatch))
  369|      3|            == NULL
  370|      3|        || !EVP_RAND_up_ref(rand)) {
  ------------------
  |  Branch (370:12): [True: 0, False: 3]
  ------------------
  371|      0|        ERR_raise(ERR_LIB_EVP, ERR_R_EVP_LIB);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  372|      0|        rand->freectx(ctx->algctx);
  373|      0|        CRYPTO_FREE_REF(&ctx->refcnt);
  374|      0|        OPENSSL_free(ctx);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  375|      0|        EVP_RAND_CTX_free(parent);
  376|      0|        return NULL;
  377|      0|    }
  378|      3|    ctx->meth = rand;
  379|      3|    ctx->parent = parent;
  380|      3|    return ctx;
  381|      3|}
EVP_RAND_CTX_free:
  384|    218|{
  385|    218|    int ref = 0;
  386|    218|    EVP_RAND_CTX *parent;
  387|       |
  388|    218|    if (ctx == NULL)
  ------------------
  |  Branch (388:9): [True: 218, False: 0]
  ------------------
  389|    218|        return;
  390|       |
  391|      0|    CRYPTO_DOWN_REF(&ctx->refcnt, &ref);
  392|      0|    if (ref > 0)
  ------------------
  |  Branch (392:9): [True: 0, False: 0]
  ------------------
  393|      0|        return;
  394|      0|    parent = ctx->parent;
  395|      0|    ctx->meth->freectx(ctx->algctx);
  396|      0|    ctx->algctx = NULL;
  397|      0|    EVP_RAND_free(ctx->meth);
  398|      0|    CRYPTO_FREE_REF(&ctx->refcnt);
  399|      0|    OPENSSL_free(ctx);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  400|      0|    EVP_RAND_CTX_free(parent);
  401|      0|}
EVP_RAND_CTX_get_params:
  415|  6.53k|{
  416|  6.53k|    int res;
  417|       |
  418|  6.53k|    if (!evp_rand_lock(ctx))
  ------------------
  |  Branch (418:9): [True: 0, False: 6.53k]
  ------------------
  419|      0|        return 0;
  420|  6.53k|    res = evp_rand_get_ctx_params_locked(ctx, params);
  421|  6.53k|    evp_rand_unlock(ctx);
  422|  6.53k|    return res;
  423|  6.53k|}
EVP_RAND_CTX_settable_params:
  482|      2|{
  483|      2|    void *provctx;
  484|       |
  485|      2|    if (ctx->meth->settable_ctx_params == NULL)
  ------------------
  |  Branch (485:9): [True: 0, False: 2]
  ------------------
  486|      0|        return NULL;
  487|      2|    provctx = ossl_provider_ctx(EVP_RAND_get0_provider(ctx->meth));
  488|      2|    return ctx->meth->settable_ctx_params(ctx->algctx, provctx);
  489|      2|}
EVP_RAND_instantiate:
  522|      3|{
  523|      3|    int res;
  524|       |
  525|      3|    if (!evp_rand_lock(ctx))
  ------------------
  |  Branch (525:9): [True: 0, False: 3]
  ------------------
  526|      0|        return 0;
  527|      3|    res = evp_rand_instantiate_locked(ctx, strength, prediction_resistance,
  528|      3|        pstr, pstr_len, params);
  529|      3|    evp_rand_unlock(ctx);
  530|      3|    return res;
  531|      3|}
EVP_RAND_generate:
  584|  6.53k|{
  585|  6.53k|    int res;
  586|       |
  587|  6.53k|    if (!evp_rand_lock(ctx))
  ------------------
  |  Branch (587:9): [True: 0, False: 6.53k]
  ------------------
  588|      0|        return 0;
  589|  6.53k|    res = evp_rand_generate_locked(ctx, out, outlen, strength,
  590|  6.53k|        prediction_resistance, addin, addin_len);
  591|  6.53k|    evp_rand_unlock(ctx);
  592|  6.53k|    return res;
  593|  6.53k|}
EVP_RAND_get_state:
  668|  6.53k|{
  669|  6.53k|    OSSL_PARAM params[2] = { OSSL_PARAM_END, OSSL_PARAM_END };
  ------------------
  |  |   25|  6.53k|    { NULL, 0, NULL, 0, 0 }
  ------------------
                  OSSL_PARAM params[2] = { OSSL_PARAM_END, OSSL_PARAM_END };
  ------------------
  |  |   25|  6.53k|    { NULL, 0, NULL, 0, 0 }
  ------------------
  670|  6.53k|    int state;
  671|       |
  672|  6.53k|    params[0] = OSSL_PARAM_construct_int(OSSL_RAND_PARAM_STATE, &state);
  ------------------
  |  |  552|  6.53k|# define OSSL_RAND_PARAM_STATE "state"
  ------------------
  673|  6.53k|    if (!EVP_RAND_CTX_get_params(ctx, params))
  ------------------
  |  Branch (673:9): [True: 0, False: 6.53k]
  ------------------
  674|      0|        state = EVP_RAND_STATE_ERROR;
  ------------------
  |  | 1251|      0|#define EVP_RAND_STATE_ERROR 2
  ------------------
  675|  6.53k|    return state;
  676|  6.53k|}
evp_rand.c:evp_rand_from_algorithm:
  120|      5|{
  121|      5|    const OSSL_DISPATCH *fns = algodef->implementation;
  122|      5|    EVP_RAND *rand = NULL;
  123|      5|    int fnrandcnt = 0, fnctxcnt = 0, fnlockcnt = 0, fnenablelockcnt = 0;
  124|       |#ifdef FIPS_MODULE
  125|       |    int fnzeroizecnt = 0;
  126|       |#endif
  127|       |
  128|      5|    if ((rand = evp_rand_new()) == NULL) {
  ------------------
  |  Branch (128:9): [True: 0, False: 5]
  ------------------
  129|      0|        ERR_raise(ERR_LIB_EVP, ERR_R_EVP_LIB);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  130|      0|        return NULL;
  131|      0|    }
  132|      5|    rand->name_id = name_id;
  133|      5|    if ((rand->type_name = ossl_algorithm_get1_first_name(algodef)) == NULL) {
  ------------------
  |  Branch (133:9): [True: 0, False: 5]
  ------------------
  134|      0|        evp_rand_free(rand);
  135|      0|        return NULL;
  136|      0|    }
  137|      5|    rand->description = algodef->algorithm_description;
  138|      5|    rand->dispatch = fns;
  139|     83|    for (; fns->function_id != 0; fns++) {
  ------------------
  |  Branch (139:12): [True: 78, False: 5]
  ------------------
  140|     78|        switch (fns->function_id) {
  ------------------
  |  Branch (140:17): [True: 78, False: 0]
  ------------------
  141|      5|        case OSSL_FUNC_RAND_NEWCTX:
  ------------------
  |  |  541|      5|#define OSSL_FUNC_RAND_NEWCTX 1
  ------------------
  |  Branch (141:9): [True: 5, False: 73]
  ------------------
  142|      5|            if (rand->newctx != NULL)
  ------------------
  |  Branch (142:17): [True: 0, False: 5]
  ------------------
  143|      0|                break;
  144|      5|            rand->newctx = OSSL_FUNC_rand_newctx(fns);
  145|      5|            fnctxcnt++;
  146|      5|            break;
  147|      5|        case OSSL_FUNC_RAND_FREECTX:
  ------------------
  |  |  542|      5|#define OSSL_FUNC_RAND_FREECTX 2
  ------------------
  |  Branch (147:9): [True: 5, False: 73]
  ------------------
  148|      5|            if (rand->freectx != NULL)
  ------------------
  |  Branch (148:17): [True: 0, False: 5]
  ------------------
  149|      0|                break;
  150|      5|            rand->freectx = OSSL_FUNC_rand_freectx(fns);
  151|      5|            fnctxcnt++;
  152|      5|            break;
  153|      5|        case OSSL_FUNC_RAND_INSTANTIATE:
  ------------------
  |  |  543|      5|#define OSSL_FUNC_RAND_INSTANTIATE 3
  ------------------
  |  Branch (153:9): [True: 5, False: 73]
  ------------------
  154|      5|            if (rand->instantiate != NULL)
  ------------------
  |  Branch (154:17): [True: 0, False: 5]
  ------------------
  155|      0|                break;
  156|      5|            rand->instantiate = OSSL_FUNC_rand_instantiate(fns);
  157|      5|            fnrandcnt++;
  158|      5|            break;
  159|      5|        case OSSL_FUNC_RAND_UNINSTANTIATE:
  ------------------
  |  |  544|      5|#define OSSL_FUNC_RAND_UNINSTANTIATE 4
  ------------------
  |  Branch (159:9): [True: 5, False: 73]
  ------------------
  160|      5|            if (rand->uninstantiate != NULL)
  ------------------
  |  Branch (160:17): [True: 0, False: 5]
  ------------------
  161|      0|                break;
  162|      5|            rand->uninstantiate = OSSL_FUNC_rand_uninstantiate(fns);
  163|      5|            fnrandcnt++;
  164|      5|            break;
  165|      5|        case OSSL_FUNC_RAND_GENERATE:
  ------------------
  |  |  545|      5|#define OSSL_FUNC_RAND_GENERATE 5
  ------------------
  |  Branch (165:9): [True: 5, False: 73]
  ------------------
  166|      5|            if (rand->generate != NULL)
  ------------------
  |  Branch (166:17): [True: 0, False: 5]
  ------------------
  167|      0|                break;
  168|      5|            rand->generate = OSSL_FUNC_rand_generate(fns);
  169|      5|            fnrandcnt++;
  170|      5|            break;
  171|      5|        case OSSL_FUNC_RAND_RESEED:
  ------------------
  |  |  546|      5|#define OSSL_FUNC_RAND_RESEED 6
  ------------------
  |  Branch (171:9): [True: 5, False: 73]
  ------------------
  172|      5|            if (rand->reseed != NULL)
  ------------------
  |  Branch (172:17): [True: 0, False: 5]
  ------------------
  173|      0|                break;
  174|      5|            rand->reseed = OSSL_FUNC_rand_reseed(fns);
  175|      5|            break;
  176|      1|        case OSSL_FUNC_RAND_NONCE:
  ------------------
  |  |  547|      1|#define OSSL_FUNC_RAND_NONCE 7
  ------------------
  |  Branch (176:9): [True: 1, False: 77]
  ------------------
  177|      1|            if (rand->nonce != NULL)
  ------------------
  |  Branch (177:17): [True: 0, False: 1]
  ------------------
  178|      0|                break;
  179|      1|            rand->nonce = OSSL_FUNC_rand_nonce(fns);
  180|      1|            break;
  181|      5|        case OSSL_FUNC_RAND_ENABLE_LOCKING:
  ------------------
  |  |  548|      5|#define OSSL_FUNC_RAND_ENABLE_LOCKING 8
  ------------------
  |  Branch (181:9): [True: 5, False: 73]
  ------------------
  182|      5|            if (rand->enable_locking != NULL)
  ------------------
  |  Branch (182:17): [True: 0, False: 5]
  ------------------
  183|      0|                break;
  184|      5|            rand->enable_locking = OSSL_FUNC_rand_enable_locking(fns);
  185|      5|            fnenablelockcnt++;
  186|      5|            break;
  187|      5|        case OSSL_FUNC_RAND_LOCK:
  ------------------
  |  |  549|      5|#define OSSL_FUNC_RAND_LOCK 9
  ------------------
  |  Branch (187:9): [True: 5, False: 73]
  ------------------
  188|      5|            if (rand->lock != NULL)
  ------------------
  |  Branch (188:17): [True: 0, False: 5]
  ------------------
  189|      0|                break;
  190|      5|            rand->lock = OSSL_FUNC_rand_lock(fns);
  191|      5|            fnlockcnt++;
  192|      5|            break;
  193|      5|        case OSSL_FUNC_RAND_UNLOCK:
  ------------------
  |  |  550|      5|#define OSSL_FUNC_RAND_UNLOCK 10
  ------------------
  |  Branch (193:9): [True: 5, False: 73]
  ------------------
  194|      5|            if (rand->unlock != NULL)
  ------------------
  |  Branch (194:17): [True: 0, False: 5]
  ------------------
  195|      0|                break;
  196|      5|            rand->unlock = OSSL_FUNC_rand_unlock(fns);
  197|      5|            fnlockcnt++;
  198|      5|            break;
  199|      0|        case OSSL_FUNC_RAND_GETTABLE_PARAMS:
  ------------------
  |  |  551|      0|#define OSSL_FUNC_RAND_GETTABLE_PARAMS 11
  ------------------
  |  Branch (199:9): [True: 0, False: 78]
  ------------------
  200|      0|            if (rand->gettable_params != NULL)
  ------------------
  |  Branch (200:17): [True: 0, False: 0]
  ------------------
  201|      0|                break;
  202|      0|            rand->gettable_params = OSSL_FUNC_rand_gettable_params(fns);
  203|      0|            break;
  204|      5|        case OSSL_FUNC_RAND_GETTABLE_CTX_PARAMS:
  ------------------
  |  |  552|      5|#define OSSL_FUNC_RAND_GETTABLE_CTX_PARAMS 12
  ------------------
  |  Branch (204:9): [True: 5, False: 73]
  ------------------
  205|      5|            if (rand->gettable_ctx_params != NULL)
  ------------------
  |  Branch (205:17): [True: 0, False: 5]
  ------------------
  206|      0|                break;
  207|      5|            rand->gettable_ctx_params = OSSL_FUNC_rand_gettable_ctx_params(fns);
  208|      5|            break;
  209|      4|        case OSSL_FUNC_RAND_SETTABLE_CTX_PARAMS:
  ------------------
  |  |  553|      4|#define OSSL_FUNC_RAND_SETTABLE_CTX_PARAMS 13
  ------------------
  |  Branch (209:9): [True: 4, False: 74]
  ------------------
  210|      4|            if (rand->settable_ctx_params != NULL)
  ------------------
  |  Branch (210:17): [True: 0, False: 4]
  ------------------
  211|      0|                break;
  212|      4|            rand->settable_ctx_params = OSSL_FUNC_rand_settable_ctx_params(fns);
  213|      4|            break;
  214|      0|        case OSSL_FUNC_RAND_GET_PARAMS:
  ------------------
  |  |  554|      0|#define OSSL_FUNC_RAND_GET_PARAMS 14
  ------------------
  |  Branch (214:9): [True: 0, False: 78]
  ------------------
  215|      0|            if (rand->get_params != NULL)
  ------------------
  |  Branch (215:17): [True: 0, False: 0]
  ------------------
  216|      0|                break;
  217|      0|            rand->get_params = OSSL_FUNC_rand_get_params(fns);
  218|      0|            break;
  219|      5|        case OSSL_FUNC_RAND_GET_CTX_PARAMS:
  ------------------
  |  |  555|      5|#define OSSL_FUNC_RAND_GET_CTX_PARAMS 15
  ------------------
  |  Branch (219:9): [True: 5, False: 73]
  ------------------
  220|      5|            if (rand->get_ctx_params != NULL)
  ------------------
  |  Branch (220:17): [True: 0, False: 5]
  ------------------
  221|      0|                break;
  222|      5|            rand->get_ctx_params = OSSL_FUNC_rand_get_ctx_params(fns);
  223|      5|            fnctxcnt++;
  224|      5|            break;
  225|      4|        case OSSL_FUNC_RAND_SET_CTX_PARAMS:
  ------------------
  |  |  556|      4|#define OSSL_FUNC_RAND_SET_CTX_PARAMS 16
  ------------------
  |  Branch (225:9): [True: 4, False: 74]
  ------------------
  226|      4|            if (rand->set_ctx_params != NULL)
  ------------------
  |  Branch (226:17): [True: 0, False: 4]
  ------------------
  227|      0|                break;
  228|      4|            rand->set_ctx_params = OSSL_FUNC_rand_set_ctx_params(fns);
  229|      4|            break;
  230|      5|        case OSSL_FUNC_RAND_VERIFY_ZEROIZATION:
  ------------------
  |  |  557|      5|#define OSSL_FUNC_RAND_VERIFY_ZEROIZATION 17
  ------------------
  |  Branch (230:9): [True: 5, False: 73]
  ------------------
  231|      5|            if (rand->verify_zeroization != NULL)
  ------------------
  |  Branch (231:17): [True: 0, False: 5]
  ------------------
  232|      0|                break;
  233|      5|            rand->verify_zeroization = OSSL_FUNC_rand_verify_zeroization(fns);
  234|       |#ifdef FIPS_MODULE
  235|       |            fnzeroizecnt++;
  236|       |#endif
  237|      5|            break;
  238|      5|        case OSSL_FUNC_RAND_GET_SEED:
  ------------------
  |  |  558|      5|#define OSSL_FUNC_RAND_GET_SEED 18
  ------------------
  |  Branch (238:9): [True: 5, False: 73]
  ------------------
  239|      5|            if (rand->get_seed != NULL)
  ------------------
  |  Branch (239:17): [True: 0, False: 5]
  ------------------
  240|      0|                break;
  241|      5|            rand->get_seed = OSSL_FUNC_rand_get_seed(fns);
  242|      5|            break;
  243|      4|        case OSSL_FUNC_RAND_CLEAR_SEED:
  ------------------
  |  |  559|      4|#define OSSL_FUNC_RAND_CLEAR_SEED 19
  ------------------
  |  Branch (243:9): [True: 4, False: 74]
  ------------------
  244|      4|            if (rand->clear_seed != NULL)
  ------------------
  |  Branch (244:17): [True: 0, False: 4]
  ------------------
  245|      0|                break;
  246|      4|            rand->clear_seed = OSSL_FUNC_rand_clear_seed(fns);
  247|      4|            break;
  248|     78|        }
  249|     78|    }
  250|       |    /*
  251|       |     * In order to be a consistent set of functions we must have at least
  252|       |     * a complete set of "rand" functions and a complete set of context
  253|       |     * management functions.  In FIPS mode, we also require the zeroization
  254|       |     * verification function.
  255|       |     *
  256|       |     * In addition, if locking can be enabled, we need a complete set of
  257|       |     * locking functions.
  258|       |     */
  259|      5|    if (fnrandcnt != 3
  ------------------
  |  Branch (259:9): [True: 0, False: 5]
  ------------------
  260|      5|        || fnctxcnt != 3
  ------------------
  |  Branch (260:12): [True: 0, False: 5]
  ------------------
  261|      5|        || (fnenablelockcnt != 0 && fnenablelockcnt != 1)
  ------------------
  |  Branch (261:13): [True: 5, False: 0]
  |  Branch (261:37): [True: 0, False: 5]
  ------------------
  262|      5|        || (fnlockcnt != 0 && fnlockcnt != 2)
  ------------------
  |  Branch (262:13): [True: 5, False: 0]
  |  Branch (262:31): [True: 0, False: 5]
  ------------------
  263|       |#ifdef FIPS_MODULE
  264|       |        || fnzeroizecnt != 1
  265|       |#endif
  266|      5|    ) {
  267|      0|        evp_rand_free(rand);
  268|      0|        ERR_raise(ERR_LIB_EVP, EVP_R_INVALID_PROVIDER_FUNCTIONS);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  269|      0|        return NULL;
  270|      0|    }
  271|       |
  272|      5|    if (prov != NULL && !ossl_provider_up_ref(prov)) {
  ------------------
  |  Branch (272:9): [True: 5, False: 0]
  |  Branch (272:25): [True: 0, False: 5]
  ------------------
  273|      0|        evp_rand_free(rand);
  274|      0|        ERR_raise(ERR_LIB_EVP, ERR_R_INTERNAL_ERROR);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  275|      0|        return NULL;
  276|      0|    }
  277|      5|    rand->prov = prov;
  278|       |
  279|      5|    return rand;
  280|      5|}
evp_rand.c:evp_rand_new:
   80|      5|{
   81|      5|    EVP_RAND *rand = OPENSSL_zalloc(sizeof(*rand));
  ------------------
  |  |  109|      5|    CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   82|       |
   83|      5|    if (rand == NULL)
  ------------------
  |  Branch (83:9): [True: 0, False: 5]
  ------------------
   84|      0|        return NULL;
   85|       |
   86|      5|    if (!CRYPTO_NEW_REF(&rand->refcnt, 1)) {
  ------------------
  |  Branch (86:9): [True: 0, False: 5]
  ------------------
   87|      0|        OPENSSL_free(rand);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   88|      0|        return NULL;
   89|      0|    }
   90|      5|    return rand;
   91|      5|}
evp_rand.c:evp_rand_up_ref:
   54|     13|{
   55|     13|    EVP_RAND *rand = (EVP_RAND *)vrand;
   56|     13|    int ref = 0;
   57|       |
   58|     13|    if (rand != NULL)
  ------------------
  |  Branch (58:9): [True: 13, False: 0]
  ------------------
   59|     13|        return CRYPTO_UP_REF(&rand->refcnt, &ref);
   60|      0|    return 1;
   61|     13|}
evp_rand.c:evp_rand_free:
   64|      8|{
   65|      8|    EVP_RAND *rand = (EVP_RAND *)vrand;
   66|      8|    int ref = 0;
   67|       |
   68|      8|    if (rand == NULL)
  ------------------
  |  Branch (68:9): [True: 0, False: 8]
  ------------------
   69|      0|        return;
   70|      8|    CRYPTO_DOWN_REF(&rand->refcnt, &ref);
   71|      8|    if (ref > 0)
  ------------------
  |  Branch (71:9): [True: 8, False: 0]
  ------------------
   72|      8|        return;
   73|      0|    OPENSSL_free(rand->type_name);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   74|      0|    ossl_provider_free(rand->prov);
   75|      0|    CRYPTO_FREE_REF(&rand->refcnt);
   76|      0|    OPENSSL_free(rand);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   77|      0|}
evp_rand.c:evp_rand_lock:
  104|  13.0k|{
  105|  13.0k|    if (rand->meth->lock != NULL)
  ------------------
  |  Branch (105:9): [True: 13.0k, False: 0]
  ------------------
  106|  13.0k|        return rand->meth->lock(rand->algctx);
  107|      0|    return 1;
  108|  13.0k|}
evp_rand.c:evp_rand_get_ctx_params_locked:
  410|  13.0k|{
  411|  13.0k|    return ctx->meth->get_ctx_params(ctx->algctx, params);
  412|  13.0k|}
evp_rand.c:evp_rand_unlock:
  112|  13.0k|{
  113|  13.0k|    if (rand->meth->unlock != NULL)
  ------------------
  |  Branch (113:9): [True: 13.0k, False: 0]
  ------------------
  114|  13.0k|        rand->meth->unlock(rand->algctx);
  115|  13.0k|}
evp_rand.c:evp_rand_instantiate_locked:
  513|      3|{
  514|      3|    return ctx->meth->instantiate(ctx->algctx, strength, prediction_resistance,
  515|      3|        pstr, pstr_len, params);
  516|      3|}
evp_rand.c:evp_rand_generate_locked:
  554|  6.53k|{
  555|  6.53k|    size_t chunk, max_request = 0;
  556|  6.53k|    OSSL_PARAM params[2] = { OSSL_PARAM_END, OSSL_PARAM_END };
  ------------------
  |  |   25|  6.53k|    { NULL, 0, NULL, 0, 0 }
  ------------------
                  OSSL_PARAM params[2] = { OSSL_PARAM_END, OSSL_PARAM_END };
  ------------------
  |  |   25|  6.53k|    { NULL, 0, NULL, 0, 0 }
  ------------------
  557|       |
  558|  6.53k|    params[0] = OSSL_PARAM_construct_size_t(OSSL_RAND_PARAM_MAX_REQUEST,
  ------------------
  |  |  551|  6.53k|# define OSSL_RAND_PARAM_MAX_REQUEST "max_request"
  ------------------
  559|  6.53k|        &max_request);
  560|  6.53k|    if (!evp_rand_get_ctx_params_locked(ctx, params)
  ------------------
  |  Branch (560:9): [True: 0, False: 6.53k]
  ------------------
  561|  6.53k|        || max_request == 0) {
  ------------------
  |  Branch (561:12): [True: 0, False: 6.53k]
  ------------------
  562|      0|        ERR_raise(ERR_LIB_EVP, EVP_R_UNABLE_TO_GET_MAXIMUM_REQUEST_SIZE);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  563|      0|        return 0;
  564|      0|    }
  565|  13.0k|    for (; outlen > 0; outlen -= chunk, out += chunk) {
  ------------------
  |  Branch (565:12): [True: 6.53k, False: 6.53k]
  ------------------
  566|  6.53k|        chunk = outlen > max_request ? max_request : outlen;
  ------------------
  |  Branch (566:17): [True: 0, False: 6.53k]
  ------------------
  567|  6.53k|        if (!ctx->meth->generate(ctx->algctx, out, chunk, strength,
  ------------------
  |  Branch (567:13): [True: 0, False: 6.53k]
  ------------------
  568|  6.53k|                prediction_resistance, addin, addin_len)) {
  569|      0|            ERR_raise(ERR_LIB_EVP, EVP_R_GENERATE_ERROR);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  570|      0|            return 0;
  571|      0|        }
  572|       |        /*
  573|       |         * Prediction resistance is only relevant the first time around,
  574|       |         * subsequently, the DRBG has already been properly reseeded.
  575|       |         */
  576|  6.53k|        prediction_resistance = 0;
  577|  6.53k|    }
  578|  6.53k|    return 1;
  579|  6.53k|}

EVP_blake2b512:
   23|      1|{
   24|      1|    return &blake2b_md;
   25|      1|}
EVP_blake2s256:
   37|      1|{
   38|      1|    return &blake2s_md;
   39|      1|}

EVP_md4:
   29|      1|{
   30|      1|    return &md4_md;
   31|      1|}

EVP_md5:
   29|      1|{
   30|      1|    return &md5_md;
   31|      1|}

EVP_md5_sha1:
   30|      1|{
   31|      1|    return &md5_sha1_md;
   32|      1|}

EVP_mdc2:
   29|      1|{
   30|      1|    return &mdc2_md;
   31|      1|}

EVP_ripemd160:
   29|      1|{
   30|      1|    return &ripemd160_md;
   31|      1|}

EVP_sha1:
   30|      1|{
   31|      1|    return &sha1_md;
   32|      1|}
EVP_sha224:
   44|      1|{
   45|      1|    return &sha224_md;
   46|      1|}
EVP_sha256:
   58|      1|{
   59|      1|    return &sha256_md;
   60|      1|}
EVP_sha512_224:
   72|      1|{
   73|      1|    return &sha512_224_md;
   74|      1|}
EVP_sha512_256:
   86|      1|{
   87|      1|    return &sha512_256_md;
   88|      1|}
EVP_sha384:
  100|      1|{
  101|      1|    return &sha384_md;
  102|      1|}
EVP_sha512:
  114|      1|{
  115|      1|    return &sha512_md;
  116|      1|}
EVP_sha3_224:
  120|      1|    {                                              \
  121|      1|        static const EVP_MD sha3_##bitlen##_md = { \
  122|      1|            NID_sha3_##bitlen,                     \
  ------------------
  |  | 3321|      1|#define NID_sha3_224            1096
  ------------------
  123|      1|            NID_RSA_SHA3_##bitlen,                 \
  ------------------
  |  | 3443|      1|#define NID_RSA_SHA3_224                1116
  ------------------
  124|      1|            bitlen / 8,                            \
  125|      1|            EVP_MD_FLAG_DIGALGID_ABSENT,           \
  ------------------
  |  |  147|      1|#define EVP_MD_FLAG_DIGALGID_ABSENT 0x0008
  ------------------
  126|      1|            EVP_ORIG_GLOBAL,                       \
  ------------------
  |  |  187|      1|#define EVP_ORIG_GLOBAL 1
  ------------------
  127|      1|            (KECCAK1600_WIDTH - bitlen * 2) / 8    \
  ------------------
  |  |   18|      1|#define KECCAK1600_WIDTH 1600
  ------------------
  128|      1|        };                                         \
  129|      1|        return &sha3_##bitlen##_md;                \
  130|      1|    }
EVP_sha3_256:
  120|      1|    {                                              \
  121|      1|        static const EVP_MD sha3_##bitlen##_md = { \
  122|      1|            NID_sha3_##bitlen,                     \
  ------------------
  |  | 3326|      1|#define NID_sha3_256            1097
  ------------------
  123|      1|            NID_RSA_SHA3_##bitlen,                 \
  ------------------
  |  | 3448|      1|#define NID_RSA_SHA3_256                1117
  ------------------
  124|      1|            bitlen / 8,                            \
  125|      1|            EVP_MD_FLAG_DIGALGID_ABSENT,           \
  ------------------
  |  |  147|      1|#define EVP_MD_FLAG_DIGALGID_ABSENT 0x0008
  ------------------
  126|      1|            EVP_ORIG_GLOBAL,                       \
  ------------------
  |  |  187|      1|#define EVP_ORIG_GLOBAL 1
  ------------------
  127|      1|            (KECCAK1600_WIDTH - bitlen * 2) / 8    \
  ------------------
  |  |   18|      1|#define KECCAK1600_WIDTH 1600
  ------------------
  128|      1|        };                                         \
  129|      1|        return &sha3_##bitlen##_md;                \
  130|      1|    }
EVP_sha3_384:
  120|      1|    {                                              \
  121|      1|        static const EVP_MD sha3_##bitlen##_md = { \
  122|      1|            NID_sha3_##bitlen,                     \
  ------------------
  |  | 3331|      1|#define NID_sha3_384            1098
  ------------------
  123|      1|            NID_RSA_SHA3_##bitlen,                 \
  ------------------
  |  | 3453|      1|#define NID_RSA_SHA3_384                1118
  ------------------
  124|      1|            bitlen / 8,                            \
  125|      1|            EVP_MD_FLAG_DIGALGID_ABSENT,           \
  ------------------
  |  |  147|      1|#define EVP_MD_FLAG_DIGALGID_ABSENT 0x0008
  ------------------
  126|      1|            EVP_ORIG_GLOBAL,                       \
  ------------------
  |  |  187|      1|#define EVP_ORIG_GLOBAL 1
  ------------------
  127|      1|            (KECCAK1600_WIDTH - bitlen * 2) / 8    \
  ------------------
  |  |   18|      1|#define KECCAK1600_WIDTH 1600
  ------------------
  128|      1|        };                                         \
  129|      1|        return &sha3_##bitlen##_md;                \
  130|      1|    }
EVP_sha3_512:
  120|      1|    {                                              \
  121|      1|        static const EVP_MD sha3_##bitlen##_md = { \
  122|      1|            NID_sha3_##bitlen,                     \
  ------------------
  |  | 3336|      1|#define NID_sha3_512            1099
  ------------------
  123|      1|            NID_RSA_SHA3_##bitlen,                 \
  ------------------
  |  | 3458|      1|#define NID_RSA_SHA3_512                1119
  ------------------
  124|      1|            bitlen / 8,                            \
  125|      1|            EVP_MD_FLAG_DIGALGID_ABSENT,           \
  ------------------
  |  |  147|      1|#define EVP_MD_FLAG_DIGALGID_ABSENT 0x0008
  ------------------
  126|      1|            EVP_ORIG_GLOBAL,                       \
  ------------------
  |  |  187|      1|#define EVP_ORIG_GLOBAL 1
  ------------------
  127|      1|            (KECCAK1600_WIDTH - bitlen * 2) / 8    \
  ------------------
  |  |   18|      1|#define KECCAK1600_WIDTH 1600
  ------------------
  128|      1|        };                                         \
  129|      1|        return &sha3_##bitlen##_md;                \
  130|      1|    }
EVP_shake128:
  133|      1|    {                                                      \
  134|      1|        static const EVP_MD shake##bitlen##_md = {         \
  135|      1|            NID_shake##bitlen,                             \
  ------------------
  |  | 3341|      1|#define NID_shake128            1100
  ------------------
  136|      1|            0,                                             \
  137|      1|            bitlen / 8,                                    \
  138|      1|            EVP_MD_FLAG_XOF | EVP_MD_FLAG_DIGALGID_ABSENT, \
  ------------------
  |  |  135|      1|#define EVP_MD_FLAG_XOF 0x0002
  ------------------
                          EVP_MD_FLAG_XOF | EVP_MD_FLAG_DIGALGID_ABSENT, \
  ------------------
  |  |  147|      1|#define EVP_MD_FLAG_DIGALGID_ABSENT 0x0008
  ------------------
  139|      1|            EVP_ORIG_GLOBAL,                               \
  ------------------
  |  |  187|      1|#define EVP_ORIG_GLOBAL 1
  ------------------
  140|      1|            (KECCAK1600_WIDTH - bitlen * 2) / 8            \
  ------------------
  |  |   18|      1|#define KECCAK1600_WIDTH 1600
  ------------------
  141|      1|        };                                                 \
  142|      1|        return &shake##bitlen##_md;                        \
  143|      1|    }
EVP_shake256:
  133|      1|    {                                                      \
  134|      1|        static const EVP_MD shake##bitlen##_md = {         \
  135|      1|            NID_shake##bitlen,                             \
  ------------------
  |  | 3346|      1|#define NID_shake256            1101
  ------------------
  136|      1|            0,                                             \
  137|      1|            bitlen / 8,                                    \
  138|      1|            EVP_MD_FLAG_XOF | EVP_MD_FLAG_DIGALGID_ABSENT, \
  ------------------
  |  |  135|      1|#define EVP_MD_FLAG_XOF 0x0002
  ------------------
                          EVP_MD_FLAG_XOF | EVP_MD_FLAG_DIGALGID_ABSENT, \
  ------------------
  |  |  147|      1|#define EVP_MD_FLAG_DIGALGID_ABSENT 0x0008
  ------------------
  139|      1|            EVP_ORIG_GLOBAL,                               \
  ------------------
  |  |  187|      1|#define EVP_ORIG_GLOBAL 1
  ------------------
  140|      1|            (KECCAK1600_WIDTH - bitlen * 2) / 8            \
  ------------------
  |  |   18|      1|#define KECCAK1600_WIDTH 1600
  ------------------
  141|      1|        };                                                 \
  142|      1|        return &shake##bitlen##_md;                        \
  143|      1|    }

EVP_whirlpool:
   29|      1|{
   30|      1|    return &whirlpool_md;
   31|      1|}

EVP_add_cipher:
   20|    144|{
   21|    144|    int r;
   22|       |
   23|    144|    if (c == NULL)
  ------------------
  |  Branch (23:9): [True: 0, False: 144]
  ------------------
   24|      0|        return 0;
   25|       |
   26|    144|    r = OBJ_NAME_add(OBJ_nid2sn(c->nid), OBJ_NAME_TYPE_CIPHER_METH,
  ------------------
  |  |   26|    144|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  ------------------
   27|    144|        (const char *)c);
   28|    144|    if (r == 0)
  ------------------
  |  Branch (28:9): [True: 0, False: 144]
  ------------------
   29|      0|        return 0;
   30|    144|    r = OBJ_NAME_add(OBJ_nid2ln(c->nid), OBJ_NAME_TYPE_CIPHER_METH,
  ------------------
  |  |   26|    144|#define OBJ_NAME_TYPE_CIPHER_METH 0x02
  ------------------
   31|    144|        (const char *)c);
   32|    144|    return r;
   33|    144|}
EVP_add_digest:
   36|     22|{
   37|     22|    int r;
   38|     22|    const char *name;
   39|       |
   40|     22|    name = OBJ_nid2sn(md->type);
   41|     22|    r = OBJ_NAME_add(name, OBJ_NAME_TYPE_MD_METH, (const char *)md);
  ------------------
  |  |   25|     22|#define OBJ_NAME_TYPE_MD_METH 0x01
  ------------------
   42|     22|    if (r == 0)
  ------------------
  |  Branch (42:9): [True: 0, False: 22]
  ------------------
   43|      0|        return 0;
   44|     22|    r = OBJ_NAME_add(OBJ_nid2ln(md->type), OBJ_NAME_TYPE_MD_METH,
  ------------------
  |  |   25|     22|#define OBJ_NAME_TYPE_MD_METH 0x01
  ------------------
   45|     22|        (const char *)md);
   46|     22|    if (r == 0)
  ------------------
  |  Branch (46:9): [True: 0, False: 22]
  ------------------
   47|      0|        return 0;
   48|       |
   49|     22|    if (md->pkey_type && md->type != md->pkey_type) {
  ------------------
  |  Branch (49:9): [True: 17, False: 5]
  |  Branch (49:26): [True: 16, False: 1]
  ------------------
   50|     16|        r = OBJ_NAME_add(OBJ_nid2sn(md->pkey_type),
   51|     16|            OBJ_NAME_TYPE_MD_METH | OBJ_NAME_ALIAS, name);
  ------------------
  |  |   25|     16|#define OBJ_NAME_TYPE_MD_METH 0x01
  ------------------
                          OBJ_NAME_TYPE_MD_METH | OBJ_NAME_ALIAS, name);
  ------------------
  |  |   33|     16|#define OBJ_NAME_ALIAS 0x8000
  ------------------
   52|     16|        if (r == 0)
  ------------------
  |  Branch (52:13): [True: 0, False: 16]
  ------------------
   53|      0|            return 0;
   54|     16|        r = OBJ_NAME_add(OBJ_nid2ln(md->pkey_type),
   55|     16|            OBJ_NAME_TYPE_MD_METH | OBJ_NAME_ALIAS, name);
  ------------------
  |  |   25|     16|#define OBJ_NAME_TYPE_MD_METH 0x01
  ------------------
                          OBJ_NAME_TYPE_MD_METH | OBJ_NAME_ALIAS, name);
  ------------------
  |  |   33|     16|#define OBJ_NAME_ALIAS 0x8000
  ------------------
   56|     16|    }
   57|     22|    return r;
   58|     22|}

ossl_do_ex_data_init:
   15|    110|{
   16|    110|    OSSL_EX_DATA_GLOBAL *global = ossl_lib_ctx_get_ex_data_global(ctx);
   17|       |
   18|    110|    if (global == NULL)
  ------------------
  |  Branch (18:9): [True: 0, False: 110]
  ------------------
   19|      0|        return 0;
   20|       |
   21|    110|    global->ex_data_lock = CRYPTO_THREAD_lock_new();
   22|       |    return global->ex_data_lock != NULL;
   23|    110|}
ossl_crypto_cleanup_all_ex_data_int:
   73|    109|{
   74|    109|    int i;
   75|    109|    OSSL_EX_DATA_GLOBAL *global = ossl_lib_ctx_get_ex_data_global(ctx);
   76|       |
   77|    109|    if (global == NULL)
  ------------------
  |  Branch (77:9): [True: 0, False: 109]
  ------------------
   78|      0|        return;
   79|       |
   80|  2.07k|    for (i = 0; i < CRYPTO_EX_INDEX__COUNT; ++i) {
  ------------------
  |  |  270|  2.07k|#define CRYPTO_EX_INDEX__COUNT 18
  ------------------
  |  Branch (80:17): [True: 1.96k, False: 109]
  ------------------
   81|  1.96k|        EX_CALLBACKS *ip = &global->ex_data[i];
   82|       |
   83|  1.96k|        sk_EX_CALLBACK_pop_free(ip->meth, cleanup_cb);
   84|  1.96k|        ip->meth = NULL;
   85|  1.96k|    }
   86|       |
   87|    109|    CRYPTO_THREAD_lock_free(global->ex_data_lock);
   88|       |    global->ex_data_lock = NULL;
   89|    109|}

ossl_safe_getenv:
   19|    214|{
   20|       |#if defined(_WIN32) && defined(CP_UTF8) && !defined(_WIN32_WCE)
   21|       |    if (GetEnvironmentVariableW(L"OPENSSL_WIN32_UTF8", NULL, 0) != 0) {
   22|       |        char *val = NULL;
   23|       |        int vallen = 0;
   24|       |        WCHAR *namew = NULL;
   25|       |        WCHAR *valw = NULL;
   26|       |        DWORD envlen = 0;
   27|       |        DWORD dwFlags = MB_ERR_INVALID_CHARS;
   28|       |        int rsize, fsize;
   29|       |        UINT curacp;
   30|       |
   31|       |        curacp = GetACP();
   32|       |
   33|       |        /*
   34|       |         * For the code pages listed below, dwFlags must be set to 0.
   35|       |         * Otherwise, the function fails with ERROR_INVALID_FLAGS.
   36|       |         */
   37|       |        if (curacp == 50220 || curacp == 50221 || curacp == 50222 || curacp == 50225 || curacp == 50227 || curacp == 50229 || (57002 <= curacp && curacp <= 57011) || curacp == 65000 || curacp == 42)
   38|       |            dwFlags = 0;
   39|       |
   40|       |        /* query for buffer len */
   41|       |        rsize = MultiByteToWideChar(curacp, dwFlags, name, -1, NULL, 0);
   42|       |        /* if name is valid string and can be converted to wide string */
   43|       |        if (rsize > 0)
   44|       |            namew = _malloca(rsize * sizeof(WCHAR));
   45|       |
   46|       |        if (NULL != namew) {
   47|       |            /* convert name to wide string */
   48|       |            fsize = MultiByteToWideChar(curacp, dwFlags, name, -1, namew, rsize);
   49|       |            /* if conversion is ok, then determine value string size in wchars */
   50|       |            if (fsize > 0)
   51|       |                envlen = GetEnvironmentVariableW(namew, NULL, 0);
   52|       |        }
   53|       |
   54|       |        if (envlen > 0)
   55|       |            valw = _malloca(envlen * sizeof(WCHAR));
   56|       |
   57|       |        if (NULL != valw) {
   58|       |            /* if can get env value as wide string */
   59|       |            if (GetEnvironmentVariableW(namew, valw, envlen) < envlen) {
   60|       |                /* determine value string size in utf-8 */
   61|       |                vallen = WideCharToMultiByte(CP_UTF8, 0, valw, -1, NULL, 0,
   62|       |                    NULL, NULL);
   63|       |            }
   64|       |        }
   65|       |
   66|       |        if (vallen > 0)
   67|       |            val = OPENSSL_malloc(vallen);
   68|       |
   69|       |        if (NULL != val) {
   70|       |            /* convert value string from wide to utf-8 */
   71|       |            if (WideCharToMultiByte(CP_UTF8, 0, valw, -1, val, vallen,
   72|       |                    NULL, NULL)
   73|       |                == 0) {
   74|       |                OPENSSL_free(val);
   75|       |                val = NULL;
   76|       |            }
   77|       |        }
   78|       |
   79|       |        if (NULL != namew)
   80|       |            _freea(namew);
   81|       |
   82|       |        if (NULL != valw)
   83|       |            _freea(valw);
   84|       |
   85|       |        return val;
   86|       |    }
   87|       |#endif
   88|       |
   89|    214|#if defined(__GLIBC__) && defined(__GLIBC_PREREQ)
   90|    214|#if __GLIBC_PREREQ(2, 17)
   91|    214|#define SECURE_GETENV
   92|    214|    return secure_getenv(name);
   93|    214|#endif
   94|    214|#endif
   95|       |
   96|       |#ifndef SECURE_GETENV
   97|       |    if (OPENSSL_issetugid())
   98|       |        return NULL;
   99|       |    return getenv(name);
  100|       |#endif
  101|    214|}

ossl_fnv1a_hash:
   14|  1.65k|{
   15|  1.65k|    uint64_t hash = 0xcbf29ce484222325ULL;
   16|  1.65k|    size_t i;
   17|       |
   18|  24.6k|    for (i = 0; i < len; i++) {
  ------------------
  |  Branch (18:17): [True: 22.9k, False: 1.65k]
  ------------------
   19|  22.9k|        hash ^= key[i];
   20|  22.9k|        hash *= 0x00000100000001B3ULL;
   21|  22.9k|    }
   22|  1.65k|    return hash;
   23|  1.65k|}

ossl_ht_new:
  185|    110|{
  186|    110|    HT *new = OPENSSL_zalloc(sizeof(*new));
  ------------------
  |  |  109|    110|    CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  187|       |
  188|    110|    if (new == NULL)
  ------------------
  |  Branch (188:9): [True: 0, False: 110]
  ------------------
  189|      0|        return NULL;
  190|       |
  191|    110|    if (conf->lockless_reads && conf->no_rcu)
  ------------------
  |  Branch (191:9): [True: 110, False: 0]
  |  Branch (191:33): [True: 0, False: 110]
  ------------------
  192|      0|        goto err;
  193|       |
  194|    110|    if (!conf->no_rcu) {
  ------------------
  |  Branch (194:9): [True: 110, False: 0]
  ------------------
  195|    110|        new->atomic_lock = CRYPTO_THREAD_lock_new();
  196|    110|        if (new->atomic_lock == NULL)
  ------------------
  |  Branch (196:13): [True: 0, False: 110]
  ------------------
  197|      0|            goto err;
  198|    110|    }
  199|    110|    memcpy(&new->config, conf, sizeof(*conf));
  200|       |
  201|    110|    if (new->config.init_neighborhoods != 0) {
  ------------------
  |  Branch (201:9): [True: 110, False: 0]
  ------------------
  202|    110|        new->wpd.neighborhood_len = new->config.init_neighborhoods;
  203|       |        /* round up to the next power of 2 */
  204|    110|        new->wpd.neighborhood_len--;
  205|    110|        new->wpd.neighborhood_len |= new->wpd.neighborhood_len >> 1;
  206|    110|        new->wpd.neighborhood_len |= new->wpd.neighborhood_len >> 2;
  207|    110|        new->wpd.neighborhood_len |= new->wpd.neighborhood_len >> 4;
  208|    110|        new->wpd.neighborhood_len |= new->wpd.neighborhood_len >> 8;
  209|    110|        new->wpd.neighborhood_len |= new->wpd.neighborhood_len >> 16;
  210|    110|        new->wpd.neighborhood_len++;
  211|    110|    } else {
  212|      0|        new->wpd.neighborhood_len = DEFAULT_NEIGH_LEN;
  ------------------
  |  |   96|      0|#define DEFAULT_NEIGH_LEN (1 << DEFAULT_NEIGH_LEN_LOG)
  |  |  ------------------
  |  |  |  |   95|      0|#define DEFAULT_NEIGH_LEN_LOG 4
  |  |  ------------------
  ------------------
  213|      0|    }
  214|       |
  215|    110|    if (new->config.ht_free_fn == NULL)
  ------------------
  |  Branch (215:9): [True: 110, False: 0]
  ------------------
  216|    110|        new->config.ht_free_fn = internal_free_nop;
  217|       |
  218|    110|    new->md = OPENSSL_zalloc(sizeof(*new->md));
  ------------------
  |  |  109|    110|    CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  219|    110|    if (new->md == NULL)
  ------------------
  |  Branch (219:9): [True: 0, False: 110]
  ------------------
  220|      0|        goto err;
  221|       |
  222|    110|    new->md->neighborhoods = alloc_new_neighborhood_list(new->wpd.neighborhood_len,
  223|    110|        &new->md->neighborhood_ptr_to_free);
  224|    110|    if (new->md->neighborhoods == NULL)
  ------------------
  |  Branch (224:9): [True: 0, False: 110]
  ------------------
  225|      0|        goto err;
  226|    110|    new->md->neighborhood_mask = new->wpd.neighborhood_len - 1;
  227|       |
  228|    110|    if (!conf->no_rcu) {
  ------------------
  |  Branch (228:9): [True: 110, False: 0]
  ------------------
  229|    110|        new->lock = ossl_rcu_lock_new(1, conf->ctx);
  230|    110|        if (new->lock == NULL)
  ------------------
  |  Branch (230:13): [True: 0, False: 110]
  ------------------
  231|      0|            goto err;
  232|    110|    }
  233|    110|    if (new->config.ht_hash_fn == NULL)
  ------------------
  |  Branch (233:9): [True: 110, False: 0]
  ------------------
  234|    110|        new->config.ht_hash_fn = internal_ht_hash_fn;
  235|       |
  236|    110|    return new;
  237|       |
  238|      0|err:
  239|      0|    if (!conf->no_rcu) {
  ------------------
  |  Branch (239:9): [True: 0, False: 0]
  ------------------
  240|      0|        CRYPTO_THREAD_lock_free(new->atomic_lock);
  241|      0|        ossl_rcu_lock_free(new->lock);
  242|      0|    }
  243|      0|    if (new->md != NULL)
  ------------------
  |  Branch (243:9): [True: 0, False: 0]
  ------------------
  244|      0|        OPENSSL_free(new->md->neighborhood_ptr_to_free);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  245|      0|    OPENSSL_free(new->md);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  246|      0|    OPENSSL_free(new);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  247|       |    return NULL;
  248|    110|}
ossl_ht_write_lock:
  267|    109|{
  268|    109|    if (htable->config.no_rcu)
  ------------------
  |  Branch (268:9): [True: 0, False: 109]
  ------------------
  269|      0|        return;
  270|       |
  271|    109|    ossl_rcu_write_lock(htable->lock);
  272|    109|    htable->wpd.need_sync = 0;
  273|    109|}
ossl_ht_write_unlock:
  276|    109|{
  277|    109|    int need_sync = htable->wpd.need_sync;
  278|       |
  279|    109|    if (htable->config.no_rcu)
  ------------------
  |  Branch (279:9): [True: 0, False: 109]
  ------------------
  280|      0|        return;
  281|       |
  282|    109|    htable->wpd.need_sync = 0;
  283|    109|    ossl_rcu_write_unlock(htable->lock);
  284|    109|    if (need_sync)
  ------------------
  |  Branch (284:9): [True: 109, False: 0]
  ------------------
  285|    109|        ossl_synchronize_rcu(htable->lock);
  286|    109|}
ossl_ht_free:
  365|    109|{
  366|    109|    int flush_ok;
  367|       |
  368|    109|    if (h == NULL)
  ------------------
  |  Branch (368:9): [True: 0, False: 109]
  ------------------
  369|      0|        return;
  370|       |
  371|    109|    ossl_ht_write_lock(h);
  372|    109|    flush_ok = ossl_ht_flush_internal(h);
  373|    109|    ossl_ht_write_unlock(h);
  374|       |    /* Freeing the lock does a final sync for us */
  375|    109|    if (!h->config.no_rcu) {
  ------------------
  |  Branch (375:9): [True: 109, False: 0]
  ------------------
  376|    109|        CRYPTO_THREAD_lock_free(h->atomic_lock);
  377|    109|        ossl_rcu_lock_free(h->lock);
  378|    109|    }
  379|    109|    if (flush_ok) {
  ------------------
  |  Branch (379:9): [True: 109, False: 0]
  ------------------
  380|    109|        OPENSSL_free(h->md->neighborhood_ptr_to_free);
  ------------------
  |  |  132|    109|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  381|    109|        OPENSSL_free(h->md);
  ------------------
  |  |  132|    109|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  382|    109|    } else {
  383|      0|        free_oldmd(h->md);
  384|      0|    }
  385|    109|    OPENSSL_free(h);
  ------------------
  |  |  132|    109|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  386|    109|    return;
  387|    109|}
ossl_ht_insert:
  719|    361|{
  720|    361|    struct ht_internal_value_st *newval = NULL;
  721|    361|    uint64_t hash;
  722|    361|    int rc = 0;
  723|    361|    int i;
  724|       |
  725|    361|    if (data->value == NULL)
  ------------------
  |  Branch (725:9): [True: 0, False: 361]
  ------------------
  726|      0|        goto out;
  727|       |
  728|    361|    rc = -1;
  729|    361|    newval = alloc_new_value(h, key, data->value, data->type_id);
  730|    361|    if (newval == NULL)
  ------------------
  |  Branch (730:9): [True: 0, False: 361]
  ------------------
  731|      0|        goto out;
  732|       |
  733|       |    /*
  734|       |     * we have to take our lock here to prevent other changes
  735|       |     * to the bucket list
  736|       |     */
  737|    361|    hash = h->config.ht_hash_fn(key);
  738|       |
  739|    361|    for (i = 0;
  740|    361|        (rc = ossl_ht_insert_locked(h, hash, newval, olddata)) == -1
  ------------------
  |  Branch (740:9): [True: 0, False: 361]
  ------------------
  741|      0|        && i <= (int)NEIGHBORHOOD_LEN;
  ------------------
  |  |  104|      0|#define NEIGHBORHOOD_LEN (CACHE_LINE_BYTES / sizeof(struct ht_neighborhood_entry_st))
  |  |  ------------------
  |  |  |  |  101|      0|#define CACHE_LINE_BYTES 64
  |  |  ------------------
  ------------------
  |  Branch (741:12): [True: 0, False: 0]
  ------------------
  742|    361|        ++i)
  743|      0|        if (!grow_hashtable(h, h->wpd.neighborhood_len)) {
  ------------------
  |  Branch (743:13): [True: 0, False: 0]
  ------------------
  744|      0|            rc = -1;
  745|      0|            break;
  746|      0|        }
  747|       |
  748|    361|    if (rc <= 0)
  ------------------
  |  Branch (748:9): [True: 0, False: 361]
  ------------------
  749|      0|        free_value(newval);
  750|       |
  751|    361|out:
  752|    361|    return rc;
  753|    361|}
ossl_ht_get:
  756|  1.29k|{
  757|  1.29k|    struct ht_mutable_data_st *md;
  758|  1.29k|    uint64_t hash;
  759|  1.29k|    uint64_t neigh_idx_start;
  760|  1.29k|    uint64_t neigh_idx;
  761|  1.29k|    struct ht_internal_value_st *ival = NULL;
  762|  1.29k|    size_t j;
  763|  1.29k|    uint64_t ehash;
  764|  1.29k|    int lockless_reads = h->config.lockless_reads;
  765|       |
  766|  1.29k|    hash = h->config.ht_hash_fn(key);
  767|       |
  768|  1.29k|    if (!h->config.no_rcu)
  ------------------
  |  Branch (768:9): [True: 1.29k, False: 0]
  ------------------
  769|  1.29k|        md = ossl_rcu_deref(&h->md);
  ------------------
  |  |   35|  1.29k|#define ossl_rcu_deref(p) ossl_rcu_uptr_deref((void **)p)
  ------------------
  770|      0|    else
  771|      0|        md = h->md;
  772|  1.29k|    neigh_idx = neigh_idx_start = hash & md->neighborhood_mask;
  773|  1.29k|    do {
  774|  1.29k|        PREFETCH_NEIGHBORHOOD(md->neighborhoods[neigh_idx]);
  ------------------
  |  |   82|  1.29k|#define PREFETCH_NEIGHBORHOOD(x) __builtin_prefetch(x.entries)
  ------------------
  775|  1.67k|        for (j = 0; j < NEIGHBORHOOD_LEN; j++) {
  ------------------
  |  |  104|  1.67k|#define NEIGHBORHOOD_LEN (CACHE_LINE_BYTES / sizeof(struct ht_neighborhood_entry_st))
  |  |  ------------------
  |  |  |  |  101|  1.67k|#define CACHE_LINE_BYTES 64
  |  |  ------------------
  ------------------
  |  Branch (775:21): [True: 1.67k, False: 0]
  ------------------
  776|  1.67k|            if (!h->config.no_rcu)
  ------------------
  |  Branch (776:17): [True: 1.67k, False: 0]
  ------------------
  777|  1.67k|                ival = ossl_rcu_deref(&md->neighborhoods[neigh_idx].entries[j].value);
  ------------------
  |  |   35|  1.67k|#define ossl_rcu_deref(p) ossl_rcu_uptr_deref((void **)p)
  ------------------
  778|      0|            else
  779|      0|                ival = md->neighborhoods[neigh_idx].entries[j].value;
  780|  1.67k|            if (ival == NULL) {
  ------------------
  |  Branch (780:17): [True: 464, False: 1.21k]
  ------------------
  781|    464|                if (lockless_reads)
  ------------------
  |  Branch (781:21): [True: 464, False: 0]
  ------------------
  782|       |                    /* lockless_reads implies no deletion, we can break out */
  783|    464|                    return NULL;
  784|      0|                continue;
  785|    464|            }
  786|  1.21k|            if (!h->config.no_rcu) {
  ------------------
  |  Branch (786:17): [True: 1.21k, False: 0]
  ------------------
  787|  1.21k|                if (!CRYPTO_atomic_load(&md->neighborhoods[neigh_idx].entries[j].hash,
  ------------------
  |  Branch (787:21): [True: 0, False: 1.21k]
  ------------------
  788|  1.21k|                        &ehash, h->atomic_lock))
  789|      0|                    return NULL;
  790|  1.21k|            } else {
  791|      0|                ehash = md->neighborhoods[neigh_idx].entries[j].hash;
  792|      0|            }
  793|  1.21k|            if (compare_hash(hash, ehash) && match_key(&ival->value.key, key))
  ------------------
  |  Branch (793:17): [True: 827, False: 387]
  |  Branch (793:46): [True: 827, False: 0]
  ------------------
  794|    827|                return (HT_VALUE *)ival;
  795|  1.21k|        }
  796|      0|        if (!lockless_reads)
  ------------------
  |  Branch (796:13): [True: 0, False: 0]
  ------------------
  797|      0|            break;
  798|       |        /* Continue search in subsequent neighborhoods */
  799|      0|        neigh_idx = (neigh_idx + 1) & md->neighborhood_mask;
  800|      0|    } while (neigh_idx != neigh_idx_start);
  ------------------
  |  Branch (800:14): [True: 0, False: 0]
  ------------------
  801|       |
  802|      0|    return NULL;
  803|  1.29k|}
hashtable.c:alloc_new_neighborhood_list:
  155|    219|{
  156|    219|    struct ht_neighborhood_st *ret;
  157|       |
  158|    219|#if !defined(OPENSSL_SMALL_FOOTPRINT)
  159|    219|    ret = OPENSSL_aligned_alloc_array(len, sizeof(struct ht_neighborhood_st),
  ------------------
  |  |  118|    219|    CRYPTO_aligned_alloc_array(num, size, alignment, freeptr,      \
  |  |  119|    219|        OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  160|    219|        CACHE_LINE_BYTES, freeptr);
  161|       |
  162|       |    /* fall back to regular malloc */
  163|    219|    if (ret == NULL)
  ------------------
  |  Branch (163:9): [True: 0, False: 219]
  ------------------
  164|      0|#endif
  165|      0|    {
  166|      0|        ret = *freeptr = OPENSSL_malloc_array(len, sizeof(struct ht_neighborhood_st));
  ------------------
  |  |  111|      0|    CRYPTO_malloc_array(num, size, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_malloc_array(num, size, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  167|      0|        if (ret == NULL)
  ------------------
  |  Branch (167:13): [True: 0, False: 0]
  ------------------
  168|      0|            return NULL;
  169|      0|    }
  170|    219|    memset(ret, 0, sizeof(struct ht_neighborhood_st) * len);
  171|    219|    return ret;
  172|    219|}
hashtable.c:internal_ht_hash_fn:
  180|  1.65k|{
  181|  1.65k|    return ossl_fnv1a_hash(key->keybuf, key->keysize);
  182|  1.65k|}
hashtable.c:ossl_ht_flush_internal:
  311|    109|{
  312|    109|    struct ht_mutable_data_st *newmd = NULL;
  313|    109|    struct ht_mutable_data_st *oldmd = NULL;
  314|    109|    CRYPTO_RCU_CB_ITEM *cbi = NULL;
  315|       |
  316|    109|    newmd = OPENSSL_zalloc(sizeof(*newmd));
  ------------------
  |  |  109|    109|    CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  317|    109|    if (newmd == NULL)
  ------------------
  |  Branch (317:9): [True: 0, False: 109]
  ------------------
  318|      0|        return 0;
  319|       |
  320|    109|    newmd->neighborhoods = alloc_new_neighborhood_list(DEFAULT_NEIGH_LEN,
  ------------------
  |  |   96|    109|#define DEFAULT_NEIGH_LEN (1 << DEFAULT_NEIGH_LEN_LOG)
  |  |  ------------------
  |  |  |  |   95|    109|#define DEFAULT_NEIGH_LEN_LOG 4
  |  |  ------------------
  ------------------
  321|    109|        &newmd->neighborhood_ptr_to_free);
  322|    109|    if (newmd->neighborhoods == NULL) {
  ------------------
  |  Branch (322:9): [True: 0, False: 109]
  ------------------
  323|      0|        OPENSSL_free(newmd);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  324|      0|        return 0;
  325|      0|    }
  326|       |
  327|    109|    newmd->neighborhood_mask = DEFAULT_NEIGH_LEN - 1;
  ------------------
  |  |   96|    109|#define DEFAULT_NEIGH_LEN (1 << DEFAULT_NEIGH_LEN_LOG)
  |  |  ------------------
  |  |  |  |   95|    109|#define DEFAULT_NEIGH_LEN_LOG 4
  |  |  ------------------
  ------------------
  328|       |
  329|    109|    if (!h->config.no_rcu) {
  ------------------
  |  Branch (329:9): [True: 109, False: 0]
  ------------------
  330|    109|        cbi = ossl_rcu_cb_item_new();
  331|    109|        if (cbi == NULL) {
  ------------------
  |  Branch (331:13): [True: 0, False: 109]
  ------------------
  332|      0|            OPENSSL_free(newmd->neighborhood_ptr_to_free);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  333|      0|            OPENSSL_free(newmd);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  334|      0|            return 0;
  335|      0|        }
  336|       |
  337|       |        /* Swap the old and new mutable data sets */
  338|    109|        oldmd = ossl_rcu_deref(&h->md);
  ------------------
  |  |   35|    109|#define ossl_rcu_deref(p) ossl_rcu_uptr_deref((void **)p)
  ------------------
  339|    109|        ossl_rcu_assign_ptr(&h->md, &newmd);
  ------------------
  |  |   36|    109|#define ossl_rcu_assign_ptr(p, v) ossl_rcu_assign_uptr((void **)p, (void **)v)
  ------------------
  340|    109|    } else {
  341|      0|        oldmd = h->md;
  342|      0|        h->md = newmd;
  343|      0|    }
  344|       |
  345|       |    /* Set the number of entries to 0 */
  346|    109|    h->wpd.value_count = 0;
  347|    109|    h->wpd.neighborhood_len = DEFAULT_NEIGH_LEN;
  ------------------
  |  |   96|    109|#define DEFAULT_NEIGH_LEN (1 << DEFAULT_NEIGH_LEN_LOG)
  |  |  ------------------
  |  |  |  |   95|    109|#define DEFAULT_NEIGH_LEN_LOG 4
  |  |  ------------------
  ------------------
  348|       |
  349|    109|    if (!h->config.no_rcu) {
  ------------------
  |  Branch (349:9): [True: 109, False: 0]
  ------------------
  350|    109|        ossl_rcu_call(h->lock, cbi, free_oldmd, oldmd);
  351|    109|        h->wpd.need_sync = 1;
  352|    109|    } else {
  353|      0|        free_oldmd(oldmd);
  354|      0|    }
  355|       |
  356|    109|    return 1;
  357|    109|}
hashtable.c:free_oldmd:
  289|    109|{
  290|    109|    struct ht_mutable_data_st *oldmd = arg;
  291|    109|    size_t i, j;
  292|    109|    size_t neighborhood_len = (size_t)oldmd->neighborhood_mask + 1;
  293|    109|    struct ht_internal_value_st *v;
  294|       |
  295|  55.9k|    for (i = 0; i < neighborhood_len; i++) {
  ------------------
  |  Branch (295:17): [True: 55.8k, False: 109]
  ------------------
  296|  55.8k|        PREFETCH_NEIGHBORHOOD(oldmd->neighborhoods[i + 1]);
  ------------------
  |  |   82|  55.8k|#define PREFETCH_NEIGHBORHOOD(x) __builtin_prefetch(x.entries)
  ------------------
  297|   279k|        for (j = 0; j < NEIGHBORHOOD_LEN; j++) {
  ------------------
  |  |  104|   279k|#define NEIGHBORHOOD_LEN (CACHE_LINE_BYTES / sizeof(struct ht_neighborhood_entry_st))
  |  |  ------------------
  |  |  |  |  101|   279k|#define CACHE_LINE_BYTES 64
  |  |  ------------------
  ------------------
  |  Branch (297:21): [True: 223k, False: 55.8k]
  ------------------
  298|   223k|            if (oldmd->neighborhoods[i].entries[j].value != NULL) {
  ------------------
  |  Branch (298:17): [True: 0, False: 223k]
  ------------------
  299|      0|                v = oldmd->neighborhoods[i].entries[j].value;
  300|      0|                v->ht->config.ht_free_fn((HT_VALUE *)v);
  301|      0|                free_value(v);
  302|      0|            }
  303|   223k|        }
  304|  55.8k|    }
  305|       |
  306|    109|    OPENSSL_free(oldmd->neighborhood_ptr_to_free);
  ------------------
  |  |  132|    109|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  307|    109|    OPENSSL_free(oldmd);
  ------------------
  |  |  132|    109|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  308|    109|}
hashtable.c:alloc_new_value:
  688|    361|{
  689|    361|    struct ht_internal_value_st *tmp;
  690|    361|    size_t nvsize = sizeof(*tmp);
  691|       |
  692|    361|    if (h->config.collision_check == 1)
  ------------------
  |  Branch (692:9): [True: 361, False: 0]
  ------------------
  693|    361|        nvsize += key->keysize;
  694|       |
  695|    361|    tmp = OPENSSL_malloc(nvsize);
  ------------------
  |  |  107|    361|    CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  696|       |
  697|    361|    if (tmp == NULL)
  ------------------
  |  Branch (697:9): [True: 0, False: 361]
  ------------------
  698|      0|        return NULL;
  699|       |
  700|    361|    tmp->ht = h;
  701|    361|    tmp->value.value = data;
  702|    361|    tmp->value.type_id = type;
  703|    361|    tmp->value.key.keybuf = NULL;
  704|    361|    if (h->config.collision_check) {
  ------------------
  |  Branch (704:9): [True: 361, False: 0]
  ------------------
  705|    361|        tmp->value.key.keybuf = (uint8_t *)(tmp + 1);
  706|    361|        tmp->value.key.keysize = key->keysize;
  707|    361|        memcpy(tmp->value.key.keybuf, key->keybuf, key->keysize);
  708|    361|    }
  709|       |
  710|    361|    return tmp;
  711|    361|}
hashtable.c:ossl_ht_insert_locked:
  601|    361|{
  602|    361|    struct ht_mutable_data_st *md = h->md;
  603|    361|    uint64_t neigh_idx_start = hash & md->neighborhood_mask;
  604|    361|    uint64_t neigh_idx = neigh_idx_start;
  605|    361|    size_t j;
  606|    361|    uint64_t ihash;
  607|    361|    HT_VALUE *ival;
  608|    361|    size_t empty_idx = SIZE_MAX;
  609|    361|    int lockless_reads = h->config.lockless_reads;
  610|       |
  611|    361|    do {
  612|    361|        PREFETCH_NEIGHBORHOOD(md->neighborhoods[neigh_idx]);
  ------------------
  |  |   82|    361|#define PREFETCH_NEIGHBORHOOD(x) __builtin_prefetch(x.entries)
  ------------------
  613|       |
  614|    478|        for (j = 0; j < NEIGHBORHOOD_LEN; j++) {
  ------------------
  |  |  104|    478|#define NEIGHBORHOOD_LEN (CACHE_LINE_BYTES / sizeof(struct ht_neighborhood_entry_st))
  |  |  ------------------
  |  |  |  |  101|    478|#define CACHE_LINE_BYTES 64
  |  |  ------------------
  ------------------
  |  Branch (614:21): [True: 478, False: 0]
  ------------------
  615|    478|            if (!h->config.no_rcu)
  ------------------
  |  Branch (615:17): [True: 478, False: 0]
  ------------------
  616|    478|                ival = ossl_rcu_deref(&md->neighborhoods[neigh_idx].entries[j].value);
  ------------------
  |  |   35|    478|#define ossl_rcu_deref(p) ossl_rcu_uptr_deref((void **)p)
  ------------------
  617|      0|            else
  618|      0|                ival = (HT_VALUE *)md->neighborhoods[neigh_idx].entries[j].value;
  619|    478|            if (ival == NULL) {
  ------------------
  |  Branch (619:17): [True: 361, False: 117]
  ------------------
  620|    361|                empty_idx = j;
  621|       |                /* lockless_reads implies no deletion, we can break out */
  622|    361|                if (lockless_reads)
  ------------------
  |  Branch (622:21): [True: 361, False: 0]
  ------------------
  623|    361|                    goto not_found;
  624|      0|                continue;
  625|    361|            }
  626|    117|            if (!h->config.no_rcu) {
  ------------------
  |  Branch (626:17): [True: 117, False: 0]
  ------------------
  627|    117|                if (!CRYPTO_atomic_load(&md->neighborhoods[neigh_idx].entries[j].hash,
  ------------------
  |  Branch (627:21): [True: 0, False: 117]
  ------------------
  628|    117|                        &ihash, h->atomic_lock))
  629|      0|                    return 0;
  630|    117|            } else {
  631|      0|                ihash = md->neighborhoods[neigh_idx].entries[j].hash;
  632|      0|            }
  633|    117|            if (compare_hash(hash, ihash) && match_key(&newval->value.key, &ival->key)) {
  ------------------
  |  Branch (633:17): [True: 0, False: 117]
  |  Branch (633:46): [True: 0, False: 0]
  ------------------
  634|      0|                if (olddata == NULL) {
  ------------------
  |  Branch (634:21): [True: 0, False: 0]
  ------------------
  635|       |                    /* This would insert a duplicate -> fail */
  636|      0|                    return 0;
  637|      0|                }
  638|       |                /* Do a replacement */
  639|      0|                if (!h->config.no_rcu) {
  ------------------
  |  Branch (639:21): [True: 0, False: 0]
  ------------------
  640|      0|                    CRYPTO_RCU_CB_ITEM *cbi = ossl_rcu_cb_item_new();
  641|      0|                    if (cbi == NULL)
  ------------------
  |  Branch (641:25): [True: 0, False: 0]
  ------------------
  642|      0|                        return 0;
  643|      0|                    if (!CRYPTO_atomic_store(&md->neighborhoods[neigh_idx].entries[j].hash,
  ------------------
  |  Branch (643:25): [True: 0, False: 0]
  ------------------
  644|      0|                            hash, h->atomic_lock)) {
  645|      0|                        ossl_rcu_cb_item_free(cbi);
  646|      0|                        return 0;
  647|      0|                    }
  648|      0|                    *olddata = (HT_VALUE *)md->neighborhoods[neigh_idx].entries[j].value;
  649|      0|                    ossl_rcu_assign_ptr(&md->neighborhoods[neigh_idx].entries[j].value,
  ------------------
  |  |   36|      0|#define ossl_rcu_assign_ptr(p, v) ossl_rcu_assign_uptr((void **)p, (void **)v)
  ------------------
  650|      0|                        &newval);
  651|      0|                    ossl_rcu_call(h->lock, cbi, free_old_ht_value, *olddata);
  652|      0|                } else {
  653|      0|                    md->neighborhoods[neigh_idx].entries[j].hash = hash;
  654|      0|                    *olddata = (HT_VALUE *)md->neighborhoods[neigh_idx].entries[j].value;
  655|      0|                    md->neighborhoods[neigh_idx].entries[j].value = newval;
  656|      0|                }
  657|      0|                h->wpd.need_sync = 1;
  658|      0|                return 1;
  659|      0|            }
  660|    117|        }
  661|      0|        if (!lockless_reads)
  ------------------
  |  Branch (661:13): [True: 0, False: 0]
  ------------------
  662|      0|            break;
  663|       |        /* Continue search in subsequent neighborhoods */
  664|      0|        neigh_idx = (neigh_idx + 1) & md->neighborhood_mask;
  665|      0|    } while (neigh_idx != neigh_idx_start);
  ------------------
  |  Branch (665:14): [True: 0, False: 0]
  ------------------
  666|       |
  667|    361|not_found:
  668|       |    /* If we get to here, its just an insert */
  669|    361|    if (empty_idx == SIZE_MAX)
  ------------------
  |  Branch (669:9): [True: 0, False: 361]
  ------------------
  670|      0|        return -1; /* out of space */
  671|    361|    if (!h->config.no_rcu) {
  ------------------
  |  Branch (671:9): [True: 361, False: 0]
  ------------------
  672|    361|        if (!CRYPTO_atomic_store(&md->neighborhoods[neigh_idx].entries[empty_idx].hash,
  ------------------
  |  Branch (672:13): [True: 0, False: 361]
  ------------------
  673|    361|                hash, h->atomic_lock))
  674|      0|            return 0;
  675|    361|        ossl_rcu_assign_ptr(&md->neighborhoods[neigh_idx].entries[empty_idx].value,
  ------------------
  |  |   36|    361|#define ossl_rcu_assign_ptr(p, v) ossl_rcu_assign_uptr((void **)p, (void **)v)
  ------------------
  676|    361|            &newval);
  677|    361|    } else {
  678|      0|        md->neighborhoods[neigh_idx].entries[empty_idx].hash = hash;
  679|      0|        md->neighborhoods[neigh_idx].entries[empty_idx].value = newval;
  680|      0|    }
  681|    361|    h->wpd.value_count++;
  682|    361|    return 1;
  683|    361|}
hashtable.c:compare_hash:
  458|  1.33k|{
  459|  1.33k|    return (hash1 == hash2);
  460|  1.33k|}
hashtable.c:match_key:
  585|    827|{
  586|       |    /*
  587|       |     * keys match if they are both present, the same size
  588|       |     * and compare equal in memory
  589|       |     */
  590|    827|    PREFETCH(a->keybuf);
  ------------------
  |  |   83|    827|#define PREFETCH(x) __builtin_prefetch(x)
  ------------------
  591|    827|    PREFETCH(b->keybuf);
  ------------------
  |  |   83|    827|#define PREFETCH(x) __builtin_prefetch(x)
  ------------------
  592|    827|    if (a->keybuf != NULL && b->keybuf != NULL && a->keysize == b->keysize)
  ------------------
  |  Branch (592:9): [True: 827, False: 0]
  |  Branch (592:30): [True: 827, False: 0]
  |  Branch (592:51): [True: 827, False: 0]
  ------------------
  593|    827|        return !memcmp(a->keybuf, b->keybuf, a->keysize);
  594|       |
  595|      0|    return 1;
  596|    827|}

ossl_err_load_HTTP_strings:
   82|      1|{
   83|      1|#ifndef OPENSSL_NO_ERR
   84|      1|    if (ERR_reason_error_string(HTTP_str_reasons[0].error) == NULL)
  ------------------
  |  Branch (84:9): [True: 1, False: 0]
  ------------------
   85|      1|        ERR_load_strings_const(HTTP_str_reasons);
   86|      1|#endif
   87|      1|    return 1;
   88|      1|}

ossl_indicator_set_callback_new:
   21|    110|{
   22|    110|    INDICATOR_CB *cb;
   23|       |
   24|    110|    cb = OPENSSL_zalloc(sizeof(*cb));
  ------------------
  |  |  109|    110|    CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   25|    110|    return cb;
   26|    110|}
ossl_indicator_set_callback_free:
   29|    109|{
   30|    109|    OPENSSL_free(cb);
  ------------------
  |  |  132|    109|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   31|    109|}

OPENSSL_init_crypto:
  349|  2.49k|{
  350|  2.49k|    uint64_t tmp;
  351|  2.49k|    int aloaddone = 0;
  352|       |
  353|       |    /* Applications depend on 0 being returned when cleanup was already done */
  354|  2.49k|    if (ossl_unlikely(stopped)) {
  ------------------
  |  |   23|  2.49k|#define ossl_unlikely(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (23:26): [True: 0, False: 2.49k]
  |  |  ------------------
  ------------------
  355|      0|        if (!(opts & OPENSSL_INIT_BASE_ONLY))
  ------------------
  |  |   31|      0|#define OPENSSL_INIT_BASE_ONLY 0x00040000L
  ------------------
  |  Branch (355:13): [True: 0, False: 0]
  ------------------
  356|      0|            ERR_raise(ERR_LIB_CRYPTO, ERR_R_INIT_FAIL);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  357|      0|        return 0;
  358|      0|    }
  359|       |
  360|       |    /*
  361|       |     * We ignore failures from this function. It is probably because we are
  362|       |     * on a platform that doesn't support lockless atomic loads (we may not
  363|       |     * have created optsdone_lock yet so we can't use it). This is just an
  364|       |     * optimisation to skip the full checks in this function if we don't need
  365|       |     * to, so we carry on regardless in the event of failure.
  366|       |     *
  367|       |     * There could be a race here with other threads, so that optsdone has not
  368|       |     * been updated yet, even though the options have in fact been initialised.
  369|       |     * This doesn't matter - it just means we will run the full function
  370|       |     * unnecessarily - but all the critical code is contained in RUN_ONCE
  371|       |     * functions anyway so we are safe.
  372|       |     */
  373|  2.49k|    if (ossl_likely(CRYPTO_atomic_load(&optsdone, &tmp, NULL))) {
  ------------------
  |  |   22|  2.49k|#define ossl_likely(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (22:24): [True: 2.49k, False: 0]
  |  |  ------------------
  ------------------
  374|  2.49k|        if ((tmp & opts) == opts)
  ------------------
  |  Branch (374:13): [True: 7, False: 2.48k]
  ------------------
  375|      7|            return 1;
  376|  2.48k|        aloaddone = 1;
  377|  2.48k|    }
  378|       |
  379|       |    /*
  380|       |     * At some point we should look at this function with a view to moving
  381|       |     * most/all of this into OSSL_LIB_CTX.
  382|       |     *
  383|       |     * When the caller specifies OPENSSL_INIT_BASE_ONLY, that should be the
  384|       |     * *only* option specified.  With that option we return immediately after
  385|       |     * doing the requested limited initialization.
  386|       |     *
  387|       |     * If we remain the only caller of err_shelve_state() the recursion should
  388|       |     * perhaps be removed, but if in doubt, it can be left in place.
  389|       |     */
  390|  2.48k|    if (ossl_unlikely(!RUN_ONCE(&base, ossl_init_base)))
  ------------------
  |  |   23|  4.97k|#define ossl_unlikely(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (23:26): [True: 0, False: 2.48k]
  |  |  |  Branch (23:46): [True: 2.48k, False: 0]
  |  |  ------------------
  ------------------
  391|      0|        return 0;
  392|       |
  393|  2.48k|    if (opts & OPENSSL_INIT_BASE_ONLY)
  ------------------
  |  |   31|  2.48k|#define OPENSSL_INIT_BASE_ONLY 0x00040000L
  ------------------
  |  Branch (393:9): [True: 2.48k, False: 2]
  ------------------
  394|  2.48k|        return 1;
  395|       |
  396|       |    /*
  397|       |     * optsdone_lock should definitely be set up now, so we can now repeat the
  398|       |     * same check from above but be sure that it will work even on platforms
  399|       |     * without lockless CRYPTO_atomic_load
  400|       |     */
  401|      2|    if (!aloaddone) {
  ------------------
  |  Branch (401:9): [True: 0, False: 2]
  ------------------
  402|      0|        if (!CRYPTO_atomic_load(&optsdone, &tmp, optsdone_lock))
  ------------------
  |  Branch (402:13): [True: 0, False: 0]
  ------------------
  403|      0|            return 0;
  404|      0|        if ((tmp & opts) == opts)
  ------------------
  |  Branch (404:13): [True: 0, False: 0]
  ------------------
  405|      0|            return 1;
  406|      0|    }
  407|       |
  408|      2|    if ((opts & OPENSSL_INIT_NO_LOAD_CRYPTO_STRINGS)
  ------------------
  |  |  505|      2|#define OPENSSL_INIT_NO_LOAD_CRYPTO_STRINGS 0x00000001L
  ------------------
  |  Branch (408:9): [True: 0, False: 2]
  ------------------
  409|      0|        && !RUN_ONCE_ALT(&load_crypto_strings,
  ------------------
  |  |  148|      0|    (CRYPTO_THREAD_run_once(once, initalt##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (148:6): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (409:12): [True: 0, False: 0]
  ------------------
  410|      2|            ossl_init_no_load_crypto_strings,
  411|      2|            ossl_init_load_crypto_strings))
  412|      0|        return 0;
  413|       |
  414|      2|    if ((opts & OPENSSL_INIT_LOAD_CRYPTO_STRINGS)
  ------------------
  |  |  506|      2|#define OPENSSL_INIT_LOAD_CRYPTO_STRINGS 0x00000002L
  ------------------
  |  Branch (414:9): [True: 1, False: 1]
  ------------------
  415|      1|        && !RUN_ONCE(&load_crypto_strings, ossl_init_load_crypto_strings))
  ------------------
  |  |  130|      1|    (CRYPTO_THREAD_run_once(once, init##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (130:6): [True: 1, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (415:12): [True: 0, False: 1]
  ------------------
  416|      0|        return 0;
  417|       |
  418|      2|    if ((opts & OPENSSL_INIT_NO_LOAD_SSL_STRINGS)
  ------------------
  |  | 2812|      2|#define OPENSSL_INIT_NO_LOAD_SSL_STRINGS 0x00100000L
  ------------------
  |  Branch (418:9): [True: 0, False: 2]
  ------------------
  419|      0|        && !RUN_ONCE_ALT(&ssl_strings, ossl_init_no_load_ssl_strings,
  ------------------
  |  |  148|      0|    (CRYPTO_THREAD_run_once(once, initalt##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (148:6): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (419:12): [True: 0, False: 0]
  ------------------
  420|      2|            ossl_init_load_ssl_strings))
  421|      0|        return 0;
  422|       |
  423|      2|    if ((opts & OPENSSL_INIT_LOAD_SSL_STRINGS)
  ------------------
  |  | 2813|      2|#define OPENSSL_INIT_LOAD_SSL_STRINGS 0x00200000L
  ------------------
  |  Branch (423:9): [True: 0, False: 2]
  ------------------
  424|      0|        && !RUN_ONCE(&ssl_strings, ossl_init_load_ssl_strings))
  ------------------
  |  |  130|      0|    (CRYPTO_THREAD_run_once(once, init##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (130:6): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (424:12): [True: 0, False: 0]
  ------------------
  425|      0|        return 0;
  426|       |
  427|      2|    if ((opts & OPENSSL_INIT_NO_ADD_ALL_CIPHERS)
  ------------------
  |  |  509|      2|#define OPENSSL_INIT_NO_ADD_ALL_CIPHERS 0x00000010L
  ------------------
  |  Branch (427:9): [True: 0, False: 2]
  ------------------
  428|      0|        && !RUN_ONCE_ALT(&add_all_ciphers, ossl_init_no_add_all_ciphers,
  ------------------
  |  |  148|      0|    (CRYPTO_THREAD_run_once(once, initalt##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (148:6): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (428:12): [True: 0, False: 0]
  ------------------
  429|      2|            ossl_init_add_all_ciphers))
  430|      0|        return 0;
  431|       |
  432|      2|    if ((opts & OPENSSL_INIT_ADD_ALL_CIPHERS)
  ------------------
  |  |  507|      2|#define OPENSSL_INIT_ADD_ALL_CIPHERS 0x00000004L
  ------------------
  |  Branch (432:9): [True: 1, False: 1]
  ------------------
  433|      1|        && !RUN_ONCE(&add_all_ciphers, ossl_init_add_all_ciphers))
  ------------------
  |  |  130|      1|    (CRYPTO_THREAD_run_once(once, init##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (130:6): [True: 1, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (433:12): [True: 0, False: 1]
  ------------------
  434|      0|        return 0;
  435|       |
  436|      2|    if ((opts & OPENSSL_INIT_NO_ADD_ALL_DIGESTS)
  ------------------
  |  |  510|      2|#define OPENSSL_INIT_NO_ADD_ALL_DIGESTS 0x00000020L
  ------------------
  |  Branch (436:9): [True: 0, False: 2]
  ------------------
  437|      0|        && !RUN_ONCE_ALT(&add_all_digests, ossl_init_no_add_all_digests,
  ------------------
  |  |  148|      0|    (CRYPTO_THREAD_run_once(once, initalt##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (148:6): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (437:12): [True: 0, False: 0]
  ------------------
  438|      2|            ossl_init_add_all_digests))
  439|      0|        return 0;
  440|       |
  441|      2|    if ((opts & OPENSSL_INIT_ADD_ALL_DIGESTS)
  ------------------
  |  |  508|      2|#define OPENSSL_INIT_ADD_ALL_DIGESTS 0x00000008L
  ------------------
  |  Branch (441:9): [True: 1, False: 1]
  ------------------
  442|      1|        && !RUN_ONCE(&add_all_digests, ossl_init_add_all_digests))
  ------------------
  |  |  130|      1|    (CRYPTO_THREAD_run_once(once, init##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (130:6): [True: 1, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (442:12): [True: 0, False: 1]
  ------------------
  443|      0|        return 0;
  444|       |
  445|      2|    if ((opts & OPENSSL_INIT_ATFORK)
  ------------------
  |  |  515|      2|#define OPENSSL_INIT_ATFORK 0x00020000L
  ------------------
  |  Branch (445:9): [True: 0, False: 2]
  ------------------
  446|      0|        && !openssl_init_fork_handlers())
  ------------------
  |  Branch (446:12): [True: 0, False: 0]
  ------------------
  447|      0|        return 0;
  448|       |
  449|      2|    if ((opts & OPENSSL_INIT_NO_LOAD_CONFIG)
  ------------------
  |  |  512|      2|#define OPENSSL_INIT_NO_LOAD_CONFIG 0x00000080L
  ------------------
  |  Branch (449:9): [True: 0, False: 2]
  ------------------
  450|      0|        && !RUN_ONCE_ALT(&config, ossl_init_no_config, ossl_init_config))
  ------------------
  |  |  148|      0|    (CRYPTO_THREAD_run_once(once, initalt##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (148:6): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (450:12): [True: 0, False: 0]
  ------------------
  451|      0|        return 0;
  452|       |
  453|      2|    if (opts & OPENSSL_INIT_LOAD_CONFIG) {
  ------------------
  |  |  511|      2|#define OPENSSL_INIT_LOAD_CONFIG 0x00000040L
  ------------------
  |  Branch (453:9): [True: 1, False: 1]
  ------------------
  454|      1|        int loading = CRYPTO_THREAD_get_local(&in_init_config_local) != NULL;
  455|       |
  456|       |        /* If called recursively from OBJ_ calls, just skip it. */
  457|      1|        if (!loading) {
  ------------------
  |  Branch (457:13): [True: 1, False: 0]
  ------------------
  458|      1|            int ret;
  459|       |
  460|      1|            if (!CRYPTO_THREAD_set_local(&in_init_config_local, (void *)-1))
  ------------------
  |  Branch (460:17): [True: 0, False: 1]
  ------------------
  461|      0|                return 0;
  462|      1|            if (settings == NULL) {
  ------------------
  |  Branch (462:17): [True: 1, False: 0]
  ------------------
  463|      1|                ret = RUN_ONCE(&config, ossl_init_config);
  ------------------
  |  |  130|      1|    (CRYPTO_THREAD_run_once(once, init##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (130:6): [True: 1, False: 0]
  |  |  ------------------
  ------------------
  464|      1|            } else {
  465|      0|                if (!CRYPTO_THREAD_write_lock(init_lock))
  ------------------
  |  Branch (465:21): [True: 0, False: 0]
  ------------------
  466|      0|                    return 0;
  467|      0|                conf_settings = settings;
  468|      0|                ret = RUN_ONCE_ALT(&config, ossl_init_config_settings,
  ------------------
  |  |  148|      0|    (CRYPTO_THREAD_run_once(once, initalt##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (148:6): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  469|      0|                    ossl_init_config);
  470|      0|                conf_settings = NULL;
  471|      0|                CRYPTO_THREAD_unlock(init_lock);
  472|      0|            }
  473|       |
  474|      1|            if (ret <= 0)
  ------------------
  |  Branch (474:17): [True: 0, False: 1]
  ------------------
  475|      0|                return 0;
  476|      1|        }
  477|      1|    }
  478|       |
  479|      2|    if ((opts & OPENSSL_INIT_ASYNC)
  ------------------
  |  |  513|      2|#define OPENSSL_INIT_ASYNC 0x00000100L
  ------------------
  |  Branch (479:9): [True: 0, False: 2]
  ------------------
  480|      0|        && !RUN_ONCE(&async, ossl_init_async))
  ------------------
  |  |  130|      0|    (CRYPTO_THREAD_run_once(once, init##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (130:6): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (480:12): [True: 0, False: 0]
  ------------------
  481|      0|        return 0;
  482|       |
  483|      2|    if (!CRYPTO_atomic_or(&optsdone, opts, &tmp, optsdone_lock))
  ------------------
  |  Branch (483:9): [True: 0, False: 2]
  ------------------
  484|      0|        return 0;
  485|       |
  486|      2|    return 1;
  487|      2|}
init.c:ossl_init_base:
   53|      1|{
   54|       |    /* no need to init trace */
   55|       |
   56|      1|    OSSL_TRACE(INIT, "ossl_init_base: setting up stop handlers\n");
  ------------------
  |  |  288|      1|    OSSL_TRACEV(category, (trc_out, "%s", text))
  |  |  ------------------
  |  |  |  |  283|      1|#define OSSL_TRACEV(category, args) ((void)0)
  |  |  ------------------
  ------------------
   57|       |#ifndef OPENSSL_NO_CRYPTO_MDEBUG
   58|       |    ossl_malloc_setup_failures();
   59|       |#endif
   60|       |
   61|      1|    if ((optsdone_lock = CRYPTO_THREAD_lock_new()) == NULL
  ------------------
  |  Branch (61:9): [True: 0, False: 1]
  ------------------
   62|      1|        || (init_lock = CRYPTO_THREAD_lock_new()) == NULL)
  ------------------
  |  Branch (62:12): [True: 0, False: 1]
  ------------------
   63|      0|        goto err;
   64|       |
   65|      1|    OPENSSL_cpuid_setup();
   66|       |
   67|      1|    if (!ossl_init_thread())
  ------------------
  |  Branch (67:9): [True: 0, False: 1]
  ------------------
   68|      0|        goto err;
   69|       |
   70|      1|    if (!CRYPTO_THREAD_init_local(&in_init_config_local, NULL))
  ------------------
  |  Branch (70:9): [True: 0, False: 1]
  ------------------
   71|      0|        goto err;
   72|       |
   73|      1|    base_inited = 1;
   74|      1|    return 1;
   75|       |
   76|      0|err:
   77|      0|    OSSL_TRACE(INIT, "ossl_init_base failed!\n");
  ------------------
  |  |  288|      0|    OSSL_TRACEV(category, (trc_out, "%s", text))
  |  |  ------------------
  |  |  |  |  283|      0|#define OSSL_TRACEV(category, args) ((void)0)
  |  |  ------------------
  ------------------
   78|      0|    CRYPTO_THREAD_lock_free(optsdone_lock);
   79|      0|    optsdone_lock = NULL;
   80|      0|    CRYPTO_THREAD_lock_free(init_lock);
   81|      0|    init_lock = NULL;
   82|       |
   83|      0|    return 0;
   84|      1|}
init.c:ossl_init_load_crypto_strings:
   89|      1|{
   90|      1|    int ret = 1;
   91|       |    /*
   92|       |     * OPENSSL_NO_AUTOERRINIT is provided here to prevent at compile time
   93|       |     * pulling in all the error strings during static linking
   94|       |     */
   95|      1|#if !defined(OPENSSL_NO_ERR) && !defined(OPENSSL_NO_AUTOERRINIT)
   96|      1|    void *err;
   97|       |
   98|      1|    if (!err_shelve_state(&err))
  ------------------
  |  Branch (98:9): [True: 0, False: 1]
  ------------------
   99|      0|        return 0;
  100|       |
  101|      1|    OSSL_TRACE(INIT, "ossl_err_load_crypto_strings()\n");
  ------------------
  |  |  288|      1|    OSSL_TRACEV(category, (trc_out, "%s", text))
  |  |  ------------------
  |  |  |  |  283|      1|#define OSSL_TRACEV(category, args) ((void)0)
  |  |  ------------------
  ------------------
  102|      1|    ret = ossl_err_load_crypto_strings();
  103|       |
  104|      1|    err_unshelve_state(err);
  105|      1|#endif
  106|      1|    return ret;
  107|      1|}
init.c:ossl_init_add_all_ciphers:
  140|      1|{
  141|       |    /*
  142|       |     * OPENSSL_NO_AUTOALGINIT is provided here to prevent at compile time
  143|       |     * pulling in all the ciphers during static linking
  144|       |     */
  145|      1|#ifndef OPENSSL_NO_AUTOALGINIT
  146|      1|    OSSL_TRACE(INIT, "openssl_add_all_ciphers_int()\n");
  ------------------
  |  |  288|      1|    OSSL_TRACEV(category, (trc_out, "%s", text))
  |  |  ------------------
  |  |  |  |  283|      1|#define OSSL_TRACEV(category, args) ((void)0)
  |  |  ------------------
  ------------------
  147|      1|    openssl_add_all_ciphers_int();
  148|      1|#endif
  149|      1|    return 1;
  150|      1|}
init.c:ossl_init_add_all_digests:
  161|      1|{
  162|       |    /*
  163|       |     * OPENSSL_NO_AUTOALGINIT is provided here to prevent at compile time
  164|       |     * pulling in all the ciphers during static linking
  165|       |     */
  166|      1|#ifndef OPENSSL_NO_AUTOALGINIT
  167|      1|    OSSL_TRACE(INIT, "openssl_add_all_digests()\n");
  ------------------
  |  |  288|      1|    OSSL_TRACEV(category, (trc_out, "%s", text))
  |  |  ------------------
  |  |  |  |  283|      1|#define OSSL_TRACEV(category, args) ((void)0)
  |  |  ------------------
  ------------------
  168|      1|    openssl_add_all_digests_int();
  169|      1|#endif
  170|      1|    return 1;
  171|      1|}
init.c:ossl_init_config:
  183|      1|{
  184|      1|    int ret = ossl_config_int(NULL);
  185|       |
  186|      1|    return ret;
  187|      1|}

ossl_init_thread:
  240|      1|{
  241|      1|    if (!CRYPTO_THREAD_init_local(&destructor_key.value,
  ------------------
  |  Branch (241:9): [True: 0, False: 1]
  ------------------
  242|      1|            init_thread_destructor))
  243|      0|        return 0;
  244|       |
  245|      1|    return 1;
  246|      1|}
ossl_ctx_thread_stop:
  281|    109|{
  282|    109|    if (destructor_key.sane != -1) {
  ------------------
  |  Branch (282:9): [True: 109, False: 0]
  ------------------
  283|    109|        THREAD_EVENT_HANDLER **hands = fetch_thread_local(ctx);
  284|       |
  285|    109|        init_thread_stop(ctx, hands);
  286|    109|    }
  287|    109|}
ossl_init_thread_start:
  392|      2|{
  393|      2|    THREAD_EVENT_HANDLER **hands;
  394|      2|    THREAD_EVENT_HANDLER *hand;
  395|      2|    OSSL_LIB_CTX *ctx = NULL;
  396|       |#ifdef FIPS_MODULE
  397|       |    /*
  398|       |     * In FIPS mode the list of THREAD_EVENT_HANDLERs is unique per combination
  399|       |     * of OSSL_LIB_CTX and thread. This is because in FIPS mode each
  400|       |     * OSSL_LIB_CTX gets informed about thread stop events individually.
  401|       |     */
  402|       |
  403|       |    ctx = arg;
  404|       |#endif
  405|       |
  406|      2|    hands = alloc_thread_local(ctx);
  407|       |
  408|      2|    if (hands == NULL)
  ------------------
  |  Branch (408:9): [True: 0, False: 2]
  ------------------
  409|      0|        return 0;
  410|       |
  411|       |#ifdef FIPS_MODULE
  412|       |    if (*hands == NULL) {
  413|       |        /*
  414|       |         * We've not yet registered any handlers for this thread. We need to get
  415|       |         * libcrypto to tell us about later thread stop events. c_thread_start
  416|       |         * is a callback to libcrypto defined in fipsprov.c
  417|       |         */
  418|       |        if (!ossl_thread_register_fips(ctx))
  419|       |            return 0;
  420|       |    }
  421|       |#endif
  422|       |
  423|      2|    hand = OPENSSL_malloc(sizeof(*hand));
  ------------------
  |  |  107|      2|    CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  424|      2|    if (hand == NULL)
  ------------------
  |  Branch (424:9): [True: 0, False: 2]
  ------------------
  425|      0|        return 0;
  426|       |
  427|      2|    hand->handfn = handfn;
  428|      2|    hand->arg = arg;
  429|      2|#ifndef FIPS_MODULE
  430|      2|    hand->index = index;
  431|      2|#endif
  432|      2|    hand->next = *hands;
  433|      2|    *hands = hand;
  434|       |
  435|      2|    return 1;
  436|      2|}
ossl_init_thread_deregister:
  492|    218|{
  493|    218|    return init_thread_deregister(index, 0);
  494|    218|}
initthread.c:manage_thread_local:
  137|    111|{
  138|    111|    THREAD_EVENT_HANDLER **hands = get_thread_event_handler(ctx);
  139|       |
  140|    111|    if (alloc) {
  ------------------
  |  Branch (140:9): [True: 2, False: 109]
  ------------------
  141|      2|        if (hands == NULL) {
  ------------------
  |  Branch (141:13): [True: 1, False: 1]
  ------------------
  142|       |
  143|      1|            if ((hands = OPENSSL_zalloc(sizeof(*hands))) == NULL)
  ------------------
  |  |  109|      1|    CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  |  Branch (143:17): [True: 0, False: 1]
  ------------------
  144|      0|                return NULL;
  145|       |
  146|      1|            if (!set_thread_event_handler(ctx, hands)) {
  ------------------
  |  Branch (146:17): [True: 0, False: 1]
  ------------------
  147|      0|                OPENSSL_free(hands);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  148|      0|                return NULL;
  149|      0|            }
  150|      1|#ifndef FIPS_MODULE
  151|      1|            if (!init_thread_push_handlers(hands)) {
  ------------------
  |  Branch (151:17): [True: 0, False: 1]
  ------------------
  152|      0|                set_thread_event_handler(ctx, NULL);
  153|      0|                OPENSSL_free(hands);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  154|      0|                return NULL;
  155|      0|            }
  156|      1|#endif
  157|      1|        }
  158|    109|    } else if (!keep) {
  ------------------
  |  Branch (158:16): [True: 0, False: 109]
  ------------------
  159|      0|        set_thread_event_handler(ctx, NULL);
  160|      0|    }
  161|       |
  162|    111|    return hands;
  163|    111|}
initthread.c:get_thread_event_handler:
  114|    111|{
  115|       |#ifdef FIPS_MODULE
  116|       |    return CRYPTO_THREAD_get_local_ex(CRYPTO_THREAD_LOCAL_TEVENT_KEY, ctx);
  117|       |#else
  118|    111|    if (destructor_key.sane != -1)
  ------------------
  |  Branch (118:9): [True: 111, False: 0]
  ------------------
  119|    111|        return CRYPTO_THREAD_get_local(&destructor_key.value);
  120|      0|    return NULL;
  121|    111|#endif
  122|    111|}
initthread.c:set_thread_event_handler:
  125|      1|{
  126|       |#ifdef FIPS_MODULE
  127|       |    return CRYPTO_THREAD_set_local_ex(CRYPTO_THREAD_LOCAL_TEVENT_KEY, ctx, hands);
  128|       |#else
  129|      1|    if (destructor_key.sane != -1)
  ------------------
  |  Branch (129:9): [True: 1, False: 0]
  ------------------
  130|      1|        return CRYPTO_THREAD_set_local(&destructor_key.value, hands);
  131|      0|    return 0;
  132|      1|#endif
  133|      1|}
initthread.c:init_thread_push_handlers:
  192|      1|{
  193|      1|    int ret;
  194|      1|    GLOBAL_TEVENT_REGISTER *gtr;
  195|       |
  196|      1|    gtr = get_global_tevent_register();
  197|      1|    if (gtr == NULL)
  ------------------
  |  Branch (197:9): [True: 0, False: 1]
  ------------------
  198|      0|        return 0;
  199|       |
  200|      1|    if (!CRYPTO_THREAD_write_lock(gtr->lock))
  ------------------
  |  Branch (200:9): [True: 0, False: 1]
  ------------------
  201|      0|        return 0;
  202|      1|    ret = (sk_THREAD_EVENT_HANDLER_PTR_push(gtr->skhands, hands) != 0);
  203|      1|    CRYPTO_THREAD_unlock(gtr->lock);
  204|       |
  205|      1|    return ret;
  206|      1|}
initthread.c:get_global_tevent_register:
   79|    328|{
   80|    328|    if (!RUN_ONCE(&tevent_register_runonce, create_global_tevent_register))
  ------------------
  |  |  130|    328|    (CRYPTO_THREAD_run_once(once, init##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (130:6): [True: 328, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (80:9): [True: 0, False: 328]
  ------------------
   81|      0|        return NULL;
   82|    328|    return glob_tevent_reg;
   83|    328|}
initthread.c:create_global_tevent_register:
   60|      1|{
   61|      1|    glob_tevent_reg = OPENSSL_zalloc(sizeof(*glob_tevent_reg));
  ------------------
  |  |  109|      1|    CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   62|      1|    if (glob_tevent_reg == NULL)
  ------------------
  |  Branch (62:9): [True: 0, False: 1]
  ------------------
   63|      0|        return 0;
   64|       |
   65|      1|    glob_tevent_reg->skhands = sk_THREAD_EVENT_HANDLER_PTR_new_null();
   66|      1|    glob_tevent_reg->lock = CRYPTO_THREAD_lock_new();
   67|      1|    if (glob_tevent_reg->skhands == NULL || glob_tevent_reg->lock == NULL) {
  ------------------
  |  Branch (67:9): [True: 0, False: 1]
  |  Branch (67:45): [True: 0, False: 1]
  ------------------
   68|      0|        sk_THREAD_EVENT_HANDLER_PTR_free(glob_tevent_reg->skhands);
   69|      0|        CRYPTO_THREAD_lock_free(glob_tevent_reg->lock);
   70|      0|        OPENSSL_free(glob_tevent_reg);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   71|      0|        glob_tevent_reg = NULL;
   72|      0|        return 0;
   73|      0|    }
   74|       |
   75|      1|    return 1;
   76|      1|}
initthread.c:fetch_thread_local:
  171|    109|{
  172|    109|    return manage_thread_local(ctx, 0, 1);
  173|    109|}
initthread.c:init_thread_stop:
  348|    109|{
  349|    109|    THREAD_EVENT_HANDLER *curr, *prev = NULL, *tmp;
  350|    109|#ifndef FIPS_MODULE
  351|    109|    GLOBAL_TEVENT_REGISTER *gtr;
  352|    109|#endif
  353|       |
  354|       |    /* Can't do much about this */
  355|    109|    if (hands == NULL)
  ------------------
  |  Branch (355:9): [True: 0, False: 109]
  ------------------
  356|      0|        return;
  357|       |
  358|    109|#ifndef FIPS_MODULE
  359|    109|    gtr = get_global_tevent_register();
  360|    109|    if (gtr == NULL)
  ------------------
  |  Branch (360:9): [True: 0, False: 109]
  ------------------
  361|      0|        return;
  362|       |
  363|    109|    if (!CRYPTO_THREAD_write_lock(gtr->lock))
  ------------------
  |  Branch (363:9): [True: 0, False: 109]
  ------------------
  364|      0|        return;
  365|    109|#endif
  366|       |
  367|    109|    curr = *hands;
  368|    327|    while (curr != NULL) {
  ------------------
  |  Branch (368:12): [True: 218, False: 109]
  ------------------
  369|    218|        if (arg != NULL && curr->arg != arg) {
  ------------------
  |  Branch (369:13): [True: 218, False: 0]
  |  Branch (369:28): [True: 218, False: 0]
  ------------------
  370|    218|            prev = curr;
  371|    218|            curr = curr->next;
  372|    218|            continue;
  373|    218|        }
  374|      0|        curr->handfn(curr->arg);
  375|      0|        if (prev == NULL)
  ------------------
  |  Branch (375:13): [True: 0, False: 0]
  ------------------
  376|      0|            *hands = curr->next;
  377|      0|        else
  378|      0|            prev->next = curr->next;
  379|       |
  380|      0|        tmp = curr;
  381|      0|        curr = curr->next;
  382|       |
  383|      0|        OPENSSL_free(tmp);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  384|      0|    }
  385|    109|#ifndef FIPS_MODULE
  386|    109|    CRYPTO_THREAD_unlock(gtr->lock);
  387|    109|#endif
  388|    109|}
initthread.c:alloc_thread_local:
  176|      2|{
  177|      2|    return manage_thread_local(ctx, 1, 0);
  178|      2|}
initthread.c:init_thread_deregister:
  440|    218|{
  441|    218|    GLOBAL_TEVENT_REGISTER *gtr;
  442|    218|    int i;
  443|       |
  444|    218|    gtr = get_global_tevent_register();
  445|    218|    if (gtr == NULL)
  ------------------
  |  Branch (445:9): [True: 0, False: 218]
  ------------------
  446|      0|        return 0;
  447|    218|    if (!all) {
  ------------------
  |  Branch (447:9): [True: 218, False: 0]
  ------------------
  448|    218|        if (!CRYPTO_THREAD_write_lock(gtr->lock))
  ------------------
  |  Branch (448:13): [True: 0, False: 218]
  ------------------
  449|      0|            return 0;
  450|    218|    } else {
  451|      0|        glob_tevent_reg = NULL;
  452|      0|    }
  453|    436|    for (i = 0; i < sk_THREAD_EVENT_HANDLER_PTR_num(gtr->skhands); i++) {
  ------------------
  |  Branch (453:17): [True: 218, False: 218]
  ------------------
  454|    218|        THREAD_EVENT_HANDLER **hands
  455|    218|            = sk_THREAD_EVENT_HANDLER_PTR_value(gtr->skhands, i);
  456|    218|        THREAD_EVENT_HANDLER *curr = NULL, *prev = NULL, *tmp;
  457|       |
  458|    218|        if (hands == NULL) {
  ------------------
  |  Branch (458:13): [True: 0, False: 218]
  ------------------
  459|      0|            if (!all)
  ------------------
  |  Branch (459:17): [True: 0, False: 0]
  ------------------
  460|      0|                CRYPTO_THREAD_unlock(gtr->lock);
  461|      0|            return 0;
  462|      0|        }
  463|    218|        curr = *hands;
  464|    654|        while (curr != NULL) {
  ------------------
  |  Branch (464:16): [True: 436, False: 218]
  ------------------
  465|    436|            if (all || curr->index == index) {
  ------------------
  |  Branch (465:17): [True: 0, False: 436]
  |  Branch (465:24): [True: 0, False: 436]
  ------------------
  466|      0|                if (prev != NULL)
  ------------------
  |  Branch (466:21): [True: 0, False: 0]
  ------------------
  467|      0|                    prev->next = curr->next;
  468|      0|                else
  469|      0|                    *hands = curr->next;
  470|      0|                tmp = curr;
  471|      0|                curr = curr->next;
  472|      0|                OPENSSL_free(tmp);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  473|      0|                continue;
  474|      0|            }
  475|    436|            prev = curr;
  476|    436|            curr = curr->next;
  477|    436|        }
  478|    218|        if (all)
  ------------------
  |  Branch (478:13): [True: 0, False: 218]
  ------------------
  479|      0|            OPENSSL_free(hands);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  480|    218|    }
  481|    218|    if (all) {
  ------------------
  |  Branch (481:9): [True: 0, False: 218]
  ------------------
  482|      0|        CRYPTO_THREAD_lock_free(gtr->lock);
  483|      0|        sk_THREAD_EVENT_HANDLER_PTR_free(gtr->skhands);
  484|      0|        OPENSSL_free(gtr);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  485|    218|    } else {
  486|    218|        CRYPTO_THREAD_unlock(gtr->lock);
  487|    218|    }
  488|    218|    return 1;
  489|    218|}

OPENSSL_LH_set_thunks:
   52|    577|{
   53|       |
   54|    577|    if (lh == NULL)
  ------------------
  |  Branch (54:9): [True: 0, False: 577]
  ------------------
   55|      0|        return NULL;
   56|    577|    lh->compw = cw;
   57|    577|    lh->hashw = hw;
   58|    577|    lh->daw = daw;
   59|    577|    lh->daaw = daaw;
   60|    577|    return lh;
   61|    577|}
OPENSSL_LH_new:
   64|    577|{
   65|    577|    OPENSSL_LHASH *ret;
   66|       |
   67|    577|    if ((ret = OPENSSL_zalloc(sizeof(*ret))) == NULL)
  ------------------
  |  |  109|    577|    CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  |  Branch (67:9): [True: 0, False: 577]
  ------------------
   68|      0|        return NULL;
   69|    577|    if ((ret->b = OPENSSL_calloc(MIN_NODES, sizeof(*ret->b))) == NULL)
  ------------------
  |  |  113|    577|    CRYPTO_calloc(num, size, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_calloc(num, size, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  |  Branch (69:9): [True: 0, False: 577]
  ------------------
   70|      0|        goto err;
   71|    577|    ret->comp = ((c == NULL) ? (OPENSSL_LH_COMPFUNC)strcmp : c);
  ------------------
  |  Branch (71:18): [True: 0, False: 577]
  ------------------
   72|    577|    ret->hash = ((h == NULL) ? (OPENSSL_LH_HASHFUNC)OPENSSL_LH_strhash : h);
  ------------------
  |  Branch (72:18): [True: 0, False: 577]
  ------------------
   73|    577|    ret->num_nodes = MIN_NODES / 2;
  ------------------
  |  |   39|    577|#define MIN_NODES 16
  ------------------
   74|    577|    ret->num_alloc_nodes = MIN_NODES;
  ------------------
  |  |   39|    577|#define MIN_NODES 16
  ------------------
   75|    577|    ret->pmax = MIN_NODES / 2;
  ------------------
  |  |   39|    577|#define MIN_NODES 16
  ------------------
   76|    577|    ret->up_load = UP_LOAD;
  ------------------
  |  |   40|    577|#define UP_LOAD (2 * LH_LOAD_MULT) /* load times 256 (default 2) */
  |  |  ------------------
  |  |  |  |   92|    577|#define LH_LOAD_MULT 256
  |  |  ------------------
  ------------------
   77|    577|    ret->down_load = DOWN_LOAD;
  ------------------
  |  |   41|    577|#define DOWN_LOAD (LH_LOAD_MULT) /* load times 256 (default 1) */
  |  |  ------------------
  |  |  |  |   92|    577|#define LH_LOAD_MULT 256
  |  |  ------------------
  ------------------
   78|    577|    return ret;
   79|       |
   80|      0|err:
   81|      0|    OPENSSL_free(ret->b);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   82|      0|    OPENSSL_free(ret);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   83|       |    return NULL;
   84|    577|}
OPENSSL_LH_free:
   87|    436|{
   88|    436|    if (lh == NULL)
  ------------------
  |  Branch (88:9): [True: 0, False: 436]
  ------------------
   89|      0|        return;
   90|       |
   91|    436|    OPENSSL_LH_flush(lh);
   92|    436|    OPENSSL_free(lh->b);
  ------------------
  |  |  132|    436|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   93|    436|    OPENSSL_free(lh);
  ------------------
  |  |  132|    436|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   94|    436|}
OPENSSL_LH_flush:
   97|    446|{
   98|    446|    unsigned int i;
   99|    446|    OPENSSL_LH_NODE *n, *nn;
  100|       |
  101|    446|    if (lh == NULL)
  ------------------
  |  Branch (101:9): [True: 0, False: 446]
  ------------------
  102|      0|        return;
  103|       |
  104|  4.01k|    for (i = 0; i < lh->num_nodes; i++) {
  ------------------
  |  Branch (104:17): [True: 3.56k, False: 446]
  ------------------
  105|  3.56k|        n = lh->b[i];
  106|  4.44k|        while (n != NULL) {
  ------------------
  |  Branch (106:16): [True: 872, False: 3.56k]
  ------------------
  107|    872|            nn = n->next;
  108|    872|            OPENSSL_free(n);
  ------------------
  |  |  132|    872|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  109|    872|            n = nn;
  110|    872|        }
  111|  3.56k|        lh->b[i] = NULL;
  112|  3.56k|    }
  113|       |
  114|    446|    lh->num_items = 0;
  115|    446|}
OPENSSL_LH_insert:
  118|  5.61k|{
  119|  5.61k|    unsigned long hash;
  120|  5.61k|    OPENSSL_LH_NODE *nn, **rn;
  121|  5.61k|    void *ret;
  122|       |
  123|  5.61k|    lh->error = 0;
  124|  5.61k|    if ((lh->up_load <= (lh->num_items * LH_LOAD_MULT / lh->num_nodes)) && !expand(lh))
  ------------------
  |  |   92|  5.61k|#define LH_LOAD_MULT 256
  ------------------
  |  Branch (124:9): [True: 866, False: 4.75k]
  |  Branch (124:76): [True: 0, False: 866]
  ------------------
  125|      0|        return NULL; /* 'lh->error++' already done in 'expand' */
  126|       |
  127|  5.61k|    rn = getrn(lh, data, &hash);
  128|       |
  129|  5.61k|    if (*rn == NULL) {
  ------------------
  |  Branch (129:9): [True: 2.64k, False: 2.97k]
  ------------------
  130|  2.64k|        if ((nn = OPENSSL_malloc(sizeof(*nn))) == NULL) {
  ------------------
  |  |  107|  2.64k|    CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  |  Branch (130:13): [True: 0, False: 2.64k]
  ------------------
  131|      0|            lh->error++;
  132|      0|            return NULL;
  133|      0|        }
  134|  2.64k|        nn->data = data;
  135|  2.64k|        nn->next = NULL;
  136|  2.64k|        nn->hash = hash;
  137|  2.64k|        *rn = nn;
  138|  2.64k|        ret = NULL;
  139|  2.64k|        lh->num_items++;
  140|  2.97k|    } else { /* replace same key */
  141|  2.97k|        ret = (*rn)->data;
  142|  2.97k|        (*rn)->data = data;
  143|  2.97k|    }
  144|  5.61k|    return ret;
  145|  5.61k|}
OPENSSL_LH_retrieve:
  173|  2.74k|{
  174|  2.74k|    unsigned long hash;
  175|  2.74k|    OPENSSL_LH_NODE **rn;
  176|       |
  177|  2.74k|    if (lh->error != 0)
  ------------------
  |  Branch (177:9): [True: 0, False: 2.74k]
  ------------------
  178|      0|        lh->error = 0;
  179|       |
  180|  2.74k|    rn = getrn(lh, data, &hash);
  181|       |
  182|  2.74k|    return *rn == NULL ? NULL : (*rn)->data;
  ------------------
  |  Branch (182:12): [True: 1.94k, False: 805]
  ------------------
  183|  2.74k|}
OPENSSL_LH_doall:
  216|    446|{
  217|    446|    if (lh == NULL)
  ------------------
  |  Branch (217:9): [True: 0, False: 446]
  ------------------
  218|      0|        return;
  219|       |
  220|    446|    doall_util_fn(lh, 0, lh->daw, func, (OPENSSL_LH_DOALL_FUNCARG)NULL,
  221|    446|        (OPENSSL_LH_DOALL_FUNCARG_THUNK)NULL, NULL);
  222|    446|}
OPENSSL_LH_doall_arg_thunk:
  237|      2|{
  238|      2|    doall_util_fn(lh, 1, (OPENSSL_LH_DOALL_FUNC_THUNK)NULL,
  239|       |        (OPENSSL_LH_DOALL_FUNC)NULL, fn, daaw, arg);
  240|      2|}
OPENSSL_LH_strhash:
  360|  2.79k|{
  361|  2.79k|    unsigned long ret = 0;
  362|  2.79k|    long n;
  363|  2.79k|    unsigned long v;
  364|  2.79k|    int r;
  365|       |
  366|  2.79k|    if ((c == NULL) || (*c == '\0'))
  ------------------
  |  Branch (366:9): [True: 0, False: 2.79k]
  |  Branch (366:24): [True: 9, False: 2.78k]
  ------------------
  367|      9|        return ret;
  368|       |
  369|  2.78k|    n = 0x100;
  370|  19.5k|    while (*c) {
  ------------------
  |  Branch (370:12): [True: 16.7k, False: 2.78k]
  ------------------
  371|  16.7k|        v = n | (*c);
  372|  16.7k|        n += 0x100;
  373|  16.7k|        r = (int)((v >> 2) ^ v) & 0x0f;
  374|       |        /* cast to uint64_t to avoid 32 bit shift of 32 bit value */
  375|  16.7k|        ret = (ret << r) | (unsigned long)((uint64_t)ret >> (32 - r));
  376|  16.7k|        ret &= 0xFFFFFFFFL;
  377|  16.7k|        ret ^= v * v;
  378|  16.7k|        c++;
  379|  16.7k|    }
  380|  2.78k|    return (ret >> 16) ^ ret;
  381|  2.79k|}
ossl_lh_strcasehash:
  398|  1.00k|{
  399|  1.00k|    unsigned long ret = 0;
  400|  1.00k|    long n;
  401|  1.00k|    unsigned long v;
  402|  1.00k|    int r;
  403|       |#if defined(CHARSET_EBCDIC) && !defined(CHARSET_EBCDIC_TEST)
  404|       |    const long int case_adjust = ~0x40;
  405|       |#else
  406|  1.00k|    const long int case_adjust = ~0x20;
  407|  1.00k|#endif
  408|       |
  409|  1.00k|    if (c == NULL || *c == '\0')
  ------------------
  |  Branch (409:9): [True: 0, False: 1.00k]
  |  Branch (409:22): [True: 0, False: 1.00k]
  ------------------
  410|      0|        return ret;
  411|       |
  412|  13.0k|    for (n = 0x100; *c != '\0'; n += 0x100) {
  ------------------
  |  Branch (412:21): [True: 12.0k, False: 1.00k]
  ------------------
  413|  12.0k|        v = n | (case_adjust & *c);
  414|  12.0k|        r = (int)((v >> 2) ^ v) & 0x0f;
  415|       |        /* cast to uint64_t to avoid 32 bit shift of 32 bit value */
  416|  12.0k|        ret = (ret << r) | (unsigned long)((uint64_t)ret >> (32 - r));
  417|  12.0k|        ret &= 0xFFFFFFFFL;
  418|  12.0k|        ret ^= v * v;
  419|  12.0k|        c++;
  420|  12.0k|    }
  421|  1.00k|    return (ret >> 16) ^ ret;
  422|  1.00k|}
OPENSSL_LH_error:
  440|  1.12k|{
  441|  1.12k|    return lh->error;
  442|  1.12k|}
lhash.c:doall_util_fn:
  191|    448|{
  192|    448|    int i;
  193|    448|    OPENSSL_LH_NODE *a, *n;
  194|       |
  195|    448|    if (lh == NULL)
  ------------------
  |  Branch (195:9): [True: 0, False: 448]
  ------------------
  196|      0|        return;
  197|       |
  198|       |    /*
  199|       |     * reverse the order so we search from 'top to bottom' We were having
  200|       |     * memory leaks otherwise
  201|       |     */
  202|  4.26k|    for (i = lh->num_nodes - 1; i >= 0; i--) {
  ------------------
  |  Branch (202:33): [True: 3.81k, False: 448]
  ------------------
  203|  3.81k|        a = lh->b[i];
  204|  5.16k|        while (a != NULL) {
  ------------------
  |  Branch (204:16): [True: 1.35k, False: 3.81k]
  ------------------
  205|  1.35k|            n = a->next;
  206|  1.35k|            if (use_arg)
  ------------------
  |  Branch (206:17): [True: 484, False: 872]
  ------------------
  207|    484|                wfunc_arg(a->data, arg, func_arg);
  208|    872|            else
  209|    872|                wfunc(a->data, func);
  210|  1.35k|            a = n;
  211|  1.35k|        }
  212|  3.81k|    }
  213|    448|}
lhash.c:expand:
  243|    866|{
  244|    866|    OPENSSL_LH_NODE **n, **n1, **n2, *np;
  245|    866|    unsigned int p, pmax, nni, j;
  246|    866|    unsigned long hash;
  247|       |
  248|    866|    nni = lh->num_alloc_nodes;
  249|    866|    p = lh->p;
  250|    866|    pmax = lh->pmax;
  251|    866|    if (p + 1 >= pmax) {
  ------------------
  |  Branch (251:9): [True: 9, False: 857]
  ------------------
  252|      9|        j = nni * 2;
  253|      9|        n = OPENSSL_realloc_array(lh->b, j, sizeof(OPENSSL_LH_NODE *));
  ------------------
  |  |  125|      9|    CRYPTO_realloc_array(addr, num, size, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_realloc_array(addr, num, size, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  254|      9|        if (n == NULL) {
  ------------------
  |  Branch (254:13): [True: 0, False: 9]
  ------------------
  255|      0|            lh->error++;
  256|      0|            return 0;
  257|      0|        }
  258|      9|        lh->b = n;
  259|      9|        memset(n + nni, 0, sizeof(*n) * (j - nni));
  260|      9|        lh->pmax = nni;
  261|      9|        lh->num_alloc_nodes = j;
  262|      9|        lh->p = 0;
  263|    857|    } else {
  264|    857|        lh->p++;
  265|    857|    }
  266|       |
  267|    866|    lh->num_nodes++;
  268|    866|    n1 = &(lh->b[p]);
  269|    866|    n2 = &(lh->b[p + pmax]);
  270|    866|    *n2 = NULL;
  271|       |
  272|  3.93k|    for (np = *n1; np != NULL;) {
  ------------------
  |  Branch (272:20): [True: 3.06k, False: 866]
  ------------------
  273|  3.06k|        hash = np->hash;
  274|  3.06k|        if ((hash % nni) != p) { /* move it */
  ------------------
  |  Branch (274:13): [True: 552, False: 2.51k]
  ------------------
  275|    552|            *n1 = (*n1)->next;
  276|    552|            np->next = *n2;
  277|    552|            *n2 = np;
  278|    552|        } else
  279|  2.51k|            n1 = &((*n1)->next);
  280|  3.06k|        np = *n1;
  281|  3.06k|    }
  282|       |
  283|    866|    return 1;
  284|    866|}
lhash.c:getrn:
  320|  8.36k|{
  321|  8.36k|    OPENSSL_LH_NODE **ret, *n1;
  322|  8.36k|    unsigned long hash, nn;
  323|       |
  324|  8.36k|    if (lh->hashw != NULL)
  ------------------
  |  Branch (324:9): [True: 8.36k, False: 0]
  ------------------
  325|  8.36k|        hash = lh->hashw(data, lh->hash);
  326|      0|    else
  327|      0|        hash = lh->hash(data);
  328|       |
  329|  8.36k|    *rhash = hash;
  330|       |
  331|  8.36k|    nn = hash % lh->pmax;
  332|  8.36k|    if (nn < lh->p)
  ------------------
  |  Branch (332:9): [True: 2.95k, False: 5.41k]
  ------------------
  333|  2.95k|        nn = hash % lh->num_alloc_nodes;
  334|       |
  335|  8.36k|    ret = &(lh->b[(int)nn]);
  336|  18.3k|    for (n1 = *ret; n1 != NULL; n1 = n1->next) {
  ------------------
  |  Branch (336:21): [True: 13.7k, False: 4.59k]
  ------------------
  337|  13.7k|        if (n1->hash != hash) {
  ------------------
  |  Branch (337:13): [True: 9.81k, False: 3.93k]
  ------------------
  338|  9.81k|            ret = &(n1->next);
  339|  9.81k|            continue;
  340|  9.81k|        }
  341|       |
  342|  3.93k|        if (lh->compw != NULL) {
  ------------------
  |  Branch (342:13): [True: 3.93k, False: 0]
  ------------------
  343|  3.93k|            if (lh->compw(n1->data, data, lh->comp) == 0)
  ------------------
  |  Branch (343:17): [True: 3.77k, False: 156]
  ------------------
  344|  3.77k|                break;
  345|  3.93k|        } else {
  346|      0|            if (lh->comp(n1->data, data) == 0)
  ------------------
  |  Branch (346:17): [True: 0, False: 0]
  ------------------
  347|      0|                break;
  348|      0|        }
  349|    156|        ret = &(n1->next);
  350|    156|    }
  351|  8.36k|    return ret;
  352|  8.36k|}

CRYPTO_malloc:
  190|  21.1k|{
  191|  21.1k|    void *ptr;
  192|       |
  193|  21.1k|    INCREMENT(malloc_count);
  194|  21.1k|    if (malloc_impl != CRYPTO_malloc) {
  ------------------
  |  Branch (194:9): [True: 0, False: 21.1k]
  ------------------
  195|      0|        ptr = malloc_impl(num, file, line);
  196|      0|        if (ptr != NULL || num == 0)
  ------------------
  |  Branch (196:13): [True: 0, False: 0]
  |  Branch (196:28): [True: 0, False: 0]
  ------------------
  197|      0|            return ptr;
  198|      0|        goto err;
  199|      0|    }
  200|       |
  201|  21.1k|    if (ossl_unlikely(num == 0))
  ------------------
  |  |   23|  21.1k|#define ossl_unlikely(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (23:26): [True: 0, False: 21.1k]
  |  |  ------------------
  ------------------
  202|      0|        return NULL;
  203|       |
  204|  21.1k|    FAILTEST();
  205|  21.1k|    if (allow_customize) {
  ------------------
  |  Branch (205:9): [True: 1, False: 21.1k]
  ------------------
  206|       |        /*
  207|       |         * Disallow customization after the first allocation. We only set this
  208|       |         * if necessary to avoid a store to the same cache line on every
  209|       |         * allocation.
  210|       |         */
  211|      1|        allow_customize = 0;
  212|      1|    }
  213|       |
  214|  21.1k|    ptr = malloc(num);
  215|  21.1k|    if (ossl_likely(ptr != NULL))
  ------------------
  |  |   22|  21.1k|#define ossl_likely(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (22:24): [True: 21.1k, False: 0]
  |  |  ------------------
  ------------------
  216|  21.1k|        return ptr;
  217|      0|err:
  218|      0|    ossl_report_alloc_err(file, line);
  219|       |    return NULL;
  220|  21.1k|}
CRYPTO_zalloc:
  223|  13.5k|{
  224|  13.5k|    void *ret;
  225|       |
  226|  13.5k|    ret = CRYPTO_malloc(num, file, line);
  227|  13.5k|    if (ret != NULL)
  ------------------
  |  Branch (227:9): [True: 13.5k, False: 0]
  ------------------
  228|  13.5k|        memset(ret, 0, num);
  229|       |
  230|  13.5k|    return ret;
  231|  13.5k|}
CRYPTO_aligned_alloc:
  235|    219|{
  236|    219|    *freeptr = NULL;
  237|       |
  238|       |    /* Ensure that alignment is a power of two no larger than 65536 */
  239|    219|    if (alignment == 0 || (alignment & (alignment - 1)) != 0
  ------------------
  |  Branch (239:9): [True: 0, False: 219]
  |  Branch (239:27): [True: 0, False: 219]
  ------------------
  240|    219|        || alignment > 65536) {
  ------------------
  |  Branch (240:12): [True: 0, False: 219]
  ------------------
  241|      0|        ossl_report_alloc_err_inv(file, line);
  242|      0|        return NULL;
  243|      0|    }
  244|       |
  245|       |    /* Allow non-malloc() allocations as long as no malloc_impl is provided. */
  246|    219|    if (malloc_impl == CRYPTO_malloc) {
  ------------------
  |  Branch (246:9): [True: 219, False: 0]
  ------------------
  247|    219|#if defined(_BSD_SOURCE) || (defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE >= 200112L)
  248|    219|        void *ret;
  249|       |
  250|       |        /* posix_memalign() requires alignment to be at least sizeof(void *) */
  251|    219|        if (alignment < sizeof(void *))
  ------------------
  |  Branch (251:13): [True: 0, False: 219]
  ------------------
  252|      0|            alignment = sizeof(void *);
  253|       |
  254|    219|        if (posix_memalign(&ret, alignment, num) == 0) {
  ------------------
  |  Branch (254:13): [True: 219, False: 0]
  ------------------
  255|    219|            *freeptr = ret;
  256|    219|            return ret;
  257|    219|        }
  258|    219|#endif
  259|    219|    }
  260|       |
  261|      0|    return ossl_malloc_align(num, alignment, freeptr, file, line);
  262|    219|}
CRYPTO_realloc:
  265|    768|{
  266|    768|    void *ret;
  267|       |
  268|    768|    INCREMENT(realloc_count);
  269|    768|    if (realloc_impl != CRYPTO_realloc) {
  ------------------
  |  Branch (269:9): [True: 0, False: 768]
  ------------------
  270|      0|        ret = realloc_impl(str, num, file, line);
  271|       |
  272|      0|        if (num == 0 || ret != NULL)
  ------------------
  |  Branch (272:13): [True: 0, False: 0]
  |  Branch (272:25): [True: 0, False: 0]
  ------------------
  273|      0|            return ret;
  274|       |
  275|      0|        goto err;
  276|      0|    }
  277|       |
  278|    768|    if (str == NULL)
  ------------------
  |  Branch (278:9): [True: 17, False: 751]
  ------------------
  279|     17|        return CRYPTO_malloc(num, file, line);
  280|       |
  281|    751|    if (num == 0) {
  ------------------
  |  Branch (281:9): [True: 0, False: 751]
  ------------------
  282|      0|        CRYPTO_free(str, file, line);
  283|      0|        return NULL;
  284|      0|    }
  285|       |
  286|    751|    FAILTEST();
  287|    751|    ret = realloc(str, num);
  288|       |
  289|    751|err:
  290|    751|    if (num != 0 && ret == NULL)
  ------------------
  |  Branch (290:9): [True: 751, False: 0]
  |  Branch (290:21): [True: 0, False: 751]
  ------------------
  291|      0|        ossl_report_alloc_err(file, line);
  292|       |
  293|    751|    return ret;
  294|    751|}
CRYPTO_free:
  324|  20.4k|{
  325|  20.4k|    INCREMENT(free_count);
  326|  20.4k|    if (free_impl != CRYPTO_free) {
  ------------------
  |  Branch (326:9): [True: 0, False: 20.4k]
  ------------------
  327|      0|        free_impl(str, file, line);
  328|      0|        return;
  329|      0|    }
  330|       |
  331|  20.4k|    free(str);
  332|  20.4k|}

CRYPTO_secure_malloc:
  154|      2|{
  155|      2|#ifndef OPENSSL_NO_SECURE_MEMORY
  156|      2|    void *ret = NULL;
  157|      2|    size_t actual_size;
  158|      2|    int reason = CRYPTO_R_SECURE_MALLOC_FAILURE;
  ------------------
  |  |   45|      2|#define CRYPTO_R_SECURE_MALLOC_FAILURE 111
  ------------------
  159|       |
  160|      2|    if (!secure_mem_initialized) {
  ------------------
  |  Branch (160:9): [True: 2, False: 0]
  ------------------
  161|      2|        return CRYPTO_malloc(num, file, line);
  162|      2|    }
  163|      0|    if (!CRYPTO_THREAD_write_lock(sec_malloc_lock)) {
  ------------------
  |  Branch (163:9): [True: 0, False: 0]
  ------------------
  164|      0|        reason = ERR_R_CRYPTO_LIB;
  ------------------
  |  |  281|      0|#define ERR_R_CRYPTO_LIB (ERR_LIB_CRYPTO /* 15 */ | ERR_RFLAG_COMMON)
  |  |  ------------------
  |  |  |  |   68|      0|#define ERR_LIB_CRYPTO 15
  |  |  ------------------
  |  |               #define ERR_R_CRYPTO_LIB (ERR_LIB_CRYPTO /* 15 */ | ERR_RFLAG_COMMON)
  |  |  ------------------
  |  |  |  |  220|      0|#define ERR_RFLAG_COMMON (0x2 << ERR_RFLAGS_OFFSET)
  |  |  |  |  ------------------
  |  |  |  |  |  |  211|      0|#define ERR_RFLAGS_OFFSET 18L
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  165|      0|        goto err;
  166|      0|    }
  167|      0|    ret = sh_malloc(num);
  168|      0|    actual_size = ret ? sh_actual_size(ret) : 0;
  ------------------
  |  Branch (168:19): [True: 0, False: 0]
  ------------------
  169|      0|    secure_mem_used += actual_size;
  170|      0|    CRYPTO_THREAD_unlock(sec_malloc_lock);
  171|      0|err:
  172|      0|    if (ret == NULL && (file != NULL || line != 0)) {
  ------------------
  |  Branch (172:9): [True: 0, False: 0]
  |  Branch (172:25): [True: 0, False: 0]
  |  Branch (172:41): [True: 0, False: 0]
  ------------------
  173|      0|        ERR_new();
  174|      0|        ERR_set_debug(file, line, NULL);
  175|      0|        ERR_set_error(ERR_LIB_CRYPTO, reason, NULL);
  ------------------
  |  |   68|      0|#define ERR_LIB_CRYPTO 15
  ------------------
  176|      0|    }
  177|      0|    return ret;
  178|       |#else
  179|       |    return CRYPTO_malloc(num, file, line);
  180|       |#endif /* OPENSSL_NO_SECURE_MEMORY */
  181|      0|}
CRYPTO_secure_zalloc:
  184|      3|{
  185|      3|#ifndef OPENSSL_NO_SECURE_MEMORY
  186|      3|    if (secure_mem_initialized)
  ------------------
  |  Branch (186:9): [True: 0, False: 3]
  ------------------
  187|       |        /* CRYPTO_secure_malloc() zeroes allocations when it is implemented */
  188|      0|        return CRYPTO_secure_malloc(num, file, line);
  189|      3|#endif
  190|      3|    return CRYPTO_zalloc(num, file, line);
  191|      3|}
CRYPTO_secure_clear_free:
  218|      4|{
  219|      4|#ifndef OPENSSL_NO_SECURE_MEMORY
  220|      4|    size_t actual_size;
  221|       |
  222|      4|    if (ptr == NULL)
  ------------------
  |  Branch (222:9): [True: 1, False: 3]
  ------------------
  223|      1|        return;
  224|      3|    if (!CRYPTO_secure_allocated(ptr)) {
  ------------------
  |  Branch (224:9): [True: 3, False: 0]
  ------------------
  225|      3|        OPENSSL_cleanse(ptr, num);
  226|      3|        CRYPTO_free(ptr, file, line);
  227|      3|        return;
  228|      3|    }
  229|      0|    if (!CRYPTO_THREAD_write_lock(sec_malloc_lock))
  ------------------
  |  Branch (229:9): [True: 0, False: 0]
  ------------------
  230|      0|        return;
  231|      0|    actual_size = sh_actual_size(ptr);
  232|      0|    CLEAR(ptr, actual_size);
  ------------------
  |  |   81|      0|#define CLEAR(p, s) OPENSSL_cleanse(p, s)
  ------------------
  233|      0|    secure_mem_used -= actual_size;
  234|      0|    sh_free(ptr);
  235|      0|    CRYPTO_THREAD_unlock(sec_malloc_lock);
  236|       |#else
  237|       |    if (ptr == NULL)
  238|       |        return;
  239|       |    OPENSSL_cleanse(ptr, num);
  240|       |    CRYPTO_free(ptr, file, line);
  241|       |#endif /* OPENSSL_NO_SECURE_MEMORY */
  242|      0|}
CRYPTO_secure_allocated:
  245|      3|{
  246|      3|#ifndef OPENSSL_NO_SECURE_MEMORY
  247|      3|    if (!secure_mem_initialized)
  ------------------
  |  Branch (247:9): [True: 3, False: 0]
  ------------------
  248|      3|        return 0;
  249|       |    /*
  250|       |     * Only read accesses to the arena take place in sh_allocated() and this
  251|       |     * is only changed by the sh_init() and sh_done() calls which are not
  252|       |     * locked.  Hence, it is safe to make this check without a lock too.
  253|       |     */
  254|      0|    return sh_allocated(ptr);
  255|       |#else
  256|       |    return 0;
  257|       |#endif /* OPENSSL_NO_SECURE_MEMORY */
  258|      3|}

CRYPTO_ctr128_encrypt_ctr32:
  155|  6.53k|{
  156|  6.53k|    unsigned int n, ctr32;
  157|       |
  158|  6.53k|    n = *num;
  159|       |
  160|  6.53k|    while (n && len) {
  ------------------
  |  Branch (160:12): [True: 0, False: 6.53k]
  |  Branch (160:17): [True: 0, False: 0]
  ------------------
  161|      0|        *(out++) = *(in++) ^ ecount_buf[n];
  162|      0|        --len;
  163|      0|        n = (n + 1) % 16;
  164|      0|    }
  165|       |
  166|  6.53k|    ctr32 = GETU32(ivec + 12);
  ------------------
  |  |   98|  6.53k|#define GETU32(p) ((u32)(p)[0] << 24 | (u32)(p)[1] << 16 | (u32)(p)[2] << 8 | (u32)(p)[3])
  ------------------
  167|  6.53k|    while (len >= 16) {
  ------------------
  |  Branch (167:12): [True: 2, False: 6.53k]
  ------------------
  168|      2|        size_t blocks = len / 16;
  169|       |        /*
  170|       |         * 1<<28 is just a not-so-small yet not-so-large number...
  171|       |         * Below condition is practically never met, but it has to
  172|       |         * be checked for code correctness.
  173|       |         */
  174|      2|        if (sizeof(size_t) > sizeof(unsigned int) && blocks > (1U << 28))
  ------------------
  |  Branch (174:13): [True: 2, Folded]
  |  Branch (174:54): [True: 0, False: 2]
  ------------------
  175|      0|            blocks = (1U << 28);
  176|       |        /*
  177|       |         * As (*func) operates on 32-bit counter, caller
  178|       |         * has to handle overflow. 'if' below detects the
  179|       |         * overflow, which is then handled by limiting the
  180|       |         * amount of blocks to the exact overflow point...
  181|       |         */
  182|      2|        ctr32 += (u32)blocks;
  183|      2|        if (ctr32 < blocks) {
  ------------------
  |  Branch (183:13): [True: 0, False: 2]
  ------------------
  184|      0|            blocks -= ctr32;
  185|      0|            ctr32 = 0;
  186|      0|        }
  187|      2|        (*func)(in, out, blocks, key, ivec);
  188|       |        /* (*ctr) does not update ivec, caller does: */
  189|      2|        PUTU32(ivec + 12, ctr32);
  ------------------
  |  |   99|      2|#define PUTU32(p, v) ((p)[0] = (u8)((v) >> 24), (p)[1] = (u8)((v) >> 16), (p)[2] = (u8)((v) >> 8), (p)[3] = (u8)(v))
  ------------------
  190|       |        /* ... overflow was detected, propagate carry. */
  191|      2|        if (ctr32 == 0)
  ------------------
  |  Branch (191:13): [True: 0, False: 2]
  ------------------
  192|      0|            ctr96_inc(ivec);
  193|      2|        blocks *= 16;
  194|      2|        len -= blocks;
  195|      2|        out += blocks;
  196|      2|        in += blocks;
  197|      2|    }
  198|  6.53k|    if (len) {
  ------------------
  |  Branch (198:9): [True: 6.53k, False: 2]
  ------------------
  199|  6.53k|        memset(ecount_buf, 0, 16);
  200|  6.53k|        (*func)(ecount_buf, ecount_buf, 1, key, ivec);
  201|  6.53k|        ++ctr32;
  202|  6.53k|        PUTU32(ivec + 12, ctr32);
  ------------------
  |  |   99|  6.53k|#define PUTU32(p, v) ((p)[0] = (u8)((v) >> 24), (p)[1] = (u8)((v) >> 16), (p)[2] = (u8)((v) >> 8), (p)[3] = (u8)(v))
  ------------------
  203|  6.53k|        if (ctr32 == 0)
  ------------------
  |  Branch (203:13): [True: 0, False: 6.53k]
  ------------------
  204|      0|            ctr96_inc(ivec);
  205|  32.6k|        while (len--) {
  ------------------
  |  Branch (205:16): [True: 26.1k, False: 6.53k]
  ------------------
  206|  26.1k|            out[n] = in[n] ^ ecount_buf[n];
  207|  26.1k|            ++n;
  208|  26.1k|        }
  209|  6.53k|    }
  210|       |
  211|  6.53k|    *num = n;
  212|  6.53k|}

openssl_fopen:
   39|    110|{
   40|    110|    FILE *file = NULL;
   41|       |#if defined(_WIN32) && defined(CP_UTF8)
   42|       |    int sz, len_0;
   43|       |    DWORD flags;
   44|       |#endif
   45|       |
   46|    110|    if (filename == NULL)
  ------------------
  |  Branch (46:9): [True: 0, False: 110]
  ------------------
   47|      0|        return NULL;
   48|       |#if defined(_WIN32) && defined(CP_UTF8)
   49|       |    len_0 = (int)strlen(filename) + 1;
   50|       |
   51|       |    /*
   52|       |     * Basically there are three cases to cover: a) filename is
   53|       |     * pure ASCII string; b) actual UTF-8 encoded string and
   54|       |     * c) locale-ized string, i.e. one containing 8-bit
   55|       |     * characters that are meaningful in current system locale.
   56|       |     * If filename is pure ASCII or real UTF-8 encoded string,
   57|       |     * MultiByteToWideChar succeeds and _wfopen works. If
   58|       |     * filename is locale-ized string, chances are that
   59|       |     * MultiByteToWideChar fails reporting
   60|       |     * ERROR_NO_UNICODE_TRANSLATION, in which case we fall
   61|       |     * back to fopen...
   62|       |     */
   63|       |    if ((sz = MultiByteToWideChar(CP_UTF8, (flags = MB_ERR_INVALID_CHARS),
   64|       |             filename, len_0, NULL, 0))
   65|       |            > 0
   66|       |        || (GetLastError() == ERROR_INVALID_FLAGS && (sz = MultiByteToWideChar(CP_UTF8, (flags = 0), filename, len_0, NULL, 0)) > 0)) {
   67|       |        WCHAR wmode[8];
   68|       |        WCHAR *wfilename = _alloca(sz * sizeof(WCHAR));
   69|       |
   70|       |        if (MultiByteToWideChar(CP_UTF8, flags,
   71|       |                filename, len_0, wfilename, sz)
   72|       |            && MultiByteToWideChar(CP_UTF8, 0, mode, (int)(strlen(mode) + 1),
   73|       |                wmode, OSSL_NELEM(wmode))
   74|       |            && (file = _wfopen(wfilename, wmode)) == NULL && (errno == ENOENT || errno == EBADF)) {
   75|       |            /*
   76|       |             * UTF-8 decode succeeded, but no file, filename
   77|       |             * could still have been locale-ized...
   78|       |             */
   79|       |            file = fopen(filename, mode);
   80|       |        }
   81|       |    } else if (GetLastError() == ERROR_NO_UNICODE_TRANSLATION) {
   82|       |        file = fopen(filename, mode);
   83|       |    }
   84|       |#elif defined(__DJGPP__)
   85|       |    {
   86|       |        char *newname = NULL;
   87|       |
   88|       |        if (pathconf(filename, _PC_NAME_MAX) <= 12) { /* 8.3 file system? */
   89|       |            char *iterator;
   90|       |            char lastchar;
   91|       |
   92|       |            if ((newname = OPENSSL_malloc(strlen(filename) + 1)) == NULL)
   93|       |                return NULL;
   94|       |
   95|       |            for (iterator = newname, lastchar = '\0';
   96|       |                *filename; filename++, iterator++) {
   97|       |                if (lastchar == '/' && filename[0] == '.'
   98|       |                    && filename[1] != '.' && filename[1] != '/') {
   99|       |                    /* Leading dots are not permitted in plain DOS. */
  100|       |                    *iterator = '_';
  101|       |                } else {
  102|       |                    *iterator = *filename;
  103|       |                }
  104|       |                lastchar = *filename;
  105|       |            }
  106|       |            *iterator = '\0';
  107|       |            filename = newname;
  108|       |        }
  109|       |        file = fopen(filename, mode);
  110|       |
  111|       |        OPENSSL_free(newname);
  112|       |    }
  113|       |#else
  114|    110|    file = fopen(filename, mode);
  115|    110|#endif
  116|    110|    return file;
  117|    110|}

CRYPTO_strdup:
   23|  1.04k|{
   24|  1.04k|    char *ret;
   25|  1.04k|    size_t len;
   26|       |
   27|  1.04k|    if (str == NULL)
  ------------------
  |  Branch (27:9): [True: 0, False: 1.04k]
  ------------------
   28|      0|        return NULL;
   29|       |
   30|  1.04k|    len = strlen(str) + 1;
   31|  1.04k|    ret = CRYPTO_malloc(len, file, line);
   32|  1.04k|    if (ret != NULL)
  ------------------
  |  Branch (32:9): [True: 1.04k, False: 0]
  ------------------
   33|  1.04k|        memcpy(ret, str, len);
   34|  1.04k|    return ret;
   35|  1.04k|}
CRYPTO_strndup:
   38|    137|{
   39|    137|    size_t maxlen;
   40|    137|    char *ret;
   41|       |
   42|    137|    if (str == NULL)
  ------------------
  |  Branch (42:9): [True: 0, False: 137]
  ------------------
   43|      0|        return NULL;
   44|       |
   45|    137|    maxlen = OPENSSL_strnlen(str, s);
   46|       |
   47|    137|    ret = CRYPTO_malloc(maxlen + 1, file, line);
   48|    137|    if (ret) {
  ------------------
  |  Branch (48:9): [True: 137, False: 0]
  ------------------
   49|    137|        memcpy(ret, str, maxlen);
   50|    137|        ret[maxlen] = CH_ZERO;
  ------------------
  |  |   20|    137|#define CH_ZERO '\0'
  ------------------
   51|    137|    }
   52|    137|    return ret;
   53|    137|}
OPENSSL_strnlen:
   69|    137|{
   70|    137|    const char *p;
   71|       |
   72|  1.90k|    for (p = str; maxlen-- != 0 && *p != CH_ZERO; ++p)
  ------------------
  |  |   20|  1.77k|#define CH_ZERO '\0'
  ------------------
  |  Branch (72:19): [True: 1.77k, False: 137]
  |  Branch (72:36): [True: 1.77k, False: 0]
  ------------------
   73|  1.77k|        ;
   74|       |
   75|    137|    return p - str;
   76|    137|}
OPENSSL_strlcpy:
   79|  1.36k|{
   80|  1.36k|    size_t l = 0;
   81|  5.23k|    for (; size > 1 && *src; size--) {
  ------------------
  |  Branch (81:12): [True: 5.23k, False: 0]
  |  Branch (81:24): [True: 3.86k, False: 1.36k]
  ------------------
   82|  3.86k|        *dst++ = *src++;
   83|  3.86k|        l++;
   84|  3.86k|    }
   85|  1.36k|    if (size)
  ------------------
  |  Branch (85:9): [True: 1.36k, False: 0]
  ------------------
   86|  1.36k|        *dst = CH_ZERO;
  ------------------
  |  |   20|  1.36k|#define CH_ZERO '\0'
  ------------------
   87|  1.36k|    return l + strlen(src);
   88|  1.36k|}
openssl_strerror_r:
  379|      8|{
  380|       |#if defined(_MSC_VER) && _MSC_VER >= 1400 && !defined(_WIN32_WCE)
  381|       |    return !strerror_s(buf, buflen, errnum);
  382|       |#elif defined(_GNU_SOURCE)
  383|       |    char *err;
  384|       |
  385|       |    /*
  386|       |     * GNU strerror_r may not actually set buf.
  387|       |     * It can return a pointer to some (immutable) static string in which case
  388|       |     * buf is left unused.
  389|       |     */
  390|       |    err = strerror_r(errnum, buf, buflen);
  391|       |    if (err == NULL || buflen == 0)
  392|       |        return 0;
  393|       |    /*
  394|       |     * If err is statically allocated, err != buf and we need to copy the data.
  395|       |     * If err points somewhere inside buf, OPENSSL_strlcpy can handle this,
  396|       |     * since src and dest are not annotated with __restrict and the function
  397|       |     * reads src byte for byte and writes to dest.
  398|       |     * If err == buf we do not have to copy anything.
  399|       |     */
  400|       |    if (err != buf)
  401|       |        OPENSSL_strlcpy(buf, err, buflen);
  402|       |    return 1;
  403|       |#elif (defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE >= 200112L) || (defined(_XOPEN_SOURCE) && _XOPEN_SOURCE >= 600)
  404|       |    /*
  405|       |     * We can use "real" strerror_r. The OpenSSL version differs in that it
  406|       |     * gives 1 on success and 0 on failure for consistency with other OpenSSL
  407|       |     * functions. Real strerror_r does it the other way around
  408|       |     */
  409|      8|    return !strerror_r(errnum, buf, buflen);
  410|       |#else
  411|       |    char *err;
  412|       |
  413|       |    /* Fall back to non-thread safe strerror()...its all we can do */
  414|       |    if (buflen < 2)
  415|       |        return 0;
  416|       |    err = strerror(errnum);
  417|       |    /* Can this ever happen? */
  418|       |    if (err == NULL)
  419|       |        return 0;
  420|       |    OPENSSL_strlcpy(buf, err, buflen);
  421|       |    return 1;
  422|       |#endif
  423|      8|}
OPENSSL_strcasecmp:
  426|    651|{
  427|    651|    int t;
  428|       |
  429|  7.88k|    while ((t = ossl_tolower(*s1) - ossl_tolower(*s2++)) == 0)
  ------------------
  |  Branch (429:12): [True: 7.88k, False: 0]
  ------------------
  430|  7.88k|        if (*s1++ == '\0')
  ------------------
  |  Branch (430:13): [True: 651, False: 7.23k]
  ------------------
  431|    651|            return 0;
  432|      0|    return t;
  433|    651|}

OBJ_NAME_init:
   64|    909|{
   65|    909|    return RUN_ONCE(&init, o_names_init);
  ------------------
  |  |  130|    909|    (CRYPTO_THREAD_run_once(once, init##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (130:6): [True: 909, False: 0]
  |  |  ------------------
  ------------------
   66|    909|}
OBJ_NAME_get:
  153|    485|{
  154|    485|    OBJ_NAME on, *ret;
  155|    485|    int num = 0, alias;
  156|    485|    const char *value = NULL;
  157|       |
  158|    485|    if (name == NULL)
  ------------------
  |  Branch (158:9): [True: 0, False: 485]
  ------------------
  159|      0|        return NULL;
  160|    485|    if (!OBJ_NAME_init())
  ------------------
  |  Branch (160:9): [True: 0, False: 485]
  ------------------
  161|      0|        return NULL;
  162|    485|    if (!CRYPTO_THREAD_read_lock(obj_lock))
  ------------------
  |  Branch (162:9): [True: 0, False: 485]
  ------------------
  163|      0|        return NULL;
  164|       |
  165|    485|    alias = type & OBJ_NAME_ALIAS;
  ------------------
  |  |   33|    485|#define OBJ_NAME_ALIAS 0x8000
  ------------------
  166|    485|    type &= ~OBJ_NAME_ALIAS;
  ------------------
  |  |   33|    485|#define OBJ_NAME_ALIAS 0x8000
  ------------------
  167|       |
  168|    485|    on.name = name;
  169|    485|    on.type = type;
  170|       |
  171|    576|    for (;;) {
  172|    576|        ret = lh_OBJ_NAME_retrieve(names_lh, &on);
  173|    576|        if (ret == NULL)
  ------------------
  |  Branch (173:13): [True: 109, False: 467]
  ------------------
  174|    109|            break;
  175|    467|        if ((ret->alias) && !alias) {
  ------------------
  |  Branch (175:13): [True: 91, False: 376]
  |  Branch (175:29): [True: 91, False: 0]
  ------------------
  176|     91|            if (++num > 10)
  ------------------
  |  Branch (176:17): [True: 0, False: 91]
  ------------------
  177|      0|                break;
  178|     91|            on.name = ret->data;
  179|    376|        } else {
  180|    376|            value = ret->data;
  181|    376|            break;
  182|    376|        }
  183|    467|    }
  184|       |
  185|    485|    CRYPTO_THREAD_unlock(obj_lock);
  186|    485|    return value;
  187|    485|}
OBJ_NAME_add:
  190|    424|{
  191|    424|    OBJ_NAME *onp, *ret;
  192|    424|    int alias, ok = 0;
  193|       |
  194|    424|    if (!OBJ_NAME_init())
  ------------------
  |  Branch (194:9): [True: 0, False: 424]
  ------------------
  195|      0|        return 0;
  196|       |
  197|    424|    alias = type & OBJ_NAME_ALIAS;
  ------------------
  |  |   33|    424|#define OBJ_NAME_ALIAS 0x8000
  ------------------
  198|    424|    type &= ~OBJ_NAME_ALIAS;
  ------------------
  |  |   33|    424|#define OBJ_NAME_ALIAS 0x8000
  ------------------
  199|       |
  200|    424|    onp = OPENSSL_malloc(sizeof(*onp));
  ------------------
  |  |  107|    424|    CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  201|    424|    if (onp == NULL)
  ------------------
  |  Branch (201:9): [True: 0, False: 424]
  ------------------
  202|      0|        return 0;
  203|       |
  204|    424|    onp->name = name;
  205|    424|    onp->alias = alias;
  206|    424|    onp->type = type;
  207|    424|    onp->data = data;
  208|       |
  209|    424|    if (!CRYPTO_THREAD_write_lock(obj_lock)) {
  ------------------
  |  Branch (209:9): [True: 0, False: 424]
  ------------------
  210|      0|        OPENSSL_free(onp);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  211|      0|        return 0;
  212|      0|    }
  213|       |
  214|    424|    ret = lh_OBJ_NAME_insert(names_lh, onp);
  215|    424|    if (ret != NULL) {
  ------------------
  |  Branch (215:9): [True: 182, False: 242]
  ------------------
  216|       |        /* free things */
  217|    182|        if ((name_funcs_stack != NULL)
  ------------------
  |  Branch (217:13): [True: 0, False: 182]
  ------------------
  218|      0|            && (sk_NAME_FUNCS_num(name_funcs_stack) > ret->type)) {
  ------------------
  |  Branch (218:16): [True: 0, False: 0]
  ------------------
  219|       |            /*
  220|       |             * XXX: I'm not sure I understand why the free function should
  221|       |             * get three arguments... -- Richard Levitte
  222|       |             */
  223|      0|            sk_NAME_FUNCS_value(name_funcs_stack,
  224|      0|                ret->type)
  225|      0|                ->free_func(ret->name, ret->type,
  226|      0|                    ret->data);
  227|      0|        }
  228|    182|        OPENSSL_free(ret);
  ------------------
  |  |  132|    182|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  229|    242|    } else {
  230|    242|        if (lh_OBJ_NAME_error(names_lh)) {
  ------------------
  |  Branch (230:13): [True: 0, False: 242]
  ------------------
  231|       |            /* ERROR */
  232|      0|            OPENSSL_free(onp);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  233|      0|            goto unlock;
  234|      0|        }
  235|    242|    }
  236|       |
  237|    424|    ok = 1;
  238|       |
  239|    424|unlock:
  240|    424|    CRYPTO_THREAD_unlock(obj_lock);
  241|    424|    return ok;
  242|    424|}
OBJ_NAME_do_all:
  296|      2|{
  297|      2|    OBJ_DOALL d;
  298|       |
  299|      2|    d.type = type;
  300|      2|    d.fn = fn;
  301|      2|    d.arg = arg;
  302|       |
  303|      2|    lh_OBJ_NAME_doall_OBJ_DOALL(names_lh, do_all_fn, &d);
  304|      2|}
o_names.c:o_names_init:
   51|      1|{
   52|      1|    names_lh = NULL;
   53|      1|    obj_lock = CRYPTO_THREAD_lock_new();
   54|      1|    if (obj_lock != NULL)
  ------------------
  |  Branch (54:9): [True: 1, False: 0]
  ------------------
   55|      1|        names_lh = lh_OBJ_NAME_new(obj_name_hash, obj_name_cmp);
   56|      1|    if (names_lh == NULL) {
  ------------------
  |  Branch (56:9): [True: 0, False: 1]
  ------------------
   57|      0|        CRYPTO_THREAD_lock_free(obj_lock);
   58|      0|        obj_lock = NULL;
   59|      0|    }
   60|      1|    return names_lh != NULL && obj_lock != NULL;
  ------------------
  |  Branch (60:12): [True: 1, False: 0]
  |  Branch (60:32): [True: 1, False: 0]
  ------------------
   61|      1|}
o_names.c:obj_name_hash:
  137|  1.00k|{
  138|  1.00k|    unsigned long ret;
  139|       |
  140|  1.00k|    if ((name_funcs_stack != NULL)
  ------------------
  |  Branch (140:9): [True: 0, False: 1.00k]
  ------------------
  141|      0|        && (sk_NAME_FUNCS_num(name_funcs_stack) > a->type)) {
  ------------------
  |  Branch (141:12): [True: 0, False: 0]
  ------------------
  142|      0|        ret = sk_NAME_FUNCS_value(name_funcs_stack,
  143|      0|            a->type)
  144|      0|                  ->hash_func(a->name);
  145|  1.00k|    } else {
  146|  1.00k|        ret = ossl_lh_strcasehash(a->name);
  147|  1.00k|    }
  148|  1.00k|    ret ^= a->type;
  149|  1.00k|    return ret;
  150|  1.00k|}
o_names.c:obj_name_cmp:
  120|    649|{
  121|    649|    int ret;
  122|       |
  123|    649|    ret = a->type - b->type;
  124|    649|    if (ret == 0) {
  ------------------
  |  Branch (124:9): [True: 649, False: 0]
  ------------------
  125|    649|        if ((name_funcs_stack != NULL)
  ------------------
  |  Branch (125:13): [True: 0, False: 649]
  ------------------
  126|      0|            && (sk_NAME_FUNCS_num(name_funcs_stack) > a->type)) {
  ------------------
  |  Branch (126:16): [True: 0, False: 0]
  ------------------
  127|      0|            ret = sk_NAME_FUNCS_value(name_funcs_stack,
  128|      0|                a->type)
  129|      0|                      ->cmp_func(a->name, b->name);
  130|      0|        } else
  131|    649|            ret = OPENSSL_strcasecmp(a->name, b->name);
  132|    649|    }
  133|    649|    return ret;
  134|    649|}
o_names.c:do_all_fn:
  287|    484|{
  288|    484|    if (name->type == d->type)
  ------------------
  |  Branch (288:9): [True: 242, False: 242]
  ------------------
  289|    242|        d->fn(name, d->arg);
  290|    484|}

OBJ_nid2obj:
  259|  1.16k|{
  260|  1.16k|    ADDED_OBJ ad, *adp = NULL;
  261|  1.16k|    ASN1_OBJECT ob;
  262|       |
  263|  1.16k|    if (n == NID_undef
  ------------------
  |  |   18|  2.32k|#define NID_undef                       0
  ------------------
  |  Branch (263:9): [True: 0, False: 1.16k]
  ------------------
  264|  1.16k|        || (n > 0 && n < NUM_NID && nid_objs[n].nid != NID_undef))
  ------------------
  |  | 1359|  2.32k|#define NUM_NID 1502
  ------------------
                      || (n > 0 && n < NUM_NID && nid_objs[n].nid != NID_undef))
  ------------------
  |  |   18|  1.16k|#define NID_undef                       0
  ------------------
  |  Branch (264:13): [True: 1.16k, False: 0]
  |  Branch (264:22): [True: 1.16k, False: 0]
  |  Branch (264:37): [True: 1.16k, False: 0]
  ------------------
  265|  1.16k|        return (ASN1_OBJECT *)&(nid_objs[n]);
  266|       |
  267|      0|    ad.type = ADDED_NID;
  ------------------
  |  |   34|      0|#define ADDED_NID 3
  ------------------
  268|      0|    ad.obj = &ob;
  269|      0|    ob.nid = n;
  270|      0|    if (!ossl_obj_read_lock()) {
  ------------------
  |  Branch (270:9): [True: 0, False: 0]
  ------------------
  271|      0|        ERR_raise(ERR_LIB_OBJ, ERR_R_UNABLE_TO_GET_READ_LOCK);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  272|      0|        return NULL;
  273|      0|    }
  274|      0|    adp = lh_ADDED_OBJ_retrieve(added, &ad);
  275|      0|    ossl_obj_unlock();
  276|      0|    if (adp != NULL)
  ------------------
  |  Branch (276:9): [True: 0, False: 0]
  ------------------
  277|      0|        return adp->obj;
  278|       |
  279|      0|    ERR_raise(ERR_LIB_OBJ, OBJ_R_UNKNOWN_NID);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  280|       |    return NULL;
  281|      0|}
OBJ_nid2sn:
  284|    396|{
  285|    396|    ASN1_OBJECT *ob = OBJ_nid2obj(n);
  286|       |
  287|    396|    return ob == NULL ? NULL : ob->sn;
  ------------------
  |  Branch (287:12): [True: 0, False: 396]
  ------------------
  288|    396|}
OBJ_nid2ln:
  291|    396|{
  292|    396|    ASN1_OBJECT *ob = OBJ_nid2obj(n);
  293|       |
  294|    396|    return ob == NULL ? NULL : ob->ln;
  ------------------
  |  Branch (294:12): [True: 0, False: 396]
  ------------------
  295|    396|}
OBJ_obj2txt:
  394|    210|{
  395|    210|    int i, n = 0, len, nid, first, use_bn;
  396|    210|    BIGNUM *bl;
  397|    210|    unsigned long l;
  398|    210|    const unsigned char *p;
  399|    210|    char tbuf[DECIMAL_SIZE(i) + DECIMAL_SIZE(l) + 2];
  400|    210|    const char *s;
  401|       |
  402|       |    /* Ensure that, at every state, |buf| is NUL-terminated. */
  403|    210|    if (buf != NULL && buf_len > 0)
  ------------------
  |  Branch (403:9): [True: 210, False: 0]
  |  Branch (403:24): [True: 210, False: 0]
  ------------------
  404|    210|        buf[0] = '\0';
  405|       |
  406|    210|    if (a == NULL || a->data == NULL)
  ------------------
  |  Branch (406:9): [True: 0, False: 210]
  |  Branch (406:22): [True: 4, False: 206]
  ------------------
  407|      4|        return 0;
  408|       |
  409|    206|    if (!no_name && (nid = OBJ_obj2nid(a)) != NID_undef) {
  ------------------
  |  |   18|      0|#define NID_undef                       0
  ------------------
  |  Branch (409:9): [True: 0, False: 206]
  |  Branch (409:21): [True: 0, False: 0]
  ------------------
  410|      0|        s = OBJ_nid2ln(nid);
  411|      0|        if (s == NULL)
  ------------------
  |  Branch (411:13): [True: 0, False: 0]
  ------------------
  412|      0|            s = OBJ_nid2sn(nid);
  413|      0|        if (s != NULL) {
  ------------------
  |  Branch (413:13): [True: 0, False: 0]
  ------------------
  414|      0|            if (buf != NULL)
  ------------------
  |  Branch (414:17): [True: 0, False: 0]
  ------------------
  415|      0|                OPENSSL_strlcpy(buf, s, buf_len);
  416|      0|            return (int)strlen(s);
  417|      0|        }
  418|      0|    }
  419|       |
  420|    206|    len = a->length;
  421|    206|    p = a->data;
  422|       |
  423|    206|    first = 1;
  424|    206|    bl = NULL;
  425|       |
  426|       |    /*
  427|       |     * RFC 2578 (STD 58) says this about OBJECT IDENTIFIERs:
  428|       |     *
  429|       |     * > 3.5. OBJECT IDENTIFIER values
  430|       |     * >
  431|       |     * > An OBJECT IDENTIFIER value is an ordered list of non-negative
  432|       |     * > numbers. For the SMIv2, each number in the list is referred to as a
  433|       |     * > sub-identifier, there are at most 128 sub-identifiers in a value,
  434|       |     * > and each sub-identifier has a maximum value of 2^32-1 (4294967295
  435|       |     * > decimal).
  436|       |     *
  437|       |     * So a legitimate OID according to this RFC is at most (32 * 128 / 7),
  438|       |     * i.e. 586 bytes long.
  439|       |     *
  440|       |     * Ref: https://datatracker.ietf.org/doc/html/rfc2578#section-3.5
  441|       |     */
  442|    206|    if (len > 586)
  ------------------
  |  Branch (442:9): [True: 0, False: 206]
  ------------------
  443|      0|        goto err;
  444|       |
  445|  1.57k|    while (len > 0) {
  ------------------
  |  Branch (445:12): [True: 1.36k, False: 206]
  ------------------
  446|  1.36k|        l = 0;
  447|  1.36k|        use_bn = 0;
  448|  1.68k|        for (;;) {
  449|  1.68k|            unsigned char c = *p++;
  450|       |
  451|  1.68k|            len--;
  452|  1.68k|            if (len == 0 && (c & 0x80) != 0)
  ------------------
  |  Branch (452:17): [True: 206, False: 1.48k]
  |  Branch (452:29): [True: 0, False: 206]
  ------------------
  453|      0|                goto err;
  454|  1.68k|            if (use_bn) {
  ------------------
  |  Branch (454:17): [True: 0, False: 1.68k]
  ------------------
  455|      0|                if (!BN_add_word(bl, c & 0x7f))
  ------------------
  |  Branch (455:21): [True: 0, False: 0]
  ------------------
  456|      0|                    goto err;
  457|  1.68k|            } else {
  458|  1.68k|                l |= c & 0x7f;
  459|  1.68k|            }
  460|  1.68k|            if ((c & 0x80) == 0)
  ------------------
  |  Branch (460:17): [True: 1.36k, False: 322]
  ------------------
  461|  1.36k|                break;
  462|    322|            if (!use_bn && l > (ULONG_MAX >> 7L)) {
  ------------------
  |  Branch (462:17): [True: 322, False: 0]
  |  Branch (462:28): [True: 0, False: 322]
  ------------------
  463|      0|                if (bl == NULL && (bl = BN_new()) == NULL)
  ------------------
  |  Branch (463:21): [True: 0, False: 0]
  |  Branch (463:35): [True: 0, False: 0]
  ------------------
  464|      0|                    goto err;
  465|      0|                if (!BN_set_word(bl, l))
  ------------------
  |  Branch (465:21): [True: 0, False: 0]
  ------------------
  466|      0|                    goto err;
  467|      0|                use_bn = 1;
  468|      0|            }
  469|    322|            if (use_bn) {
  ------------------
  |  Branch (469:17): [True: 0, False: 322]
  ------------------
  470|      0|                if (!BN_lshift(bl, bl, 7))
  ------------------
  |  Branch (470:21): [True: 0, False: 0]
  ------------------
  471|      0|                    goto err;
  472|    322|            } else {
  473|    322|                l <<= 7L;
  474|    322|            }
  475|    322|        }
  476|       |
  477|  1.36k|        if (first) {
  ------------------
  |  Branch (477:13): [True: 206, False: 1.16k]
  ------------------
  478|    206|            first = 0;
  479|    206|            if (l >= 80) {
  ------------------
  |  Branch (479:17): [True: 81, False: 125]
  ------------------
  480|     81|                i = 2;
  481|     81|                if (use_bn) {
  ------------------
  |  Branch (481:21): [True: 0, False: 81]
  ------------------
  482|      0|                    if (!BN_sub_word(bl, 80))
  ------------------
  |  Branch (482:25): [True: 0, False: 0]
  ------------------
  483|      0|                        goto err;
  484|     81|                } else {
  485|     81|                    l -= 80;
  486|     81|                }
  487|    125|            } else {
  488|    125|                i = (int)(l / 40);
  489|    125|                l -= (long)(i * 40);
  490|    125|            }
  491|    206|            if (buf != NULL && buf_len > 1) {
  ------------------
  |  Branch (491:17): [True: 206, False: 0]
  |  Branch (491:32): [True: 206, False: 0]
  ------------------
  492|    206|                *buf++ = i + '0';
  493|    206|                *buf = '\0';
  494|    206|                buf_len--;
  495|    206|            }
  496|    206|            n++;
  497|    206|        }
  498|       |
  499|  1.36k|        if (use_bn) {
  ------------------
  |  Branch (499:13): [True: 0, False: 1.36k]
  ------------------
  500|      0|            char *bndec;
  501|      0|            bndec = BN_bn2dec(bl);
  502|      0|            if (!bndec)
  ------------------
  |  Branch (502:17): [True: 0, False: 0]
  ------------------
  503|      0|                goto err;
  504|      0|            i = (int)strlen(bndec);
  505|      0|            if (buf != NULL) {
  ------------------
  |  Branch (505:17): [True: 0, False: 0]
  ------------------
  506|      0|                if (buf_len > 1) {
  ------------------
  |  Branch (506:21): [True: 0, False: 0]
  ------------------
  507|      0|                    *buf++ = '.';
  508|      0|                    *buf = '\0';
  509|      0|                    buf_len--;
  510|      0|                }
  511|      0|                OPENSSL_strlcpy(buf, bndec, buf_len);
  512|      0|                if (i > buf_len) {
  ------------------
  |  Branch (512:21): [True: 0, False: 0]
  ------------------
  513|      0|                    buf += buf_len;
  514|      0|                    buf_len = 0;
  515|      0|                } else {
  516|      0|                    buf += i;
  517|      0|                    buf_len -= i;
  518|      0|                }
  519|      0|            }
  520|      0|            n++;
  521|      0|            n += i;
  522|      0|            OPENSSL_free(bndec);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  523|  1.36k|        } else {
  524|  1.36k|            BIO_snprintf(tbuf, sizeof(tbuf), ".%lu", l);
  525|  1.36k|            i = (int)strlen(tbuf);
  526|  1.36k|            if (buf && buf_len > 0) {
  ------------------
  |  Branch (526:17): [True: 1.36k, False: 0]
  |  Branch (526:24): [True: 1.36k, False: 0]
  ------------------
  527|  1.36k|                OPENSSL_strlcpy(buf, tbuf, buf_len);
  528|  1.36k|                if (i > buf_len) {
  ------------------
  |  Branch (528:21): [True: 0, False: 1.36k]
  ------------------
  529|      0|                    buf += buf_len;
  530|      0|                    buf_len = 0;
  531|  1.36k|                } else {
  532|  1.36k|                    buf += i;
  533|  1.36k|                    buf_len -= i;
  534|  1.36k|                }
  535|  1.36k|            }
  536|  1.36k|            n += i;
  537|  1.36k|            l = 0;
  538|  1.36k|        }
  539|  1.36k|    }
  540|       |
  541|    206|    BN_free(bl);
  542|    206|    return n;
  543|       |
  544|      0|err:
  545|      0|    BN_free(bl);
  546|      0|    return -1;
  547|    206|}
OBJ_get0_data:
  761|    159|{
  762|    159|    if (obj == NULL)
  ------------------
  |  Branch (762:9): [True: 0, False: 159]
  ------------------
  763|      0|        return NULL;
  764|    159|    return obj->data;
  765|    159|}

ossl_err_load_OBJ_strings:
   28|      1|{
   29|      1|#ifndef OPENSSL_NO_ERR
   30|      1|    if (ERR_reason_error_string(OBJ_str_reasons[0].error) == NULL)
  ------------------
  |  Branch (30:9): [True: 1, False: 0]
  ------------------
   31|      1|        ERR_load_strings_const(OBJ_str_reasons);
   32|      1|#endif
   33|      1|    return 1;
   34|      1|}

ossl_err_load_OCSP_strings:
   66|      1|{
   67|      1|#ifndef OPENSSL_NO_ERR
   68|      1|    if (ERR_reason_error_string(OCSP_str_reasons[0].error) == NULL)
  ------------------
  |  Branch (68:9): [True: 1, False: 0]
  ------------------
   69|      1|        ERR_load_strings_const(OCSP_str_reasons);
   70|      1|#endif
   71|      1|    return 1;
   72|      1|}

OSSL_PARAM_locate:
   55|    146|{
   56|    146|    if (ossl_likely(p != NULL && key != NULL))
  ------------------
  |  |   22|    292|#define ossl_likely(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (22:24): [True: 146, False: 0]
  |  |  |  Branch (22:44): [True: 146, False: 0]
  |  |  |  Branch (22:44): [True: 146, False: 0]
  |  |  ------------------
  ------------------
   57|  1.15k|        for (; p->key != NULL; p++)
  ------------------
  |  Branch (57:16): [True: 1.01k, False: 142]
  ------------------
   58|  1.01k|            if (strcmp(key, p->key) == 0)
  ------------------
  |  Branch (58:17): [True: 4, False: 1.01k]
  ------------------
   59|      4|                return p;
   60|    142|    return NULL;
   61|    146|}
OSSL_PARAM_locate_const:
   64|    136|{
   65|    136|    return OSSL_PARAM_locate((OSSL_PARAM *)p, key);
   66|    136|}
OSSL_PARAM_modified:
   82|      2|{
   83|      2|    return p != NULL && p->return_size != OSSL_PARAM_UNMODIFIED;
  ------------------
  |  |   22|      2|#define OSSL_PARAM_UNMODIFIED ((size_t)-1)
  ------------------
  |  Branch (83:12): [True: 2, False: 0]
  |  Branch (83:25): [True: 2, False: 0]
  ------------------
   84|      2|}
OSSL_PARAM_get_int:
  268|     10|{
  269|     10|#ifndef OPENSSL_SMALL_FOOTPRINT
  270|     10|    switch (sizeof(int)) {
  ------------------
  |  Branch (270:13): [True: 10, Folded]
  ------------------
  271|     10|    case sizeof(int32_t):
  ------------------
  |  Branch (271:5): [True: 10, False: 0]
  ------------------
  272|     10|        return OSSL_PARAM_get_int32(p, (int32_t *)val);
  273|      0|    case sizeof(int64_t):
  ------------------
  |  Branch (273:5): [True: 0, False: 10]
  ------------------
  274|      0|        return OSSL_PARAM_get_int64(p, (int64_t *)val);
  275|     10|    }
  276|      0|#endif
  277|      0|    return general_get_int(p, val, sizeof(*val));
  278|     10|}
OSSL_PARAM_set_int:
  281|  7.31k|{
  282|  7.31k|#ifndef OPENSSL_SMALL_FOOTPRINT
  283|  7.31k|    switch (sizeof(int)) {
  ------------------
  |  Branch (283:13): [True: 7.31k, Folded]
  ------------------
  284|  7.31k|    case sizeof(int32_t):
  ------------------
  |  Branch (284:5): [True: 7.31k, False: 0]
  ------------------
  285|  7.31k|        return OSSL_PARAM_set_int32(p, (int32_t)val);
  286|      0|    case sizeof(int64_t):
  ------------------
  |  Branch (286:5): [True: 0, False: 7.31k]
  ------------------
  287|      0|        return OSSL_PARAM_set_int64(p, (int64_t)val);
  288|  7.31k|    }
  289|      0|#endif
  290|      0|    return general_set_int(p, &val, sizeof(val));
  291|  7.31k|}
OSSL_PARAM_construct_int:
  294|  7.31k|{
  295|  7.31k|    return ossl_param_construct(key, OSSL_PARAM_INTEGER, buf, sizeof(int));
  ------------------
  |  |  106|  7.31k|#define OSSL_PARAM_INTEGER 1
  ------------------
  296|  7.31k|}
OSSL_PARAM_get_uint:
  299|      2|{
  300|      2|#ifndef OPENSSL_SMALL_FOOTPRINT
  301|      2|    switch (sizeof(unsigned int)) {
  ------------------
  |  Branch (301:13): [True: 2, Folded]
  ------------------
  302|      2|    case sizeof(uint32_t):
  ------------------
  |  Branch (302:5): [True: 2, False: 0]
  ------------------
  303|      2|        return OSSL_PARAM_get_uint32(p, (uint32_t *)val);
  304|      0|    case sizeof(uint64_t):
  ------------------
  |  Branch (304:5): [True: 0, False: 2]
  ------------------
  305|      0|        return OSSL_PARAM_get_uint64(p, (uint64_t *)val);
  306|      2|    }
  307|      0|#endif
  308|      0|    return general_get_uint(p, val, sizeof(*val));
  309|      2|}
OSSL_PARAM_set_uint:
  312|  6.66k|{
  313|  6.66k|#ifndef OPENSSL_SMALL_FOOTPRINT
  314|  6.66k|    switch (sizeof(unsigned int)) {
  ------------------
  |  Branch (314:13): [True: 6.66k, Folded]
  ------------------
  315|  6.66k|    case sizeof(uint32_t):
  ------------------
  |  Branch (315:5): [True: 6.66k, False: 0]
  ------------------
  316|  6.66k|        return OSSL_PARAM_set_uint32(p, (uint32_t)val);
  317|      0|    case sizeof(uint64_t):
  ------------------
  |  Branch (317:5): [True: 0, False: 6.66k]
  ------------------
  318|      0|        return OSSL_PARAM_set_uint64(p, (uint64_t)val);
  319|  6.66k|    }
  320|      0|#endif
  321|      0|    return general_set_uint(p, &val, sizeof(val));
  322|  6.66k|}
OSSL_PARAM_construct_uint:
  325|  6.67k|{
  326|  6.67k|    return ossl_param_construct(key, OSSL_PARAM_UNSIGNED_INTEGER, buf,
  ------------------
  |  |  107|  6.67k|#define OSSL_PARAM_UNSIGNED_INTEGER 2
  ------------------
  327|  6.67k|        sizeof(unsigned int));
  328|  6.67k|}
OSSL_PARAM_get_int32:
  394|     10|{
  395|     10|    if (val == NULL || p == NULL) {
  ------------------
  |  Branch (395:9): [True: 0, False: 10]
  |  Branch (395:24): [True: 0, False: 10]
  ------------------
  396|      0|        err_null_argument;
  ------------------
  |  |   38|      0|    ERR_raise(ERR_LIB_CRYPTO, ERR_R_PASSED_NULL_PARAMETER)
  |  |  ------------------
  |  |  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  361|      0|        ERR_set_error)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  397|      0|        return 0;
  398|      0|    }
  399|       |
  400|     10|    if (p->data == NULL) {
  ------------------
  |  Branch (400:9): [True: 0, False: 10]
  ------------------
  401|      0|        err_null_argument;
  ------------------
  |  |   38|      0|    ERR_raise(ERR_LIB_CRYPTO, ERR_R_PASSED_NULL_PARAMETER)
  |  |  ------------------
  |  |  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  361|      0|        ERR_set_error)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  402|      0|        return 0;
  403|      0|    }
  404|       |
  405|     10|    if (p->data_type == OSSL_PARAM_INTEGER) {
  ------------------
  |  |  106|     10|#define OSSL_PARAM_INTEGER 1
  ------------------
  |  Branch (405:9): [True: 2, False: 8]
  ------------------
  406|      2|#ifndef OPENSSL_SMALL_FOOTPRINT
  407|      2|        int64_t i64;
  408|       |
  409|      2|        switch (p->data_size) {
  ------------------
  |  Branch (409:17): [True: 2, False: 0]
  ------------------
  410|      2|        case sizeof(int32_t):
  ------------------
  |  Branch (410:9): [True: 2, False: 0]
  ------------------
  411|      2|            *val = *(const int32_t *)p->data;
  412|      2|            return 1;
  413|      0|        case sizeof(int64_t):
  ------------------
  |  Branch (413:9): [True: 0, False: 2]
  ------------------
  414|      0|            i64 = *(const int64_t *)p->data;
  415|      0|            if (i64 >= INT32_MIN && i64 <= INT32_MAX) {
  ------------------
  |  Branch (415:17): [True: 0, False: 0]
  |  Branch (415:37): [True: 0, False: 0]
  ------------------
  416|      0|                *val = (int32_t)i64;
  417|      0|                return 1;
  418|      0|            }
  419|      0|            err_out_of_range;
  ------------------
  |  |   26|      0|    ERR_raise(ERR_LIB_CRYPTO, \
  |  |  ------------------
  |  |  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  361|      0|        ERR_set_error)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   27|      0|        CRYPTO_R_PARAM_VALUE_TOO_LARGE_FOR_DESTINATION)
  ------------------
  420|      0|            return 0;
  421|      2|        }
  422|      0|#endif
  423|      0|        return general_get_int(p, val, sizeof(*val));
  424|       |
  425|      8|    } else if (p->data_type == OSSL_PARAM_UNSIGNED_INTEGER) {
  ------------------
  |  |  107|      8|#define OSSL_PARAM_UNSIGNED_INTEGER 2
  ------------------
  |  Branch (425:16): [True: 8, False: 0]
  ------------------
  426|      8|#ifndef OPENSSL_SMALL_FOOTPRINT
  427|      8|        uint32_t u32;
  428|      8|        uint64_t u64;
  429|       |
  430|      8|        switch (p->data_size) {
  ------------------
  |  Branch (430:17): [True: 8, False: 0]
  ------------------
  431|      0|        case sizeof(uint32_t):
  ------------------
  |  Branch (431:9): [True: 0, False: 8]
  ------------------
  432|      0|            u32 = *(const uint32_t *)p->data;
  433|      0|            if (u32 <= INT32_MAX) {
  ------------------
  |  Branch (433:17): [True: 0, False: 0]
  ------------------
  434|      0|                *val = (int32_t)u32;
  435|      0|                return 1;
  436|      0|            }
  437|      0|            err_out_of_range;
  ------------------
  |  |   26|      0|    ERR_raise(ERR_LIB_CRYPTO, \
  |  |  ------------------
  |  |  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  361|      0|        ERR_set_error)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   27|      0|        CRYPTO_R_PARAM_VALUE_TOO_LARGE_FOR_DESTINATION)
  ------------------
  438|      0|            return 0;
  439|      8|        case sizeof(uint64_t):
  ------------------
  |  Branch (439:9): [True: 8, False: 0]
  ------------------
  440|      8|            u64 = *(const uint64_t *)p->data;
  441|      8|            if (u64 <= INT32_MAX) {
  ------------------
  |  Branch (441:17): [True: 8, False: 0]
  ------------------
  442|      8|                *val = (int32_t)u64;
  443|      8|                return 1;
  444|      8|            }
  445|      0|            err_out_of_range;
  ------------------
  |  |   26|      8|    ERR_raise(ERR_LIB_CRYPTO, \
  |  |  ------------------
  |  |  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  361|      0|        ERR_set_error)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   27|      0|        CRYPTO_R_PARAM_VALUE_TOO_LARGE_FOR_DESTINATION)
  ------------------
  446|      0|            return 0;
  447|      8|        }
  448|      0|#endif
  449|      0|        return general_get_int(p, val, sizeof(*val));
  450|       |
  451|      8|    } else if (p->data_type == OSSL_PARAM_REAL) {
  ------------------
  |  |  112|      0|#define OSSL_PARAM_REAL 3
  ------------------
  |  Branch (451:16): [True: 0, False: 0]
  ------------------
  452|      0|#ifndef OPENSSL_SYS_UEFI
  453|      0|        double d;
  454|       |
  455|      0|        switch (p->data_size) {
  ------------------
  |  Branch (455:17): [True: 0, False: 0]
  ------------------
  456|      0|        case sizeof(double):
  ------------------
  |  Branch (456:9): [True: 0, False: 0]
  ------------------
  457|      0|            d = *(const double *)p->data;
  458|      0|            if (d >= INT32_MIN && d <= INT32_MAX && d == (int32_t)d) {
  ------------------
  |  Branch (458:17): [True: 0, False: 0]
  |  Branch (458:35): [True: 0, False: 0]
  |  Branch (458:53): [True: 0, False: 0]
  ------------------
  459|      0|                *val = (int32_t)d;
  460|      0|                return 1;
  461|      0|            }
  462|      0|            err_out_of_range;
  ------------------
  |  |   26|      0|    ERR_raise(ERR_LIB_CRYPTO, \
  |  |  ------------------
  |  |  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  361|      0|        ERR_set_error)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   27|      0|        CRYPTO_R_PARAM_VALUE_TOO_LARGE_FOR_DESTINATION)
  ------------------
  463|      0|            return 0;
  464|      0|        }
  465|      0|        err_unsupported_real;
  ------------------
  |  |   40|      0|    ERR_raise(ERR_LIB_CRYPTO, CRYPTO_R_PARAM_UNSUPPORTED_FLOATING_POINT_FORMAT)
  |  |  ------------------
  |  |  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  361|      0|        ERR_set_error)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  466|      0|        return 0;
  467|      0|#endif
  468|      0|    }
  469|      0|    err_bad_type;
  ------------------
  |  |   36|     10|    ERR_raise(ERR_LIB_CRYPTO, CRYPTO_R_PARAM_OF_INCOMPATIBLE_TYPE)
  |  |  ------------------
  |  |  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  361|      0|        ERR_set_error)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  470|      0|    return 0;
  471|     10|}
OSSL_PARAM_set_int32:
  474|  7.31k|{
  475|  7.31k|    if (p == NULL) {
  ------------------
  |  Branch (475:9): [True: 0, False: 7.31k]
  ------------------
  476|      0|        err_null_argument;
  ------------------
  |  |   38|      0|    ERR_raise(ERR_LIB_CRYPTO, ERR_R_PASSED_NULL_PARAMETER)
  |  |  ------------------
  |  |  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  361|      0|        ERR_set_error)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  477|      0|        return 0;
  478|      0|    }
  479|  7.31k|    p->return_size = 0;
  480|  7.31k|    if (p->data_type == OSSL_PARAM_INTEGER) {
  ------------------
  |  |  106|  7.31k|#define OSSL_PARAM_INTEGER 1
  ------------------
  |  Branch (480:9): [True: 7.31k, False: 3]
  ------------------
  481|  7.31k|#ifndef OPENSSL_SMALL_FOOTPRINT
  482|  7.31k|        p->return_size = sizeof(int32_t); /* Minimum expected size */
  483|  7.31k|        if (p->data == NULL)
  ------------------
  |  Branch (483:13): [True: 0, False: 7.31k]
  ------------------
  484|      0|            return 1;
  485|  7.31k|        switch (p->data_size) {
  ------------------
  |  Branch (485:17): [True: 7.31k, False: 0]
  ------------------
  486|  7.31k|        case sizeof(int32_t):
  ------------------
  |  Branch (486:9): [True: 7.31k, False: 0]
  ------------------
  487|  7.31k|            *(int32_t *)p->data = val;
  488|  7.31k|            return 1;
  489|      0|        case sizeof(int64_t):
  ------------------
  |  Branch (489:9): [True: 0, False: 7.31k]
  ------------------
  490|      0|            p->return_size = sizeof(int64_t);
  491|      0|            *(int64_t *)p->data = (int64_t)val;
  492|      0|            return 1;
  493|  7.31k|        }
  494|      0|#endif
  495|      0|        return general_set_int(p, &val, sizeof(val));
  496|  7.31k|    } else if (p->data_type == OSSL_PARAM_UNSIGNED_INTEGER && val >= 0) {
  ------------------
  |  |  107|      6|#define OSSL_PARAM_UNSIGNED_INTEGER 2
  ------------------
  |  Branch (496:16): [True: 3, False: 0]
  |  Branch (496:63): [True: 3, False: 0]
  ------------------
  497|      3|#ifndef OPENSSL_SMALL_FOOTPRINT
  498|      3|        p->return_size = sizeof(uint32_t); /* Minimum expected size */
  499|      3|        if (p->data == NULL)
  ------------------
  |  Branch (499:13): [True: 0, False: 3]
  ------------------
  500|      0|            return 1;
  501|      3|        switch (p->data_size) {
  ------------------
  |  Branch (501:17): [True: 3, False: 0]
  ------------------
  502|      3|        case sizeof(uint32_t):
  ------------------
  |  Branch (502:9): [True: 3, False: 0]
  ------------------
  503|      3|            *(uint32_t *)p->data = (uint32_t)val;
  504|      3|            return 1;
  505|      0|        case sizeof(uint64_t):
  ------------------
  |  Branch (505:9): [True: 0, False: 3]
  ------------------
  506|      0|            p->return_size = sizeof(uint64_t);
  507|      0|            *(uint64_t *)p->data = (uint64_t)val;
  508|      0|            return 1;
  509|      3|        }
  510|      0|#endif
  511|      0|        return general_set_int(p, &val, sizeof(val));
  512|      3|    } else if (p->data_type == OSSL_PARAM_REAL) {
  ------------------
  |  |  112|      0|#define OSSL_PARAM_REAL 3
  ------------------
  |  Branch (512:16): [True: 0, False: 0]
  ------------------
  513|      0|#ifndef OPENSSL_SYS_UEFI
  514|      0|        uint32_t u32;
  515|      0|        unsigned int shift;
  516|       |
  517|      0|        p->return_size = sizeof(double);
  518|      0|        if (p->data == NULL)
  ------------------
  |  Branch (518:13): [True: 0, False: 0]
  ------------------
  519|      0|            return 1;
  520|      0|        switch (p->data_size) {
  ------------------
  |  Branch (520:17): [True: 0, False: 0]
  ------------------
  521|      0|        case sizeof(double):
  ------------------
  |  Branch (521:9): [True: 0, False: 0]
  ------------------
  522|      0|            shift = real_shift();
  523|      0|            if (shift < 8 * sizeof(val) - 1) {
  ------------------
  |  Branch (523:17): [True: 0, False: 0]
  ------------------
  524|      0|                u32 = val < 0 ? -val : val;
  ------------------
  |  Branch (524:23): [True: 0, False: 0]
  ------------------
  525|      0|                if ((u32 >> shift) != 0) {
  ------------------
  |  Branch (525:21): [True: 0, False: 0]
  ------------------
  526|      0|                    err_inexact;
  ------------------
  |  |   29|      0|    ERR_raise(ERR_LIB_CRYPTO, \
  |  |  ------------------
  |  |  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  361|      0|        ERR_set_error)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   30|      0|        CRYPTO_R_PARAM_CANNOT_BE_REPRESENTED_EXACTLY)
  ------------------
  527|      0|                    return 0;
  528|      0|                }
  529|      0|            }
  530|      0|            *(double *)p->data = (double)val;
  531|      0|            return 1;
  532|      0|        }
  533|      0|        err_unsupported_real;
  ------------------
  |  |   40|      0|    ERR_raise(ERR_LIB_CRYPTO, CRYPTO_R_PARAM_UNSUPPORTED_FLOATING_POINT_FORMAT)
  |  |  ------------------
  |  |  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  361|      0|        ERR_set_error)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  534|      0|        return 0;
  535|      0|#endif
  536|      0|    }
  537|      0|    err_bad_type;
  ------------------
  |  |   36|  7.31k|    ERR_raise(ERR_LIB_CRYPTO, CRYPTO_R_PARAM_OF_INCOMPATIBLE_TYPE)
  |  |  ------------------
  |  |  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  361|      0|        ERR_set_error)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  538|      0|    return 0;
  539|  7.31k|}
OSSL_PARAM_get_uint32:
  548|      2|{
  549|      2|    if (val == NULL || p == NULL) {
  ------------------
  |  Branch (549:9): [True: 0, False: 2]
  |  Branch (549:24): [True: 0, False: 2]
  ------------------
  550|      0|        err_null_argument;
  ------------------
  |  |   38|      0|    ERR_raise(ERR_LIB_CRYPTO, ERR_R_PASSED_NULL_PARAMETER)
  |  |  ------------------
  |  |  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  361|      0|        ERR_set_error)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  551|      0|        return 0;
  552|      0|    }
  553|       |
  554|      2|    if (p->data == NULL) {
  ------------------
  |  Branch (554:9): [True: 0, False: 2]
  ------------------
  555|      0|        err_null_argument;
  ------------------
  |  |   38|      0|    ERR_raise(ERR_LIB_CRYPTO, ERR_R_PASSED_NULL_PARAMETER)
  |  |  ------------------
  |  |  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  361|      0|        ERR_set_error)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  556|      0|        return 0;
  557|      0|    }
  558|       |
  559|      2|    if (p->data_type == OSSL_PARAM_UNSIGNED_INTEGER) {
  ------------------
  |  |  107|      2|#define OSSL_PARAM_UNSIGNED_INTEGER 2
  ------------------
  |  Branch (559:9): [True: 2, False: 0]
  ------------------
  560|      2|#ifndef OPENSSL_SMALL_FOOTPRINT
  561|      2|        uint64_t u64;
  562|       |
  563|      2|        switch (p->data_size) {
  ------------------
  |  Branch (563:17): [True: 2, False: 0]
  ------------------
  564|      2|        case sizeof(uint32_t):
  ------------------
  |  Branch (564:9): [True: 2, False: 0]
  ------------------
  565|      2|            *val = *(const uint32_t *)p->data;
  566|      2|            return 1;
  567|      0|        case sizeof(uint64_t):
  ------------------
  |  Branch (567:9): [True: 0, False: 2]
  ------------------
  568|      0|            u64 = *(const uint64_t *)p->data;
  569|      0|            if (u64 <= UINT32_MAX) {
  ------------------
  |  Branch (569:17): [True: 0, False: 0]
  ------------------
  570|      0|                *val = (uint32_t)u64;
  571|      0|                return 1;
  572|      0|            }
  573|      0|            err_out_of_range;
  ------------------
  |  |   26|      0|    ERR_raise(ERR_LIB_CRYPTO, \
  |  |  ------------------
  |  |  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  361|      0|        ERR_set_error)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   27|      0|        CRYPTO_R_PARAM_VALUE_TOO_LARGE_FOR_DESTINATION)
  ------------------
  574|      0|            return 0;
  575|      2|        }
  576|      0|#endif
  577|      0|        return general_get_uint(p, val, sizeof(*val));
  578|      2|    } else if (p->data_type == OSSL_PARAM_INTEGER) {
  ------------------
  |  |  106|      0|#define OSSL_PARAM_INTEGER 1
  ------------------
  |  Branch (578:16): [True: 0, False: 0]
  ------------------
  579|      0|#ifndef OPENSSL_SMALL_FOOTPRINT
  580|      0|        int32_t i32;
  581|      0|        int64_t i64;
  582|       |
  583|      0|        switch (p->data_size) {
  ------------------
  |  Branch (583:17): [True: 0, False: 0]
  ------------------
  584|      0|        case sizeof(int32_t):
  ------------------
  |  Branch (584:9): [True: 0, False: 0]
  ------------------
  585|      0|            i32 = *(const int32_t *)p->data;
  586|      0|            if (i32 >= 0) {
  ------------------
  |  Branch (586:17): [True: 0, False: 0]
  ------------------
  587|      0|                *val = i32;
  588|      0|                return 1;
  589|      0|            }
  590|      0|            err_unsigned_negative;
  ------------------
  |  |   23|      0|    ERR_raise(ERR_LIB_CRYPTO, \
  |  |  ------------------
  |  |  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  361|      0|        ERR_set_error)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   24|      0|        CRYPTO_R_PARAM_UNSIGNED_INTEGER_NEGATIVE_VALUE_UNSUPPORTED)
  ------------------
  591|      0|            return 0;
  592|      0|        case sizeof(int64_t):
  ------------------
  |  Branch (592:9): [True: 0, False: 0]
  ------------------
  593|      0|            i64 = *(const int64_t *)p->data;
  594|      0|            if (i64 >= 0 && i64 <= UINT32_MAX) {
  ------------------
  |  Branch (594:17): [True: 0, False: 0]
  |  Branch (594:29): [True: 0, False: 0]
  ------------------
  595|      0|                *val = (uint32_t)i64;
  596|      0|                return 1;
  597|      0|            }
  598|      0|            if (i64 < 0)
  ------------------
  |  Branch (598:17): [True: 0, False: 0]
  ------------------
  599|      0|                err_unsigned_negative;
  ------------------
  |  |   23|      0|    ERR_raise(ERR_LIB_CRYPTO, \
  |  |  ------------------
  |  |  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  361|      0|        ERR_set_error)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   24|      0|        CRYPTO_R_PARAM_UNSIGNED_INTEGER_NEGATIVE_VALUE_UNSUPPORTED)
  ------------------
  600|      0|            else
  601|      0|                err_out_of_range;
  ------------------
  |  |   26|      0|    ERR_raise(ERR_LIB_CRYPTO, \
  |  |  ------------------
  |  |  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  361|      0|        ERR_set_error)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   27|      0|        CRYPTO_R_PARAM_VALUE_TOO_LARGE_FOR_DESTINATION)
  ------------------
  602|      0|            return 0;
  603|      0|        }
  604|      0|#endif
  605|      0|        return general_get_uint(p, val, sizeof(*val));
  606|      0|    } else if (p->data_type == OSSL_PARAM_REAL) {
  ------------------
  |  |  112|      0|#define OSSL_PARAM_REAL 3
  ------------------
  |  Branch (606:16): [True: 0, False: 0]
  ------------------
  607|      0|#ifndef OPENSSL_SYS_UEFI
  608|      0|        double d;
  609|       |
  610|      0|        switch (p->data_size) {
  ------------------
  |  Branch (610:17): [True: 0, False: 0]
  ------------------
  611|      0|        case sizeof(double):
  ------------------
  |  Branch (611:9): [True: 0, False: 0]
  ------------------
  612|      0|            d = *(const double *)p->data;
  613|      0|            if (d >= 0 && d <= UINT32_MAX && d == (uint32_t)d) {
  ------------------
  |  Branch (613:17): [True: 0, False: 0]
  |  Branch (613:27): [True: 0, False: 0]
  |  Branch (613:46): [True: 0, False: 0]
  ------------------
  614|      0|                *val = (uint32_t)d;
  615|      0|                return 1;
  616|      0|            }
  617|      0|            err_inexact;
  ------------------
  |  |   29|      0|    ERR_raise(ERR_LIB_CRYPTO, \
  |  |  ------------------
  |  |  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  361|      0|        ERR_set_error)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   30|      0|        CRYPTO_R_PARAM_CANNOT_BE_REPRESENTED_EXACTLY)
  ------------------
  618|      0|            return 0;
  619|      0|        }
  620|      0|        err_unsupported_real;
  ------------------
  |  |   40|      0|    ERR_raise(ERR_LIB_CRYPTO, CRYPTO_R_PARAM_UNSUPPORTED_FLOATING_POINT_FORMAT)
  |  |  ------------------
  |  |  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  361|      0|        ERR_set_error)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  621|      0|        return 0;
  622|      0|#endif
  623|      0|    }
  624|      0|    err_bad_type;
  ------------------
  |  |   36|      2|    ERR_raise(ERR_LIB_CRYPTO, CRYPTO_R_PARAM_OF_INCOMPATIBLE_TYPE)
  |  |  ------------------
  |  |  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  361|      0|        ERR_set_error)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  625|      0|    return 0;
  626|      2|}
OSSL_PARAM_set_uint32:
  629|  6.66k|{
  630|  6.66k|    if (p == NULL) {
  ------------------
  |  Branch (630:9): [True: 0, False: 6.66k]
  ------------------
  631|      0|        err_null_argument;
  ------------------
  |  |   38|      0|    ERR_raise(ERR_LIB_CRYPTO, ERR_R_PASSED_NULL_PARAMETER)
  |  |  ------------------
  |  |  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  361|      0|        ERR_set_error)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  632|      0|        return 0;
  633|      0|    }
  634|  6.66k|    p->return_size = 0;
  635|       |
  636|  6.66k|    if (p->data_type == OSSL_PARAM_UNSIGNED_INTEGER) {
  ------------------
  |  |  107|  6.66k|#define OSSL_PARAM_UNSIGNED_INTEGER 2
  ------------------
  |  Branch (636:9): [True: 6.66k, False: 0]
  ------------------
  637|  6.66k|#ifndef OPENSSL_SMALL_FOOTPRINT
  638|  6.66k|        p->return_size = sizeof(uint32_t); /* Minimum expected size */
  639|  6.66k|        if (p->data == NULL)
  ------------------
  |  Branch (639:13): [True: 0, False: 6.66k]
  ------------------
  640|      0|            return 1;
  641|  6.66k|        switch (p->data_size) {
  ------------------
  |  Branch (641:17): [True: 6.66k, False: 0]
  ------------------
  642|  6.66k|        case sizeof(uint32_t):
  ------------------
  |  Branch (642:9): [True: 6.66k, False: 0]
  ------------------
  643|  6.66k|            *(uint32_t *)p->data = val;
  644|  6.66k|            return 1;
  645|      0|        case sizeof(uint64_t):
  ------------------
  |  Branch (645:9): [True: 0, False: 6.66k]
  ------------------
  646|      0|            p->return_size = sizeof(uint64_t);
  647|      0|            *(uint64_t *)p->data = val;
  648|      0|            return 1;
  649|  6.66k|        }
  650|      0|#endif
  651|      0|        return general_set_uint(p, &val, sizeof(val));
  652|  6.66k|    } else if (p->data_type == OSSL_PARAM_INTEGER) {
  ------------------
  |  |  106|      0|#define OSSL_PARAM_INTEGER 1
  ------------------
  |  Branch (652:16): [True: 0, False: 0]
  ------------------
  653|      0|#ifndef OPENSSL_SMALL_FOOTPRINT
  654|      0|        p->return_size = sizeof(int32_t); /* Minimum expected size */
  655|      0|        if (p->data == NULL)
  ------------------
  |  Branch (655:13): [True: 0, False: 0]
  ------------------
  656|      0|            return 1;
  657|      0|        switch (p->data_size) {
  ------------------
  |  Branch (657:17): [True: 0, False: 0]
  ------------------
  658|      0|        case sizeof(int32_t):
  ------------------
  |  Branch (658:9): [True: 0, False: 0]
  ------------------
  659|      0|            if (val <= INT32_MAX) {
  ------------------
  |  Branch (659:17): [True: 0, False: 0]
  ------------------
  660|      0|                *(int32_t *)p->data = (int32_t)val;
  661|      0|                return 1;
  662|      0|            }
  663|      0|            err_out_of_range;
  ------------------
  |  |   26|      0|    ERR_raise(ERR_LIB_CRYPTO, \
  |  |  ------------------
  |  |  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  361|      0|        ERR_set_error)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   27|      0|        CRYPTO_R_PARAM_VALUE_TOO_LARGE_FOR_DESTINATION)
  ------------------
  664|      0|            return 0;
  665|      0|        case sizeof(int64_t):
  ------------------
  |  Branch (665:9): [True: 0, False: 0]
  ------------------
  666|      0|            p->return_size = sizeof(int64_t);
  667|      0|            *(int64_t *)p->data = (int64_t)val;
  668|      0|            return 1;
  669|      0|        }
  670|      0|#endif
  671|      0|        return general_set_uint(p, &val, sizeof(val));
  672|      0|    } else if (p->data_type == OSSL_PARAM_REAL) {
  ------------------
  |  |  112|      0|#define OSSL_PARAM_REAL 3
  ------------------
  |  Branch (672:16): [True: 0, False: 0]
  ------------------
  673|      0|#ifndef OPENSSL_SYS_UEFI
  674|      0|        unsigned int shift;
  675|       |
  676|      0|        if (p->data == NULL) {
  ------------------
  |  Branch (676:13): [True: 0, False: 0]
  ------------------
  677|      0|            p->return_size = sizeof(double);
  678|      0|            return 1;
  679|      0|        }
  680|      0|        switch (p->data_size) {
  ------------------
  |  Branch (680:17): [True: 0, False: 0]
  ------------------
  681|      0|        case sizeof(double):
  ------------------
  |  Branch (681:9): [True: 0, False: 0]
  ------------------
  682|      0|            shift = real_shift();
  683|      0|            if (shift < 8 * sizeof(val) && (val >> shift) != 0) {
  ------------------
  |  Branch (683:17): [True: 0, False: 0]
  |  Branch (683:44): [True: 0, False: 0]
  ------------------
  684|      0|                err_inexact;
  ------------------
  |  |   29|      0|    ERR_raise(ERR_LIB_CRYPTO, \
  |  |  ------------------
  |  |  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  361|      0|        ERR_set_error)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   30|      0|        CRYPTO_R_PARAM_CANNOT_BE_REPRESENTED_EXACTLY)
  ------------------
  685|      0|                return 0;
  686|      0|            }
  687|      0|            *(double *)p->data = (double)val;
  688|      0|            p->return_size = sizeof(double);
  689|      0|            return 1;
  690|      0|        }
  691|      0|        err_unsupported_real;
  ------------------
  |  |   40|      0|    ERR_raise(ERR_LIB_CRYPTO, CRYPTO_R_PARAM_UNSUPPORTED_FLOATING_POINT_FORMAT)
  |  |  ------------------
  |  |  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  361|      0|        ERR_set_error)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  692|      0|        return 0;
  693|      0|#endif
  694|      0|    }
  695|      0|    err_bad_type;
  ------------------
  |  |   36|  6.66k|    ERR_raise(ERR_LIB_CRYPTO, CRYPTO_R_PARAM_OF_INCOMPATIBLE_TYPE)
  |  |  ------------------
  |  |  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  361|      0|        ERR_set_error)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  696|      0|    return 0;
  697|  6.66k|}
OSSL_PARAM_get_int64:
  706|      2|{
  707|      2|    if (val == NULL || p == NULL) {
  ------------------
  |  Branch (707:9): [True: 0, False: 2]
  |  Branch (707:24): [True: 0, False: 2]
  ------------------
  708|      0|        err_null_argument;
  ------------------
  |  |   38|      0|    ERR_raise(ERR_LIB_CRYPTO, ERR_R_PASSED_NULL_PARAMETER)
  |  |  ------------------
  |  |  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  361|      0|        ERR_set_error)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  709|      0|        return 0;
  710|      0|    }
  711|       |
  712|      2|    if (p->data == NULL) {
  ------------------
  |  Branch (712:9): [True: 0, False: 2]
  ------------------
  713|      0|        err_null_argument;
  ------------------
  |  |   38|      0|    ERR_raise(ERR_LIB_CRYPTO, ERR_R_PASSED_NULL_PARAMETER)
  |  |  ------------------
  |  |  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  361|      0|        ERR_set_error)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  714|      0|        return 0;
  715|      0|    }
  716|       |
  717|      2|    if (p->data_type == OSSL_PARAM_INTEGER) {
  ------------------
  |  |  106|      2|#define OSSL_PARAM_INTEGER 1
  ------------------
  |  Branch (717:9): [True: 2, False: 0]
  ------------------
  718|      2|#ifndef OPENSSL_SMALL_FOOTPRINT
  719|      2|        switch (p->data_size) {
  ------------------
  |  Branch (719:17): [True: 2, False: 0]
  ------------------
  720|      0|        case sizeof(int32_t):
  ------------------
  |  Branch (720:9): [True: 0, False: 2]
  ------------------
  721|      0|            *val = *(const int32_t *)p->data;
  722|      0|            return 1;
  723|      2|        case sizeof(int64_t):
  ------------------
  |  Branch (723:9): [True: 2, False: 0]
  ------------------
  724|      2|            *val = *(const int64_t *)p->data;
  725|      2|            return 1;
  726|      2|        }
  727|      0|#endif
  728|      0|        return general_get_int(p, val, sizeof(*val));
  729|      2|    } else if (p->data_type == OSSL_PARAM_UNSIGNED_INTEGER) {
  ------------------
  |  |  107|      0|#define OSSL_PARAM_UNSIGNED_INTEGER 2
  ------------------
  |  Branch (729:16): [True: 0, False: 0]
  ------------------
  730|      0|#ifndef OPENSSL_SMALL_FOOTPRINT
  731|      0|        uint64_t u64;
  732|       |
  733|      0|        switch (p->data_size) {
  ------------------
  |  Branch (733:17): [True: 0, False: 0]
  ------------------
  734|      0|        case sizeof(uint32_t):
  ------------------
  |  Branch (734:9): [True: 0, False: 0]
  ------------------
  735|      0|            *val = *(const uint32_t *)p->data;
  736|      0|            return 1;
  737|      0|        case sizeof(uint64_t):
  ------------------
  |  Branch (737:9): [True: 0, False: 0]
  ------------------
  738|      0|            u64 = *(const uint64_t *)p->data;
  739|      0|            if (u64 <= INT64_MAX) {
  ------------------
  |  Branch (739:17): [True: 0, False: 0]
  ------------------
  740|      0|                *val = (int64_t)u64;
  741|      0|                return 1;
  742|      0|            }
  743|      0|            err_out_of_range;
  ------------------
  |  |   26|      0|    ERR_raise(ERR_LIB_CRYPTO, \
  |  |  ------------------
  |  |  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  361|      0|        ERR_set_error)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   27|      0|        CRYPTO_R_PARAM_VALUE_TOO_LARGE_FOR_DESTINATION)
  ------------------
  744|      0|            return 0;
  745|      0|        }
  746|      0|#endif
  747|      0|        return general_get_int(p, val, sizeof(*val));
  748|      0|    } else if (p->data_type == OSSL_PARAM_REAL) {
  ------------------
  |  |  112|      0|#define OSSL_PARAM_REAL 3
  ------------------
  |  Branch (748:16): [True: 0, False: 0]
  ------------------
  749|      0|#ifndef OPENSSL_SYS_UEFI
  750|      0|        double d;
  751|       |
  752|      0|        switch (p->data_size) {
  ------------------
  |  Branch (752:17): [True: 0, False: 0]
  ------------------
  753|      0|        case sizeof(double):
  ------------------
  |  Branch (753:9): [True: 0, False: 0]
  ------------------
  754|      0|            d = *(const double *)p->data;
  755|      0|            if (d >= INT64_MIN
  ------------------
  |  Branch (755:17): [True: 0, False: 0]
  ------------------
  756|       |                /*
  757|       |                 * By subtracting 65535 (2^16-1) we cancel the low order
  758|       |                 * 15 bits of INT64_MAX to avoid using imprecise floating
  759|       |                 * point values.
  760|       |                 */
  761|      0|                && d < (double)(INT64_MAX - 65535) + 65536.0
  ------------------
  |  Branch (761:20): [True: 0, False: 0]
  ------------------
  762|      0|                && d == (int64_t)d) {
  ------------------
  |  Branch (762:20): [True: 0, False: 0]
  ------------------
  763|      0|                *val = (int64_t)d;
  764|      0|                return 1;
  765|      0|            }
  766|      0|            err_inexact;
  ------------------
  |  |   29|      0|    ERR_raise(ERR_LIB_CRYPTO, \
  |  |  ------------------
  |  |  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  361|      0|        ERR_set_error)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   30|      0|        CRYPTO_R_PARAM_CANNOT_BE_REPRESENTED_EXACTLY)
  ------------------
  767|      0|            return 0;
  768|      0|        }
  769|      0|        err_unsupported_real;
  ------------------
  |  |   40|      0|    ERR_raise(ERR_LIB_CRYPTO, CRYPTO_R_PARAM_UNSUPPORTED_FLOATING_POINT_FORMAT)
  |  |  ------------------
  |  |  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  361|      0|        ERR_set_error)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  770|      0|        return 0;
  771|      0|#endif
  772|      0|    }
  773|      0|    err_bad_type;
  ------------------
  |  |   36|      2|    ERR_raise(ERR_LIB_CRYPTO, CRYPTO_R_PARAM_OF_INCOMPATIBLE_TYPE)
  |  |  ------------------
  |  |  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  361|      0|        ERR_set_error)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  774|      0|    return 0;
  775|      2|}
OSSL_PARAM_set_uint64:
  939|  6.93k|{
  940|  6.93k|    if (p == NULL) {
  ------------------
  |  Branch (940:9): [True: 0, False: 6.93k]
  ------------------
  941|      0|        err_null_argument;
  ------------------
  |  |   38|      0|    ERR_raise(ERR_LIB_CRYPTO, ERR_R_PASSED_NULL_PARAMETER)
  |  |  ------------------
  |  |  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  361|      0|        ERR_set_error)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  942|      0|        return 0;
  943|      0|    }
  944|  6.93k|    p->return_size = 0;
  945|       |
  946|  6.93k|    if (p->data_type == OSSL_PARAM_UNSIGNED_INTEGER) {
  ------------------
  |  |  107|  6.93k|#define OSSL_PARAM_UNSIGNED_INTEGER 2
  ------------------
  |  Branch (946:9): [True: 6.93k, False: 0]
  ------------------
  947|  6.93k|#ifndef OPENSSL_SMALL_FOOTPRINT
  948|  6.93k|        if (p->data == NULL) {
  ------------------
  |  Branch (948:13): [True: 0, False: 6.93k]
  ------------------
  949|      0|            p->return_size = sizeof(uint64_t); /* Expected size */
  950|      0|            return 1;
  951|      0|        }
  952|  6.93k|        switch (p->data_size) {
  ------------------
  |  Branch (952:17): [True: 6.93k, False: 0]
  ------------------
  953|      0|        case sizeof(uint32_t):
  ------------------
  |  Branch (953:9): [True: 0, False: 6.93k]
  ------------------
  954|      0|            if (val <= UINT32_MAX) {
  ------------------
  |  Branch (954:17): [True: 0, False: 0]
  ------------------
  955|      0|                p->return_size = sizeof(uint32_t);
  956|      0|                *(uint32_t *)p->data = (uint32_t)val;
  957|      0|                return 1;
  958|      0|            }
  959|      0|            err_out_of_range;
  ------------------
  |  |   26|      0|    ERR_raise(ERR_LIB_CRYPTO, \
  |  |  ------------------
  |  |  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  361|      0|        ERR_set_error)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   27|      0|        CRYPTO_R_PARAM_VALUE_TOO_LARGE_FOR_DESTINATION)
  ------------------
  960|      0|            return 0;
  961|  6.93k|        case sizeof(uint64_t):
  ------------------
  |  Branch (961:9): [True: 6.93k, False: 0]
  ------------------
  962|  6.93k|            p->return_size = sizeof(uint64_t);
  963|  6.93k|            *(uint64_t *)p->data = val;
  964|  6.93k|            return 1;
  965|  6.93k|        }
  966|      0|#endif
  967|      0|        return general_set_uint(p, &val, sizeof(val));
  968|  6.93k|    } else if (p->data_type == OSSL_PARAM_INTEGER) {
  ------------------
  |  |  106|      0|#define OSSL_PARAM_INTEGER 1
  ------------------
  |  Branch (968:16): [True: 0, False: 0]
  ------------------
  969|      0|#ifndef OPENSSL_SMALL_FOOTPRINT
  970|      0|        if (p->data == NULL) {
  ------------------
  |  Branch (970:13): [True: 0, False: 0]
  ------------------
  971|      0|            p->return_size = sizeof(int64_t); /* Expected size */
  972|      0|            return 1;
  973|      0|        }
  974|      0|        switch (p->data_size) {
  ------------------
  |  Branch (974:17): [True: 0, False: 0]
  ------------------
  975|      0|        case sizeof(int32_t):
  ------------------
  |  Branch (975:9): [True: 0, False: 0]
  ------------------
  976|      0|            if (val <= INT32_MAX) {
  ------------------
  |  Branch (976:17): [True: 0, False: 0]
  ------------------
  977|      0|                p->return_size = sizeof(int32_t);
  978|      0|                *(int32_t *)p->data = (int32_t)val;
  979|      0|                return 1;
  980|      0|            }
  981|      0|            err_out_of_range;
  ------------------
  |  |   26|      0|    ERR_raise(ERR_LIB_CRYPTO, \
  |  |  ------------------
  |  |  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  361|      0|        ERR_set_error)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   27|      0|        CRYPTO_R_PARAM_VALUE_TOO_LARGE_FOR_DESTINATION)
  ------------------
  982|      0|            return 0;
  983|      0|        case sizeof(int64_t):
  ------------------
  |  Branch (983:9): [True: 0, False: 0]
  ------------------
  984|      0|            if (val <= INT64_MAX) {
  ------------------
  |  Branch (984:17): [True: 0, False: 0]
  ------------------
  985|      0|                p->return_size = sizeof(int64_t);
  986|      0|                *(int64_t *)p->data = (int64_t)val;
  987|      0|                return 1;
  988|      0|            }
  989|      0|            err_out_of_range;
  ------------------
  |  |   26|      0|    ERR_raise(ERR_LIB_CRYPTO, \
  |  |  ------------------
  |  |  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  361|      0|        ERR_set_error)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   27|      0|        CRYPTO_R_PARAM_VALUE_TOO_LARGE_FOR_DESTINATION)
  ------------------
  990|      0|            return 0;
  991|      0|        }
  992|      0|#endif
  993|      0|        return general_set_uint(p, &val, sizeof(val));
  994|      0|    } else if (p->data_type == OSSL_PARAM_REAL) {
  ------------------
  |  |  112|      0|#define OSSL_PARAM_REAL 3
  ------------------
  |  Branch (994:16): [True: 0, False: 0]
  ------------------
  995|      0|#ifndef OPENSSL_SYS_UEFI
  996|      0|        switch (p->data_size) {
  ------------------
  |  Branch (996:17): [True: 0, False: 0]
  ------------------
  997|      0|        case sizeof(double):
  ------------------
  |  Branch (997:9): [True: 0, False: 0]
  ------------------
  998|      0|            if ((val >> real_shift()) == 0) {
  ------------------
  |  Branch (998:17): [True: 0, False: 0]
  ------------------
  999|      0|                p->return_size = sizeof(double);
 1000|      0|                *(double *)p->data = (double)val;
 1001|      0|                return 1;
 1002|      0|            }
 1003|      0|            err_inexact;
  ------------------
  |  |   29|      0|    ERR_raise(ERR_LIB_CRYPTO, \
  |  |  ------------------
  |  |  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  361|      0|        ERR_set_error)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   30|      0|        CRYPTO_R_PARAM_CANNOT_BE_REPRESENTED_EXACTLY)
  ------------------
 1004|      0|            return 0;
 1005|      0|        }
 1006|      0|        err_unsupported_real;
  ------------------
  |  |   40|      0|    ERR_raise(ERR_LIB_CRYPTO, CRYPTO_R_PARAM_UNSUPPORTED_FLOATING_POINT_FORMAT)
  |  |  ------------------
  |  |  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  361|      0|        ERR_set_error)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1007|      0|        return 0;
 1008|      0|#endif
 1009|      0|    }
 1010|      0|    err_bad_type;
  ------------------
  |  |   36|  6.93k|    ERR_raise(ERR_LIB_CRYPTO, CRYPTO_R_PARAM_OF_INCOMPATIBLE_TYPE)
  |  |  ------------------
  |  |  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  361|      0|        ERR_set_error)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1011|      0|    return 0;
 1012|  6.93k|}
OSSL_PARAM_set_size_t:
 1034|  6.93k|{
 1035|  6.93k|#ifndef OPENSSL_SMALL_FOOTPRINT
 1036|  6.93k|    switch (sizeof(size_t)) {
  ------------------
  |  Branch (1036:13): [True: 6.93k, Folded]
  ------------------
 1037|      0|    case sizeof(uint32_t):
  ------------------
  |  Branch (1037:5): [True: 0, False: 6.93k]
  ------------------
 1038|      0|        return OSSL_PARAM_set_uint32(p, (uint32_t)val);
 1039|  6.93k|    case sizeof(uint64_t):
  ------------------
  |  Branch (1039:5): [True: 6.93k, False: 0]
  ------------------
 1040|  6.93k|        return OSSL_PARAM_set_uint64(p, (uint64_t)val);
 1041|  6.93k|    }
 1042|      0|#endif
 1043|      0|    return general_set_uint(p, &val, sizeof(val));
 1044|  6.93k|}
OSSL_PARAM_construct_size_t:
 1047|  6.93k|{
 1048|  6.93k|    return ossl_param_construct(key, OSSL_PARAM_UNSIGNED_INTEGER, buf,
  ------------------
  |  |  107|  6.93k|#define OSSL_PARAM_UNSIGNED_INTEGER 2
  ------------------
 1049|  6.93k|        sizeof(size_t));
 1050|  6.93k|}
OSSL_PARAM_get_time_t:
 1053|      2|{
 1054|      2|#ifndef OPENSSL_SMALL_FOOTPRINT
 1055|      2|    switch (sizeof(time_t)) {
  ------------------
  |  Branch (1055:13): [True: 2, Folded]
  ------------------
 1056|      0|    case sizeof(int32_t):
  ------------------
  |  Branch (1056:5): [True: 0, False: 2]
  ------------------
 1057|      0|        return OSSL_PARAM_get_int32(p, (int32_t *)val);
 1058|      2|    case sizeof(int64_t):
  ------------------
  |  Branch (1058:5): [True: 2, False: 0]
  ------------------
 1059|      2|        return OSSL_PARAM_get_int64(p, (int64_t *)val);
 1060|      2|    }
 1061|      0|#endif
 1062|      0|    return general_get_int(p, val, sizeof(*val));
 1063|      2|}
OSSL_PARAM_construct_time_t:
 1079|      2|{
 1080|      2|    return ossl_param_construct(key, OSSL_PARAM_INTEGER, buf, sizeof(time_t));
  ------------------
  |  |  106|      2|#define OSSL_PARAM_INTEGER 1
  ------------------
 1081|      2|}
OSSL_PARAM_construct_utf8_string:
 1463|      4|{
 1464|      4|    if (buf != NULL && bsize == 0)
  ------------------
  |  Branch (1464:9): [True: 4, False: 0]
  |  Branch (1464:24): [True: 4, False: 0]
  ------------------
 1465|      4|        bsize = strlen(buf);
 1466|      4|    return ossl_param_construct(key, OSSL_PARAM_UTF8_STRING, buf, bsize);
  ------------------
  |  |  117|      4|#define OSSL_PARAM_UTF8_STRING 4
  ------------------
 1467|      4|}
OSSL_PARAM_construct_end:
 1665|    132|{
 1666|    132|    OSSL_PARAM end = OSSL_PARAM_END;
  ------------------
  |  |   25|    132|    { NULL, 0, NULL, 0, 0 }
  ------------------
 1667|       |
 1668|    132|    return end;
 1669|    132|}
params.c:ossl_param_construct:
   70|  20.9k|{
   71|  20.9k|    OSSL_PARAM res;
   72|       |
   73|  20.9k|    res.key = key;
   74|  20.9k|    res.data_type = data_type;
   75|  20.9k|    res.data = data;
   76|  20.9k|    res.data_size = data_size;
   77|  20.9k|    res.return_size = OSSL_PARAM_UNMODIFIED;
  ------------------
  |  |   22|  20.9k|#define OSSL_PARAM_UNMODIFIED ((size_t)-1)
  ------------------
   78|  20.9k|    return res;
   79|  20.9k|}

ossl_err_load_PEM_strings:
   70|      1|{
   71|      1|#ifndef OPENSSL_NO_ERR
   72|      1|    if (ERR_reason_error_string(PEM_str_reasons[0].error) == NULL)
  ------------------
  |  Branch (72:9): [True: 1, False: 0]
  ------------------
   73|      1|        ERR_load_strings_const(PEM_str_reasons);
   74|      1|#endif
   75|      1|    return 1;
   76|      1|}

ossl_err_load_PKCS12_strings:
   58|      1|{
   59|      1|#ifndef OPENSSL_NO_ERR
   60|      1|    if (ERR_reason_error_string(PKCS12_str_reasons[0].error) == NULL)
  ------------------
  |  Branch (60:9): [True: 1, False: 0]
  ------------------
   61|      1|        ERR_load_strings_const(PKCS12_str_reasons);
   62|      1|#endif
   63|      1|    return 1;
   64|      1|}

ossl_err_load_PKCS7_strings:
   92|      1|{
   93|      1|#ifndef OPENSSL_NO_ERR
   94|      1|    if (ERR_reason_error_string(PKCS7_str_reasons[0].error) == NULL)
  ------------------
  |  Branch (94:9): [True: 1, False: 0]
  ------------------
   95|      1|        ERR_load_strings_const(PKCS7_str_reasons);
   96|      1|#endif
   97|      1|    return 1;
   98|      1|}

ossl_property_defns_free:
   52|    109|{
   53|    109|    LHASH_OF(PROPERTY_DEFN_ELEM) *property_defns = vproperty_defns;
  ------------------
  |  |  156|    109|#define LHASH_OF(type) struct lhash_st_##type
  ------------------
   54|       |
   55|    109|    if (property_defns != NULL) {
  ------------------
  |  Branch (55:9): [True: 109, False: 0]
  ------------------
   56|    109|        lh_PROPERTY_DEFN_ELEM_doall(property_defns,
   57|    109|            &property_defn_free);
   58|    109|        lh_PROPERTY_DEFN_ELEM_free(property_defns);
   59|    109|    }
   60|    109|}
ossl_property_defns_new:
   63|    110|{
   64|    110|    return lh_PROPERTY_DEFN_ELEM_new(&property_defn_hash, &property_defn_cmp);
   65|    110|}
ossl_prop_defn_get:
   68|    135|{
   69|    135|    PROPERTY_DEFN_ELEM elem, *r;
   70|    135|    LHASH_OF(PROPERTY_DEFN_ELEM) *property_defns;
  ------------------
  |  |  156|    135|#define LHASH_OF(type) struct lhash_st_##type
  ------------------
   71|       |
   72|    135|    property_defns = ossl_lib_ctx_get_data(ctx,
   73|    135|        OSSL_LIB_CTX_PROPERTY_DEFN_INDEX);
  ------------------
  |  |   97|    135|#define OSSL_LIB_CTX_PROPERTY_DEFN_INDEX 2
  ------------------
   74|    135|    if (!ossl_assert(property_defns != NULL) || !ossl_lib_ctx_read_lock(ctx))
  ------------------
  |  |   52|    270|#define ossl_assert(x) ossl_assert_int((x) != 0, "Assertion failed: " #x, \
  |  |   53|    270|    __FILE__, __LINE__)
  ------------------
  |  Branch (74:9): [True: 0, False: 135]
  |  Branch (74:49): [True: 0, False: 135]
  ------------------
   75|      0|        return NULL;
   76|       |
   77|    135|    elem.prop = prop;
   78|    135|    r = lh_PROPERTY_DEFN_ELEM_retrieve(property_defns, &elem);
   79|    135|    ossl_lib_ctx_unlock(ctx);
   80|    135|    if (r == NULL || !ossl_assert(r->defn != NULL))
  ------------------
  |  |   52|    134|#define ossl_assert(x) ossl_assert_int((x) != 0, "Assertion failed: " #x, \
  |  |   53|    134|    __FILE__, __LINE__)
  ------------------
  |  Branch (80:9): [True: 1, False: 134]
  |  Branch (80:22): [True: 0, False: 134]
  ------------------
   81|      1|        return NULL;
   82|    134|    return r->defn;
   83|    135|}
ossl_prop_defn_set:
   92|      1|{
   93|      1|    PROPERTY_DEFN_ELEM elem, *old, *p = NULL;
   94|      1|    size_t len;
   95|      1|    LHASH_OF(PROPERTY_DEFN_ELEM) *property_defns;
  ------------------
  |  |  156|      1|#define LHASH_OF(type) struct lhash_st_##type
  ------------------
   96|      1|    int res = 1;
   97|       |
   98|      1|    property_defns = ossl_lib_ctx_get_data(ctx,
   99|      1|        OSSL_LIB_CTX_PROPERTY_DEFN_INDEX);
  ------------------
  |  |   97|      1|#define OSSL_LIB_CTX_PROPERTY_DEFN_INDEX 2
  ------------------
  100|      1|    if (property_defns == NULL)
  ------------------
  |  Branch (100:9): [True: 0, False: 1]
  ------------------
  101|      0|        return 0;
  102|       |
  103|      1|    if (prop == NULL)
  ------------------
  |  Branch (103:9): [True: 0, False: 1]
  ------------------
  104|      0|        return 1;
  105|       |
  106|      1|    if (!ossl_lib_ctx_write_lock(ctx))
  ------------------
  |  Branch (106:9): [True: 0, False: 1]
  ------------------
  107|      0|        return 0;
  108|      1|    elem.prop = prop;
  109|      1|    if (pl == NULL) {
  ------------------
  |  Branch (109:9): [True: 0, False: 1]
  ------------------
  110|      0|        lh_PROPERTY_DEFN_ELEM_delete(property_defns, &elem);
  111|      0|        goto end;
  112|      0|    }
  113|       |    /* check if property definition is in the cache already */
  114|      1|    if ((p = lh_PROPERTY_DEFN_ELEM_retrieve(property_defns, &elem)) != NULL) {
  ------------------
  |  Branch (114:9): [True: 0, False: 1]
  ------------------
  115|      0|        ossl_property_free(*pl);
  116|      0|        *pl = p->defn;
  117|      0|        goto end;
  118|      0|    }
  119|      1|    len = strlen(prop);
  120|      1|    p = OPENSSL_malloc(sizeof(*p) + len);
  ------------------
  |  |  107|      1|    CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  121|      1|    if (p != NULL) {
  ------------------
  |  Branch (121:9): [True: 1, False: 0]
  ------------------
  122|      1|        p->prop = p->body;
  123|      1|        p->defn = *pl;
  124|      1|        memcpy(p->body, prop, len + 1);
  125|      1|        old = lh_PROPERTY_DEFN_ELEM_insert(property_defns, p);
  126|      1|        if (!ossl_assert(old == NULL))
  ------------------
  |  |   52|      1|#define ossl_assert(x) ossl_assert_int((x) != 0, "Assertion failed: " #x, \
  |  |   53|      1|    __FILE__, __LINE__)
  ------------------
  |  Branch (126:13): [True: 0, False: 1]
  ------------------
  127|       |            /* This should not happen. An existing entry is handled above. */
  128|      0|            goto end;
  129|      1|        if (!lh_PROPERTY_DEFN_ELEM_error(property_defns))
  ------------------
  |  Branch (129:13): [True: 1, False: 0]
  ------------------
  130|      1|            goto end;
  131|      1|    }
  132|      0|    OPENSSL_free(p);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  133|      0|    res = 0;
  134|      1|end:
  135|      1|    ossl_lib_ctx_unlock(ctx);
  136|      1|    return res;
  137|      0|}
defn_cache.c:property_defn_hash:
   35|    137|{
   36|    137|    return OPENSSL_LH_strhash(a->prop);
   37|    137|}
defn_cache.c:property_defn_cmp:
   41|    134|{
   42|    134|    return strcmp(a->prop, b->prop);
   43|    134|}

ossl_ctx_global_properties_free:
  132|    109|{
  133|    109|    OSSL_GLOBAL_PROPERTIES *globp = vglobp;
  134|       |
  135|    109|    if (globp != NULL) {
  ------------------
  |  Branch (135:9): [True: 109, False: 0]
  ------------------
  136|    109|        ossl_property_free(globp->list);
  137|    109|        OPENSSL_free(globp);
  ------------------
  |  |  132|    109|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  138|    109|    }
  139|    109|}
ossl_ctx_global_properties_new:
  142|    110|{
  143|    110|    return OPENSSL_zalloc(sizeof(OSSL_GLOBAL_PROPERTIES));
  ------------------
  |  |  109|    110|    CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  144|    110|}
ossl_ctx_global_properties:
  148|      4|{
  149|      4|    OSSL_GLOBAL_PROPERTIES *globp;
  150|       |
  151|      4|#if !defined(FIPS_MODULE) && !defined(OPENSSL_NO_AUTOLOAD_CONFIG)
  152|      4|    if (loadconfig && !OPENSSL_init_crypto(OPENSSL_INIT_LOAD_CONFIG, NULL))
  ------------------
  |  |  511|      0|#define OPENSSL_INIT_LOAD_CONFIG 0x00000040L
  ------------------
  |  Branch (152:9): [True: 0, False: 4]
  |  Branch (152:23): [True: 0, False: 0]
  ------------------
  153|      0|        return NULL;
  154|      4|#endif
  155|      4|    globp = ossl_lib_ctx_get_data(libctx, OSSL_LIB_CTX_GLOBAL_PROPERTIES);
  ------------------
  |  |  111|      4|#define OSSL_LIB_CTX_GLOBAL_PROPERTIES 14
  ------------------
  156|       |
  157|      4|    return globp != NULL ? &globp->list : NULL;
  ------------------
  |  Branch (157:12): [True: 4, False: 0]
  ------------------
  158|      4|}
ossl_method_store_new:
  301|    440|{
  302|    440|    OSSL_METHOD_STORE *res;
  303|       |
  304|    440|    res = OPENSSL_zalloc(sizeof(*res));
  ------------------
  |  |  109|    440|    CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  305|    440|    if (res != NULL) {
  ------------------
  |  Branch (305:9): [True: 440, False: 0]
  ------------------
  306|    440|        res->ctx = ctx;
  307|    440|        if ((res->algs = stored_algs_new()) == NULL
  ------------------
  |  Branch (307:13): [True: 0, False: 440]
  ------------------
  308|    440|            || (res->biglock = CRYPTO_THREAD_lock_new()) == NULL) {
  ------------------
  |  Branch (308:16): [True: 0, False: 440]
  ------------------
  309|      0|            ossl_method_store_free(res);
  310|      0|            return NULL;
  311|      0|        }
  312|    440|    }
  313|    440|    return res;
  314|    440|}
ossl_method_store_free:
  317|    436|{
  318|    436|    if (store == NULL)
  ------------------
  |  Branch (318:9): [True: 0, False: 436]
  ------------------
  319|      0|        return;
  320|       |
  321|    436|    stored_algs_free(store->algs);
  322|    436|    CRYPTO_THREAD_lock_free(store->biglock);
  323|    436|    OPENSSL_free(store);
  ------------------
  |  |  132|    436|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  324|    436|}
ossl_method_lock_store:
  327|      4|{
  328|      4|    return store != NULL ? CRYPTO_THREAD_write_lock(store->biglock) : 0;
  ------------------
  |  Branch (328:12): [True: 4, False: 0]
  ------------------
  329|      4|}
ossl_method_unlock_store:
  332|      4|{
  333|      4|    return store != NULL ? CRYPTO_THREAD_unlock(store->biglock) : 0;
  ------------------
  |  Branch (333:12): [True: 4, False: 0]
  ------------------
  334|      4|}
ossl_method_store_add:
  375|    135|{
  376|    135|    STORED_ALGORITHMS *sa;
  377|    135|    ALGORITHM *alg = NULL;
  378|    135|    IMPLEMENTATION *impl;
  379|    135|    int ret = 0;
  380|    135|    int i;
  381|       |
  382|    135|    if (nid <= 0 || method == NULL || store == NULL)
  ------------------
  |  Branch (382:9): [True: 0, False: 135]
  |  Branch (382:21): [True: 0, False: 135]
  |  Branch (382:39): [True: 0, False: 135]
  ------------------
  383|      0|        return 0;
  384|       |
  385|    135|    if (properties == NULL)
  ------------------
  |  Branch (385:9): [True: 0, False: 135]
  ------------------
  386|      0|        properties = "";
  387|       |
  388|    135|    if (!ossl_assert(prov != NULL))
  ------------------
  |  |   52|    135|#define ossl_assert(x) ossl_assert_int((x) != 0, "Assertion failed: " #x, \
  |  |   53|    135|    __FILE__, __LINE__)
  ------------------
  |  Branch (388:9): [True: 0, False: 135]
  ------------------
  389|      0|        return 0;
  390|       |
  391|       |    /* Create new entry */
  392|    135|    impl = OPENSSL_malloc(sizeof(*impl));
  ------------------
  |  |  107|    135|    CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  393|    135|    if (impl == NULL)
  ------------------
  |  Branch (393:9): [True: 0, False: 135]
  ------------------
  394|      0|        return 0;
  395|    135|    impl->method.method = method;
  396|    135|    impl->method.up_ref = method_up_ref;
  397|    135|    impl->method.free = method_destruct;
  398|    135|    if (!ossl_method_up_ref(&impl->method)) {
  ------------------
  |  Branch (398:9): [True: 0, False: 135]
  ------------------
  399|      0|        OPENSSL_free(impl);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  400|      0|        return 0;
  401|      0|    }
  402|    135|    impl->provider = prov;
  403|       |
  404|    135|    sa = stored_algs_shard(store, nid);
  ------------------
  |  |  124|    135|#define stored_algs_shard(store, nid) (&(store)->algs[(nid) & (NUM_SHARDS - 1)])
  |  |  ------------------
  |  |  |  |   32|    135|#define NUM_SHARDS 4
  |  |  ------------------
  ------------------
  405|       |
  406|       |    /* Insert into the hash table if required */
  407|    135|    if (!ossl_property_write_lock(sa)) {
  ------------------
  |  Branch (407:9): [True: 0, False: 135]
  ------------------
  408|      0|        impl_free(impl);
  409|      0|        return 0;
  410|      0|    }
  411|       |
  412|       |    /*
  413|       |     * Flush the alg cache of any implementation that already exists
  414|       |     * for this id.
  415|       |     * This is done to ensure that on the next lookup we go through the
  416|       |     * provider comparison in ossl_method_store_fetch.  If we don't do this
  417|       |     * then this new method won't be given a chance to get selected.
  418|       |     * NOTE: This doesn't actually remove the method from the backing store
  419|       |     * It just ensures that we query the backing store when (re)-adding a
  420|       |     * method to the algorithm cache, in case the one selected by the next
  421|       |     * query selects a different implementation
  422|       |     */
  423|    135|    ossl_method_cache_flush(sa, nid);
  424|       |
  425|       |    /*
  426|       |     * Parse the properties associated with this method, and convert it to a
  427|       |     * property list stored against the implementation for later comparison
  428|       |     * during fetch operations
  429|       |     */
  430|    135|    if ((impl->properties = ossl_prop_defn_get(store->ctx, properties)) == NULL) {
  ------------------
  |  Branch (430:9): [True: 1, False: 134]
  ------------------
  431|      1|        impl->properties = ossl_parse_property(store->ctx, properties);
  432|      1|        if (impl->properties == NULL)
  ------------------
  |  Branch (432:13): [True: 0, False: 1]
  ------------------
  433|      0|            goto err;
  434|      1|        if (!ossl_prop_defn_set(store->ctx, properties, &impl->properties)) {
  ------------------
  |  Branch (434:13): [True: 0, False: 1]
  ------------------
  435|      0|            ossl_property_free(impl->properties);
  436|      0|            impl->properties = NULL;
  437|      0|            goto err;
  438|      0|        }
  439|      1|    }
  440|       |
  441|       |    /*
  442|       |     * Check if we have an algorithm cache already for this nid.  If so use
  443|       |     * it, otherwise, create it, and insert it into the store
  444|       |     */
  445|    135|    alg = ossl_method_store_retrieve(sa, nid);
  446|    135|    if (alg == NULL) {
  ------------------
  |  Branch (446:9): [True: 135, False: 0]
  ------------------
  447|    135|        if ((alg = OPENSSL_zalloc(sizeof(*alg))) == NULL
  ------------------
  |  |  109|    135|    CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  |  Branch (447:13): [True: 0, False: 135]
  ------------------
  448|    135|            || (alg->impls = sk_IMPLEMENTATION_new_null()) == NULL
  ------------------
  |  Branch (448:16): [True: 0, False: 135]
  ------------------
  449|    135|            || (alg->cache = lh_QUERY_new(&query_hash, &query_cmp)) == NULL)
  ------------------
  |  Branch (449:16): [True: 0, False: 135]
  ------------------
  450|      0|            goto err;
  451|    135|        alg->nid = nid;
  452|    135|        if (!ossl_method_store_insert(sa, alg))
  ------------------
  |  Branch (452:13): [True: 0, False: 135]
  ------------------
  453|      0|            goto err;
  454|    135|        OSSL_TRACE2(QUERY, "Inserted an alg with nid %d into the stored algorithms %p\n",
  ------------------
  |  |  293|    135|    OSSL_TRACEV(category, (trc_out, format, arg1, arg2))
  |  |  ------------------
  |  |  |  |  283|    135|#define OSSL_TRACEV(category, args) ((void)0)
  |  |  ------------------
  ------------------
  455|    135|            nid, (void *)sa);
  456|    135|    }
  457|       |
  458|       |    /* Push onto stack if there isn't one there already */
  459|    135|    for (i = 0; i < sk_IMPLEMENTATION_num(alg->impls); i++) {
  ------------------
  |  Branch (459:17): [True: 0, False: 135]
  ------------------
  460|      0|        const IMPLEMENTATION *tmpimpl = sk_IMPLEMENTATION_value(alg->impls, i);
  461|       |
  462|      0|        if (tmpimpl->provider == impl->provider
  ------------------
  |  Branch (462:13): [True: 0, False: 0]
  ------------------
  463|      0|            && tmpimpl->properties == impl->properties)
  ------------------
  |  Branch (463:16): [True: 0, False: 0]
  ------------------
  464|      0|            break;
  465|      0|    }
  466|       |
  467|    135|    if (i == sk_IMPLEMENTATION_num(alg->impls)
  ------------------
  |  Branch (467:9): [True: 135, False: 0]
  ------------------
  468|    135|        && sk_IMPLEMENTATION_push(alg->impls, impl)) {
  ------------------
  |  Branch (468:12): [True: 135, False: 0]
  ------------------
  469|    135|        ret = 1;
  470|    135|#ifndef FIPS_MODULE
  471|    135|        OSSL_TRACE_BEGIN(QUERY)
  ------------------
  |  |  219|    135|    do {                           \
  |  |  220|    135|        BIO *trc_out = NULL;       \
  |  |  221|    135|        if (0)
  |  |  ------------------
  |  |  |  Branch (221:13): [Folded, False: 135]
  |  |  ------------------
  ------------------
  472|      0|        {
  473|      0|            BIO_printf(trc_out, "Adding to method store "
  474|      0|                                "nid: %d\nproperties: %s\nprovider: %s\n",
  475|      0|                nid, properties,
  476|      0|                ossl_provider_name(prov) == NULL ? "none" : ossl_provider_name(prov));
  ------------------
  |  Branch (476:17): [True: 0, False: 0]
  ------------------
  477|      0|        }
  478|    135|        OSSL_TRACE_END(QUERY);
  ------------------
  |  |  224|    135|    }                            \
  |  |  225|    135|    while (0)
  |  |  ------------------
  |  |  |  Branch (225:12): [Folded, False: 135]
  |  |  ------------------
  ------------------
  479|    135|#endif
  480|    135|    }
  481|    135|    ossl_property_unlock(sa);
  482|    135|    if (ret == 0)
  ------------------
  |  Branch (482:9): [True: 0, False: 135]
  ------------------
  483|      0|        impl_free(impl);
  484|    135|    return ret;
  485|       |
  486|      0|err:
  487|      0|    ossl_property_unlock(sa);
  488|       |    alg_cleanup(0, alg, NULL);
  489|      0|    impl_free(impl);
  490|      0|    return 0;
  491|    135|}
ossl_method_store_remove_all_provided:
  600|     20|{
  601|     20|    struct alg_cleanup_by_provider_data_st data;
  602|       |
  603|    100|    for (int k = 0; k < NUM_SHARDS; ++k) {
  ------------------
  |  |   32|    100|#define NUM_SHARDS 4
  ------------------
  |  Branch (603:21): [True: 80, False: 20]
  ------------------
  604|     80|        STORED_ALGORITHMS *sa = &store->algs[k];
  605|       |
  606|     80|        if (!ossl_property_write_lock(sa))
  ------------------
  |  Branch (606:13): [True: 0, False: 80]
  ------------------
  607|      0|            return 0;
  608|     80|        data.prov = prov;
  609|     80|        data.sa = sa;
  610|     80|        ossl_sa_ALGORITHM_doall_arg(sa->algs, &alg_cleanup_by_provider, &data);
  611|     80|        ossl_property_unlock(sa);
  612|     80|    }
  613|     20|    return 1;
  614|     20|}
ossl_method_store_fetch:
  706|      4|{
  707|      4|    OSSL_PROPERTY_LIST **plp;
  708|      4|    ALGORITHM *alg;
  709|      4|    IMPLEMENTATION *impl, *best_impl = NULL;
  710|      4|    OSSL_PROPERTY_LIST *pq = NULL, *p2 = NULL;
  711|      4|    const OSSL_PROVIDER *prov = prov_rw != NULL ? *prov_rw : NULL;
  ------------------
  |  Branch (711:33): [True: 4, False: 0]
  ------------------
  712|      4|    int ret = 0;
  713|      4|    int j, best = -1, score, optional;
  714|      4|    STORED_ALGORITHMS *sa;
  715|       |
  716|      4|    if (nid <= 0 || method == NULL || store == NULL)
  ------------------
  |  Branch (716:9): [True: 0, False: 4]
  |  Branch (716:21): [True: 0, False: 4]
  |  Branch (716:39): [True: 0, False: 4]
  ------------------
  717|      0|        return 0;
  718|       |
  719|      4|#if !defined(FIPS_MODULE) && !defined(OPENSSL_NO_AUTOLOAD_CONFIG)
  720|      4|    if (ossl_lib_ctx_is_default(store->ctx)
  ------------------
  |  Branch (720:9): [True: 4, False: 0]
  ------------------
  721|      4|        && !OPENSSL_init_crypto(OPENSSL_INIT_LOAD_CONFIG, NULL))
  ------------------
  |  |  511|      4|#define OPENSSL_INIT_LOAD_CONFIG 0x00000040L
  ------------------
  |  Branch (721:12): [True: 0, False: 4]
  ------------------
  722|      0|        return 0;
  723|      4|#endif
  724|       |
  725|      4|    sa = stored_algs_shard(store, nid);
  ------------------
  |  |  124|      4|#define stored_algs_shard(store, nid) (&(store)->algs[(nid) & (NUM_SHARDS - 1)])
  |  |  ------------------
  |  |  |  |   32|      4|#define NUM_SHARDS 4
  |  |  ------------------
  ------------------
  726|       |
  727|       |    /* This only needs to be a read lock, because the query won't create anything */
  728|      4|    if (!ossl_property_read_lock(sa))
  ------------------
  |  Branch (728:9): [True: 0, False: 4]
  ------------------
  729|      0|        return 0;
  730|       |
  731|      4|    OSSL_TRACE2(QUERY, "Retrieving by nid %d from stored algorithms %p\n",
  ------------------
  |  |  293|      4|    OSSL_TRACEV(category, (trc_out, format, arg1, arg2))
  |  |  ------------------
  |  |  |  |  283|      4|#define OSSL_TRACEV(category, args) ((void)0)
  |  |  ------------------
  ------------------
  732|      4|        nid, (void *)sa);
  733|      4|    alg = ossl_method_store_retrieve(sa, nid);
  734|      4|    if (alg == NULL) {
  ------------------
  |  Branch (734:9): [True: 0, False: 4]
  ------------------
  735|      0|        ossl_property_unlock(sa);
  736|      0|        OSSL_TRACE2(QUERY, "Failed to retrieve by nid %d from stored algorithms %p\n",
  ------------------
  |  |  293|      0|    OSSL_TRACEV(category, (trc_out, format, arg1, arg2))
  |  |  ------------------
  |  |  |  |  283|      0|#define OSSL_TRACEV(category, args) ((void)0)
  |  |  ------------------
  ------------------
  737|      0|            nid, (void *)sa);
  738|      0|        return 0;
  739|      0|    }
  740|      4|    OSSL_TRACE2(QUERY, "Retrieved by nid %d from stored algorithms %p\n",
  ------------------
  |  |  293|      4|    OSSL_TRACEV(category, (trc_out, format, arg1, arg2))
  |  |  ------------------
  |  |  |  |  283|      4|#define OSSL_TRACEV(category, args) ((void)0)
  |  |  ------------------
  ------------------
  741|      4|        nid, (void *)sa);
  742|       |
  743|       |    /*
  744|       |     * If a property query string is provided, convert it to an
  745|       |     * OSSL_PROPERTY_LIST structure
  746|       |     */
  747|      4|    if (prop_query != NULL)
  ------------------
  |  Branch (747:9): [True: 4, False: 0]
  ------------------
  748|      4|        p2 = pq = ossl_parse_query(store->ctx, prop_query, 0);
  749|       |
  750|       |    /*
  751|       |     * If the library context has default properties specified
  752|       |     * then merge those with the properties passed to this function
  753|       |     */
  754|      4|    plp = ossl_ctx_global_properties(store->ctx, 0);
  755|      4|    if (plp != NULL && *plp != NULL) {
  ------------------
  |  Branch (755:9): [True: 4, False: 0]
  |  Branch (755:24): [True: 0, False: 4]
  ------------------
  756|      0|        if (pq == NULL) {
  ------------------
  |  Branch (756:13): [True: 0, False: 0]
  ------------------
  757|      0|            pq = *plp;
  758|      0|        } else {
  759|      0|            p2 = ossl_property_merge(pq, *plp);
  760|      0|            ossl_property_free(pq);
  761|      0|            if (p2 == NULL)
  ------------------
  |  Branch (761:17): [True: 0, False: 0]
  ------------------
  762|      0|                goto fin;
  763|      0|            pq = p2;
  764|      0|        }
  765|      0|    }
  766|       |
  767|       |    /*
  768|       |     * Search for a provider that provides this implementation.
  769|       |     * If the requested provider is NULL, then any provider will do,
  770|       |     * otherwise we should try to find the one that matches the requested
  771|       |     * provider.  Note that providers are given implicit preference via the
  772|       |     * ordering of the implementation stack
  773|       |     */
  774|      4|    if (pq == NULL) {
  ------------------
  |  Branch (774:9): [True: 0, False: 4]
  ------------------
  775|      0|        for (j = 0; j < sk_IMPLEMENTATION_num(alg->impls); j++) {
  ------------------
  |  Branch (775:21): [True: 0, False: 0]
  ------------------
  776|      0|            impl = sk_IMPLEMENTATION_value(alg->impls, j);
  777|      0|            if (impl != NULL
  ------------------
  |  Branch (777:17): [True: 0, False: 0]
  ------------------
  778|      0|                && (prov == NULL || impl->provider == prov)) {
  ------------------
  |  Branch (778:21): [True: 0, False: 0]
  |  Branch (778:37): [True: 0, False: 0]
  ------------------
  779|      0|                best_impl = impl;
  780|      0|                ret = 1;
  781|      0|                break;
  782|      0|            }
  783|      0|        }
  784|      0|        goto fin;
  785|      0|    }
  786|       |
  787|       |    /*
  788|       |     * If there are optional properties specified
  789|       |     * then run the search again, and select the provider that matches the
  790|       |     * most options
  791|       |     */
  792|      4|    optional = ossl_property_has_optional(pq);
  793|      4|    for (j = 0; j < sk_IMPLEMENTATION_num(alg->impls); j++) {
  ------------------
  |  Branch (793:17): [True: 4, False: 0]
  ------------------
  794|      4|        impl = sk_IMPLEMENTATION_value(alg->impls, j);
  795|      4|        if (impl != NULL
  ------------------
  |  Branch (795:13): [True: 4, False: 0]
  ------------------
  796|      4|            && (prov == NULL || impl->provider == prov)) {
  ------------------
  |  Branch (796:17): [True: 2, False: 2]
  |  Branch (796:33): [True: 2, False: 0]
  ------------------
  797|      4|            score = ossl_property_match_count(pq, impl->properties);
  798|      4|            if (score > best) {
  ------------------
  |  Branch (798:17): [True: 4, False: 0]
  ------------------
  799|      4|                best_impl = impl;
  800|      4|                best = score;
  801|      4|                ret = 1;
  802|      4|                if (!optional)
  ------------------
  |  Branch (802:21): [True: 4, False: 0]
  ------------------
  803|      4|                    goto fin;
  804|      4|            }
  805|      4|        }
  806|      4|    }
  807|      4|fin:
  808|      4|    if (ret && ossl_method_up_ref(&best_impl->method)) {
  ------------------
  |  Branch (808:9): [True: 4, False: 0]
  |  Branch (808:16): [True: 4, False: 0]
  ------------------
  809|      4|        *method = best_impl->method.method;
  810|      4|        if (prov_rw != NULL)
  ------------------
  |  Branch (810:13): [True: 4, False: 0]
  ------------------
  811|      4|            *prov_rw = best_impl->provider;
  812|      4|    } else {
  813|      0|        ret = 0;
  814|      0|    }
  815|       |
  816|      4|#ifndef FIPS_MODULE
  817|      4|    OSSL_TRACE_BEGIN(QUERY)
  ------------------
  |  |  219|      4|    do {                           \
  |  |  220|      4|        BIO *trc_out = NULL;       \
  |  |  221|      4|        if (0)
  |  |  ------------------
  |  |  |  Branch (221:13): [Folded, False: 4]
  |  |  ------------------
  ------------------
  818|      0|    {
  819|      0|        char buf[512];
  820|      0|        size_t size;
  821|       |
  822|      0|        size = ossl_property_list_to_string(NULL, pq, buf, 512);
  823|      0|        BIO_printf(trc_out, "method store query with properties %s "
  824|      0|                            "resolves to provider %s\n",
  825|      0|            size == 0 ? "none" : buf,
  ------------------
  |  Branch (825:13): [True: 0, False: 0]
  ------------------
  826|      0|            best_impl == NULL ? "none" : ossl_provider_name(best_impl->provider));
  ------------------
  |  Branch (826:13): [True: 0, False: 0]
  ------------------
  827|      0|    }
  828|      4|    OSSL_TRACE_END(QUERY);
  ------------------
  |  |  224|      4|    }                            \
  |  |  225|      4|    while (0)
  |  |  ------------------
  |  |  |  Branch (225:12): [Folded, False: 4]
  |  |  ------------------
  ------------------
  829|      4|#endif
  830|       |
  831|      4|    ossl_property_unlock(sa);
  832|      4|    ossl_property_free(p2);
  833|      4|    return ret;
  834|      4|}
ossl_method_store_cache_flush_all:
  852|     20|{
  853|    100|    for (int i = 0; i < NUM_SHARDS; ++i) {
  ------------------
  |  |   32|    100|#define NUM_SHARDS 4
  ------------------
  |  Branch (853:21): [True: 80, False: 20]
  ------------------
  854|     80|        STORED_ALGORITHMS *sa = &store->algs[i];
  855|       |
  856|     80|        if (!ossl_property_write_lock(sa))
  ------------------
  |  Branch (856:13): [True: 0, False: 80]
  ------------------
  857|      0|            return 0;
  858|     80|        ossl_sa_ALGORITHM_doall(sa->algs, &impl_cache_flush_alg);
  859|     80|        sa->cache_nelem = 0;
  860|     80|        ossl_property_unlock(sa);
  861|     80|    }
  862|       |
  863|     20|    return 1;
  864|     20|}
ossl_method_store_cache_get:
  944|      5|{
  945|      5|    ALGORITHM *alg;
  946|      5|    QUERY elem, *r;
  947|      5|    int res = 0;
  948|      5|    STORED_ALGORITHMS *sa;
  949|       |
  950|      5|    if (nid <= 0 || store == NULL || prop_query == NULL)
  ------------------
  |  Branch (950:9): [True: 0, False: 5]
  |  Branch (950:21): [True: 0, False: 5]
  |  Branch (950:38): [True: 0, False: 5]
  ------------------
  951|      0|        return 0;
  952|       |
  953|      5|    sa = stored_algs_shard(store, nid);
  ------------------
  |  |  124|      5|#define stored_algs_shard(store, nid) (&(store)->algs[(nid) & (NUM_SHARDS - 1)])
  |  |  ------------------
  |  |  |  |   32|      5|#define NUM_SHARDS 4
  |  |  ------------------
  ------------------
  954|      5|    if (!ossl_property_read_lock(sa))
  ------------------
  |  Branch (954:9): [True: 0, False: 5]
  ------------------
  955|      0|        return 0;
  956|      5|    alg = ossl_method_store_retrieve(sa, nid);
  957|      5|    if (alg == NULL)
  ------------------
  |  Branch (957:9): [True: 0, False: 5]
  ------------------
  958|      0|        goto err;
  959|       |
  960|      5|    elem.query = prop_query;
  961|      5|    elem.provider = prov;
  962|      5|    r = lh_QUERY_retrieve(alg->cache, &elem);
  963|      5|    if (r == NULL)
  ------------------
  |  Branch (963:9): [True: 2, False: 3]
  ------------------
  964|      2|        goto err;
  965|      3|    if (ossl_method_up_ref(&r->method)) {
  ------------------
  |  Branch (965:9): [True: 3, False: 0]
  ------------------
  966|      3|        *method = r->method.method;
  967|      3|        res = 1;
  968|      3|    }
  969|      5|err:
  970|      5|    ossl_property_unlock(sa);
  971|      5|    return res;
  972|      3|}
ossl_method_store_cache_set:
  978|      4|{
  979|      4|    QUERY elem, *old, *p = NULL;
  980|      4|    ALGORITHM *alg;
  981|      4|    STORED_ALGORITHMS *sa;
  982|      4|    size_t len;
  983|      4|    int res = 1;
  984|       |
  985|      4|    if (nid <= 0 || store == NULL || prop_query == NULL)
  ------------------
  |  Branch (985:9): [True: 0, False: 4]
  |  Branch (985:21): [True: 0, False: 4]
  |  Branch (985:38): [True: 0, False: 4]
  ------------------
  986|      0|        return 0;
  987|       |
  988|      4|    if (!ossl_assert(prov != NULL))
  ------------------
  |  |   52|      4|#define ossl_assert(x) ossl_assert_int((x) != 0, "Assertion failed: " #x, \
  |  |   53|      4|    __FILE__, __LINE__)
  ------------------
  |  Branch (988:9): [True: 0, False: 4]
  ------------------
  989|      0|        return 0;
  990|       |
  991|      4|    sa = stored_algs_shard(store, nid);
  ------------------
  |  |  124|      4|#define stored_algs_shard(store, nid) (&(store)->algs[(nid) & (NUM_SHARDS - 1)])
  |  |  ------------------
  |  |  |  |   32|      4|#define NUM_SHARDS 4
  |  |  ------------------
  ------------------
  992|      4|    if (!ossl_property_write_lock(sa))
  ------------------
  |  Branch (992:9): [True: 0, False: 4]
  ------------------
  993|      0|        return 0;
  994|      4|    if (sa->cache_need_flush)
  ------------------
  |  Branch (994:9): [True: 0, False: 4]
  ------------------
  995|      0|        ossl_method_cache_flush_some(sa);
  996|      4|    alg = ossl_method_store_retrieve(sa, nid);
  997|      4|    if (alg == NULL)
  ------------------
  |  Branch (997:9): [True: 0, False: 4]
  ------------------
  998|      0|        goto err;
  999|       |
 1000|      4|    if (method == NULL) {
  ------------------
  |  Branch (1000:9): [True: 0, False: 4]
  ------------------
 1001|      0|        elem.query = prop_query;
 1002|      0|        elem.provider = prov;
 1003|      0|        if ((old = lh_QUERY_delete(alg->cache, &elem)) != NULL) {
  ------------------
  |  Branch (1003:13): [True: 0, False: 0]
  ------------------
 1004|      0|            impl_cache_free(old);
 1005|      0|            sa->cache_nelem--;
 1006|      0|        }
 1007|      0|        goto end;
 1008|      0|    }
 1009|      4|    p = OPENSSL_malloc(sizeof(*p) + (len = strlen(prop_query)));
  ------------------
  |  |  107|      4|    CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1010|      4|    if (p != NULL) {
  ------------------
  |  Branch (1010:9): [True: 4, False: 0]
  ------------------
 1011|      4|        p->query = p->body;
 1012|      4|        p->provider = prov;
 1013|      4|        p->method.method = method;
 1014|      4|        p->method.up_ref = method_up_ref;
 1015|      4|        p->method.free = method_destruct;
 1016|      4|        if (!ossl_method_up_ref(&p->method))
  ------------------
  |  Branch (1016:13): [True: 0, False: 4]
  ------------------
 1017|      0|            goto err;
 1018|      4|        memcpy((char *)p->query, prop_query, len + 1);
 1019|      4|        if ((old = lh_QUERY_insert(alg->cache, p)) != NULL) {
  ------------------
  |  Branch (1019:13): [True: 0, False: 4]
  ------------------
 1020|      0|            impl_cache_free(old);
 1021|      0|            goto end;
 1022|      0|        }
 1023|      4|        if (!lh_QUERY_error(alg->cache)) {
  ------------------
  |  Branch (1023:13): [True: 4, False: 0]
  ------------------
 1024|      4|            if (++sa->cache_nelem >= IMPL_CACHE_FLUSH_THRESHOLD)
  ------------------
  |  |   44|      4|#define IMPL_CACHE_FLUSH_THRESHOLD (CACHE_SIZE / NUM_SHARDS)
  |  |  ------------------
  |  |  |  |   36|      4|#define CACHE_SIZE 512
  |  |  ------------------
  |  |               #define IMPL_CACHE_FLUSH_THRESHOLD (CACHE_SIZE / NUM_SHARDS)
  |  |  ------------------
  |  |  |  |   32|      4|#define NUM_SHARDS 4
  |  |  ------------------
  ------------------
  |  Branch (1024:17): [True: 0, False: 4]
  ------------------
 1025|      0|                sa->cache_need_flush = 1;
 1026|      4|            goto end;
 1027|      4|        }
 1028|      0|        ossl_method_free(&p->method);
 1029|      0|    }
 1030|      0|err:
 1031|      0|    res = 0;
 1032|      0|    OPENSSL_free(p);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1033|      4|end:
 1034|      4|    ossl_property_unlock(sa);
 1035|      4|    return res;
 1036|      0|}
property.c:stored_algs_new:
  271|    440|{
  272|    440|    STORED_ALGORITHMS *ret;
  273|       |
  274|    440|    ret = OPENSSL_calloc(NUM_SHARDS, sizeof(STORED_ALGORITHMS));
  ------------------
  |  |  113|    440|    CRYPTO_calloc(num, size, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_calloc(num, size, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  275|    440|    if (ret == NULL)
  ------------------
  |  Branch (275:9): [True: 0, False: 440]
  ------------------
  276|      0|        return NULL;
  277|       |
  278|  2.20k|    for (int i = 0; i < NUM_SHARDS; ++i) {
  ------------------
  |  |   32|  2.20k|#define NUM_SHARDS 4
  ------------------
  |  Branch (278:21): [True: 1.76k, False: 440]
  ------------------
  279|  1.76k|        ret[i].algs = ossl_sa_ALGORITHM_new();
  280|  1.76k|        if (ret[i].algs == NULL)
  ------------------
  |  Branch (280:13): [True: 0, False: 1.76k]
  ------------------
  281|      0|            goto err;
  282|       |
  283|  1.76k|        ret[i].lock = CRYPTO_THREAD_lock_new();
  284|  1.76k|        if (ret[i].lock == NULL)
  ------------------
  |  Branch (284:13): [True: 0, False: 1.76k]
  ------------------
  285|      0|            goto err;
  286|  1.76k|    }
  287|       |
  288|    440|    return ret;
  289|       |
  290|      0|err:
  291|      0|    stored_algs_free(ret);
  292|       |
  293|       |    return NULL;
  294|    440|}
property.c:stored_algs_free:
  257|    436|{
  258|    436|    if (sa == NULL)
  ------------------
  |  Branch (258:9): [True: 0, False: 436]
  ------------------
  259|      0|        return;
  260|       |
  261|  2.18k|    for (int i = 0; i < NUM_SHARDS; ++i) {
  ------------------
  |  |   32|  2.18k|#define NUM_SHARDS 4
  ------------------
  |  Branch (261:21): [True: 1.74k, False: 436]
  ------------------
  262|  1.74k|        ossl_sa_ALGORITHM_doall_arg(sa[i].algs, &alg_cleanup, &sa[i]);
  263|  1.74k|        ossl_sa_ALGORITHM_free(sa[i].algs);
  264|  1.74k|        CRYPTO_THREAD_lock_free(sa[i].lock);
  265|  1.74k|    }
  266|       |
  267|    436|    OPENSSL_free(sa);
  ------------------
  |  |  132|    436|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  268|    436|}
property.c:ossl_method_up_ref:
  180|    146|{
  181|    146|    return (*method->up_ref)(method->method);
  182|    146|}
property.c:ossl_property_write_lock:
  195|    299|{
  196|    299|    return p != NULL ? CRYPTO_THREAD_write_lock(p->lock) : 0;
  ------------------
  |  Branch (196:12): [True: 299, False: 0]
  ------------------
  197|    299|}
property.c:ossl_method_store_retrieve:
  337|    283|{
  338|    283|    return ossl_sa_ALGORITHM_get(sa->algs, nid);
  339|    283|}
property.c:query_hash:
  205|      9|{
  206|      9|    return OPENSSL_LH_strhash(a->query);
  207|      9|}
property.c:query_cmp:
  210|      3|{
  211|      3|    int res = strcmp(a->query, b->query);
  212|       |
  213|      3|    if (res == 0 && a->provider != NULL && b->provider != NULL)
  ------------------
  |  Branch (213:9): [True: 3, False: 0]
  |  Branch (213:21): [True: 3, False: 0]
  |  Branch (213:44): [True: 2, False: 1]
  ------------------
  214|      2|        res = b->provider > a->provider ? 1
  ------------------
  |  Branch (214:15): [True: 0, False: 2]
  ------------------
  215|      2|            : b->provider < a->provider ? -1
  ------------------
  |  Branch (215:15): [True: 0, False: 2]
  ------------------
  216|      2|                                        : 0;
  217|      3|    return res;
  218|      3|}
property.c:ossl_method_store_insert:
  342|    135|{
  343|    135|    return ossl_sa_ALGORITHM_set(sa->algs, alg->nid, alg);
  344|    135|}
property.c:ossl_property_unlock:
  200|    308|{
  201|    308|    return p != 0 ? CRYPTO_THREAD_unlock(p->lock) : 0;
  ------------------
  |  Branch (201:12): [True: 308, False: 0]
  ------------------
  202|    308|}
property.c:ossl_property_read_lock:
  190|      9|{
  191|      9|    return p != NULL ? CRYPTO_THREAD_read_lock(p->lock) : 0;
  ------------------
  |  Branch (191:12): [True: 9, False: 0]
  ------------------
  192|      9|}
property.c:ossl_method_cache_flush:
  844|    135|{
  845|    135|    ALGORITHM *alg = ossl_method_store_retrieve(sa, nid);
  846|       |
  847|    135|    if (alg != NULL)
  ------------------
  |  Branch (847:9): [True: 0, False: 135]
  ------------------
  848|      0|        ossl_method_cache_flush_alg(sa, alg);
  849|    135|}

ossl_err_load_PROP_strings:
   40|      1|{
   41|      1|#ifndef OPENSSL_NO_ERR
   42|      1|    if (ERR_reason_error_string(PROP_str_reasons[0].error) == NULL)
  ------------------
  |  Branch (42:9): [True: 1, False: 0]
  ------------------
   43|      1|        ERR_load_strings_const(PROP_str_reasons);
   44|      1|#endif
   45|      1|    return 1;
   46|      1|}

ossl_parse_property:
  346|      1|{
  347|      1|    OSSL_PROPERTY_DEFINITION *prop = NULL;
  348|      1|    OSSL_PROPERTY_LIST *res = NULL;
  349|      1|    STACK_OF(OSSL_PROPERTY_DEFINITION) *sk;
  ------------------
  |  |   33|      1|#define STACK_OF(type) struct stack_st_##type
  ------------------
  350|      1|    const char *s = defn;
  351|      1|    int done;
  352|       |
  353|      1|    if (s == NULL || (sk = sk_OSSL_PROPERTY_DEFINITION_new(&pd_compare)) == NULL)
  ------------------
  |  Branch (353:9): [True: 0, False: 1]
  |  Branch (353:22): [True: 0, False: 1]
  ------------------
  354|      0|        return NULL;
  355|       |
  356|      1|    s = skip_space(s);
  357|      1|    done = *s == '\0';
  358|      2|    while (!done) {
  ------------------
  |  Branch (358:12): [True: 1, False: 1]
  ------------------
  359|      1|        const char *start = s;
  360|       |
  361|      1|        prop = OPENSSL_malloc(sizeof(*prop));
  ------------------
  |  |  107|      1|    CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  362|      1|        if (prop == NULL)
  ------------------
  |  Branch (362:13): [True: 0, False: 1]
  ------------------
  363|      0|            goto err;
  364|      1|        memset(&prop->v, 0, sizeof(prop->v));
  365|      1|        prop->optional = 0;
  366|      1|        if (!parse_name(ctx, &s, 1, &prop->name_idx))
  ------------------
  |  Branch (366:13): [True: 0, False: 1]
  ------------------
  367|      0|            goto err;
  368|      1|        prop->oper = OSSL_PROPERTY_OPER_EQ;
  369|      1|        if (prop->name_idx == 0) {
  ------------------
  |  Branch (369:13): [True: 0, False: 1]
  ------------------
  370|      0|            ERR_raise_data(ERR_LIB_PROP, PROP_R_PARSE_FAILED,
  ------------------
  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  ------------------
  |  |  361|      0|        ERR_set_error)
  ------------------
                          ERR_raise_data(ERR_LIB_PROP, PROP_R_PARSE_FAILED,
  ------------------
  |  |   99|      0|#define ERR_LIB_PROP 55
  ------------------
                          ERR_raise_data(ERR_LIB_PROP, PROP_R_PARSE_FAILED,
  ------------------
  |  |   35|      0|#define PROP_R_PARSE_FAILED 108
  ------------------
  371|      0|                "Unknown name HERE-->%s", start);
  372|      0|            goto err;
  373|      0|        }
  374|      1|        if (match_ch(&s, '=')) {
  ------------------
  |  Branch (374:13): [True: 1, False: 0]
  ------------------
  375|      1|            if (!parse_value(ctx, &s, prop, 1)) {
  ------------------
  |  Branch (375:17): [True: 0, False: 1]
  ------------------
  376|      0|                ERR_raise_data(ERR_LIB_PROP, PROP_R_NO_VALUE,
  ------------------
  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  ------------------
  |  |  361|      0|        ERR_set_error)
  ------------------
                              ERR_raise_data(ERR_LIB_PROP, PROP_R_NO_VALUE,
  ------------------
  |  |   99|      0|#define ERR_LIB_PROP 55
  ------------------
                              ERR_raise_data(ERR_LIB_PROP, PROP_R_NO_VALUE,
  ------------------
  |  |   34|      0|#define PROP_R_NO_VALUE 107
  ------------------
  377|      0|                    "HERE-->%s", start);
  378|      0|                goto err;
  379|      0|            }
  380|      1|        } else {
  381|       |            /* A name alone means a true Boolean */
  382|      0|            prop->type = OSSL_PROPERTY_TYPE_STRING;
  383|      0|            prop->v.str_val = OSSL_PROPERTY_TRUE;
  ------------------
  |  |   39|      0|#define OSSL_PROPERTY_TRUE 1
  ------------------
  384|      0|        }
  385|       |
  386|      1|        if (!sk_OSSL_PROPERTY_DEFINITION_push(sk, prop))
  ------------------
  |  Branch (386:13): [True: 0, False: 1]
  ------------------
  387|      0|            goto err;
  388|      1|        prop = NULL;
  389|      1|        done = !match_ch(&s, ',');
  390|      1|    }
  391|      1|    if (*s != '\0') {
  ------------------
  |  Branch (391:9): [True: 0, False: 1]
  ------------------
  392|      0|        ERR_raise_data(ERR_LIB_PROP, PROP_R_TRAILING_CHARACTERS,
  ------------------
  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  ------------------
  |  |  361|      0|        ERR_set_error)
  ------------------
                      ERR_raise_data(ERR_LIB_PROP, PROP_R_TRAILING_CHARACTERS,
  ------------------
  |  |   99|      0|#define ERR_LIB_PROP 55
  ------------------
                      ERR_raise_data(ERR_LIB_PROP, PROP_R_TRAILING_CHARACTERS,
  ------------------
  |  |   37|      0|#define PROP_R_TRAILING_CHARACTERS 110
  ------------------
  393|      0|            "HERE-->%s", s);
  394|      0|        goto err;
  395|      0|    }
  396|      1|    res = stack_to_property_list(ctx, sk);
  397|       |
  398|      1|err:
  399|      1|    OPENSSL_free(prop);
  ------------------
  |  |  132|      1|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  400|      1|    sk_OSSL_PROPERTY_DEFINITION_pop_free(sk, &pd_free);
  401|      1|    return res;
  402|      1|}
ossl_parse_query:
  406|      4|{
  407|      4|    STACK_OF(OSSL_PROPERTY_DEFINITION) *sk;
  ------------------
  |  |   33|      4|#define STACK_OF(type) struct stack_st_##type
  ------------------
  408|      4|    OSSL_PROPERTY_LIST *res = NULL;
  409|      4|    OSSL_PROPERTY_DEFINITION *prop = NULL;
  410|      4|    int done;
  411|       |
  412|      4|    if (s == NULL || (sk = sk_OSSL_PROPERTY_DEFINITION_new(&pd_compare)) == NULL)
  ------------------
  |  Branch (412:9): [True: 0, False: 4]
  |  Branch (412:22): [True: 0, False: 4]
  ------------------
  413|      0|        return NULL;
  414|       |
  415|      4|    s = skip_space(s);
  416|      4|    done = *s == '\0';
  417|      4|    while (!done) {
  ------------------
  |  Branch (417:12): [True: 0, False: 4]
  ------------------
  418|      0|        prop = OPENSSL_malloc(sizeof(*prop));
  ------------------
  |  |  107|      0|    CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  419|      0|        if (prop == NULL)
  ------------------
  |  Branch (419:13): [True: 0, False: 0]
  ------------------
  420|      0|            goto err;
  421|      0|        memset(&prop->v, 0, sizeof(prop->v));
  422|       |
  423|      0|        if (match_ch(&s, '-')) {
  ------------------
  |  Branch (423:13): [True: 0, False: 0]
  ------------------
  424|      0|            prop->oper = OSSL_PROPERTY_OVERRIDE;
  425|      0|            prop->optional = 0;
  426|      0|            if (!parse_name(ctx, &s, 1, &prop->name_idx))
  ------------------
  |  Branch (426:17): [True: 0, False: 0]
  ------------------
  427|      0|                goto err;
  428|      0|            goto skip_value;
  429|      0|        }
  430|      0|        prop->optional = match_ch(&s, '?');
  431|      0|        if (!parse_name(ctx, &s, 1, &prop->name_idx))
  ------------------
  |  Branch (431:13): [True: 0, False: 0]
  ------------------
  432|      0|            goto err;
  433|       |
  434|      0|        if (match_ch(&s, '=')) {
  ------------------
  |  Branch (434:13): [True: 0, False: 0]
  ------------------
  435|      0|            prop->oper = OSSL_PROPERTY_OPER_EQ;
  436|      0|        } else if (MATCH(&s, "!=")) {
  ------------------
  |  |   43|      0|#define MATCH(s, m) match(s, m, sizeof(m) - 1)
  |  |  ------------------
  |  |  |  Branch (43:21): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  437|      0|            prop->oper = OSSL_PROPERTY_OPER_NE;
  438|      0|        } else {
  439|       |            /* A name alone is a Boolean comparison for true */
  440|      0|            prop->oper = OSSL_PROPERTY_OPER_EQ;
  441|      0|            prop->type = OSSL_PROPERTY_TYPE_STRING;
  442|      0|            prop->v.str_val = OSSL_PROPERTY_TRUE;
  ------------------
  |  |   39|      0|#define OSSL_PROPERTY_TRUE 1
  ------------------
  443|      0|            goto skip_value;
  444|      0|        }
  445|      0|        if (!parse_value(ctx, &s, prop, create_values))
  ------------------
  |  Branch (445:13): [True: 0, False: 0]
  ------------------
  446|      0|            prop->type = OSSL_PROPERTY_TYPE_VALUE_UNDEFINED;
  447|       |
  448|      0|    skip_value:
  449|      0|        if (!sk_OSSL_PROPERTY_DEFINITION_push(sk, prop))
  ------------------
  |  Branch (449:13): [True: 0, False: 0]
  ------------------
  450|      0|            goto err;
  451|      0|        prop = NULL;
  452|      0|        done = !match_ch(&s, ',');
  453|      0|    }
  454|      4|    if (*s != '\0') {
  ------------------
  |  Branch (454:9): [True: 0, False: 4]
  ------------------
  455|      0|        ERR_raise_data(ERR_LIB_PROP, PROP_R_TRAILING_CHARACTERS,
  ------------------
  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  ------------------
  |  |  361|      0|        ERR_set_error)
  ------------------
                      ERR_raise_data(ERR_LIB_PROP, PROP_R_TRAILING_CHARACTERS,
  ------------------
  |  |   99|      0|#define ERR_LIB_PROP 55
  ------------------
                      ERR_raise_data(ERR_LIB_PROP, PROP_R_TRAILING_CHARACTERS,
  ------------------
  |  |   37|      0|#define PROP_R_TRAILING_CHARACTERS 110
  ------------------
  456|      0|            "HERE-->%s", s);
  457|      0|        goto err;
  458|      0|    }
  459|      4|    res = stack_to_property_list(ctx, sk);
  460|       |
  461|      4|err:
  462|      4|    OPENSSL_free(prop);
  ------------------
  |  |  132|      4|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  463|      4|    sk_OSSL_PROPERTY_DEFINITION_pop_free(sk, &pd_free);
  464|      4|    return res;
  465|      4|}
ossl_property_match_count:
  473|      4|{
  474|      4|    const OSSL_PROPERTY_DEFINITION *const q = query->properties;
  475|      4|    const OSSL_PROPERTY_DEFINITION *const d = defn->properties;
  476|      4|    int i = 0, j = 0, matches = 0;
  477|      4|    OSSL_PROPERTY_OPER oper;
  478|       |
  479|      4|    while (i < query->num_properties) {
  ------------------
  |  Branch (479:12): [True: 0, False: 4]
  ------------------
  480|      0|        if ((oper = q[i].oper) == OSSL_PROPERTY_OVERRIDE) {
  ------------------
  |  Branch (480:13): [True: 0, False: 0]
  ------------------
  481|      0|            i++;
  482|      0|            continue;
  483|      0|        }
  484|      0|        if (j < defn->num_properties) {
  ------------------
  |  Branch (484:13): [True: 0, False: 0]
  ------------------
  485|      0|            if (q[i].name_idx > d[j].name_idx) { /* skip defn, not in query */
  ------------------
  |  Branch (485:17): [True: 0, False: 0]
  ------------------
  486|      0|                j++;
  487|      0|                continue;
  488|      0|            }
  489|      0|            if (q[i].name_idx == d[j].name_idx) { /* both in defn and query */
  ------------------
  |  Branch (489:17): [True: 0, False: 0]
  ------------------
  490|      0|                const int eq = q[i].type == d[j].type
  ------------------
  |  Branch (490:32): [True: 0, False: 0]
  ------------------
  491|      0|                    && memcmp(&q[i].v, &d[j].v, sizeof(q[i].v)) == 0;
  ------------------
  |  Branch (491:24): [True: 0, False: 0]
  ------------------
  492|       |
  493|      0|                if ((eq && oper == OSSL_PROPERTY_OPER_EQ)
  ------------------
  |  Branch (493:22): [True: 0, False: 0]
  |  Branch (493:28): [True: 0, False: 0]
  ------------------
  494|      0|                    || (!eq && oper == OSSL_PROPERTY_OPER_NE))
  ------------------
  |  Branch (494:25): [True: 0, False: 0]
  |  Branch (494:32): [True: 0, False: 0]
  ------------------
  495|      0|                    matches++;
  496|      0|                else if (!q[i].optional)
  ------------------
  |  Branch (496:26): [True: 0, False: 0]
  ------------------
  497|      0|                    return -1;
  498|      0|                i++;
  499|      0|                j++;
  500|      0|                continue;
  501|      0|            }
  502|      0|        }
  503|       |
  504|       |        /*
  505|       |         * Handle the cases of a missing value and a query with no corresponding
  506|       |         * definition.  The former fails for any comparison except inequality,
  507|       |         * the latter is treated as a comparison against the Boolean false.
  508|       |         */
  509|      0|        if (q[i].type == OSSL_PROPERTY_TYPE_VALUE_UNDEFINED) {
  ------------------
  |  Branch (509:13): [True: 0, False: 0]
  ------------------
  510|      0|            if (oper == OSSL_PROPERTY_OPER_NE)
  ------------------
  |  Branch (510:17): [True: 0, False: 0]
  ------------------
  511|      0|                matches++;
  512|      0|            else if (!q[i].optional)
  ------------------
  |  Branch (512:22): [True: 0, False: 0]
  ------------------
  513|      0|                return -1;
  514|      0|        } else if (q[i].type != OSSL_PROPERTY_TYPE_STRING
  ------------------
  |  Branch (514:20): [True: 0, False: 0]
  ------------------
  515|      0|            || (oper == OSSL_PROPERTY_OPER_EQ
  ------------------
  |  Branch (515:17): [True: 0, False: 0]
  ------------------
  516|      0|                && q[i].v.str_val != OSSL_PROPERTY_FALSE)
  ------------------
  |  |   40|      0|#define OSSL_PROPERTY_FALSE 2
  ------------------
  |  Branch (516:20): [True: 0, False: 0]
  ------------------
  517|      0|            || (oper == OSSL_PROPERTY_OPER_NE
  ------------------
  |  Branch (517:17): [True: 0, False: 0]
  ------------------
  518|      0|                && q[i].v.str_val == OSSL_PROPERTY_FALSE)) {
  ------------------
  |  |   40|      0|#define OSSL_PROPERTY_FALSE 2
  ------------------
  |  Branch (518:20): [True: 0, False: 0]
  ------------------
  519|      0|            if (!q[i].optional)
  ------------------
  |  Branch (519:17): [True: 0, False: 0]
  ------------------
  520|      0|                return -1;
  521|      0|        } else {
  522|      0|            matches++;
  523|      0|        }
  524|      0|        i++;
  525|      0|    }
  526|      4|    return matches;
  527|      4|}
ossl_property_free:
  530|    113|{
  531|    113|    OPENSSL_free(p);
  ------------------
  |  |  132|    113|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  532|    113|}
ossl_property_parse_init:
  575|    110|{
  576|    110|    static const char *const predefined_names[] = {
  577|    110|        "provider", /* Name of provider (default, legacy, fips) */
  578|    110|        "version", /* Version number of this provider */
  579|    110|        "fips", /* FIPS validated or FIPS supporting algorithm */
  580|    110|        "output", /* Output type for encoders */
  581|    110|        "input", /* Input type for decoders */
  582|    110|        "structure", /* Structure name for encoders and decoders */
  583|    110|    };
  584|    110|    size_t i;
  585|       |
  586|    770|    for (i = 0; i < OSSL_NELEM(predefined_names); i++)
  ------------------
  |  |   14|    770|#define OSSL_NELEM(x) (sizeof(x) / sizeof((x)[0]))
  ------------------
  |  Branch (586:17): [True: 660, False: 110]
  ------------------
  587|    660|        if (ossl_property_name(ctx, predefined_names[i], 1) == 0)
  ------------------
  |  Branch (587:13): [True: 0, False: 660]
  ------------------
  588|      0|            goto err;
  589|       |
  590|       |    /*
  591|       |     * Pre-populate the two Boolean values. We must do them before any other
  592|       |     * values and in this order so that we get the same index as the global
  593|       |     * OSSL_PROPERTY_TRUE and OSSL_PROPERTY_FALSE values
  594|       |     */
  595|    110|    if ((ossl_property_value(ctx, "yes", 1) != OSSL_PROPERTY_TRUE)
  ------------------
  |  |   39|    110|#define OSSL_PROPERTY_TRUE 1
  ------------------
  |  Branch (595:9): [True: 0, False: 110]
  ------------------
  596|    110|        || (ossl_property_value(ctx, "no", 1) != OSSL_PROPERTY_FALSE))
  ------------------
  |  |   40|    110|#define OSSL_PROPERTY_FALSE 2
  ------------------
  |  Branch (596:12): [True: 0, False: 110]
  ------------------
  597|      0|        goto err;
  598|       |
  599|    110|    return 1;
  600|      0|err:
  601|      0|    return 0;
  602|    110|}
property_parse.c:skip_space:
   26|      8|{
   27|      8|    while (ossl_isspace(*s))
  ------------------
  |  |   82|      8|#define ossl_isspace(c) (ossl_ctype_check((c), CTYPE_MASK_space))
  |  |  ------------------
  |  |  |  |   30|      8|#define CTYPE_MASK_space 0x8
  |  |  ------------------
  |  |  |  Branch (82:25): [True: 0, False: 8]
  |  |  ------------------
  ------------------
   28|      0|        s++;
   29|      8|    return s;
   30|      8|}
property_parse.c:parse_name:
   58|      1|{
   59|      1|    char name[100];
   60|      1|    int err = 0;
   61|      1|    size_t i = 0;
   62|      1|    const char *s = *t;
   63|      1|    int user_name = 0;
   64|       |
   65|      1|    for (;;) {
   66|      1|        if (!ossl_isalpha(*s)) {
  ------------------
  |  |   71|      1|#define ossl_isalpha(c) (ossl_ctype_check((c), CTYPE_MASK_alpha))
  |  |  ------------------
  |  |  |  |   40|      1|#define CTYPE_MASK_alpha (CTYPE_MASK_lower | CTYPE_MASK_upper)
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      1|#define CTYPE_MASK_lower 0x1
  |  |  |  |  ------------------
  |  |  |  |               #define CTYPE_MASK_alpha (CTYPE_MASK_lower | CTYPE_MASK_upper)
  |  |  |  |  ------------------
  |  |  |  |  |  |   28|      1|#define CTYPE_MASK_upper 0x2
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (66:13): [True: 0, False: 1]
  ------------------
   67|      0|            ERR_raise_data(ERR_LIB_PROP, PROP_R_NOT_AN_IDENTIFIER,
  ------------------
  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  ------------------
  |  |  361|      0|        ERR_set_error)
  ------------------
                          ERR_raise_data(ERR_LIB_PROP, PROP_R_NOT_AN_IDENTIFIER,
  ------------------
  |  |   99|      0|#define ERR_LIB_PROP 55
  ------------------
                          ERR_raise_data(ERR_LIB_PROP, PROP_R_NOT_AN_IDENTIFIER,
  ------------------
  |  |   30|      0|#define PROP_R_NOT_AN_IDENTIFIER 103
  ------------------
   68|      0|                "HERE-->%s", *t);
   69|      0|            return 0;
   70|      0|        }
   71|      8|        do {
   72|      8|            if (i < sizeof(name) - 1)
  ------------------
  |  Branch (72:17): [True: 8, False: 0]
  ------------------
   73|      8|                name[i++] = ossl_tolower(*s);
   74|      0|            else
   75|      0|                err = 1;
   76|      8|        } while (*++s == '_' || ossl_isalnum(*s));
  ------------------
  |  |   70|      8|#define ossl_isalnum(c) (ossl_ctype_check((c), CTYPE_MASK_alnum))
  |  |  ------------------
  |  |  |  |   41|      8|#define CTYPE_MASK_alnum (CTYPE_MASK_alpha | CTYPE_MASK_digit)
  |  |  |  |  ------------------
  |  |  |  |  |  |   40|      8|#define CTYPE_MASK_alpha (CTYPE_MASK_lower | CTYPE_MASK_upper)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   27|      8|#define CTYPE_MASK_lower 0x1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define CTYPE_MASK_alpha (CTYPE_MASK_lower | CTYPE_MASK_upper)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   28|      8|#define CTYPE_MASK_upper 0x2
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define CTYPE_MASK_alnum (CTYPE_MASK_alpha | CTYPE_MASK_digit)
  |  |  |  |  ------------------
  |  |  |  |  |  |   29|      8|#define CTYPE_MASK_digit 0x4
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (70:25): [True: 7, False: 1]
  |  |  ------------------
  ------------------
  |  Branch (76:18): [True: 0, False: 8]
  ------------------
   77|      1|        if (*s != '.')
  ------------------
  |  Branch (77:13): [True: 1, False: 0]
  ------------------
   78|      1|            break;
   79|      0|        user_name = 1;
   80|      0|        if (i < sizeof(name) - 1)
  ------------------
  |  Branch (80:13): [True: 0, False: 0]
  ------------------
   81|      0|            name[i++] = *s;
   82|      0|        else
   83|      0|            err = 1;
   84|      0|        s++;
   85|      0|    }
   86|      1|    name[i] = '\0';
   87|      1|    if (err) {
  ------------------
  |  Branch (87:9): [True: 0, False: 1]
  ------------------
   88|      0|        ERR_raise_data(ERR_LIB_PROP, PROP_R_NAME_TOO_LONG, "HERE-->%s", *t);
  ------------------
  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  ------------------
  |  |  361|      0|        ERR_set_error)
  ------------------
                      ERR_raise_data(ERR_LIB_PROP, PROP_R_NAME_TOO_LONG, "HERE-->%s", *t);
  ------------------
  |  |   99|      0|#define ERR_LIB_PROP 55
  ------------------
                      ERR_raise_data(ERR_LIB_PROP, PROP_R_NAME_TOO_LONG, "HERE-->%s", *t);
  ------------------
  |  |   27|      0|#define PROP_R_NAME_TOO_LONG 100
  ------------------
   89|      0|        return 0;
   90|      0|    }
   91|      1|    *t = skip_space(s);
   92|      1|    *idx = ossl_property_name(ctx, name, user_name && create);
  ------------------
  |  Branch (92:42): [True: 0, False: 1]
  |  Branch (92:55): [True: 0, False: 0]
  ------------------
   93|      1|    return 1;
   94|      1|}
property_parse.c:match_ch:
   33|      2|{
   34|      2|    const char *s = *t;
   35|       |
   36|      2|    if (*s == m) {
  ------------------
  |  Branch (36:9): [True: 1, False: 1]
  ------------------
   37|      1|        *t = skip_space(s + 1);
   38|      1|        return 1;
   39|      1|    }
   40|      1|    return 0;
   41|      2|}
property_parse.c:parse_value:
  258|      1|{
  259|      1|    const char *s = *t;
  260|      1|    int r = 0;
  261|       |
  262|      1|    if (*s == '"' || *s == '\'') {
  ------------------
  |  Branch (262:9): [True: 0, False: 1]
  |  Branch (262:22): [True: 0, False: 1]
  ------------------
  263|      0|        s++;
  264|      0|        r = parse_string(ctx, &s, s[-1], res, create);
  265|      1|    } else if (*s == '+') {
  ------------------
  |  Branch (265:16): [True: 0, False: 1]
  ------------------
  266|      0|        s++;
  267|      0|        r = parse_number(&s, res);
  268|      1|    } else if (*s == '-') {
  ------------------
  |  Branch (268:16): [True: 0, False: 1]
  ------------------
  269|      0|        s++;
  270|      0|        r = parse_number(&s, res);
  271|      0|        res->v.int_val = -res->v.int_val;
  272|      1|    } else if (*s == '0' && s[1] == 'x') {
  ------------------
  |  Branch (272:16): [True: 0, False: 1]
  |  Branch (272:29): [True: 0, False: 0]
  ------------------
  273|      0|        s += 2;
  274|      0|        r = parse_hex(&s, res);
  275|      1|    } else if (*s == '0' && ossl_isdigit(s[1])) {
  ------------------
  |  Branch (275:16): [True: 0, False: 1]
  |  Branch (275:29): [True: 0, False: 0]
  ------------------
  276|      0|        s++;
  277|      0|        r = parse_oct(&s, res);
  278|      1|    } else if (ossl_isdigit(*s)) {
  ------------------
  |  Branch (278:16): [True: 0, False: 1]
  ------------------
  279|      0|        return parse_number(t, res);
  280|      1|    } else if (ossl_isalpha(*s))
  ------------------
  |  |   71|      1|#define ossl_isalpha(c) (ossl_ctype_check((c), CTYPE_MASK_alpha))
  |  |  ------------------
  |  |  |  |   40|      1|#define CTYPE_MASK_alpha (CTYPE_MASK_lower | CTYPE_MASK_upper)
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      1|#define CTYPE_MASK_lower 0x1
  |  |  |  |  ------------------
  |  |  |  |               #define CTYPE_MASK_alpha (CTYPE_MASK_lower | CTYPE_MASK_upper)
  |  |  |  |  ------------------
  |  |  |  |  |  |   28|      1|#define CTYPE_MASK_upper 0x2
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (71:25): [True: 1, False: 0]
  |  |  ------------------
  ------------------
  281|      1|        return parse_unquoted(ctx, t, res, create);
  282|      0|    if (r)
  ------------------
  |  Branch (282:9): [True: 0, False: 0]
  ------------------
  283|      0|        *t = s;
  284|      0|    return r;
  285|      1|}
property_parse.c:parse_unquoted:
  226|      1|{
  227|      1|    char v[1000];
  228|      1|    const char *s = *t;
  229|      1|    size_t i = 0;
  230|      1|    int err = 0;
  231|       |
  232|      1|    if (*s == '\0' || *s == ',')
  ------------------
  |  Branch (232:9): [True: 0, False: 1]
  |  Branch (232:23): [True: 0, False: 1]
  ------------------
  233|      0|        return 0;
  234|      8|    while (ossl_isprint(*s) && !ossl_isspace(*s) && *s != ',') {
  ------------------
  |  |   80|     16|#define ossl_isprint(c) (ossl_ctype_check((c), CTYPE_MASK_print))
  |  |  ------------------
  |  |  |  |   35|      8|#define CTYPE_MASK_print 0x100
  |  |  ------------------
  |  |  |  Branch (80:25): [True: 7, False: 1]
  |  |  ------------------
  ------------------
                  while (ossl_isprint(*s) && !ossl_isspace(*s) && *s != ',') {
  ------------------
  |  |   82|     15|#define ossl_isspace(c) (ossl_ctype_check((c), CTYPE_MASK_space))
  |  |  ------------------
  |  |  |  |   30|      7|#define CTYPE_MASK_space 0x8
  |  |  ------------------
  ------------------
  |  Branch (234:32): [True: 7, False: 0]
  |  Branch (234:53): [True: 7, False: 0]
  ------------------
  235|      7|        if (i < sizeof(v) - 1)
  ------------------
  |  Branch (235:13): [True: 7, False: 0]
  ------------------
  236|      7|            v[i++] = ossl_tolower(*s);
  237|      0|        else
  238|      0|            err = 1;
  239|      7|        s++;
  240|      7|    }
  241|      1|    if (!ossl_isspace(*s) && *s != '\0' && *s != ',') {
  ------------------
  |  |   82|      2|#define ossl_isspace(c) (ossl_ctype_check((c), CTYPE_MASK_space))
  |  |  ------------------
  |  |  |  |   30|      1|#define CTYPE_MASK_space 0x8
  |  |  ------------------
  ------------------
  |  Branch (241:9): [True: 1, False: 0]
  |  Branch (241:30): [True: 0, False: 1]
  |  Branch (241:44): [True: 0, False: 0]
  ------------------
  242|      0|        ERR_raise_data(ERR_LIB_PROP, PROP_R_NOT_AN_ASCII_CHARACTER,
  ------------------
  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  ------------------
  |  |  361|      0|        ERR_set_error)
  ------------------
                      ERR_raise_data(ERR_LIB_PROP, PROP_R_NOT_AN_ASCII_CHARACTER,
  ------------------
  |  |   99|      0|#define ERR_LIB_PROP 55
  ------------------
                      ERR_raise_data(ERR_LIB_PROP, PROP_R_NOT_AN_ASCII_CHARACTER,
  ------------------
  |  |   28|      0|#define PROP_R_NOT_AN_ASCII_CHARACTER 101
  ------------------
  243|      0|            "HERE-->%s", s);
  244|      0|        return 0;
  245|      0|    }
  246|      1|    v[i] = 0;
  247|      1|    if (err)
  ------------------
  |  Branch (247:9): [True: 0, False: 1]
  ------------------
  248|      0|        ERR_raise_data(ERR_LIB_PROP, PROP_R_STRING_TOO_LONG, "HERE-->%s", *t);
  ------------------
  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  ------------------
  |  |  361|      0|        ERR_set_error)
  ------------------
                      ERR_raise_data(ERR_LIB_PROP, PROP_R_STRING_TOO_LONG, "HERE-->%s", *t);
  ------------------
  |  |   99|      0|#define ERR_LIB_PROP 55
  ------------------
                      ERR_raise_data(ERR_LIB_PROP, PROP_R_STRING_TOO_LONG, "HERE-->%s", *t);
  ------------------
  |  |   36|      0|#define PROP_R_STRING_TOO_LONG 109
  ------------------
  249|      1|    else if ((res->v.str_val = ossl_property_value(ctx, v, create)) == 0)
  ------------------
  |  Branch (249:14): [True: 0, False: 1]
  ------------------
  250|      0|        err = 1;
  251|      1|    *t = skip_space(s);
  252|      1|    res->type = OSSL_PROPERTY_TYPE_STRING;
  253|      1|    return !err;
  254|      1|}
property_parse.c:stack_to_property_list:
  314|      5|{
  315|      5|    const int n = sk_OSSL_PROPERTY_DEFINITION_num(sk);
  316|      5|    OSSL_PROPERTY_LIST *r;
  317|      5|    OSSL_PROPERTY_IDX prev_name_idx = 0;
  318|      5|    int i;
  319|       |
  320|      5|    r = OPENSSL_malloc(sizeof(*r)
  ------------------
  |  |  107|     10|    CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  |  |  |  Branch (107:19): [True: 4, False: 1]
  |  |  ------------------
  ------------------
  321|      5|        + (n <= 0 ? 0 : n - 1) * sizeof(r->properties[0]));
  322|      5|    if (r != NULL) {
  ------------------
  |  Branch (322:9): [True: 5, False: 0]
  ------------------
  323|      5|        sk_OSSL_PROPERTY_DEFINITION_sort(sk);
  324|       |
  325|      5|        r->has_optional = 0;
  326|      6|        for (i = 0; i < n; i++) {
  ------------------
  |  Branch (326:21): [True: 1, False: 5]
  ------------------
  327|      1|            r->properties[i] = *sk_OSSL_PROPERTY_DEFINITION_value(sk, i);
  328|      1|            r->has_optional |= r->properties[i].optional;
  329|       |
  330|       |            /* Check for duplicated names */
  331|      1|            if (i > 0 && r->properties[i].name_idx == prev_name_idx) {
  ------------------
  |  Branch (331:17): [True: 0, False: 1]
  |  Branch (331:26): [True: 0, False: 0]
  ------------------
  332|      0|                OPENSSL_free(r);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  333|      0|                ERR_raise_data(ERR_LIB_PROP, PROP_R_PARSE_FAILED,
  ------------------
  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  ------------------
  |  |  361|      0|        ERR_set_error)
  ------------------
                              ERR_raise_data(ERR_LIB_PROP, PROP_R_PARSE_FAILED,
  ------------------
  |  |   99|      0|#define ERR_LIB_PROP 55
  ------------------
                              ERR_raise_data(ERR_LIB_PROP, PROP_R_PARSE_FAILED,
  ------------------
  |  |   35|      0|#define PROP_R_PARSE_FAILED 108
  ------------------
  334|      0|                    "Duplicated name `%s'",
  335|      0|                    ossl_property_name_str(ctx, prev_name_idx));
  336|      0|                return NULL;
  337|      0|            }
  338|      1|            prev_name_idx = r->properties[i].name_idx;
  339|      1|        }
  340|      5|        r->num_properties = n;
  341|      5|    }
  342|      5|    return r;
  343|      5|}
property_parse.c:pd_free:
  301|      1|{
  302|      1|    OPENSSL_free(pd);
  ------------------
  |  |  132|      1|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  303|      1|}

ossl_property_has_optional:
   62|      4|{
   63|      4|    return query->has_optional ? 1 : 0;
  ------------------
  |  Branch (63:12): [True: 0, False: 4]
  ------------------
   64|      4|}

ossl_property_string_data_free:
   77|    109|{
   78|    109|    PROPERTY_STRING_DATA *propdata = vpropdata;
   79|       |
   80|    109|    if (propdata == NULL)
  ------------------
  |  Branch (80:9): [True: 0, False: 109]
  ------------------
   81|      0|        return;
   82|       |
   83|    109|    CRYPTO_THREAD_lock_free(propdata->lock);
   84|    109|    property_table_free(&propdata->prop_names);
   85|    109|    property_table_free(&propdata->prop_values);
   86|    109|#ifndef OPENSSL_SMALL_FOOTPRINT
   87|    109|    sk_OPENSSL_CSTRING_free(propdata->prop_namelist);
  ------------------
  |  |  288|    109|#define sk_OPENSSL_CSTRING_free(sk) OPENSSL_sk_free(ossl_check_OPENSSL_CSTRING_sk_type(sk))
  ------------------
   88|    109|    sk_OPENSSL_CSTRING_free(propdata->prop_valuelist);
  ------------------
  |  |  288|    109|#define sk_OPENSSL_CSTRING_free(sk) OPENSSL_sk_free(ossl_check_OPENSSL_CSTRING_sk_type(sk))
  ------------------
   89|    109|    propdata->prop_namelist = propdata->prop_valuelist = NULL;
   90|    109|#endif
   91|    109|    propdata->prop_name_idx = propdata->prop_value_idx = 0;
   92|       |
   93|    109|    OPENSSL_free(propdata);
  ------------------
  |  |  132|    109|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   94|    109|}
ossl_property_string_data_new:
   97|    110|{
   98|    110|    PROPERTY_STRING_DATA *propdata = OPENSSL_zalloc(sizeof(*propdata));
  ------------------
  |  |  109|    110|    CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   99|       |
  100|    110|    if (propdata == NULL)
  ------------------
  |  Branch (100:9): [True: 0, False: 110]
  ------------------
  101|      0|        return NULL;
  102|       |
  103|    110|    propdata->lock = CRYPTO_THREAD_lock_new();
  104|    110|    propdata->prop_names = lh_PROPERTY_STRING_new(&property_hash,
  105|    110|        &property_cmp);
  106|    110|    propdata->prop_values = lh_PROPERTY_STRING_new(&property_hash,
  107|    110|        &property_cmp);
  108|    110|#ifndef OPENSSL_SMALL_FOOTPRINT
  109|    110|    propdata->prop_namelist = sk_OPENSSL_CSTRING_new_null();
  ------------------
  |  |  285|    110|#define sk_OPENSSL_CSTRING_new_null() ((STACK_OF(OPENSSL_CSTRING) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_OPENSSL_CSTRING_freefunc_thunk))
  ------------------
  110|    110|    propdata->prop_valuelist = sk_OPENSSL_CSTRING_new_null();
  ------------------
  |  |  285|    110|#define sk_OPENSSL_CSTRING_new_null() ((STACK_OF(OPENSSL_CSTRING) *)OPENSSL_sk_set_thunks(OPENSSL_sk_new_null(), sk_OPENSSL_CSTRING_freefunc_thunk))
  ------------------
  111|    110|#endif
  112|    110|    if (propdata->lock == NULL
  ------------------
  |  Branch (112:9): [True: 0, False: 110]
  ------------------
  113|    110|#ifndef OPENSSL_SMALL_FOOTPRINT
  114|    110|        || propdata->prop_namelist == NULL
  ------------------
  |  Branch (114:12): [True: 0, False: 110]
  ------------------
  115|    110|        || propdata->prop_valuelist == NULL
  ------------------
  |  Branch (115:12): [True: 0, False: 110]
  ------------------
  116|    110|#endif
  117|    110|        || propdata->prop_names == NULL
  ------------------
  |  Branch (117:12): [True: 0, False: 110]
  ------------------
  118|    110|        || propdata->prop_values == NULL) {
  ------------------
  |  Branch (118:12): [True: 0, False: 110]
  ------------------
  119|      0|        ossl_property_string_data_free(propdata);
  120|      0|        return NULL;
  121|      0|    }
  122|    110|    return propdata;
  123|    110|}
ossl_property_name:
  255|    661|{
  256|    661|    return ossl_property_string(ctx, 1, create, s);
  257|    661|}
ossl_property_value:
  266|    221|{
  267|    221|    return ossl_property_string(ctx, 0, create, s);
  268|    221|}
property_string.c:property_table_free:
   66|    218|{
   67|    218|    PROP_TABLE *t = *pt;
   68|       |
   69|    218|    if (t != NULL) {
  ------------------
  |  Branch (69:9): [True: 218, False: 0]
  ------------------
   70|    218|        lh_PROPERTY_STRING_doall(t, &property_free);
   71|    218|        lh_PROPERTY_STRING_free(t);
   72|       |        *pt = NULL;
   73|    218|    }
   74|    218|}
property_string.c:property_free:
   61|    872|{
   62|    872|    OPENSSL_free(ps);
  ------------------
  |  |  132|    872|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   63|    872|}
property_string.c:property_hash:
   51|  2.64k|{
   52|  2.64k|    return OPENSSL_LH_strhash(a->s);
   53|  2.64k|}
property_string.c:property_cmp:
   56|      1|{
   57|      1|    return strcmp(a->s, b->s);
   58|      1|}
property_string.c:ossl_property_string:
  145|    882|{
  146|    882|    PROPERTY_STRING p, *ps, *ps_new;
  147|    882|    PROP_TABLE *t;
  148|    882|    OSSL_PROPERTY_IDX *pidx;
  149|    882|    PROPERTY_STRING_DATA *propdata
  150|    882|        = ossl_lib_ctx_get_data(ctx, OSSL_LIB_CTX_PROPERTY_STRING_INDEX);
  ------------------
  |  |   98|    882|#define OSSL_LIB_CTX_PROPERTY_STRING_INDEX 3
  ------------------
  151|       |
  152|    882|    if (propdata == NULL)
  ------------------
  |  Branch (152:9): [True: 0, False: 882]
  ------------------
  153|      0|        return 0;
  154|       |
  155|    882|    t = name ? propdata->prop_names : propdata->prop_values;
  ------------------
  |  Branch (155:9): [True: 661, False: 221]
  ------------------
  156|    882|    p.s = s;
  157|    882|    if (!CRYPTO_THREAD_read_lock(propdata->lock)) {
  ------------------
  |  Branch (157:9): [True: 0, False: 882]
  ------------------
  158|      0|        ERR_raise(ERR_LIB_CRYPTO, ERR_R_UNABLE_TO_GET_READ_LOCK);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  159|      0|        return 0;
  160|      0|    }
  161|    882|    ps = lh_PROPERTY_STRING_retrieve(t, &p);
  162|    882|    if (ps == NULL && create) {
  ------------------
  |  Branch (162:9): [True: 881, False: 1]
  |  Branch (162:23): [True: 881, False: 0]
  ------------------
  163|    881|        CRYPTO_THREAD_unlock(propdata->lock);
  164|    881|        if (!CRYPTO_THREAD_write_lock(propdata->lock)) {
  ------------------
  |  Branch (164:13): [True: 0, False: 881]
  ------------------
  165|      0|            ERR_raise(ERR_LIB_CRYPTO, ERR_R_UNABLE_TO_GET_WRITE_LOCK);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  166|      0|            return 0;
  167|      0|        }
  168|    881|        pidx = name ? &propdata->prop_name_idx : &propdata->prop_value_idx;
  ------------------
  |  Branch (168:16): [True: 660, False: 221]
  ------------------
  169|    881|        ps = lh_PROPERTY_STRING_retrieve(t, &p);
  170|    881|        if (ps == NULL && (ps_new = new_property_string(s, pidx)) != NULL) {
  ------------------
  |  Branch (170:13): [True: 881, False: 0]
  |  Branch (170:27): [True: 881, False: 0]
  ------------------
  171|    881|#ifndef OPENSSL_SMALL_FOOTPRINT
  172|    881|            STACK_OF(OPENSSL_CSTRING) *slist;
  ------------------
  |  |   33|    881|#define STACK_OF(type) struct stack_st_##type
  ------------------
  173|       |
  174|    881|            slist = name ? propdata->prop_namelist : propdata->prop_valuelist;
  ------------------
  |  Branch (174:21): [True: 660, False: 221]
  ------------------
  175|    881|            if (sk_OPENSSL_CSTRING_push(slist, ps_new->s) <= 0) {
  ------------------
  |  |  292|    881|#define sk_OPENSSL_CSTRING_push(sk, ptr) OPENSSL_sk_push(ossl_check_OPENSSL_CSTRING_sk_type(sk), ossl_check_OPENSSL_CSTRING_type(ptr))
  ------------------
  |  Branch (175:17): [True: 0, False: 881]
  ------------------
  176|      0|                property_free(ps_new);
  177|      0|                CRYPTO_THREAD_unlock(propdata->lock);
  178|      0|                return 0;
  179|      0|            }
  180|    881|#endif
  181|    881|            lh_PROPERTY_STRING_insert(t, ps_new);
  182|    881|            if (lh_PROPERTY_STRING_error(t)) {
  ------------------
  |  Branch (182:17): [True: 0, False: 881]
  ------------------
  183|       |                /*-
  184|       |                 * Undo the previous push which means also decrementing the
  185|       |                 * index and freeing the allocated storage.
  186|       |                 */
  187|      0|#ifndef OPENSSL_SMALL_FOOTPRINT
  188|      0|                sk_OPENSSL_CSTRING_pop(slist);
  ------------------
  |  |  294|      0|#define sk_OPENSSL_CSTRING_pop(sk) ((const char *)OPENSSL_sk_pop(ossl_check_OPENSSL_CSTRING_sk_type(sk)))
  ------------------
  189|      0|#endif
  190|      0|                property_free(ps_new);
  191|      0|                --*pidx;
  192|      0|                CRYPTO_THREAD_unlock(propdata->lock);
  193|      0|                return 0;
  194|      0|            }
  195|    881|            ps = ps_new;
  196|    881|        }
  197|    881|    }
  198|    882|    CRYPTO_THREAD_unlock(propdata->lock);
  199|    882|    return ps != NULL ? ps->idx : 0;
  ------------------
  |  Branch (199:12): [True: 882, False: 0]
  ------------------
  200|    882|}
property_string.c:new_property_string:
  127|    881|{
  128|    881|    const size_t l = strlen(s);
  129|    881|    PROPERTY_STRING *ps = OPENSSL_malloc(sizeof(*ps) + l);
  ------------------
  |  |  107|    881|    CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  130|       |
  131|    881|    if (ps != NULL) {
  ------------------
  |  Branch (131:9): [True: 881, False: 0]
  ------------------
  132|    881|        memcpy(ps->body, s, l + 1);
  133|    881|        ps->s = ps->body;
  134|    881|        ps->idx = ++*pidx;
  135|    881|        if (ps->idx == 0) {
  ------------------
  |  Branch (135:13): [True: 0, False: 881]
  ------------------
  136|      0|            OPENSSL_free(ps);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  137|      0|            return NULL;
  138|      0|        }
  139|    881|    }
  140|    881|    return ps;
  141|    881|}

OSSL_PROVIDER_try_load_ex:
   20|    112|{
   21|    112|    OSSL_PROVIDER *prov = NULL, *actual;
   22|    112|    int isnew = 0;
   23|       |
   24|       |    /* Find it or create it */
   25|    112|    if ((prov = ossl_provider_find(libctx, name, 0)) == NULL) {
  ------------------
  |  Branch (25:9): [True: 109, False: 3]
  ------------------
   26|    109|        if ((prov = ossl_provider_new(libctx, name, NULL, params, 0)) == NULL)
  ------------------
  |  Branch (26:13): [True: 0, False: 109]
  ------------------
   27|      0|            return NULL;
   28|    109|        isnew = 1;
   29|    109|    }
   30|       |
   31|    112|    if (!ossl_provider_activate(prov, 1, 0)) {
  ------------------
  |  Branch (31:9): [True: 104, False: 8]
  ------------------
   32|    104|        ossl_provider_free(prov);
   33|    104|        return NULL;
   34|    104|    }
   35|       |
   36|      8|    actual = prov;
   37|      8|    if (isnew && !ossl_provider_add_to_store(prov, &actual, retain_fallbacks)) {
  ------------------
  |  Branch (37:9): [True: 5, False: 3]
  |  Branch (37:18): [True: 0, False: 5]
  ------------------
   38|      0|        ossl_provider_deactivate(prov, 1);
   39|      0|        ossl_provider_free(prov);
   40|      0|        return NULL;
   41|      0|    }
   42|      8|    if (actual != prov) {
  ------------------
  |  Branch (42:9): [True: 0, False: 8]
  ------------------
   43|      0|        if (!ossl_provider_activate(actual, 1, 0)) {
  ------------------
  |  Branch (43:13): [True: 0, False: 0]
  ------------------
   44|      0|            ossl_provider_free(actual);
   45|      0|            return NULL;
   46|      0|        }
   47|      0|    }
   48|       |
   49|      8|    return actual;
   50|      8|}
OSSL_PROVIDER_try_load:
   54|    112|{
   55|       |    return OSSL_PROVIDER_try_load_ex(libctx, name, NULL, retain_fallbacks);
   56|    112|}
OSSL_PROVIDER_unload:
   72|      8|{
   73|      8|    if (!ossl_provider_deactivate(prov, 1))
  ------------------
  |  Branch (73:9): [True: 0, False: 8]
  ------------------
   74|      0|        return 0;
   75|      8|    ossl_provider_free(prov);
   76|      8|    return 1;
   77|      8|}

ossl_child_prov_ctx_new:
   38|    110|{
   39|    110|    return OPENSSL_zalloc(sizeof(struct child_prov_globals));
  ------------------
  |  |  109|    110|    CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   40|    110|}
ossl_child_prov_ctx_free:
   43|    109|{
   44|    109|    struct child_prov_globals *gbl = vgbl;
   45|       |
   46|    109|    CRYPTO_THREAD_lock_free(gbl->lock);
   47|    109|    OPENSSL_free(gbl);
  ------------------
  |  |  132|    109|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   48|    109|}

ossl_prov_conf_ctx_new:
   31|    110|{
   32|    110|    PROVIDER_CONF_GLOBAL *pcgbl = OPENSSL_zalloc(sizeof(*pcgbl));
  ------------------
  |  |  109|    110|    CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   33|       |
   34|    110|    if (pcgbl == NULL)
  ------------------
  |  Branch (34:9): [True: 0, False: 110]
  ------------------
   35|      0|        return NULL;
   36|       |
   37|    110|    pcgbl->lock = CRYPTO_THREAD_lock_new();
   38|    110|    if (pcgbl->lock == NULL) {
  ------------------
  |  Branch (38:9): [True: 0, False: 110]
  ------------------
   39|      0|        OPENSSL_free(pcgbl);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   40|      0|        return NULL;
   41|      0|    }
   42|       |
   43|    110|    return pcgbl;
   44|    110|}
ossl_prov_conf_ctx_free:
   47|    109|{
   48|    109|    PROVIDER_CONF_GLOBAL *pcgbl = vpcgbl;
   49|       |
   50|    109|    sk_OSSL_PROVIDER_pop_free(pcgbl->activated_providers,
   51|    109|        ossl_provider_free);
   52|       |
   53|    109|    OSSL_TRACE(CONF, "Cleaned up providers\n");
  ------------------
  |  |  288|    109|    OSSL_TRACEV(category, (trc_out, "%s", text))
  |  |  ------------------
  |  |  |  |  283|    109|#define OSSL_TRACEV(category, args) ((void)0)
  |  |  ------------------
  ------------------
   54|    109|    CRYPTO_THREAD_lock_free(pcgbl->lock);
   55|    109|    OPENSSL_free(pcgbl);
  ------------------
  |  |  132|    109|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   56|    109|}

ossl_provider_store_free:
  288|    109|{
  289|    109|    struct provider_store_st *store = vstore;
  290|    109|    size_t i;
  291|       |
  292|    109|    if (store == NULL)
  ------------------
  |  Branch (292:9): [True: 0, False: 109]
  ------------------
  293|      0|        return;
  294|    109|    store->freeing = 1;
  295|    109|    OPENSSL_free(store->default_path);
  ------------------
  |  |  132|    109|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  296|    109|    sk_OSSL_PROVIDER_pop_free(store->providers, provider_deactivate_free);
  297|    109|#ifndef FIPS_MODULE
  298|    109|    sk_OSSL_PROVIDER_CHILD_CB_pop_free(store->child_cbs,
  299|    109|        ossl_provider_child_cb_free);
  300|    109|#endif
  301|    109|    CRYPTO_THREAD_lock_free(store->default_path_lock);
  302|    109|    CRYPTO_THREAD_lock_free(store->lock);
  303|    109|    for (i = 0; i < store->numprovinfo; i++)
  ------------------
  |  Branch (303:17): [True: 0, False: 109]
  ------------------
  304|      0|        ossl_provider_info_clear(&store->provinfo[i]);
  305|    109|    OPENSSL_free(store->provinfo);
  ------------------
  |  |  132|    109|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  306|    109|    OPENSSL_free(store);
  ------------------
  |  |  132|    109|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  307|    109|}
ossl_provider_store_new:
  310|    110|{
  311|    110|    struct provider_store_st *store = OPENSSL_zalloc(sizeof(*store));
  ------------------
  |  |  109|    110|    CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  312|       |
  313|    110|    if (store == NULL
  ------------------
  |  Branch (313:9): [True: 0, False: 110]
  ------------------
  314|    110|        || (store->providers = sk_OSSL_PROVIDER_new(ossl_provider_cmp)) == NULL
  ------------------
  |  Branch (314:12): [True: 0, False: 110]
  ------------------
  315|    110|        || (store->default_path_lock = CRYPTO_THREAD_lock_new()) == NULL
  ------------------
  |  Branch (315:12): [True: 0, False: 110]
  ------------------
  316|    110|#ifndef FIPS_MODULE
  317|    110|        || (store->child_cbs = sk_OSSL_PROVIDER_CHILD_CB_new_null()) == NULL
  ------------------
  |  Branch (317:12): [True: 0, False: 110]
  ------------------
  318|    110|#endif
  319|    110|        || (store->lock = CRYPTO_THREAD_lock_new()) == NULL) {
  ------------------
  |  Branch (319:12): [True: 0, False: 110]
  ------------------
  320|      0|        ossl_provider_store_free(store);
  321|      0|        return NULL;
  322|      0|    }
  323|    110|    store->libctx = ctx;
  324|    110|    store->use_fallbacks = 1;
  325|       |
  326|    110|    return store;
  327|    110|}
ossl_provider_find:
  401|    223|{
  402|    223|    struct provider_store_st *store = NULL;
  403|    223|    OSSL_PROVIDER *prov = NULL;
  404|       |
  405|    223|    if ((store = get_provider_store(libctx)) != NULL) {
  ------------------
  |  Branch (405:9): [True: 223, False: 0]
  ------------------
  406|    223|        OSSL_PROVIDER tmpl = {
  407|    223|            0,
  408|    223|        };
  409|    223|        int i;
  410|       |
  411|    223|#if !defined(FIPS_MODULE) && !defined(OPENSSL_NO_AUTOLOAD_CONFIG)
  412|       |        /*
  413|       |         * Make sure any providers are loaded from config before we try to find
  414|       |         * them.
  415|       |         */
  416|    223|        if (!noconfig) {
  ------------------
  |  Branch (416:13): [True: 221, False: 2]
  ------------------
  417|    221|            if (ossl_lib_ctx_is_default(libctx))
  ------------------
  |  Branch (417:17): [True: 0, False: 221]
  ------------------
  418|      0|                OPENSSL_init_crypto(OPENSSL_INIT_LOAD_CONFIG, NULL);
  ------------------
  |  |  511|      0|#define OPENSSL_INIT_LOAD_CONFIG 0x00000040L
  ------------------
  419|    221|        }
  420|    223|#endif
  421|       |
  422|    223|        tmpl.name = (char *)name;
  423|    223|        if (!CRYPTO_THREAD_read_lock(store->lock))
  ------------------
  |  Branch (423:13): [True: 0, False: 223]
  ------------------
  424|      0|            return NULL;
  425|    223|        if (!sk_OSSL_PROVIDER_is_sorted(store->providers)) {
  ------------------
  |  Branch (425:13): [True: 3, False: 220]
  ------------------
  426|      3|            CRYPTO_THREAD_unlock(store->lock);
  427|      3|            if (!CRYPTO_THREAD_write_lock(store->lock))
  ------------------
  |  Branch (427:17): [True: 0, False: 3]
  ------------------
  428|      0|                return NULL;
  429|      3|            if (!sk_OSSL_PROVIDER_is_sorted(store->providers))
  ------------------
  |  Branch (429:17): [True: 3, False: 0]
  ------------------
  430|      3|                sk_OSSL_PROVIDER_sort(store->providers);
  431|      3|        }
  432|    223|        if ((i = sk_OSSL_PROVIDER_find(store->providers, &tmpl)) != -1)
  ------------------
  |  Branch (432:13): [True: 6, False: 217]
  ------------------
  433|      6|            prov = sk_OSSL_PROVIDER_value(store->providers, i);
  434|    223|        CRYPTO_THREAD_unlock(store->lock);
  435|    223|        if (prov != NULL && !ossl_provider_up_ref(prov))
  ------------------
  |  Branch (435:13): [True: 6, False: 217]
  |  Branch (435:29): [True: 0, False: 6]
  ------------------
  436|      0|            prov = NULL;
  437|    223|    }
  438|       |
  439|    223|    return prov;
  440|    223|}
ossl_provider_up_ref:
  486|    146|{
  487|    146|    int ref = 0;
  488|       |
  489|    146|    if (CRYPTO_UP_REF(&prov->refcnt, &ref) <= 0)
  ------------------
  |  Branch (489:9): [True: 0, False: 146]
  ------------------
  490|      0|        return 0;
  491|       |
  492|    146|#ifndef FIPS_MODULE
  493|    146|    if (prov->ischild) {
  ------------------
  |  Branch (493:9): [True: 0, False: 146]
  ------------------
  494|      0|        if (!ossl_provider_up_ref_parent(prov, 0)) {
  ------------------
  |  Branch (494:13): [True: 0, False: 0]
  ------------------
  495|      0|            ossl_provider_free(prov);
  496|      0|            return 0;
  497|      0|        }
  498|      0|    }
  499|    146|#endif
  500|       |
  501|    146|    return ref;
  502|    146|}
ossl_provider_new:
  531|    109|{
  532|    109|    struct provider_store_st *store = NULL;
  533|    109|    OSSL_PROVIDER_INFO template;
  534|    109|    OSSL_PROVIDER *prov = NULL;
  535|       |
  536|    109|    if ((store = get_provider_store(libctx)) == NULL)
  ------------------
  |  Branch (536:9): [True: 0, False: 109]
  ------------------
  537|      0|        return NULL;
  538|       |
  539|    109|    memset(&template, 0, sizeof(template));
  540|    109|    if (init_function == NULL) {
  ------------------
  |  Branch (540:9): [True: 109, False: 0]
  ------------------
  541|    109|        const OSSL_PROVIDER_INFO *p;
  542|    109|        size_t i;
  543|    109|        int chosen = 0;
  544|       |
  545|       |        /* Check if this is a predefined builtin provider */
  546|    427|        for (p = ossl_predefined_providers; p->name != NULL; p++) {
  ------------------
  |  Branch (546:45): [True: 323, False: 104]
  ------------------
  547|    323|            if (strcmp(p->name, name) != 0)
  ------------------
  |  Branch (547:17): [True: 318, False: 5]
  ------------------
  548|    318|                continue;
  549|       |            /* These compile-time templates always have NULL parameters */
  550|      5|            template = *p;
  551|      5|            chosen = 1;
  552|      5|            break;
  553|    323|        }
  554|    109|        if (!CRYPTO_THREAD_read_lock(store->lock))
  ------------------
  |  Branch (554:13): [True: 0, False: 109]
  ------------------
  555|      0|            return NULL;
  556|    109|        for (i = 0, p = store->provinfo; i < store->numprovinfo; p++, i++) {
  ------------------
  |  Branch (556:42): [True: 0, False: 109]
  ------------------
  557|      0|            if (strcmp(p->name, name) != 0)
  ------------------
  |  Branch (557:17): [True: 0, False: 0]
  ------------------
  558|      0|                continue;
  559|       |            /* For built-in providers, copy just implicit parameters. */
  560|      0|            if (!chosen)
  ------------------
  |  Branch (560:17): [True: 0, False: 0]
  ------------------
  561|      0|                template = *p;
  562|       |            /*
  563|       |             * Explicit parameters override config-file defaults.  If an empty
  564|       |             * parameter set is desired, a non-NULL empty set must be provided.
  565|       |             */
  566|      0|            if (params != NULL || p->parameters == NULL) {
  ------------------
  |  Branch (566:17): [True: 0, False: 0]
  |  Branch (566:35): [True: 0, False: 0]
  ------------------
  567|      0|                template.parameters = NULL;
  568|      0|                break;
  569|      0|            }
  570|       |            /* Always copy to avoid sharing/mutation. */
  571|      0|            template.parameters = sk_INFOPAIR_deep_copy(p->parameters,
  572|      0|                infopair_copy,
  573|      0|                infopair_free);
  574|      0|            if (template.parameters == NULL) {
  ------------------
  |  Branch (574:17): [True: 0, False: 0]
  ------------------
  575|      0|                CRYPTO_THREAD_unlock(store->lock);
  576|      0|                return NULL;
  577|      0|            }
  578|      0|            break;
  579|      0|        }
  580|    109|        CRYPTO_THREAD_unlock(store->lock);
  581|    109|    } else {
  582|      0|        template.init = init_function;
  583|      0|    }
  584|       |
  585|    109|    if (params != NULL) {
  ------------------
  |  Branch (585:9): [True: 0, False: 109]
  ------------------
  586|      0|        int i;
  587|       |
  588|       |        /* Don't leak if already non-NULL */
  589|      0|        if (template.parameters == NULL)
  ------------------
  |  Branch (589:13): [True: 0, False: 0]
  ------------------
  590|      0|            template.parameters = sk_INFOPAIR_new_null();
  591|      0|        if (template.parameters == NULL)
  ------------------
  |  Branch (591:13): [True: 0, False: 0]
  ------------------
  592|      0|            return NULL;
  593|       |
  594|      0|        for (i = 0; params[i].key != NULL; i++) {
  ------------------
  |  Branch (594:21): [True: 0, False: 0]
  ------------------
  595|      0|            if (params[i].data_type != OSSL_PARAM_UTF8_STRING)
  ------------------
  |  |  117|      0|#define OSSL_PARAM_UTF8_STRING 4
  ------------------
  |  Branch (595:17): [True: 0, False: 0]
  ------------------
  596|      0|                continue;
  597|      0|            if (ossl_provider_info_add_parameter(&template, params[i].key,
  ------------------
  |  Branch (597:17): [True: 0, False: 0]
  ------------------
  598|      0|                    (char *)params[i].data)
  599|      0|                <= 0) {
  600|      0|                sk_INFOPAIR_pop_free(template.parameters, infopair_free);
  601|      0|                return NULL;
  602|      0|            }
  603|      0|        }
  604|      0|    }
  605|       |
  606|       |    /* provider_new() generates an error, so no need here */
  607|    109|    prov = provider_new(name, template.init, template.parameters);
  608|       |
  609|       |    /* If we copied the parameters, free them */
  610|    109|    if (template.parameters != NULL)
  ------------------
  |  Branch (610:9): [True: 0, False: 109]
  ------------------
  611|      0|        sk_INFOPAIR_pop_free(template.parameters, infopair_free);
  612|       |
  613|    109|    if (prov == NULL)
  ------------------
  |  Branch (613:9): [True: 0, False: 109]
  ------------------
  614|      0|        return NULL;
  615|       |
  616|    109|    if (!ossl_provider_set_module_path(prov, template.path)) {
  ------------------
  |  Branch (616:9): [True: 0, False: 109]
  ------------------
  617|      0|        ossl_provider_free(prov);
  618|      0|        return NULL;
  619|      0|    }
  620|       |
  621|    109|    prov->libctx = libctx;
  622|    109|#ifndef FIPS_MODULE
  623|    109|    prov->error_lib = ERR_get_next_error_library();
  624|    109|#endif
  625|       |
  626|       |    /*
  627|       |     * At this point, the provider is only partially "loaded".  To be
  628|       |     * fully "loaded", ossl_provider_activate() must also be called and it must
  629|       |     * then be added to the provider store.
  630|       |     */
  631|       |
  632|    109|    return prov;
  633|    109|}
ossl_provider_add_to_store:
  660|      5|{
  661|      5|    struct provider_store_st *store;
  662|      5|    int idx;
  663|      5|    OSSL_PROVIDER tmpl = {
  664|      5|        0,
  665|      5|    };
  666|      5|    OSSL_PROVIDER *actualtmp = NULL;
  667|       |
  668|      5|    if (actualprov != NULL)
  ------------------
  |  Branch (668:9): [True: 5, False: 0]
  ------------------
  669|      5|        *actualprov = NULL;
  670|       |
  671|      5|    if ((store = get_provider_store(prov->libctx)) == NULL)
  ------------------
  |  Branch (671:9): [True: 0, False: 5]
  ------------------
  672|      0|        return 0;
  673|       |
  674|      5|    if (!CRYPTO_THREAD_write_lock(store->lock))
  ------------------
  |  Branch (674:9): [True: 0, False: 5]
  ------------------
  675|      0|        return 0;
  676|       |
  677|      5|    tmpl.name = (char *)prov->name;
  678|      5|    idx = sk_OSSL_PROVIDER_find(store->providers, &tmpl);
  679|      5|    if (idx == -1)
  ------------------
  |  Branch (679:9): [True: 5, False: 0]
  ------------------
  680|      5|        actualtmp = prov;
  681|      0|    else
  682|      0|        actualtmp = sk_OSSL_PROVIDER_value(store->providers, idx);
  683|       |
  684|      5|    if (idx == -1) {
  ------------------
  |  Branch (684:9): [True: 5, False: 0]
  ------------------
  685|      5|        if (sk_OSSL_PROVIDER_push(store->providers, prov) == 0)
  ------------------
  |  Branch (685:13): [True: 0, False: 5]
  ------------------
  686|      0|            goto err;
  687|      5|        prov->store = store;
  688|      5|        if (!create_provider_children(prov)) {
  ------------------
  |  Branch (688:13): [True: 0, False: 5]
  ------------------
  689|      0|            sk_OSSL_PROVIDER_delete_ptr(store->providers, prov);
  690|      0|            goto err;
  691|      0|        }
  692|      5|        if (!retain_fallbacks)
  ------------------
  |  Branch (692:13): [True: 0, False: 5]
  ------------------
  693|      0|            store->use_fallbacks = 0;
  694|      5|    }
  695|       |
  696|      5|    CRYPTO_THREAD_unlock(store->lock);
  697|       |
  698|      5|    if (actualprov != NULL) {
  ------------------
  |  Branch (698:9): [True: 5, False: 0]
  ------------------
  699|      5|        if (!ossl_provider_up_ref(actualtmp)) {
  ------------------
  |  Branch (699:13): [True: 0, False: 5]
  ------------------
  700|      0|            ERR_raise(ERR_LIB_CRYPTO, ERR_R_CRYPTO_LIB);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  701|      0|            actualtmp = NULL;
  702|      0|            return 0;
  703|      0|        }
  704|      5|        *actualprov = actualtmp;
  705|      5|    }
  706|       |
  707|      5|    if (idx >= 0) {
  ------------------
  |  Branch (707:9): [True: 0, False: 5]
  ------------------
  708|       |        /*
  709|       |         * The provider is already in the store. Probably two threads
  710|       |         * independently initialised their own provider objects with the same
  711|       |         * name and raced to put them in the store. This thread lost. We
  712|       |         * deactivate the one we just created and use the one that already
  713|       |         * exists instead.
  714|       |         * If we get here then we know we did not create provider children
  715|       |         * above, so we inform ossl_provider_deactivate not to attempt to remove
  716|       |         * any.
  717|       |         */
  718|      0|        ossl_provider_deactivate(prov, 0);
  719|      0|        ossl_provider_free(prov);
  720|      0|    }
  721|      5|#ifndef FIPS_MODULE
  722|      5|    else {
  723|       |        /*
  724|       |         * This can be done outside the lock. We tolerate other threads getting
  725|       |         * the wrong result briefly when creating OSSL_DECODER_CTXs.
  726|       |         */
  727|      5|        ossl_decoder_cache_flush(prov->libctx);
  728|      5|    }
  729|      5|#endif
  730|       |
  731|      5|    return 1;
  732|       |
  733|      0|err:
  734|      0|    CRYPTO_THREAD_unlock(store->lock);
  735|      0|    return 0;
  736|      5|}
ossl_provider_free:
  739|    229|{
  740|    229|    if (prov != NULL) {
  ------------------
  |  Branch (740:9): [True: 229, False: 0]
  ------------------
  741|    229|        int ref = 0;
  742|       |
  743|    229|        CRYPTO_DOWN_REF(&prov->refcnt, &ref);
  744|       |
  745|       |        /*
  746|       |         * When the refcount drops to zero, we clean up the provider.
  747|       |         * Note that this also does teardown, which may seem late,
  748|       |         * considering that init happens on first activation.  However,
  749|       |         * there may be other structures hanging on to the provider after
  750|       |         * the last deactivation and may therefore need full access to the
  751|       |         * provider's services.  Therefore, we deinit late.
  752|       |         */
  753|    229|        if (ref == 0) {
  ------------------
  |  Branch (753:13): [True: 218, False: 11]
  ------------------
  754|    218|            if (prov->flag_initialized) {
  ------------------
  |  Branch (754:17): [True: 114, False: 104]
  ------------------
  755|    114|                ossl_provider_teardown(prov);
  756|    114|#ifndef OPENSSL_NO_ERR
  757|    114|#ifndef FIPS_MODULE
  758|    114|                if (prov->error_strings != NULL) {
  ------------------
  |  Branch (758:21): [True: 0, False: 114]
  ------------------
  759|      0|                    ERR_unload_strings(prov->error_lib, prov->error_strings);
  760|      0|                    OPENSSL_free(prov->error_strings);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  761|      0|                    prov->error_strings = NULL;
  762|      0|                }
  763|    114|#endif
  764|    114|#endif
  765|    114|                OPENSSL_free(prov->operation_bits);
  ------------------
  |  |  132|    114|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  766|    114|                prov->operation_bits = NULL;
  767|    114|                prov->operation_bits_sz = 0;
  768|    114|                prov->flag_initialized = 0;
  769|    114|            }
  770|       |
  771|    218|#ifndef FIPS_MODULE
  772|       |            /*
  773|       |             * We deregister thread handling whether or not the provider was
  774|       |             * initialized. If init was attempted but was not successful then
  775|       |             * the provider may still have registered a thread handler.
  776|       |             */
  777|    218|            ossl_init_thread_deregister(prov);
  778|    218|            DSO_free(prov->module);
  779|    218|#endif
  780|    218|            OPENSSL_free(prov->name);
  ------------------
  |  |  132|    218|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  781|    218|            OPENSSL_free(prov->path);
  ------------------
  |  |  132|    218|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  782|    218|            sk_INFOPAIR_pop_free(prov->parameters, infopair_free);
  783|    218|            CRYPTO_THREAD_lock_free(prov->opbits_lock);
  784|    218|            CRYPTO_THREAD_lock_free(prov->flag_lock);
  785|    218|            CRYPTO_THREAD_lock_free(prov->activatecnt_lock);
  786|    218|            CRYPTO_FREE_REF(&prov->refcnt);
  787|    218|            OPENSSL_free(prov);
  ------------------
  |  |  132|    218|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  788|    218|        }
  789|     11|#ifndef FIPS_MODULE
  790|     11|        else if (prov->ischild) {
  ------------------
  |  Branch (790:18): [True: 0, False: 11]
  ------------------
  791|      0|            ossl_provider_free_parent(prov, 0);
  792|      0|        }
  793|    229|#endif
  794|    229|    }
  795|    229|}
ossl_provider_set_module_path:
  799|    109|{
  800|    109|    OPENSSL_free(prov->path);
  ------------------
  |  |  132|    109|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  801|    109|    prov->path = NULL;
  802|    109|    if (module_path == NULL)
  ------------------
  |  Branch (802:9): [True: 109, False: 0]
  ------------------
  803|    109|        return 1;
  804|      0|    if ((prov->path = OPENSSL_strdup(module_path)) != NULL)
  ------------------
  |  |  136|      0|    CRYPTO_strdup(str, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_strdup(str, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  |  Branch (804:9): [True: 0, False: 0]
  ------------------
  805|      0|        return 1;
  806|      0|    return 0;
  807|      0|}
ossl_provider_activate:
 1402|    112|{
 1403|    112|    int count;
 1404|       |
 1405|    112|    if (prov == NULL)
  ------------------
  |  Branch (1405:9): [True: 0, False: 112]
  ------------------
 1406|      0|        return 0;
 1407|    112|#ifndef FIPS_MODULE
 1408|       |    /*
 1409|       |     * If aschild is true, then we only actually do the activation if the
 1410|       |     * provider is a child. If its not, this is still success.
 1411|       |     */
 1412|    112|    if (aschild && !prov->ischild)
  ------------------
  |  Branch (1412:9): [True: 0, False: 112]
  |  Branch (1412:20): [True: 0, False: 0]
  ------------------
 1413|      0|        return 1;
 1414|    112|#endif
 1415|    112|    if ((count = provider_activate(prov, 1, upcalls)) > 0)
  ------------------
  |  Branch (1415:9): [True: 8, False: 104]
  ------------------
 1416|      8|        return count == 1 ? provider_flush_store_cache(prov) : 1;
  ------------------
  |  Branch (1416:16): [True: 5, False: 3]
  ------------------
 1417|       |
 1418|    104|    return 0;
 1419|    112|}
ossl_provider_deactivate:
 1422|    117|{
 1423|    117|    int count;
 1424|       |
 1425|    117|    if (prov == NULL
  ------------------
  |  Branch (1425:9): [True: 0, False: 117]
  ------------------
 1426|    117|        || (count = provider_deactivate(prov, 1, removechildren)) < 0)
  ------------------
  |  Branch (1426:12): [True: 0, False: 117]
  ------------------
 1427|      0|        return 0;
 1428|    117|    return count == 0 ? provider_remove_store_methods(prov) : 1;
  ------------------
  |  Branch (1428:12): [True: 114, False: 3]
  ------------------
 1429|    117|}
ossl_provider_ctx:
 1432|    141|{
 1433|    141|    return prov != NULL ? prov->provctx : NULL;
  ------------------
  |  Branch (1433:12): [True: 141, False: 0]
  ------------------
 1434|    141|}
ossl_provider_doall_activated:
 1533|      2|{
 1534|      2|    int ret = 0, curr, max, ref = 0;
 1535|      2|    struct provider_store_st *store = get_provider_store(ctx);
 1536|      2|    STACK_OF(OSSL_PROVIDER) *provs = NULL;
  ------------------
  |  |   33|      2|#define STACK_OF(type) struct stack_st_##type
  ------------------
 1537|       |
 1538|      2|#if !defined(FIPS_MODULE) && !defined(OPENSSL_NO_AUTOLOAD_CONFIG)
 1539|       |    /*
 1540|       |     * Make sure any providers are loaded from config before we try to use
 1541|       |     * them.
 1542|       |     */
 1543|      2|    if (ossl_lib_ctx_is_default(ctx))
  ------------------
  |  Branch (1543:9): [True: 2, False: 0]
  ------------------
 1544|      2|        OPENSSL_init_crypto(OPENSSL_INIT_LOAD_CONFIG, NULL);
  ------------------
  |  |  511|      2|#define OPENSSL_INIT_LOAD_CONFIG 0x00000040L
  ------------------
 1545|      2|#endif
 1546|       |
 1547|      2|    if (store == NULL)
  ------------------
  |  Branch (1547:9): [True: 0, False: 2]
  ------------------
 1548|      0|        return 1;
 1549|      2|    if (!provider_activate_fallbacks(store))
  ------------------
  |  Branch (1549:9): [True: 0, False: 2]
  ------------------
 1550|      0|        return 0;
 1551|       |
 1552|       |    /*
 1553|       |     * Under lock, grab a copy of the provider list and up_ref each
 1554|       |     * provider so that they don't disappear underneath us.
 1555|       |     */
 1556|      2|    if (!CRYPTO_THREAD_read_lock(store->lock))
  ------------------
  |  Branch (1556:9): [True: 0, False: 2]
  ------------------
 1557|      0|        return 0;
 1558|      2|    provs = sk_OSSL_PROVIDER_dup(store->providers);
 1559|      2|    if (provs == NULL) {
  ------------------
  |  Branch (1559:9): [True: 0, False: 2]
  ------------------
 1560|      0|        CRYPTO_THREAD_unlock(store->lock);
 1561|      0|        return 0;
 1562|      0|    }
 1563|      2|    max = sk_OSSL_PROVIDER_num(provs);
 1564|       |    /*
 1565|       |     * We work backwards through the stack so that we can safely delete items
 1566|       |     * as we go.
 1567|       |     */
 1568|      4|    for (curr = max - 1; curr >= 0; curr--) {
  ------------------
  |  Branch (1568:26): [True: 2, False: 2]
  ------------------
 1569|      2|        OSSL_PROVIDER *prov = sk_OSSL_PROVIDER_value(provs, curr);
 1570|       |
 1571|      2|        if (!CRYPTO_THREAD_read_lock(prov->flag_lock))
  ------------------
  |  Branch (1571:13): [True: 0, False: 2]
  ------------------
 1572|      0|            goto err_unlock;
 1573|      2|        if (prov->flag_activated) {
  ------------------
  |  Branch (1573:13): [True: 2, False: 0]
  ------------------
 1574|       |            /*
 1575|       |             * We call CRYPTO_UP_REF directly rather than ossl_provider_up_ref
 1576|       |             * to avoid upping the ref count on the parent provider, which we
 1577|       |             * must not do while holding locks.
 1578|       |             */
 1579|      2|            if (CRYPTO_UP_REF(&prov->refcnt, &ref) <= 0) {
  ------------------
  |  Branch (1579:17): [True: 0, False: 2]
  ------------------
 1580|      0|                CRYPTO_THREAD_unlock(prov->flag_lock);
 1581|      0|                goto err_unlock;
 1582|      0|            }
 1583|       |            /*
 1584|       |             * It's already activated, but we up the activated count to ensure
 1585|       |             * it remains activated until after we've called the user callback.
 1586|       |             * In theory this could mean the parent provider goes inactive,
 1587|       |             * whilst still activated in the child for a short period. That's ok.
 1588|       |             */
 1589|      2|            if (!CRYPTO_atomic_add(&prov->activatecnt, 1, &ref,
  ------------------
  |  Branch (1589:17): [True: 0, False: 2]
  ------------------
 1590|      2|                    prov->activatecnt_lock)) {
 1591|      0|                CRYPTO_DOWN_REF(&prov->refcnt, &ref);
 1592|      0|                CRYPTO_THREAD_unlock(prov->flag_lock);
 1593|      0|                goto err_unlock;
 1594|      0|            }
 1595|      2|        } else {
 1596|      0|            sk_OSSL_PROVIDER_delete(provs, curr);
 1597|      0|            max--;
 1598|      0|        }
 1599|      2|        CRYPTO_THREAD_unlock(prov->flag_lock);
 1600|      2|    }
 1601|      2|    CRYPTO_THREAD_unlock(store->lock);
 1602|       |
 1603|       |    /*
 1604|       |     * Now, we sweep through all providers not under lock
 1605|       |     */
 1606|      4|    for (curr = 0; curr < max; curr++) {
  ------------------
  |  Branch (1606:20): [True: 2, False: 2]
  ------------------
 1607|      2|        OSSL_PROVIDER *prov = sk_OSSL_PROVIDER_value(provs, curr);
 1608|       |
 1609|      2|        if (!cb(prov, cbdata)) {
  ------------------
  |  Branch (1609:13): [True: 0, False: 2]
  ------------------
 1610|      0|            curr = -1;
 1611|      0|            goto finish;
 1612|      0|        }
 1613|      2|    }
 1614|      2|    curr = -1;
 1615|       |
 1616|      2|    ret = 1;
 1617|      2|    goto finish;
 1618|       |
 1619|      0|err_unlock:
 1620|      0|    CRYPTO_THREAD_unlock(store->lock);
 1621|      2|finish:
 1622|       |    /*
 1623|       |     * The pop_free call doesn't do what we want on an error condition. We
 1624|       |     * either start from the first item in the stack, or part way through if
 1625|       |     * we only processed some of the items.
 1626|       |     */
 1627|      4|    for (curr++; curr < max; curr++) {
  ------------------
  |  Branch (1627:18): [True: 2, False: 2]
  ------------------
 1628|      2|        OSSL_PROVIDER *prov = sk_OSSL_PROVIDER_value(provs, curr);
 1629|       |
 1630|      2|        if (!CRYPTO_atomic_add(&prov->activatecnt, -1, &ref,
  ------------------
  |  Branch (1630:13): [True: 0, False: 2]
  ------------------
 1631|      2|                prov->activatecnt_lock)) {
 1632|      0|            ret = 0;
 1633|      0|            continue;
 1634|      0|        }
 1635|      2|        if (ref < 1) {
  ------------------
  |  Branch (1635:13): [True: 0, False: 2]
  ------------------
 1636|       |            /*
 1637|       |             * Looks like we need to deactivate properly. We could just have
 1638|       |             * done this originally, but it involves taking a write lock so
 1639|       |             * we avoid it. We up the count again and do a full deactivation
 1640|       |             */
 1641|      0|            if (CRYPTO_atomic_add(&prov->activatecnt, 1, &ref,
  ------------------
  |  Branch (1641:17): [True: 0, False: 0]
  ------------------
 1642|      0|                    prov->activatecnt_lock))
 1643|      0|                provider_deactivate(prov, 0, 1);
 1644|      0|            else
 1645|      0|                ret = 0;
 1646|      0|        }
 1647|       |        /*
 1648|       |         * As above where we did the up-ref, we don't call ossl_provider_free
 1649|       |         * to avoid making upcalls. There should always be at least one ref
 1650|       |         * to the provider in the store, so this should never drop to 0.
 1651|       |         */
 1652|      2|        if (!CRYPTO_DOWN_REF(&prov->refcnt, &ref)) {
  ------------------
  |  Branch (1652:13): [True: 0, False: 2]
  ------------------
 1653|      0|            ret = 0;
 1654|      0|            continue;
 1655|      0|        }
 1656|       |        /*
 1657|       |         * Not much we can do if this assert ever fails. So we don't use
 1658|       |         * ossl_assert here.
 1659|       |         */
 1660|      2|        assert(ref > 0);
  ------------------
  |  Branch (1660:9): [True: 0, False: 2]
  |  Branch (1660:9): [True: 2, False: 0]
  ------------------
 1661|      2|    }
 1662|      2|    sk_OSSL_PROVIDER_free(provs);
 1663|      2|    return ret;
 1664|      2|}
OSSL_PROVIDER_available:
 1667|    109|{
 1668|    109|    OSSL_PROVIDER *prov = NULL;
 1669|    109|    int available = 0;
 1670|    109|    struct provider_store_st *store = get_provider_store(libctx);
 1671|       |
 1672|    109|    if (store == NULL || !provider_activate_fallbacks(store))
  ------------------
  |  Branch (1672:9): [True: 0, False: 109]
  |  Branch (1672:26): [True: 0, False: 109]
  ------------------
 1673|      0|        return 0;
 1674|       |
 1675|    109|    prov = ossl_provider_find(libctx, name, 0);
 1676|    109|    if (prov != NULL) {
  ------------------
  |  Branch (1676:9): [True: 1, False: 108]
  ------------------
 1677|      1|        if (!CRYPTO_THREAD_read_lock(prov->flag_lock))
  ------------------
  |  Branch (1677:13): [True: 0, False: 1]
  ------------------
 1678|      0|            return 0;
 1679|      1|        available = prov->flag_activated;
 1680|      1|        CRYPTO_THREAD_unlock(prov->flag_lock);
 1681|      1|        ossl_provider_free(prov);
 1682|      1|    }
 1683|    109|    return available;
 1684|    109|}
ossl_provider_name:
 1688|      2|{
 1689|      2|    return prov->name;
 1690|      2|}
ossl_provider_libctx:
 1725|    291|{
 1726|    291|    return prov != NULL ? prov->libctx : NULL;
  ------------------
  |  Branch (1726:12): [True: 291, False: 0]
  ------------------
 1727|    291|}
ossl_provider_teardown:
 1742|    114|{
 1743|    114|    if (prov->teardown != NULL
  ------------------
  |  Branch (1743:9): [True: 113, False: 1]
  ------------------
 1744|    113|#ifndef FIPS_MODULE
 1745|    113|        && !prov->ischild
  ------------------
  |  Branch (1745:12): [True: 113, False: 0]
  ------------------
 1746|    114|#endif
 1747|    114|    ) {
 1748|    113|#ifndef FIPS_MODULE
 1749|    113|        OSSL_TRACE_BEGIN(PROVIDER)
  ------------------
  |  |  219|    113|    do {                           \
  |  |  220|    113|        BIO *trc_out = NULL;       \
  |  |  221|    113|        if (0)
  |  |  ------------------
  |  |  |  Branch (221:13): [Folded, False: 113]
  |  |  ------------------
  ------------------
 1750|      0|        {
 1751|      0|            BIO_printf(trc_out, "(provider %s) calling teardown\n",
 1752|      0|                ossl_provider_name(prov));
 1753|      0|        }
 1754|    113|        OSSL_TRACE_END(PROVIDER);
  ------------------
  |  |  224|    113|    }                            \
  |  |  225|    113|    while (0)
  |  |  ------------------
  |  |  |  Branch (225:12): [Folded, False: 113]
  |  |  ------------------
  ------------------
 1755|    113|#endif
 1756|    113|        prov->teardown(prov->provctx);
 1757|    113|    }
 1758|    114|}
ossl_provider_query_operation:
 1952|      4|{
 1953|      4|    const OSSL_ALGORITHM *res;
 1954|       |
 1955|      4|    if (prov->query_operation == NULL) {
  ------------------
  |  Branch (1955:9): [True: 0, False: 4]
  ------------------
 1956|      0|#ifndef FIPS_MODULE
 1957|      0|        OSSL_TRACE_BEGIN(PROVIDER)
  ------------------
  |  |  219|      0|    do {                           \
  |  |  220|      0|        BIO *trc_out = NULL;       \
  |  |  221|      0|        if (0)
  |  |  ------------------
  |  |  |  Branch (221:13): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1958|      0|        {
 1959|      0|            BIO_printf(trc_out, "provider %s lacks query operation!\n",
 1960|      0|                prov->name);
 1961|      0|        }
 1962|      0|        OSSL_TRACE_END(PROVIDER);
  ------------------
  |  |  224|      0|    }                            \
  |  |  225|      0|    while (0)
  |  |  ------------------
  |  |  |  Branch (225:12): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1963|      0|#endif
 1964|      0|        return NULL;
 1965|      0|    }
 1966|       |
 1967|      4|    res = prov->query_operation(prov->provctx, operation_id, no_cache);
 1968|      4|#ifndef FIPS_MODULE
 1969|      4|    OSSL_TRACE_BEGIN(PROVIDER)
  ------------------
  |  |  219|      4|    do {                           \
  |  |  220|      4|        BIO *trc_out = NULL;       \
  |  |  221|      4|        if (0)
  |  |  ------------------
  |  |  |  Branch (221:13): [Folded, False: 4]
  |  |  ------------------
  ------------------
 1970|      0|    {
 1971|      0|        const OSSL_ALGORITHM *idx;
 1972|      0|        if (res != NULL) {
  ------------------
  |  Branch (1972:13): [True: 0, False: 0]
  ------------------
 1973|      0|            BIO_printf(trc_out,
 1974|      0|                "(provider %s) Calling query, available algs are:\n", prov->name);
 1975|       |
 1976|      0|            for (idx = res; idx->algorithm_names != NULL; idx++) {
  ------------------
  |  Branch (1976:29): [True: 0, False: 0]
  ------------------
 1977|      0|                BIO_printf(trc_out,
 1978|      0|                    "(provider %s) names %s, prop_def %s, desc %s\n",
 1979|      0|                    prov->name,
 1980|      0|                    idx->algorithm_names == NULL ? "none" : idx->algorithm_names,
  ------------------
  |  Branch (1980:21): [True: 0, False: 0]
  ------------------
 1981|      0|                    idx->property_definition == NULL ? "none" : idx->property_definition,
  ------------------
  |  Branch (1981:21): [True: 0, False: 0]
  ------------------
 1982|      0|                    idx->algorithm_description == NULL ? "none" : idx->algorithm_description);
  ------------------
  |  Branch (1982:21): [True: 0, False: 0]
  ------------------
 1983|      0|            }
 1984|      0|        } else {
 1985|      0|            BIO_printf(trc_out, "(provider %s) query_operation failed\n", prov->name);
 1986|      0|        }
 1987|      0|    }
 1988|      4|    OSSL_TRACE_END(PROVIDER);
  ------------------
  |  |  224|      4|    }                            \
  |  |  225|      4|    while (0)
  |  |  ------------------
  |  |  |  Branch (225:12): [Folded, False: 4]
  |  |  ------------------
  ------------------
 1989|      4|#endif
 1990|       |
 1991|       |#if defined(OPENSSL_NO_CACHED_FETCH)
 1992|       |    /* Forcing the non-caching of queries */
 1993|       |    if (no_cache != NULL)
 1994|       |        *no_cache = 1;
 1995|       |#endif
 1996|      4|    return res;
 1997|      4|}
ossl_provider_unquery_operation:
 2016|      4|{
 2017|      4|    if (prov->unquery_operation != NULL) {
  ------------------
  |  Branch (2017:9): [True: 0, False: 4]
  ------------------
 2018|      0|#ifndef FIPS_MODULE
 2019|      0|        OSSL_TRACE_BEGIN(PROVIDER)
  ------------------
  |  |  219|      0|    do {                           \
  |  |  220|      0|        BIO *trc_out = NULL;       \
  |  |  221|      0|        if (0)
  |  |  ------------------
  |  |  |  Branch (221:13): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2020|      0|        {
 2021|      0|            BIO_printf(trc_out,
 2022|      0|                "(provider %s) Calling unquery"
 2023|      0|                " with operation %d\n",
 2024|      0|                prov->name,
 2025|      0|                operation_id);
 2026|      0|        }
 2027|      0|        OSSL_TRACE_END(PROVIDER);
  ------------------
  |  |  224|      0|    }                            \
  |  |  225|      0|    while (0)
  |  |  ------------------
  |  |  |  Branch (225:12): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2028|      0|#endif
 2029|      0|        prov->unquery_operation(prov->provctx, operation_id, algs);
 2030|      0|    }
 2031|      4|}
ossl_provider_set_operation_bit:
 2034|      2|{
 2035|      2|    size_t byte = bitnum / 8;
 2036|      2|    unsigned char bit = (1 << (bitnum % 8)) & 0xFF;
 2037|       |
 2038|      2|    if (!CRYPTO_THREAD_write_lock(provider->opbits_lock))
  ------------------
  |  Branch (2038:9): [True: 0, False: 2]
  ------------------
 2039|      0|        return 0;
 2040|      2|    if (provider->operation_bits_sz <= byte) {
  ------------------
  |  Branch (2040:9): [True: 1, False: 1]
  ------------------
 2041|      1|        unsigned char *tmp = OPENSSL_realloc(provider->operation_bits,
  ------------------
  |  |  121|      1|    CRYPTO_realloc(addr, num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_realloc(addr, num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 2042|      1|            byte + 1);
 2043|       |
 2044|      1|        if (tmp == NULL) {
  ------------------
  |  Branch (2044:13): [True: 0, False: 1]
  ------------------
 2045|      0|            CRYPTO_THREAD_unlock(provider->opbits_lock);
 2046|      0|            return 0;
 2047|      0|        }
 2048|      1|        provider->operation_bits = tmp;
 2049|      1|        memset(provider->operation_bits + provider->operation_bits_sz,
 2050|      1|            '\0', byte + 1 - provider->operation_bits_sz);
 2051|      1|        provider->operation_bits_sz = byte + 1;
 2052|      1|    }
 2053|      2|    provider->operation_bits[byte] |= bit;
 2054|      2|    CRYPTO_THREAD_unlock(provider->opbits_lock);
 2055|      2|    return 1;
 2056|      2|}
ossl_provider_test_operation_bit:
 2060|      4|{
 2061|      4|    size_t byte = bitnum / 8;
 2062|      4|    unsigned char bit = (1 << (bitnum % 8)) & 0xFF;
 2063|       |
 2064|      4|    if (!ossl_assert(result != NULL)) {
  ------------------
  |  |   52|      4|#define ossl_assert(x) ossl_assert_int((x) != 0, "Assertion failed: " #x, \
  |  |   53|      4|    __FILE__, __LINE__)
  ------------------
  |  Branch (2064:9): [True: 0, False: 4]
  ------------------
 2065|      0|        ERR_raise(ERR_LIB_CRYPTO, ERR_R_PASSED_NULL_PARAMETER);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
 2066|      0|        return 0;
 2067|      0|    }
 2068|       |
 2069|      4|    *result = 0;
 2070|      4|    if (!CRYPTO_THREAD_read_lock(provider->opbits_lock))
  ------------------
  |  Branch (2070:9): [True: 0, False: 4]
  ------------------
 2071|      0|        return 0;
 2072|      4|    if (provider->operation_bits_sz > byte)
  ------------------
  |  Branch (2072:9): [True: 3, False: 1]
  ------------------
 2073|      3|        *result = ((provider->operation_bits[byte] & bit) != 0);
 2074|      4|    CRYPTO_THREAD_unlock(provider->opbits_lock);
 2075|      4|    return 1;
 2076|      4|}
provider_core.c:provider_deactivate_free:
  237|    114|{
  238|    114|    if (prov->flag_activated)
  ------------------
  |  Branch (238:9): [True: 109, False: 5]
  ------------------
  239|    109|        ossl_provider_deactivate(prov, 1);
  240|    114|    ossl_provider_free(prov);
  241|    114|}
provider_core.c:ossl_provider_cmp:
  204|    241|{
  205|    241|    return strcmp((*a)->name, (*b)->name);
  206|    241|}
provider_core.c:get_provider_store:
  330|    788|{
  331|    788|    struct provider_store_st *store = NULL;
  332|       |
  333|    788|    store = ossl_lib_ctx_get_data(libctx, OSSL_LIB_CTX_PROVIDER_STORE_INDEX);
  ------------------
  |  |   96|    788|#define OSSL_LIB_CTX_PROVIDER_STORE_INDEX 1
  ------------------
  334|    788|    if (store == NULL)
  ------------------
  |  Branch (334:9): [True: 0, False: 788]
  ------------------
  335|       |        ERR_raise(ERR_LIB_CRYPTO, ERR_R_INTERNAL_ERROR);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  336|    788|    return store;
  337|    788|}
provider_core.c:provider_new:
  450|    219|{
  451|    219|    OSSL_PROVIDER *prov = NULL;
  452|       |
  453|    219|    if ((prov = OPENSSL_zalloc(sizeof(*prov))) == NULL)
  ------------------
  |  |  109|    219|    CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  |  Branch (453:9): [True: 0, False: 219]
  ------------------
  454|      0|        return NULL;
  455|    219|    if (!CRYPTO_NEW_REF(&prov->refcnt, 1)) {
  ------------------
  |  Branch (455:9): [True: 0, False: 219]
  ------------------
  456|      0|        OPENSSL_free(prov);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  457|      0|        return NULL;
  458|      0|    }
  459|    219|    if ((prov->activatecnt_lock = CRYPTO_THREAD_lock_new()) == NULL) {
  ------------------
  |  Branch (459:9): [True: 0, False: 219]
  ------------------
  460|      0|        ossl_provider_free(prov);
  461|      0|        ERR_raise(ERR_LIB_CRYPTO, ERR_R_CRYPTO_LIB);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  462|      0|        return NULL;
  463|      0|    }
  464|       |
  465|    219|    if ((prov->opbits_lock = CRYPTO_THREAD_lock_new()) == NULL
  ------------------
  |  Branch (465:9): [True: 0, False: 219]
  ------------------
  466|    219|        || (prov->flag_lock = CRYPTO_THREAD_lock_new()) == NULL
  ------------------
  |  Branch (466:12): [True: 0, False: 219]
  ------------------
  467|    219|        || (prov->parameters = sk_INFOPAIR_deep_copy(parameters,
  ------------------
  |  Branch (467:12): [True: 0, False: 219]
  ------------------
  468|    219|                infopair_copy,
  469|    219|                infopair_free))
  470|    219|            == NULL) {
  471|      0|        ossl_provider_free(prov);
  472|      0|        ERR_raise(ERR_LIB_CRYPTO, ERR_R_CRYPTO_LIB);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  473|      0|        return NULL;
  474|      0|    }
  475|    219|    if ((prov->name = OPENSSL_strdup(name)) == NULL) {
  ------------------
  |  |  136|    219|    CRYPTO_strdup(str, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_strdup(str, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  |  Branch (475:9): [True: 0, False: 219]
  ------------------
  476|      0|        ossl_provider_free(prov);
  477|      0|        return NULL;
  478|      0|    }
  479|       |
  480|    219|    prov->init_function = init_function;
  481|       |
  482|    219|    return prov;
  483|    219|}
provider_core.c:create_provider_children:
  637|      5|{
  638|      5|    int ret = 1;
  639|      5|#ifndef FIPS_MODULE
  640|      5|    struct provider_store_st *store = prov->store;
  641|      5|    OSSL_PROVIDER_CHILD_CB *child_cb;
  642|      5|    int i, max;
  643|       |
  644|      5|    max = sk_OSSL_PROVIDER_CHILD_CB_num(store->child_cbs);
  645|      5|    for (i = 0; i < max; i++) {
  ------------------
  |  Branch (645:17): [True: 0, False: 5]
  ------------------
  646|       |        /*
  647|       |         * This is newly activated (activatecnt == 1), so we need to
  648|       |         * create child providers as necessary.
  649|       |         */
  650|      0|        child_cb = sk_OSSL_PROVIDER_CHILD_CB_value(store->child_cbs, i);
  651|      0|        ret &= child_cb->create_cb((OSSL_CORE_HANDLE *)prov, child_cb->cbdata);
  652|      0|    }
  653|      5|#endif
  654|       |
  655|      5|    return ret;
  656|      5|}
provider_core.c:provider_activate:
 1262|    222|{
 1263|    222|    int count = -1;
 1264|    222|    struct provider_store_st *store;
 1265|    222|    int ret = 1;
 1266|       |
 1267|    222|    store = prov->store;
 1268|       |    /*
 1269|       |     * If the provider hasn't been added to the store, then we don't need
 1270|       |     * any locks because we've not shared it with other threads.
 1271|       |     */
 1272|    222|    if (store == NULL) {
  ------------------
  |  Branch (1272:9): [True: 219, False: 3]
  ------------------
 1273|    219|        lock = 0;
 1274|    219|        if (!provider_init(prov))
  ------------------
  |  Branch (1274:13): [True: 104, False: 115]
  ------------------
 1275|    104|            return -1;
 1276|    219|    }
 1277|       |
 1278|    118|#ifndef FIPS_MODULE
 1279|    118|    if (prov->random_bytes != NULL
  ------------------
  |  Branch (1279:9): [True: 0, False: 118]
  ------------------
 1280|      0|        && !ossl_rand_check_random_provider_on_load(prov->libctx, prov))
  ------------------
  |  Branch (1280:12): [True: 0, False: 0]
  ------------------
 1281|      0|        return -1;
 1282|       |
 1283|    118|    if (prov->ischild && upcalls && !ossl_provider_up_ref_parent(prov, 1))
  ------------------
  |  Branch (1283:9): [True: 0, False: 118]
  |  Branch (1283:26): [True: 0, False: 0]
  |  Branch (1283:37): [True: 0, False: 0]
  ------------------
 1284|      0|        return -1;
 1285|    118|#endif
 1286|       |
 1287|    118|    if (lock && !CRYPTO_THREAD_read_lock(store->lock)) {
  ------------------
  |  Branch (1287:9): [True: 3, False: 115]
  |  Branch (1287:17): [True: 0, False: 3]
  ------------------
 1288|      0|#ifndef FIPS_MODULE
 1289|      0|        if (prov->ischild && upcalls)
  ------------------
  |  Branch (1289:13): [True: 0, False: 0]
  |  Branch (1289:30): [True: 0, False: 0]
  ------------------
 1290|      0|            ossl_provider_free_parent(prov, 1);
 1291|      0|#endif
 1292|      0|        return -1;
 1293|      0|    }
 1294|       |
 1295|    118|    if (lock && !CRYPTO_THREAD_write_lock(prov->flag_lock)) {
  ------------------
  |  Branch (1295:9): [True: 3, False: 115]
  |  Branch (1295:17): [True: 0, False: 3]
  ------------------
 1296|      0|        CRYPTO_THREAD_unlock(store->lock);
 1297|      0|#ifndef FIPS_MODULE
 1298|      0|        if (prov->ischild && upcalls)
  ------------------
  |  Branch (1298:13): [True: 0, False: 0]
  |  Branch (1298:30): [True: 0, False: 0]
  ------------------
 1299|      0|            ossl_provider_free_parent(prov, 1);
 1300|      0|#endif
 1301|      0|        return -1;
 1302|      0|    }
 1303|    118|    if (CRYPTO_atomic_add(&prov->activatecnt, 1, &count, prov->activatecnt_lock)) {
  ------------------
  |  Branch (1303:9): [True: 118, False: 0]
  ------------------
 1304|    118|        prov->flag_activated = 1;
 1305|       |
 1306|    118|        if (count == 1 && store != NULL) {
  ------------------
  |  Branch (1306:13): [True: 115, False: 3]
  |  Branch (1306:27): [True: 0, False: 115]
  ------------------
 1307|      0|            ret = create_provider_children(prov);
 1308|      0|        }
 1309|    118|    }
 1310|    118|    if (lock) {
  ------------------
  |  Branch (1310:9): [True: 3, False: 115]
  ------------------
 1311|      3|        CRYPTO_THREAD_unlock(prov->flag_lock);
 1312|      3|        CRYPTO_THREAD_unlock(store->lock);
 1313|       |        /*
 1314|       |         * This can be done outside the lock. We tolerate other threads getting
 1315|       |         * the wrong result briefly when creating OSSL_DECODER_CTXs.
 1316|       |         */
 1317|      3|#ifndef FIPS_MODULE
 1318|      3|        if (count == 1)
  ------------------
  |  Branch (1318:13): [True: 0, False: 3]
  ------------------
 1319|      0|            ossl_decoder_cache_flush(prov->libctx);
 1320|      3|#endif
 1321|      3|    }
 1322|       |
 1323|    118|    if (!ret)
  ------------------
  |  Branch (1323:9): [True: 0, False: 118]
  ------------------
 1324|      0|        return -1;
 1325|       |
 1326|    118|    return count;
 1327|    118|}
provider_core.c:provider_init:
  954|    219|{
  955|    219|    const OSSL_DISPATCH *provider_dispatch = NULL;
  956|    219|    void *tmp_provctx = NULL; /* safety measure */
  957|    219|#ifndef OPENSSL_NO_ERR
  958|    219|#ifndef FIPS_MODULE
  959|    219|    OSSL_FUNC_provider_get_reason_strings_fn *p_get_reason_strings = NULL;
  960|    219|#endif
  961|    219|#endif
  962|    219|    int ok = 0;
  963|       |
  964|    219|    if (!ossl_assert(!prov->flag_initialized)) {
  ------------------
  |  |   52|    219|#define ossl_assert(x) ossl_assert_int((x) != 0, "Assertion failed: " #x, \
  |  |   53|    219|    __FILE__, __LINE__)
  ------------------
  |  Branch (964:9): [True: 0, False: 219]
  ------------------
  965|      0|        ERR_raise(ERR_LIB_CRYPTO, ERR_R_INTERNAL_ERROR);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  966|      0|        goto end;
  967|      0|    }
  968|       |
  969|       |    /*
  970|       |     * If the init function isn't set, it indicates that this provider is
  971|       |     * a loadable module.
  972|       |     */
  973|    219|    if (prov->init_function == NULL) {
  ------------------
  |  Branch (973:9): [True: 104, False: 115]
  ------------------
  974|       |#ifdef FIPS_MODULE
  975|       |        goto end;
  976|       |#else
  977|    104|        if (prov->module == NULL) {
  ------------------
  |  Branch (977:13): [True: 104, False: 0]
  ------------------
  978|    104|            char *allocated_path = NULL;
  979|    104|            const char *module_path = NULL;
  980|    104|            char *merged_path = NULL;
  981|    104|            const char *load_dir = NULL;
  982|    104|            char *allocated_load_dir = NULL;
  983|    104|            struct provider_store_st *store;
  984|       |
  985|    104|            if ((prov->module = DSO_new()) == NULL) {
  ------------------
  |  Branch (985:17): [True: 0, False: 104]
  ------------------
  986|       |                /* DSO_new() generates an error already */
  987|      0|                goto end;
  988|      0|            }
  989|       |
  990|    104|            if ((store = get_provider_store(prov->libctx)) == NULL
  ------------------
  |  Branch (990:17): [True: 0, False: 104]
  ------------------
  991|    104|                || !CRYPTO_THREAD_read_lock(store->default_path_lock))
  ------------------
  |  Branch (991:20): [True: 0, False: 104]
  ------------------
  992|      0|                goto end;
  993|       |
  994|    104|            if (store->default_path != NULL) {
  ------------------
  |  Branch (994:17): [True: 0, False: 104]
  ------------------
  995|      0|                allocated_load_dir = OPENSSL_strdup(store->default_path);
  ------------------
  |  |  136|      0|    CRYPTO_strdup(str, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_strdup(str, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  996|      0|                CRYPTO_THREAD_unlock(store->default_path_lock);
  997|      0|                if (allocated_load_dir == NULL)
  ------------------
  |  Branch (997:21): [True: 0, False: 0]
  ------------------
  998|      0|                    goto end;
  999|      0|                load_dir = allocated_load_dir;
 1000|    104|            } else {
 1001|    104|                CRYPTO_THREAD_unlock(store->default_path_lock);
 1002|    104|            }
 1003|       |
 1004|    104|            if (load_dir == NULL) {
  ------------------
  |  Branch (1004:17): [True: 104, False: 0]
  ------------------
 1005|    104|                load_dir = ossl_safe_getenv("OPENSSL_MODULES");
 1006|    104|                if (load_dir == NULL)
  ------------------
  |  Branch (1006:21): [True: 104, False: 0]
  ------------------
 1007|    104|                    load_dir = ossl_get_modulesdir();
 1008|    104|            }
 1009|       |
 1010|    104|            DSO_ctrl(prov->module, DSO_CTRL_SET_FLAGS,
  ------------------
  |  |   19|    104|#define DSO_CTRL_SET_FLAGS 2
  ------------------
 1011|    104|                DSO_FLAG_NAME_TRANSLATION_EXT_ONLY, NULL);
  ------------------
  |  |   41|    104|#define DSO_FLAG_NAME_TRANSLATION_EXT_ONLY 0x02
  ------------------
 1012|       |
 1013|    104|            module_path = prov->path;
 1014|    104|            if (module_path == NULL)
  ------------------
  |  Branch (1014:17): [True: 104, False: 0]
  ------------------
 1015|    104|                module_path = allocated_path = DSO_convert_filename(prov->module, prov->name);
 1016|    104|            if (module_path != NULL)
  ------------------
  |  Branch (1016:17): [True: 104, False: 0]
  ------------------
 1017|    104|                merged_path = DSO_merge(prov->module, module_path, load_dir);
 1018|       |
 1019|    104|            if (merged_path == NULL
  ------------------
  |  Branch (1019:17): [True: 0, False: 104]
  ------------------
 1020|    104|                || (DSO_load(prov->module, merged_path, NULL, 0)) == NULL) {
  ------------------
  |  Branch (1020:20): [True: 104, False: 0]
  ------------------
 1021|    104|                DSO_free(prov->module);
 1022|    104|                prov->module = NULL;
 1023|    104|            }
 1024|       |
 1025|    104|            OPENSSL_free(merged_path);
  ------------------
  |  |  132|    104|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1026|    104|            OPENSSL_free(allocated_path);
  ------------------
  |  |  132|    104|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1027|    104|            OPENSSL_free(allocated_load_dir);
  ------------------
  |  |  132|    104|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1028|    104|        }
 1029|       |
 1030|    104|        if (prov->module == NULL) {
  ------------------
  |  Branch (1030:13): [True: 104, False: 0]
  ------------------
 1031|       |            /* DSO has already recorded errors, this is just a tracepoint */
 1032|    104|            ERR_raise_data(ERR_LIB_CRYPTO, ERR_R_DSO_LIB,
  ------------------
  |  |  359|    104|    (ERR_new(),                                                  \
  |  |  360|    104|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  366|    104|#define OPENSSL_FUNC __func__
  |  |  ------------------
  |  |  361|    104|        ERR_set_error)
  ------------------
                          ERR_raise_data(ERR_LIB_CRYPTO, ERR_R_DSO_LIB,
  ------------------
  |  |   68|    104|#define ERR_LIB_CRYPTO 15
  ------------------
                          ERR_raise_data(ERR_LIB_CRYPTO, ERR_R_DSO_LIB,
  ------------------
  |  |  289|    104|#define ERR_R_DSO_LIB (ERR_LIB_DSO /* 37 */ | ERR_RFLAG_COMMON)
  |  |  ------------------
  |  |  |  |   81|    104|#define ERR_LIB_DSO 37
  |  |  ------------------
  |  |               #define ERR_R_DSO_LIB (ERR_LIB_DSO /* 37 */ | ERR_RFLAG_COMMON)
  |  |  ------------------
  |  |  |  |  220|    104|#define ERR_RFLAG_COMMON (0x2 << ERR_RFLAGS_OFFSET)
  |  |  |  |  ------------------
  |  |  |  |  |  |  211|    104|#define ERR_RFLAGS_OFFSET 18L
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1033|    104|                "name=%s", prov->name);
 1034|    104|            goto end;
 1035|    104|        }
 1036|       |
 1037|      0|        prov->init_function = (OSSL_provider_init_fn *)
 1038|      0|            DSO_bind_func(prov->module, "OSSL_provider_init");
 1039|      0|#endif
 1040|      0|    }
 1041|       |
 1042|       |    /* Check for and call the initialise function for the provider. */
 1043|    115|    if (prov->init_function == NULL) {
  ------------------
  |  Branch (1043:9): [True: 0, False: 115]
  ------------------
 1044|      0|        ERR_raise_data(ERR_LIB_CRYPTO, ERR_R_UNSUPPORTED,
  ------------------
  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  ------------------
  |  |  361|      0|        ERR_set_error)
  ------------------
                      ERR_raise_data(ERR_LIB_CRYPTO, ERR_R_UNSUPPORTED,
  ------------------
  |  |   68|      0|#define ERR_LIB_CRYPTO 15
  ------------------
                      ERR_raise_data(ERR_LIB_CRYPTO, ERR_R_UNSUPPORTED,
  ------------------
  |  |  317|      0|#define ERR_R_UNSUPPORTED (268 | ERR_RFLAG_COMMON)
  |  |  ------------------
  |  |  |  |  220|      0|#define ERR_RFLAG_COMMON (0x2 << ERR_RFLAGS_OFFSET)
  |  |  |  |  ------------------
  |  |  |  |  |  |  211|      0|#define ERR_RFLAGS_OFFSET 18L
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1045|      0|            "name=%s, provider has no provider init function",
 1046|      0|            prov->name);
 1047|      0|        goto end;
 1048|      0|    }
 1049|    115|#ifndef FIPS_MODULE
 1050|    115|    OSSL_TRACE_BEGIN(PROVIDER)
  ------------------
  |  |  219|    115|    do {                           \
  |  |  220|    115|        BIO *trc_out = NULL;       \
  |  |  221|    115|        if (0)
  |  |  ------------------
  |  |  |  Branch (221:13): [Folded, False: 115]
  |  |  ------------------
  ------------------
 1051|      0|    {
 1052|      0|        BIO_printf(trc_out,
 1053|      0|            "(provider %s) initializing\n", prov->name);
 1054|      0|    }
 1055|    115|    OSSL_TRACE_END(PROVIDER);
  ------------------
  |  |  224|    115|    }                            \
  |  |  225|    115|    while (0)
  |  |  ------------------
  |  |  |  Branch (225:12): [Folded, False: 115]
  |  |  ------------------
  ------------------
 1056|    115|#endif
 1057|       |
 1058|    115|    if (!prov->init_function((OSSL_CORE_HANDLE *)prov, core_dispatch,
  ------------------
  |  Branch (1058:9): [True: 0, False: 115]
  ------------------
 1059|    115|            &provider_dispatch, &tmp_provctx)) {
 1060|      0|        ERR_raise_data(ERR_LIB_CRYPTO, ERR_R_INIT_FAIL,
  ------------------
  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  ------------------
  |  |  361|      0|        ERR_set_error)
  ------------------
                      ERR_raise_data(ERR_LIB_CRYPTO, ERR_R_INIT_FAIL,
  ------------------
  |  |   68|      0|#define ERR_LIB_CRYPTO 15
  ------------------
                      ERR_raise_data(ERR_LIB_CRYPTO, ERR_R_INIT_FAIL,
  ------------------
  |  |  310|      0|#define ERR_R_INIT_FAIL (261 | ERR_R_FATAL)
  |  |  ------------------
  |  |  |  |  304|      0|#define ERR_R_FATAL (ERR_RFLAG_FATAL | ERR_RFLAG_COMMON)
  |  |  |  |  ------------------
  |  |  |  |  |  |  219|      0|#define ERR_RFLAG_FATAL (0x1 << ERR_RFLAGS_OFFSET)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  211|      0|#define ERR_RFLAGS_OFFSET 18L
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define ERR_R_FATAL (ERR_RFLAG_FATAL | ERR_RFLAG_COMMON)
  |  |  |  |  ------------------
  |  |  |  |  |  |  220|      0|#define ERR_RFLAG_COMMON (0x2 << ERR_RFLAGS_OFFSET)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  211|      0|#define ERR_RFLAGS_OFFSET 18L
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1061|      0|            "name=%s", prov->name);
 1062|      0|        goto end;
 1063|      0|    }
 1064|    115|    prov->provctx = tmp_provctx;
 1065|    115|    prov->dispatch = provider_dispatch;
 1066|       |
 1067|    115|    if (provider_dispatch != NULL) {
  ------------------
  |  Branch (1067:9): [True: 115, False: 0]
  ------------------
 1068|    684|        for (; provider_dispatch->function_id != 0; provider_dispatch++) {
  ------------------
  |  Branch (1068:16): [True: 569, False: 115]
  ------------------
 1069|    569|            switch (provider_dispatch->function_id) {
  ------------------
  |  Branch (1069:21): [True: 569, False: 0]
  ------------------
 1070|    114|            case OSSL_FUNC_PROVIDER_TEARDOWN:
  ------------------
  |  |  234|    114|#define OSSL_FUNC_PROVIDER_TEARDOWN 1024
  ------------------
  |  Branch (1070:13): [True: 114, False: 455]
  ------------------
 1071|    114|                prov->teardown = OSSL_FUNC_provider_teardown(provider_dispatch);
 1072|    114|                break;
 1073|    115|            case OSSL_FUNC_PROVIDER_GETTABLE_PARAMS:
  ------------------
  |  |  236|    115|#define OSSL_FUNC_PROVIDER_GETTABLE_PARAMS 1025
  ------------------
  |  Branch (1073:13): [True: 115, False: 454]
  ------------------
 1074|    115|                prov->gettable_params = OSSL_FUNC_provider_gettable_params(provider_dispatch);
 1075|    115|                break;
 1076|    115|            case OSSL_FUNC_PROVIDER_GET_PARAMS:
  ------------------
  |  |  239|    115|#define OSSL_FUNC_PROVIDER_GET_PARAMS 1026
  ------------------
  |  Branch (1076:13): [True: 115, False: 454]
  ------------------
 1077|    115|                prov->get_params = OSSL_FUNC_provider_get_params(provider_dispatch);
 1078|    115|                break;
 1079|      0|            case OSSL_FUNC_PROVIDER_SELF_TEST:
  ------------------
  |  |  252|      0|#define OSSL_FUNC_PROVIDER_SELF_TEST 1031
  ------------------
  |  Branch (1079:13): [True: 0, False: 569]
  ------------------
 1080|      0|                prov->self_test = OSSL_FUNC_provider_self_test(provider_dispatch);
 1081|      0|                break;
 1082|      0|            case OSSL_FUNC_PROVIDER_RANDOM_BYTES:
  ------------------
  |  |  254|      0|#define OSSL_FUNC_PROVIDER_RANDOM_BYTES 1032
  ------------------
  |  Branch (1082:13): [True: 0, False: 569]
  ------------------
 1083|      0|                prov->random_bytes = OSSL_FUNC_provider_random_bytes(provider_dispatch);
 1084|      0|                break;
 1085|    110|            case OSSL_FUNC_PROVIDER_GET_CAPABILITIES:
  ------------------
  |  |  250|    110|#define OSSL_FUNC_PROVIDER_GET_CAPABILITIES 1030
  ------------------
  |  Branch (1085:13): [True: 110, False: 459]
  ------------------
 1086|    110|                prov->get_capabilities = OSSL_FUNC_provider_get_capabilities(provider_dispatch);
 1087|    110|                break;
 1088|    115|            case OSSL_FUNC_PROVIDER_QUERY_OPERATION:
  ------------------
  |  |  241|    115|#define OSSL_FUNC_PROVIDER_QUERY_OPERATION 1027
  ------------------
  |  Branch (1088:13): [True: 115, False: 454]
  ------------------
 1089|    115|                prov->query_operation = OSSL_FUNC_provider_query_operation(provider_dispatch);
 1090|    115|                break;
 1091|      0|            case OSSL_FUNC_PROVIDER_UNQUERY_OPERATION:
  ------------------
  |  |  244|      0|#define OSSL_FUNC_PROVIDER_UNQUERY_OPERATION 1028
  ------------------
  |  Branch (1091:13): [True: 0, False: 569]
  ------------------
 1092|      0|                prov->unquery_operation = OSSL_FUNC_provider_unquery_operation(provider_dispatch);
 1093|      0|                break;
 1094|      0|#ifndef OPENSSL_NO_ERR
 1095|      0|#ifndef FIPS_MODULE
 1096|      0|            case OSSL_FUNC_PROVIDER_GET_REASON_STRINGS:
  ------------------
  |  |  247|      0|#define OSSL_FUNC_PROVIDER_GET_REASON_STRINGS 1029
  ------------------
  |  Branch (1096:13): [True: 0, False: 569]
  ------------------
 1097|      0|                p_get_reason_strings = OSSL_FUNC_provider_get_reason_strings(provider_dispatch);
 1098|      0|                break;
 1099|    569|#endif
 1100|    569|#endif
 1101|    569|            }
 1102|    569|        }
 1103|    115|    }
 1104|       |
 1105|    115|#ifndef OPENSSL_NO_ERR
 1106|    115|#ifndef FIPS_MODULE
 1107|    115|    if (p_get_reason_strings != NULL) {
  ------------------
  |  Branch (1107:9): [True: 0, False: 115]
  ------------------
 1108|      0|        const OSSL_ITEM *reasonstrings = p_get_reason_strings(prov->provctx);
 1109|      0|        size_t cnt, cnt2;
 1110|       |
 1111|       |        /*
 1112|       |         * ERR_load_strings() handles ERR_STRING_DATA rather than OSSL_ITEM,
 1113|       |         * although they are essentially the same type.
 1114|       |         * Furthermore, ERR_load_strings() patches the array's error number
 1115|       |         * with the error library number, so we need to make a copy of that
 1116|       |         * array either way.
 1117|       |         */
 1118|      0|        cnt = 0;
 1119|      0|        while (reasonstrings[cnt].id != 0) {
  ------------------
  |  Branch (1119:16): [True: 0, False: 0]
  ------------------
 1120|      0|            if (ERR_GET_LIB(reasonstrings[cnt].id) != 0)
  ------------------
  |  Branch (1120:17): [True: 0, False: 0]
  ------------------
 1121|      0|                goto end;
 1122|      0|            cnt++;
 1123|      0|        }
 1124|      0|        cnt++; /* One for the terminating item */
 1125|       |
 1126|       |        /* Allocate one extra item for the "library" name */
 1127|      0|        prov->error_strings = OPENSSL_calloc(cnt + 1, sizeof(ERR_STRING_DATA));
  ------------------
  |  |  113|      0|    CRYPTO_calloc(num, size, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_calloc(num, size, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1128|      0|        if (prov->error_strings == NULL)
  ------------------
  |  Branch (1128:13): [True: 0, False: 0]
  ------------------
 1129|      0|            goto end;
 1130|       |
 1131|       |        /*
 1132|       |         * Set the "library" name.
 1133|       |         */
 1134|      0|        prov->error_strings[0].error = ERR_PACK(prov->error_lib, 0, 0);
  ------------------
  |  |  262|      0|    ((((unsigned long)(lib) & ERR_LIB_MASK) << ERR_LIB_OFFSET) | (((unsigned long)(reason) & ERR_REASON_MASK)))
  |  |  ------------------
  |  |  |  |  210|      0|#define ERR_LIB_MASK 0xFF
  |  |  ------------------
  |  |                   ((((unsigned long)(lib) & ERR_LIB_MASK) << ERR_LIB_OFFSET) | (((unsigned long)(reason) & ERR_REASON_MASK)))
  |  |  ------------------
  |  |  |  |  209|      0|#define ERR_LIB_OFFSET 23L
  |  |  ------------------
  |  |                   ((((unsigned long)(lib) & ERR_LIB_MASK) << ERR_LIB_OFFSET) | (((unsigned long)(reason) & ERR_REASON_MASK)))
  |  |  ------------------
  |  |  |  |  213|      0|#define ERR_REASON_MASK 0X7FFFFF
  |  |  ------------------
  ------------------
 1135|      0|        prov->error_strings[0].string = prov->name;
 1136|       |        /*
 1137|       |         * Copy reasonstrings item 0..cnt-1 to prov->error_trings positions
 1138|       |         * 1..cnt.
 1139|       |         */
 1140|      0|        for (cnt2 = 1; cnt2 <= cnt; cnt2++) {
  ------------------
  |  Branch (1140:24): [True: 0, False: 0]
  ------------------
 1141|      0|            prov->error_strings[cnt2].error = (int)reasonstrings[cnt2 - 1].id;
 1142|      0|            prov->error_strings[cnt2].string = reasonstrings[cnt2 - 1].ptr;
 1143|      0|        }
 1144|       |
 1145|      0|        ERR_load_strings(prov->error_lib, prov->error_strings);
 1146|      0|    }
 1147|    115|#endif
 1148|    115|#endif
 1149|       |
 1150|       |    /* With this flag set, this provider has become fully "loaded". */
 1151|    115|    prov->flag_initialized = 1;
 1152|    115|    ok = 1;
 1153|       |
 1154|    219|end:
 1155|    219|    return ok;
 1156|    115|}
provider_core.c:core_get_libctx:
 2352|    114|{
 2353|       |    /*
 2354|       |     * We created this object originally and we know it is actually an
 2355|       |     * OSSL_PROVIDER *, so the cast is safe
 2356|       |     */
 2357|    114|    OSSL_PROVIDER *prov = (OSSL_PROVIDER *)handle;
 2358|       |
 2359|       |    /*
 2360|       |     * Using ossl_provider_libctx would be wrong as that returns
 2361|       |     * NULL for |prov| == NULL and NULL libctx has a special meaning
 2362|       |     * that does not apply here. Here |prov| == NULL can happen only in
 2363|       |     * case of a coding error.
 2364|       |     */
 2365|    114|    assert(prov != NULL);
  ------------------
  |  Branch (2365:5): [True: 0, False: 114]
  |  Branch (2365:5): [True: 114, False: 0]
  ------------------
 2366|    114|    return (OPENSSL_CORE_CTX *)prov->libctx;
 2367|    114|}
provider_core.c:provider_flush_store_cache:
 1330|      5|{
 1331|      5|    struct provider_store_st *store;
 1332|      5|    int freeing;
 1333|       |
 1334|      5|    if ((store = get_provider_store(prov->libctx)) == NULL)
  ------------------
  |  Branch (1334:9): [True: 0, False: 5]
  ------------------
 1335|      0|        return 0;
 1336|       |
 1337|      5|    if (!CRYPTO_THREAD_read_lock(store->lock))
  ------------------
  |  Branch (1337:9): [True: 0, False: 5]
  ------------------
 1338|      0|        return 0;
 1339|      5|    freeing = store->freeing;
 1340|      5|    CRYPTO_THREAD_unlock(store->lock);
 1341|       |
 1342|      5|    if (!freeing) {
  ------------------
  |  Branch (1342:9): [True: 5, False: 0]
  ------------------
 1343|      5|        int acc
 1344|      5|            = evp_method_store_cache_flush(prov->libctx)
 1345|      5|#ifndef FIPS_MODULE
 1346|      5|            + ossl_encoder_store_cache_flush(prov->libctx)
 1347|      5|            + ossl_decoder_store_cache_flush(prov->libctx)
 1348|      5|            + ossl_store_loader_store_cache_flush(prov->libctx)
 1349|      5|#endif
 1350|      5|            ;
 1351|       |
 1352|      5|#ifndef FIPS_MODULE
 1353|      5|        return acc == 4;
 1354|       |#else
 1355|       |        return acc == 1;
 1356|       |#endif
 1357|      5|    }
 1358|      0|    return 1;
 1359|      5|}
provider_core.c:provider_deactivate:
 1166|    117|{
 1167|    117|    int count;
 1168|    117|    struct provider_store_st *store;
 1169|    117|#ifndef FIPS_MODULE
 1170|    117|    int freeparent = 0;
 1171|    117|#endif
 1172|    117|    int lock = 1;
 1173|       |
 1174|    117|    if (!ossl_assert(prov != NULL))
  ------------------
  |  |   52|    117|#define ossl_assert(x) ossl_assert_int((x) != 0, "Assertion failed: " #x, \
  |  |   53|    117|    __FILE__, __LINE__)
  ------------------
  |  Branch (1174:9): [True: 0, False: 117]
  ------------------
 1175|      0|        return -1;
 1176|       |
 1177|    117|#ifndef FIPS_MODULE
 1178|    117|    if (prov->random_bytes != NULL
  ------------------
  |  Branch (1178:9): [True: 0, False: 117]
  ------------------
 1179|      0|        && !ossl_rand_check_random_provider_on_unload(prov->libctx, prov))
  ------------------
  |  Branch (1179:12): [True: 0, False: 0]
  ------------------
 1180|      0|        return -1;
 1181|    117|#endif
 1182|       |
 1183|       |    /*
 1184|       |     * No need to lock if we've got no store because we've not been shared with
 1185|       |     * other threads.
 1186|       |     */
 1187|    117|    store = get_provider_store(prov->libctx);
 1188|    117|    if (store == NULL)
  ------------------
  |  Branch (1188:9): [True: 0, False: 117]
  ------------------
 1189|      0|        lock = 0;
 1190|       |
 1191|    117|    if (lock && !CRYPTO_THREAD_read_lock(store->lock))
  ------------------
  |  Branch (1191:9): [True: 117, False: 0]
  |  Branch (1191:17): [True: 0, False: 117]
  ------------------
 1192|      0|        return -1;
 1193|    117|    if (lock && !CRYPTO_THREAD_write_lock(prov->flag_lock)) {
  ------------------
  |  Branch (1193:9): [True: 117, False: 0]
  |  Branch (1193:17): [True: 0, False: 117]
  ------------------
 1194|      0|        CRYPTO_THREAD_unlock(store->lock);
 1195|      0|        return -1;
 1196|      0|    }
 1197|       |
 1198|    117|    if (!CRYPTO_atomic_add(&prov->activatecnt, -1, &count, prov->activatecnt_lock)) {
  ------------------
  |  Branch (1198:9): [True: 0, False: 117]
  ------------------
 1199|      0|        if (lock) {
  ------------------
  |  Branch (1199:13): [True: 0, False: 0]
  ------------------
 1200|      0|            CRYPTO_THREAD_unlock(prov->flag_lock);
 1201|      0|            CRYPTO_THREAD_unlock(store->lock);
 1202|      0|        }
 1203|      0|        return -1;
 1204|      0|    }
 1205|       |
 1206|    117|#ifndef FIPS_MODULE
 1207|    117|    if (count >= 1 && prov->ischild && upcalls) {
  ------------------
  |  Branch (1207:9): [True: 3, False: 114]
  |  Branch (1207:23): [True: 0, False: 3]
  |  Branch (1207:40): [True: 0, False: 0]
  ------------------
 1208|       |        /*
 1209|       |         * We have had a direct activation in this child libctx so we need to
 1210|       |         * now down the ref count in the parent provider. We do the actual down
 1211|       |         * ref outside of the flag_lock, since it could involve getting other
 1212|       |         * locks.
 1213|       |         */
 1214|      0|        freeparent = 1;
 1215|      0|    }
 1216|    117|#endif
 1217|       |
 1218|    117|    if (count < 1)
  ------------------
  |  Branch (1218:9): [True: 114, False: 3]
  ------------------
 1219|    114|        prov->flag_activated = 0;
 1220|      3|#ifndef FIPS_MODULE
 1221|      3|    else
 1222|      3|        removechildren = 0;
 1223|    117|#endif
 1224|       |
 1225|    117|#ifndef FIPS_MODULE
 1226|    117|    if (removechildren && store != NULL) {
  ------------------
  |  Branch (1226:9): [True: 114, False: 3]
  |  Branch (1226:27): [True: 114, False: 0]
  ------------------
 1227|    114|        int i, max = sk_OSSL_PROVIDER_CHILD_CB_num(store->child_cbs);
 1228|    114|        OSSL_PROVIDER_CHILD_CB *child_cb;
 1229|       |
 1230|    114|        for (i = 0; i < max; i++) {
  ------------------
  |  Branch (1230:21): [True: 0, False: 114]
  ------------------
 1231|      0|            child_cb = sk_OSSL_PROVIDER_CHILD_CB_value(store->child_cbs, i);
 1232|      0|            child_cb->remove_cb((OSSL_CORE_HANDLE *)prov, child_cb->cbdata);
 1233|      0|        }
 1234|    114|    }
 1235|    117|#endif
 1236|    117|    if (lock) {
  ------------------
  |  Branch (1236:9): [True: 117, False: 0]
  ------------------
 1237|    117|        CRYPTO_THREAD_unlock(prov->flag_lock);
 1238|    117|        CRYPTO_THREAD_unlock(store->lock);
 1239|       |        /*
 1240|       |         * This can be done outside the lock. We tolerate other threads getting
 1241|       |         * the wrong result briefly when creating OSSL_DECODER_CTXs.
 1242|       |         */
 1243|    117|#ifndef FIPS_MODULE
 1244|    117|        if (count < 1)
  ------------------
  |  Branch (1244:13): [True: 114, False: 3]
  ------------------
 1245|    114|            ossl_decoder_cache_flush(prov->libctx);
 1246|    117|#endif
 1247|    117|    }
 1248|    117|#ifndef FIPS_MODULE
 1249|    117|    if (freeparent)
  ------------------
  |  Branch (1249:9): [True: 0, False: 117]
  ------------------
 1250|      0|        ossl_provider_free_parent(prov, 1);
 1251|    117|#endif
 1252|       |
 1253|       |    /* We don't deinit here, that's done in ossl_provider_free() */
 1254|    117|    return count;
 1255|    117|}
provider_core.c:provider_remove_store_methods:
 1362|    114|{
 1363|    114|    struct provider_store_st *store;
 1364|    114|    int freeing;
 1365|       |
 1366|    114|    if ((store = get_provider_store(prov->libctx)) == NULL)
  ------------------
  |  Branch (1366:9): [True: 0, False: 114]
  ------------------
 1367|      0|        return 0;
 1368|       |
 1369|    114|    if (!CRYPTO_THREAD_read_lock(store->lock))
  ------------------
  |  Branch (1369:9): [True: 0, False: 114]
  ------------------
 1370|      0|        return 0;
 1371|    114|    freeing = store->freeing;
 1372|    114|    CRYPTO_THREAD_unlock(store->lock);
 1373|       |
 1374|    114|    if (!freeing) {
  ------------------
  |  Branch (1374:9): [True: 5, False: 109]
  ------------------
 1375|      5|        int acc;
 1376|       |
 1377|      5|        if (!CRYPTO_THREAD_write_lock(prov->opbits_lock))
  ------------------
  |  Branch (1377:13): [True: 0, False: 5]
  ------------------
 1378|      0|            return 0;
 1379|      5|        OPENSSL_free(prov->operation_bits);
  ------------------
  |  |  132|      5|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1380|      5|        prov->operation_bits = NULL;
 1381|      5|        prov->operation_bits_sz = 0;
 1382|      5|        CRYPTO_THREAD_unlock(prov->opbits_lock);
 1383|       |
 1384|      5|        acc = evp_method_store_remove_all_provided(prov)
 1385|      5|#ifndef FIPS_MODULE
 1386|      5|            + ossl_encoder_store_remove_all_provided(prov)
 1387|      5|            + ossl_decoder_store_remove_all_provided(prov)
 1388|      5|            + ossl_store_loader_store_remove_all_provided(prov)
 1389|      5|#endif
 1390|      5|            ;
 1391|       |
 1392|      5|#ifndef FIPS_MODULE
 1393|      5|        return acc == 4;
 1394|       |#else
 1395|       |        return acc == 1;
 1396|       |#endif
 1397|      5|    }
 1398|    109|    return 1;
 1399|    114|}
provider_core.c:provider_activate_fallbacks:
 1442|    111|{
 1443|    111|    int use_fallbacks;
 1444|    111|    int activated_fallback_count = 0;
 1445|    111|    int ret = 0;
 1446|    111|    const OSSL_PROVIDER_INFO *p;
 1447|       |
 1448|    111|    if (!CRYPTO_THREAD_read_lock(store->lock))
  ------------------
  |  Branch (1448:9): [True: 0, False: 111]
  ------------------
 1449|      0|        return 0;
 1450|    111|    use_fallbacks = store->use_fallbacks;
 1451|    111|    CRYPTO_THREAD_unlock(store->lock);
 1452|    111|    if (!use_fallbacks)
  ------------------
  |  Branch (1452:9): [True: 1, False: 110]
  ------------------
 1453|      1|        return 1;
 1454|       |
 1455|    110|    if (!CRYPTO_THREAD_write_lock(store->lock))
  ------------------
  |  Branch (1455:9): [True: 0, False: 110]
  ------------------
 1456|      0|        return 0;
 1457|       |    /* Check again, just in case another thread changed it */
 1458|    110|    use_fallbacks = store->use_fallbacks;
 1459|    110|    if (!use_fallbacks) {
  ------------------
  |  Branch (1459:9): [True: 0, False: 110]
  ------------------
 1460|      0|        CRYPTO_THREAD_unlock(store->lock);
 1461|      0|        return 1;
 1462|      0|    }
 1463|       |
 1464|    440|    for (p = ossl_predefined_providers; p->name != NULL; p++) {
  ------------------
  |  Branch (1464:41): [True: 330, False: 110]
  ------------------
 1465|    330|        OSSL_PROVIDER *prov = NULL;
 1466|    330|        OSSL_PROVIDER_INFO *info = store->provinfo;
 1467|    330|        STACK_OF(INFOPAIR) *params = NULL;
  ------------------
  |  |   33|    330|#define STACK_OF(type) struct stack_st_##type
  ------------------
 1468|    330|        size_t i;
 1469|       |
 1470|    330|        if (!p->is_fallback)
  ------------------
  |  Branch (1470:13): [True: 220, False: 110]
  ------------------
 1471|    220|            continue;
 1472|       |
 1473|    110|        for (i = 0; i < store->numprovinfo; info++, i++) {
  ------------------
  |  Branch (1473:21): [True: 0, False: 110]
  ------------------
 1474|      0|            if (strcmp(info->name, p->name) != 0)
  ------------------
  |  Branch (1474:17): [True: 0, False: 0]
  ------------------
 1475|      0|                continue;
 1476|      0|            params = info->parameters;
 1477|      0|            break;
 1478|      0|        }
 1479|       |
 1480|       |        /*
 1481|       |         * We use the internal constructor directly here,
 1482|       |         * otherwise we get a call loop
 1483|       |         */
 1484|    110|        prov = provider_new(p->name, p->init, params);
 1485|    110|        if (prov == NULL)
  ------------------
  |  Branch (1485:13): [True: 0, False: 110]
  ------------------
 1486|      0|            goto err;
 1487|    110|        prov->libctx = store->libctx;
 1488|    110|#ifndef FIPS_MODULE
 1489|    110|        prov->error_lib = ERR_get_next_error_library();
 1490|    110|#endif
 1491|       |
 1492|       |        /*
 1493|       |         * We are calling provider_activate while holding the store lock. This
 1494|       |         * means the init function will be called while holding a lock. Normally
 1495|       |         * we try to avoid calling a user callback while holding a lock.
 1496|       |         * However, fallbacks are never third party providers so we accept this.
 1497|       |         */
 1498|    110|        if (provider_activate(prov, 0, 0) < 0) {
  ------------------
  |  Branch (1498:13): [True: 0, False: 110]
  ------------------
 1499|      0|            ossl_provider_free(prov);
 1500|      0|            goto err;
 1501|      0|        }
 1502|    110|        prov->store = store;
 1503|    110|        if (sk_OSSL_PROVIDER_push(store->providers, prov) == 0) {
  ------------------
  |  Branch (1503:13): [True: 0, False: 110]
  ------------------
 1504|      0|            ossl_provider_free(prov);
 1505|      0|            goto err;
 1506|      0|        }
 1507|    110|        activated_fallback_count++;
 1508|    110|    }
 1509|       |
 1510|    110|    if (activated_fallback_count > 0) {
  ------------------
  |  Branch (1510:9): [True: 110, False: 0]
  ------------------
 1511|    110|        store->use_fallbacks = 0;
 1512|    110|        ret = 1;
 1513|    110|    }
 1514|    110|err:
 1515|    110|    CRYPTO_THREAD_unlock(store->lock);
 1516|    110|    return ret;
 1517|    110|}

ossl_err_load_RAND_strings:
  105|      1|{
  106|      1|#ifndef OPENSSL_NO_ERR
  107|      1|    if (ERR_reason_error_string(RAND_str_reasons[0].error) == NULL)
  ------------------
  |  Branch (107:9): [True: 1, False: 0]
  ------------------
  108|      1|        ERR_load_strings_const(RAND_str_reasons);
  109|      1|#endif
  110|      1|    return 1;
  111|      1|}

RAND_get_rand_method:
  249|  13.0k|{
  250|  13.0k|    const RAND_METHOD *tmp_meth = NULL;
  251|       |
  252|  13.0k|    if (!RUN_ONCE(&rand_init, do_rand_init))
  ------------------
  |  |  130|  13.0k|    (CRYPTO_THREAD_run_once(once, init##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (130:6): [True: 13.0k, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (252:9): [True: 0, False: 13.0k]
  ------------------
  253|      0|        return NULL;
  254|       |
  255|  13.0k|    if (rand_meth_lock == NULL)
  ------------------
  |  Branch (255:9): [True: 0, False: 13.0k]
  ------------------
  256|      0|        return NULL;
  257|       |
  258|  13.0k|    if (!CRYPTO_THREAD_read_lock(rand_meth_lock))
  ------------------
  |  Branch (258:9): [True: 0, False: 13.0k]
  ------------------
  259|      0|        return NULL;
  260|  13.0k|    tmp_meth = default_RAND_meth;
  261|  13.0k|    CRYPTO_THREAD_unlock(rand_meth_lock);
  262|  13.0k|    if (tmp_meth != NULL)
  ------------------
  |  Branch (262:9): [True: 13.0k, False: 1]
  ------------------
  263|  13.0k|        return tmp_meth;
  264|       |
  265|      1|    if (!CRYPTO_THREAD_write_lock(rand_meth_lock))
  ------------------
  |  Branch (265:9): [True: 0, False: 1]
  ------------------
  266|      0|        return NULL;
  267|      1|    if (default_RAND_meth == NULL)
  ------------------
  |  Branch (267:9): [True: 1, False: 0]
  ------------------
  268|      1|        default_RAND_meth = &ossl_rand_meth;
  269|      1|    tmp_meth = default_RAND_meth;
  270|      1|    CRYPTO_THREAD_unlock(rand_meth_lock);
  271|      1|    return tmp_meth;
  272|      1|}
RAND_status:
  327|  6.53k|{
  328|  6.53k|    EVP_RAND_CTX *rand;
  329|  6.53k|#ifndef OPENSSL_NO_DEPRECATED_3_0
  330|  6.53k|    const RAND_METHOD *meth = RAND_get_rand_method();
  331|       |
  332|  6.53k|    if (meth != NULL && meth != RAND_OpenSSL())
  ------------------
  |  Branch (332:9): [True: 6.53k, False: 0]
  |  Branch (332:25): [True: 0, False: 6.53k]
  ------------------
  333|      0|        return meth->status != NULL ? meth->status() : 0;
  ------------------
  |  Branch (333:16): [True: 0, False: 0]
  ------------------
  334|  6.53k|#endif
  335|       |
  336|  6.53k|    if ((rand = RAND_get0_primary(NULL)) == NULL)
  ------------------
  |  Branch (336:9): [True: 0, False: 6.53k]
  ------------------
  337|      0|        return 0;
  338|  6.53k|    return EVP_RAND_get_state(rand) == EVP_RAND_STATE_READY;
  ------------------
  |  | 1250|  6.53k|#define EVP_RAND_STATE_READY 1
  ------------------
  339|  6.53k|}
RAND_bytes_ex:
  400|  6.53k|{
  401|  6.53k|    RAND_GLOBAL *dgbl;
  402|  6.53k|    EVP_RAND_CTX *rand;
  403|  6.53k|#if !defined(OPENSSL_NO_DEPRECATED_3_0) && !defined(FIPS_MODULE)
  404|  6.53k|    const RAND_METHOD *meth = RAND_get_rand_method();
  405|       |
  406|  6.53k|    if (meth != NULL && meth != RAND_OpenSSL()) {
  ------------------
  |  Branch (406:9): [True: 6.53k, False: 0]
  |  Branch (406:25): [True: 0, False: 6.53k]
  ------------------
  407|      0|        if (num > INT_MAX) {
  ------------------
  |  Branch (407:13): [True: 0, False: 0]
  ------------------
  408|      0|            ERR_raise(ERR_LIB_RAND, RAND_R_ARGUMENT_OUT_OF_RANGE);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  409|      0|            return -1;
  410|      0|        }
  411|      0|        if (meth->bytes != NULL)
  ------------------
  |  Branch (411:13): [True: 0, False: 0]
  ------------------
  412|      0|            return meth->bytes(buf, (int)num);
  413|      0|        ERR_raise(ERR_LIB_RAND, RAND_R_FUNC_NOT_IMPLEMENTED);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  414|      0|        return -1;
  415|      0|    }
  416|  6.53k|#endif
  417|       |
  418|  6.53k|    dgbl = rand_get_global(ctx);
  419|  6.53k|    if (dgbl == NULL)
  ------------------
  |  Branch (419:9): [True: 0, False: 6.53k]
  ------------------
  420|      0|        return 0;
  421|  6.53k|#ifndef FIPS_MODULE
  422|  6.53k|    if (dgbl->random_provider != NULL)
  ------------------
  |  Branch (422:9): [True: 0, False: 6.53k]
  ------------------
  423|      0|        return ossl_provider_random_bytes(dgbl->random_provider,
  424|      0|            OSSL_PROV_RANDOM_PUBLIC,
  ------------------
  |  |  123|      0|#define OSSL_PROV_RANDOM_PUBLIC 0
  ------------------
  425|      0|            buf, num, strength);
  426|  6.53k|#endif /* !FIPS_MODULE */
  427|       |
  428|  6.53k|    rand = rand_get0_public(ctx, dgbl);
  429|  6.53k|    if (rand != NULL)
  ------------------
  |  Branch (429:9): [True: 6.53k, False: 0]
  ------------------
  430|  6.53k|        return EVP_RAND_generate(rand, buf, num, strength, 0, NULL, 0);
  431|       |
  432|      0|    return 0;
  433|  6.53k|}
RAND_bytes:
  436|  6.53k|{
  437|  6.53k|    if (num < 0)
  ------------------
  |  Branch (437:9): [True: 0, False: 6.53k]
  ------------------
  438|      0|        return 0;
  439|  6.53k|    return RAND_bytes_ex(NULL, buf, (size_t)num, 0);
  440|  6.53k|}
ossl_rand_ctx_new:
  447|    110|{
  448|    110|    RAND_GLOBAL *dgbl = OPENSSL_zalloc(sizeof(*dgbl));
  ------------------
  |  |  109|    110|    CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  449|       |
  450|    110|    if (dgbl == NULL)
  ------------------
  |  Branch (450:9): [True: 0, False: 110]
  ------------------
  451|      0|        return NULL;
  452|       |
  453|    110|#ifndef FIPS_MODULE
  454|       |    /*
  455|       |     * We need to ensure that base libcrypto thread handling has been
  456|       |     * initialised.
  457|       |     */
  458|    110|    OPENSSL_init_crypto(OPENSSL_INIT_BASE_ONLY, NULL);
  ------------------
  |  |   31|    110|#define OPENSSL_INIT_BASE_ONLY 0x00040000L
  ------------------
  459|       |
  460|       |    /* Prepopulate the random provider name */
  461|    110|    dgbl->random_provider_name = OPENSSL_strdup(random_provider_fips_name);
  ------------------
  |  |  136|    110|    CRYPTO_strdup(str, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_strdup(str, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  462|    110|    if (dgbl->random_provider_name == NULL)
  ------------------
  |  Branch (462:9): [True: 0, False: 110]
  ------------------
  463|      0|        goto err0;
  464|    110|#endif
  465|       |
  466|    110|    dgbl->lock = CRYPTO_THREAD_lock_new();
  467|    110|    if (dgbl->lock == NULL)
  ------------------
  |  Branch (467:9): [True: 0, False: 110]
  ------------------
  468|      0|        goto err1;
  469|       |
  470|    110|    return dgbl;
  471|       |
  472|      0|err1:
  473|      0|    CRYPTO_THREAD_lock_free(dgbl->lock);
  474|      0|#ifndef FIPS_MODULE
  475|      0|err0:
  476|      0|    OPENSSL_free(dgbl->random_provider_name);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  477|      0|#endif
  478|      0|    OPENSSL_free(dgbl);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  479|       |    return NULL;
  480|      0|}
ossl_rand_ctx_free:
  483|    109|{
  484|    109|    RAND_GLOBAL *dgbl = vdgbl;
  485|       |
  486|    109|    if (dgbl == NULL)
  ------------------
  |  Branch (486:9): [True: 0, False: 109]
  ------------------
  487|      0|        return;
  488|       |
  489|    109|    CRYPTO_THREAD_lock_free(dgbl->lock);
  490|    109|    EVP_RAND_CTX_free(dgbl->primary);
  491|    109|    EVP_RAND_CTX_free(dgbl->seed);
  492|    109|#ifndef FIPS_MODULE
  493|    109|    OPENSSL_free(dgbl->random_provider_name);
  ------------------
  |  |  132|    109|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  494|    109|#endif /* !FIPS_MODULE */
  495|    109|    OPENSSL_free(dgbl->rng_name);
  ------------------
  |  |  132|    109|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  496|    109|    OPENSSL_free(dgbl->rng_cipher);
  ------------------
  |  |  132|    109|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  497|    109|    OPENSSL_free(dgbl->rng_digest);
  ------------------
  |  |  132|    109|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  498|    109|    OPENSSL_free(dgbl->rng_propq);
  ------------------
  |  |  132|    109|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  499|    109|    OPENSSL_free(dgbl->seed_name);
  ------------------
  |  |  132|    109|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  500|    109|    OPENSSL_free(dgbl->seed_propq);
  ------------------
  |  |  132|    109|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  501|       |
  502|    109|    OPENSSL_free(dgbl);
  ------------------
  |  |  132|    109|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  503|    109|}
RAND_get0_primary:
  762|  6.53k|{
  763|  6.53k|    RAND_GLOBAL *dgbl = rand_get_global(ctx);
  764|       |
  765|  6.53k|    return dgbl == NULL ? NULL : rand_get0_primary(ctx, dgbl);
  ------------------
  |  Branch (765:12): [True: 0, False: 6.53k]
  ------------------
  766|  6.53k|}
rand_lib.c:do_rand_init:
  126|      1|{
  127|      1|#ifndef OPENSSL_NO_DEPRECATED_3_0
  128|      1|    rand_meth_lock = CRYPTO_THREAD_lock_new();
  129|      1|    if (rand_meth_lock == NULL)
  ------------------
  |  Branch (129:9): [True: 0, False: 1]
  ------------------
  130|      0|        goto err;
  131|      1|#endif /* !OPENSSL_NO_DEPRECATED_3_0 */
  132|       |
  133|      1|    if (!ossl_rand_pool_init())
  ------------------
  |  Branch (133:9): [True: 0, False: 1]
  ------------------
  134|      0|        goto err;
  135|       |
  136|      1|    rand_inited = 1;
  137|      1|    return 1;
  138|       |
  139|      0|err:
  140|      0|#ifndef OPENSSL_NO_DEPRECATED_3_0
  141|      0|    CRYPTO_THREAD_lock_free(rand_meth_lock);
  142|       |    rand_meth_lock = NULL;
  143|      0|#endif /* !OPENSSL_NO_DEPRECATED_3_0 */
  144|      0|    return 0;
  145|      1|}
rand_lib.c:rand_get_global:
   84|  13.0k|{
   85|  13.0k|    return ossl_lib_ctx_get_data(libctx, OSSL_LIB_CTX_DRBG_INDEX);
  ------------------
  |  |  100|  13.0k|#define OSSL_LIB_CTX_DRBG_INDEX 5
  ------------------
   86|  13.0k|}
rand_lib.c:rand_get0_primary:
  685|  6.53k|{
  686|  6.53k|    EVP_RAND_CTX *ret, *seed, *newseed = NULL, *primary;
  687|       |
  688|  6.53k|    if (dgbl == NULL)
  ------------------
  |  Branch (688:9): [True: 0, False: 6.53k]
  ------------------
  689|      0|        return NULL;
  690|       |
  691|  6.53k|    if (!CRYPTO_THREAD_read_lock(dgbl->lock))
  ------------------
  |  Branch (691:9): [True: 0, False: 6.53k]
  ------------------
  692|      0|        return NULL;
  693|       |
  694|  6.53k|    ret = dgbl->primary;
  695|  6.53k|    seed = dgbl->seed;
  696|  6.53k|    CRYPTO_THREAD_unlock(dgbl->lock);
  697|       |
  698|  6.53k|    if (ret != NULL)
  ------------------
  |  Branch (698:9): [True: 6.53k, False: 1]
  ------------------
  699|  6.53k|        return ret;
  700|       |
  701|      1|#if !defined(FIPS_MODULE) || !defined(OPENSSL_NO_FIPS_JITTER)
  702|       |    /* Create a seed source for libcrypto or jitter enabled FIPS provider */
  703|      1|    if (seed == NULL) {
  ------------------
  |  Branch (703:9): [True: 1, False: 0]
  ------------------
  704|      1|        ERR_set_mark();
  705|      1|        seed = newseed = rand_new_seed(ctx);
  706|      1|        if (ERR_count_to_mark() > 0) {
  ------------------
  |  Branch (706:13): [True: 0, False: 1]
  ------------------
  707|      0|            EVP_RAND_CTX_free(newseed);
  708|      0|            ERR_clear_last_mark();
  709|      0|            return NULL;
  710|      0|        }
  711|      1|        ERR_pop_to_mark();
  712|      1|    }
  713|      1|#endif /* !FIPS_MODULE || !OPENSSL_NO_FIPS_JITTER */
  714|       |
  715|       |#if defined(FIPS_MODULE)
  716|       |    /* The FIPS provider has entropy health tests instead of the primary */
  717|       |    ret = rand_new_crngt(ctx, seed);
  718|       |#else /* FIPS_MODULE */
  719|      1|    ret = rand_new_drbg(ctx, seed, PRIMARY_RESEED_INTERVAL,
  ------------------
  |  |   23|      1|#define PRIMARY_RESEED_INTERVAL (1 << 8)
  ------------------
  720|      1|        PRIMARY_RESEED_TIME_INTERVAL);
  ------------------
  |  |   25|      1|#define PRIMARY_RESEED_TIME_INTERVAL (60 * 60) /* 1 hour */
  ------------------
  721|      1|#endif /* FIPS_MODULE */
  722|       |
  723|       |    /*
  724|       |     * The primary DRBG may be shared between multiple threads so we must
  725|       |     * enable locking.
  726|       |     */
  727|      1|    if (ret == NULL || !EVP_RAND_enable_locking(ret)) {
  ------------------
  |  Branch (727:9): [True: 0, False: 1]
  |  Branch (727:24): [True: 0, False: 1]
  ------------------
  728|      0|        if (ret != NULL) {
  ------------------
  |  Branch (728:13): [True: 0, False: 0]
  ------------------
  729|      0|            ERR_raise(ERR_LIB_EVP, EVP_R_UNABLE_TO_ENABLE_LOCKING);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  730|      0|            EVP_RAND_CTX_free(ret);
  731|      0|        }
  732|      0|        if (newseed == NULL)
  ------------------
  |  Branch (732:13): [True: 0, False: 0]
  ------------------
  733|      0|            return NULL;
  734|       |        /* else carry on and store seed */
  735|      0|        ret = NULL;
  736|      0|    }
  737|       |
  738|      1|    if (!CRYPTO_THREAD_write_lock(dgbl->lock))
  ------------------
  |  Branch (738:9): [True: 0, False: 1]
  ------------------
  739|      0|        return NULL;
  740|       |
  741|      1|    primary = dgbl->primary;
  742|      1|    if (primary != NULL) {
  ------------------
  |  Branch (742:9): [True: 0, False: 1]
  ------------------
  743|      0|        CRYPTO_THREAD_unlock(dgbl->lock);
  744|      0|        EVP_RAND_CTX_free(ret);
  745|      0|        EVP_RAND_CTX_free(newseed);
  746|      0|        return primary;
  747|      0|    }
  748|      1|    if (newseed != NULL)
  ------------------
  |  Branch (748:9): [True: 1, False: 0]
  ------------------
  749|      1|        dgbl->seed = newseed;
  750|      1|    dgbl->primary = ret;
  751|      1|    CRYPTO_THREAD_unlock(dgbl->lock);
  752|       |
  753|      1|    return ret;
  754|      1|}
rand_lib.c:rand_new_seed:
  525|      1|{
  526|      1|    EVP_RAND *rand;
  527|      1|    const char *propq;
  528|      1|    char *name;
  529|      1|    EVP_RAND_CTX *ctx = NULL;
  530|      1|    int fallback = 0;
  531|      1|#ifdef OPENSSL_NO_FIPS_JITTER
  532|      1|    RAND_GLOBAL *dgbl = rand_get_global(libctx);
  533|       |
  534|      1|    if (dgbl == NULL)
  ------------------
  |  Branch (534:9): [True: 0, False: 1]
  ------------------
  535|      0|        return NULL;
  536|      1|    propq = dgbl->seed_propq;
  537|      1|    if (dgbl->seed_name != NULL) {
  ------------------
  |  Branch (537:9): [True: 0, False: 1]
  ------------------
  538|      0|        name = dgbl->seed_name;
  539|      1|    } else {
  540|      1|        fallback = 1;
  541|      1|        name = OPENSSL_MSTR(OPENSSL_DEFAULT_SEED_SRC);
  ------------------
  |  |   19|      1|#define OPENSSL_MSTR(x) OPENSSL_MSTR_HELPER(x)
  |  |  ------------------
  |  |  |  |   18|      1|#define OPENSSL_MSTR_HELPER(x) #x
  |  |  ------------------
  ------------------
  542|      1|    }
  543|       |#else /* !OPENSSL_NO_FIPS_JITTER */
  544|       |    name = "JITTER";
  545|       |    propq = "";
  546|       |#endif /* OPENSSL_NO_FIPS_JITTER */
  547|       |
  548|      1|    ERR_set_mark();
  549|      1|    rand = EVP_RAND_fetch(libctx, name, propq);
  550|      1|    ERR_pop_to_mark();
  551|      1|    if (rand == NULL) {
  ------------------
  |  Branch (551:9): [True: 0, False: 1]
  ------------------
  552|      0|        if (!fallback)
  ------------------
  |  Branch (552:13): [True: 0, False: 0]
  ------------------
  553|      0|            ERR_raise(ERR_LIB_RAND, RAND_R_UNABLE_TO_FETCH_DRBG);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  554|      0|        goto err;
  555|      0|    }
  556|      1|    ctx = EVP_RAND_CTX_new(rand, NULL);
  557|      1|    EVP_RAND_free(rand);
  558|      1|    if (ctx == NULL) {
  ------------------
  |  Branch (558:9): [True: 0, False: 1]
  ------------------
  559|      0|        ERR_raise(ERR_LIB_RAND, RAND_R_UNABLE_TO_CREATE_DRBG);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  560|      0|        goto err;
  561|      0|    }
  562|      1|    if (!EVP_RAND_instantiate(ctx, 0, 0, NULL, 0, NULL)) {
  ------------------
  |  Branch (562:9): [True: 0, False: 1]
  ------------------
  563|      0|        ERR_raise(ERR_LIB_RAND, RAND_R_ERROR_INSTANTIATING_DRBG);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  564|      0|        goto err;
  565|      0|    }
  566|      1|    return ctx;
  567|      0|err:
  568|      0|    EVP_RAND_CTX_free(ctx);
  569|       |    return NULL;
  570|      1|}
rand_lib.c:rand_new_drbg:
  593|      2|{
  594|      2|    EVP_RAND *rand;
  595|      2|    RAND_GLOBAL *dgbl = rand_get_global(libctx);
  596|      2|    EVP_RAND_CTX *ctx;
  597|      2|    OSSL_PARAM params[9], *p = params;
  598|      2|    const OSSL_PARAM *settables;
  599|      2|    const char *prov_name;
  600|      2|    char *name, *cipher;
  601|      2|    int use_df = 1;
  602|       |
  603|      2|    if (dgbl == NULL)
  ------------------
  |  Branch (603:9): [True: 0, False: 2]
  ------------------
  604|      0|        return NULL;
  605|      2|    name = dgbl->rng_name != NULL ? dgbl->rng_name : "CTR-DRBG";
  ------------------
  |  Branch (605:12): [True: 0, False: 2]
  ------------------
  606|      2|    rand = EVP_RAND_fetch(libctx, name, dgbl->rng_propq);
  607|      2|    if (rand == NULL) {
  ------------------
  |  Branch (607:9): [True: 0, False: 2]
  ------------------
  608|      0|        ERR_raise(ERR_LIB_RAND, RAND_R_UNABLE_TO_FETCH_DRBG);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  609|      0|        return NULL;
  610|      0|    }
  611|      2|    prov_name = ossl_provider_name(EVP_RAND_get0_provider(rand));
  612|      2|    ctx = EVP_RAND_CTX_new(rand, parent);
  613|      2|    EVP_RAND_free(rand);
  614|      2|    if (ctx == NULL) {
  ------------------
  |  Branch (614:9): [True: 0, False: 2]
  ------------------
  615|      0|        ERR_raise(ERR_LIB_RAND, RAND_R_UNABLE_TO_CREATE_DRBG);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  616|      0|        return NULL;
  617|      0|    }
  618|       |
  619|      2|    settables = EVP_RAND_CTX_settable_params(ctx);
  620|      2|    if (OSSL_PARAM_locate_const(settables, OSSL_DRBG_PARAM_CIPHER)) {
  ------------------
  |  |  237|      2|# define OSSL_DRBG_PARAM_CIPHER OSSL_ALG_PARAM_CIPHER
  |  |  ------------------
  |  |  |  |  126|      2|# define OSSL_ALG_PARAM_CIPHER "cipher"
  |  |  ------------------
  ------------------
  |  Branch (620:9): [True: 2, False: 0]
  ------------------
  621|      2|        cipher = dgbl->rng_cipher != NULL ? dgbl->rng_cipher : "AES-256-CTR";
  ------------------
  |  Branch (621:18): [True: 0, False: 2]
  ------------------
  622|      2|        *p++ = OSSL_PARAM_construct_utf8_string(OSSL_DRBG_PARAM_CIPHER,
  ------------------
  |  |  237|      2|# define OSSL_DRBG_PARAM_CIPHER OSSL_ALG_PARAM_CIPHER
  |  |  ------------------
  |  |  |  |  126|      2|# define OSSL_ALG_PARAM_CIPHER "cipher"
  |  |  ------------------
  ------------------
  623|      2|            cipher, 0);
  624|      2|    }
  625|      2|    if (dgbl->rng_digest != NULL
  ------------------
  |  Branch (625:9): [True: 0, False: 2]
  ------------------
  626|      0|        && OSSL_PARAM_locate_const(settables, OSSL_DRBG_PARAM_DIGEST))
  ------------------
  |  |  238|      0|# define OSSL_DRBG_PARAM_DIGEST OSSL_ALG_PARAM_DIGEST
  |  |  ------------------
  |  |  |  |  127|      0|# define OSSL_ALG_PARAM_DIGEST "digest"
  |  |  ------------------
  ------------------
  |  Branch (626:12): [True: 0, False: 0]
  ------------------
  627|      0|        *p++ = OSSL_PARAM_construct_utf8_string(OSSL_DRBG_PARAM_DIGEST,
  ------------------
  |  |  238|      0|# define OSSL_DRBG_PARAM_DIGEST OSSL_ALG_PARAM_DIGEST
  |  |  ------------------
  |  |  |  |  127|      0|# define OSSL_ALG_PARAM_DIGEST "digest"
  |  |  ------------------
  ------------------
  628|      0|            dgbl->rng_digest, 0);
  629|      2|    if (prov_name != NULL)
  ------------------
  |  Branch (629:9): [True: 2, False: 0]
  ------------------
  630|      2|        *p++ = OSSL_PARAM_construct_utf8_string(OSSL_PROV_PARAM_CORE_PROV_NAME,
  ------------------
  |  |  513|      2|# define OSSL_PROV_PARAM_CORE_PROV_NAME "provider-name"
  ------------------
  631|      2|            (char *)prov_name, 0);
  632|      2|    if (dgbl->rng_propq != NULL)
  ------------------
  |  Branch (632:9): [True: 0, False: 2]
  ------------------
  633|      0|        *p++ = OSSL_PARAM_construct_utf8_string(OSSL_DRBG_PARAM_PROPERTIES,
  ------------------
  |  |  252|      0|# define OSSL_DRBG_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES
  |  |  ------------------
  |  |  |  |  130|      0|# define OSSL_ALG_PARAM_PROPERTIES "properties"
  |  |  ------------------
  ------------------
  634|      0|            dgbl->rng_propq, 0);
  635|      2|    if (OSSL_PARAM_locate_const(settables, OSSL_ALG_PARAM_MAC))
  ------------------
  |  |  129|      2|# define OSSL_ALG_PARAM_MAC "mac"
  ------------------
  |  Branch (635:9): [True: 0, False: 2]
  ------------------
  636|      0|        *p++ = OSSL_PARAM_construct_utf8_string(OSSL_ALG_PARAM_MAC, "HMAC", 0);
  ------------------
  |  |  129|      0|# define OSSL_ALG_PARAM_MAC "mac"
  ------------------
  637|      2|    if (OSSL_PARAM_locate_const(settables, OSSL_DRBG_PARAM_USE_DF))
  ------------------
  |  |  259|      2|# define OSSL_DRBG_PARAM_USE_DF "use_derivation_function"
  ------------------
  |  Branch (637:9): [True: 2, False: 0]
  ------------------
  638|      2|        *p++ = OSSL_PARAM_construct_int(OSSL_DRBG_PARAM_USE_DF, &use_df);
  ------------------
  |  |  259|      2|# define OSSL_DRBG_PARAM_USE_DF "use_derivation_function"
  ------------------
  639|      2|    *p++ = OSSL_PARAM_construct_uint(OSSL_DRBG_PARAM_RESEED_REQUESTS,
  ------------------
  |  |  255|      2|# define OSSL_DRBG_PARAM_RESEED_REQUESTS "reseed_requests"
  ------------------
  640|      2|        &reseed_interval);
  641|      2|    *p++ = OSSL_PARAM_construct_time_t(OSSL_DRBG_PARAM_RESEED_TIME_INTERVAL,
  ------------------
  |  |  257|      2|# define OSSL_DRBG_PARAM_RESEED_TIME_INTERVAL "reseed_time_interval"
  ------------------
  642|      2|        &reseed_time_interval);
  643|      2|    *p = OSSL_PARAM_construct_end();
  644|      2|    if (!EVP_RAND_instantiate(ctx, 0, 0, NULL, 0, params)) {
  ------------------
  |  Branch (644:9): [True: 0, False: 2]
  ------------------
  645|      0|        ERR_raise(ERR_LIB_RAND, RAND_R_ERROR_INSTANTIATING_DRBG);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  646|      0|        EVP_RAND_CTX_free(ctx);
  647|      0|        return NULL;
  648|      0|    }
  649|      2|    return ctx;
  650|      2|}
rand_lib.c:rand_get0_public:
  769|  6.53k|{
  770|  6.53k|    EVP_RAND_CTX *rand, *primary;
  771|  6.53k|    OSSL_LIB_CTX *origctx = ctx;
  772|       |
  773|  6.53k|    ctx = ossl_lib_ctx_get_concrete(ctx);
  774|       |
  775|  6.53k|    if (ctx == NULL)
  ------------------
  |  Branch (775:9): [True: 0, False: 6.53k]
  ------------------
  776|      0|        return NULL;
  777|       |
  778|  6.53k|    if (dgbl == NULL)
  ------------------
  |  Branch (778:9): [True: 0, False: 6.53k]
  ------------------
  779|      0|        return NULL;
  780|       |
  781|  6.53k|    rand = CRYPTO_THREAD_get_local_ex(CRYPTO_THREAD_LOCAL_DRBG_PUB_KEY, ctx);
  782|  6.53k|    if (rand == NULL) {
  ------------------
  |  Branch (782:9): [True: 1, False: 6.53k]
  ------------------
  783|      1|        primary = rand_get0_primary(origctx, dgbl);
  784|      1|        if (primary == NULL)
  ------------------
  |  Branch (784:13): [True: 0, False: 1]
  ------------------
  785|      0|            return NULL;
  786|       |
  787|       |        /*
  788|       |         * If the private is also NULL then this is the first time we've
  789|       |         * used this thread.
  790|       |         */
  791|      1|        if (CRYPTO_THREAD_get_local_ex(CRYPTO_THREAD_LOCAL_DRBG_PRIV_KEY, ctx) == NULL
  ------------------
  |  Branch (791:13): [True: 1, False: 0]
  ------------------
  792|      1|            && !ossl_init_thread_start(NULL, ctx, rand_delete_thread_state))
  ------------------
  |  Branch (792:16): [True: 0, False: 1]
  ------------------
  793|      0|            return NULL;
  794|      1|        rand = rand_new_drbg(ctx, primary, SECONDARY_RESEED_INTERVAL,
  ------------------
  |  |   24|      1|#define SECONDARY_RESEED_INTERVAL (1 << 16)
  ------------------
  795|      1|            SECONDARY_RESEED_TIME_INTERVAL);
  ------------------
  |  |   26|      1|#define SECONDARY_RESEED_TIME_INTERVAL (7 * 60) /* 7 minutes */
  ------------------
  796|      1|        if (!CRYPTO_THREAD_set_local_ex(CRYPTO_THREAD_LOCAL_DRBG_PUB_KEY, ctx, rand)) {
  ------------------
  |  Branch (796:13): [True: 0, False: 1]
  ------------------
  797|      0|            EVP_RAND_CTX_free(rand);
  798|      0|            rand = NULL;
  799|      0|        }
  800|      1|    }
  801|  6.53k|    return rand;
  802|  6.53k|}

RAND_OpenSSL:
   63|  13.0k|{
   64|  13.0k|    return &ossl_rand_meth;
   65|  13.0k|}

ossl_rand_pool_new:
   23|      1|{
   24|      1|    RAND_POOL *pool = OPENSSL_zalloc(sizeof(*pool));
  ------------------
  |  |  109|      1|    CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   25|      1|    size_t min_alloc_size = RAND_POOL_MIN_ALLOCATION(secure);
  ------------------
  |  |   59|      1|#define RAND_POOL_MIN_ALLOCATION(secure) ((secure) ? 16 : 48)
  |  |  ------------------
  |  |  |  Branch (59:43): [True: 1, False: 0]
  |  |  ------------------
  ------------------
   26|       |
   27|      1|    if (pool == NULL)
  ------------------
  |  Branch (27:9): [True: 0, False: 1]
  ------------------
   28|      0|        return NULL;
   29|       |
   30|      1|    pool->min_len = min_len;
   31|      1|    pool->max_len = (max_len > RAND_POOL_MAX_LENGTH) ? RAND_POOL_MAX_LENGTH : max_len;
  ------------------
  |  |   36|      1|#define RAND_POOL_MAX_LENGTH (RAND_POOL_FACTOR * 3 * (RAND_DRBG_STRENGTH / 16))
  |  |  ------------------
  |  |  |  |   35|      1|#define RAND_POOL_FACTOR 256
  |  |  ------------------
  |  |               #define RAND_POOL_MAX_LENGTH (RAND_POOL_FACTOR * 3 * (RAND_DRBG_STRENGTH / 16))
  |  |  ------------------
  |  |  |  |   37|      1|#define RAND_DRBG_STRENGTH 256
  |  |  ------------------
  ------------------
                  pool->max_len = (max_len > RAND_POOL_MAX_LENGTH) ? RAND_POOL_MAX_LENGTH : max_len;
  ------------------
  |  |   36|      1|#define RAND_POOL_MAX_LENGTH (RAND_POOL_FACTOR * 3 * (RAND_DRBG_STRENGTH / 16))
  |  |  ------------------
  |  |  |  |   35|      1|#define RAND_POOL_FACTOR 256
  |  |  ------------------
  |  |               #define RAND_POOL_MAX_LENGTH (RAND_POOL_FACTOR * 3 * (RAND_DRBG_STRENGTH / 16))
  |  |  ------------------
  |  |  |  |   37|      1|#define RAND_DRBG_STRENGTH 256
  |  |  ------------------
  ------------------
  |  Branch (31:21): [True: 1, False: 0]
  ------------------
   32|      1|    pool->alloc_len = min_len < min_alloc_size ? min_alloc_size : min_len;
  ------------------
  |  Branch (32:23): [True: 0, False: 1]
  ------------------
   33|      1|    if (pool->alloc_len > pool->max_len)
  ------------------
  |  Branch (33:9): [True: 0, False: 1]
  ------------------
   34|      0|        pool->alloc_len = pool->max_len;
   35|       |
   36|      1|    if (secure)
  ------------------
  |  Branch (36:9): [True: 1, False: 0]
  ------------------
   37|      1|        pool->buffer = OPENSSL_secure_zalloc(pool->alloc_len);
  ------------------
  |  |  142|      1|    CRYPTO_secure_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_secure_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   38|      0|    else
   39|      0|        pool->buffer = OPENSSL_zalloc(pool->alloc_len);
  ------------------
  |  |  109|      0|    CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   40|       |
   41|      1|    if (pool->buffer == NULL)
  ------------------
  |  Branch (41:9): [True: 0, False: 1]
  ------------------
   42|      0|        goto err;
   43|       |
   44|      1|    pool->entropy_requested = entropy_requested;
   45|      1|    pool->secure = secure;
   46|      1|    return pool;
   47|       |
   48|      0|err:
   49|      0|    OPENSSL_free(pool);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   50|       |    return NULL;
   51|      1|}
ossl_rand_pool_free:
   87|      1|{
   88|      1|    if (pool == NULL)
  ------------------
  |  Branch (88:9): [True: 0, False: 1]
  ------------------
   89|      0|        return;
   90|       |
   91|       |    /*
   92|       |     * Although it would be advisable from a cryptographical viewpoint,
   93|       |     * we are not allowed to clear attached buffers, since they are passed
   94|       |     * to ossl_rand_pool_attach() as `const unsigned char*`.
   95|       |     * (see corresponding comment in ossl_rand_pool_attach()).
   96|       |     */
   97|      1|    if (!pool->attached) {
  ------------------
  |  Branch (97:9): [True: 1, False: 0]
  ------------------
   98|      1|        if (pool->secure)
  ------------------
  |  Branch (98:13): [True: 1, False: 0]
  ------------------
   99|      1|            OPENSSL_secure_clear_free(pool->buffer, pool->alloc_len);
  ------------------
  |  |  150|      1|    CRYPTO_secure_clear_free(addr, num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_secure_clear_free(addr, num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  100|      0|        else
  101|      0|            OPENSSL_clear_free(pool->buffer, pool->alloc_len);
  ------------------
  |  |  130|      0|    CRYPTO_clear_free(addr, num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_clear_free(addr, num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  102|      1|    }
  103|       |
  104|      1|    OPENSSL_free(pool);
  ------------------
  |  |  132|      1|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  105|      1|}
ossl_rand_pool_length:
  127|      1|{
  128|      1|    return pool->len;
  129|      1|}
ossl_rand_pool_detach:
  138|      1|{
  139|      1|    unsigned char *ret = pool->buffer;
  140|       |    pool->buffer = NULL;
  141|      1|    pool->entropy = 0;
  142|      1|    return ret;
  143|      1|}
ossl_rand_pool_entropy_available:
  172|      1|{
  173|      1|    if (pool->entropy < pool->entropy_requested)
  ------------------
  |  Branch (173:9): [True: 0, False: 1]
  ------------------
  174|      0|        return 0;
  175|       |
  176|      1|    if (pool->len < pool->min_len)
  ------------------
  |  Branch (176:9): [True: 0, False: 1]
  ------------------
  177|      0|        return 0;
  178|       |
  179|      1|    return pool->entropy;
  180|      1|}
ossl_rand_pool_entropy_needed:
  188|      1|{
  189|      1|    if (pool->entropy < pool->entropy_requested)
  ------------------
  |  Branch (189:9): [True: 1, False: 0]
  ------------------
  190|      1|        return pool->entropy_requested - pool->entropy;
  191|       |
  192|      0|    return 0;
  193|      1|}
ossl_rand_pool_bytes_needed:
  236|      1|{
  237|      1|    size_t bytes_needed;
  238|      1|    size_t entropy_needed = ossl_rand_pool_entropy_needed(pool);
  239|       |
  240|      1|    if (entropy_factor < 1) {
  ------------------
  |  Branch (240:9): [True: 0, False: 1]
  ------------------
  241|      0|        ERR_raise(ERR_LIB_RAND, RAND_R_ARGUMENT_OUT_OF_RANGE);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  242|      0|        return 0;
  243|      0|    }
  244|       |
  245|      1|    bytes_needed = ENTROPY_TO_BYTES(entropy_needed, entropy_factor);
  ------------------
  |  |  161|      1|    (((bits) * (entropy_factor) + 7) / 8)
  ------------------
  246|       |
  247|      1|    if (bytes_needed > pool->max_len - pool->len) {
  ------------------
  |  Branch (247:9): [True: 0, False: 1]
  ------------------
  248|       |        /* not enough space left */
  249|      0|        ERR_raise_data(ERR_LIB_RAND, RAND_R_RANDOM_POOL_OVERFLOW,
  ------------------
  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  ------------------
  |  |  361|      0|        ERR_set_error)
  ------------------
                      ERR_raise_data(ERR_LIB_RAND, RAND_R_RANDOM_POOL_OVERFLOW,
  ------------------
  |  |   80|      0|#define ERR_LIB_RAND 36
  ------------------
                      ERR_raise_data(ERR_LIB_RAND, RAND_R_RANDOM_POOL_OVERFLOW,
  ------------------
  |  |   53|      0|#define RAND_R_RANDOM_POOL_OVERFLOW 125
  ------------------
  250|      0|            "entropy_factor=%u, entropy_needed=%zu, bytes_needed=%zu,"
  251|      0|            "pool->max_len=%zu, pool->len=%zu",
  252|      0|            entropy_factor, entropy_needed, bytes_needed,
  253|      0|            pool->max_len, pool->len);
  254|      0|        return 0;
  255|      0|    }
  256|       |
  257|      1|    if (pool->len < pool->min_len && bytes_needed < pool->min_len - pool->len)
  ------------------
  |  Branch (257:9): [True: 1, False: 0]
  |  Branch (257:38): [True: 0, False: 1]
  ------------------
  258|       |        /* to meet the min_len requirement */
  259|      0|        bytes_needed = pool->min_len - pool->len;
  260|       |
  261|       |    /*
  262|       |     * Make sure the buffer is large enough for the requested amount
  263|       |     * of data. This guarantees that existing code patterns where
  264|       |     * ossl_rand_pool_add_begin, ossl_rand_pool_add_end or ossl_rand_pool_add
  265|       |     * are used to collect entropy data without any error handling
  266|       |     * whatsoever, continue to be valid.
  267|       |     * Furthermore if the allocation here fails once, make sure that
  268|       |     * we don't fall back to a less secure or even blocking random source,
  269|       |     * as that could happen by the existing code patterns.
  270|       |     * This is not a concern for additional data, therefore that
  271|       |     * is not needed if rand_pool_grow fails in other places.
  272|       |     */
  273|      1|    if (!rand_pool_grow(pool, bytes_needed)) {
  ------------------
  |  Branch (273:9): [True: 0, False: 1]
  ------------------
  274|       |        /* persistent error for this pool */
  275|      0|        pool->max_len = pool->len = 0;
  276|      0|        return 0;
  277|      0|    }
  278|       |
  279|      1|    return bytes_needed;
  280|      1|}
ossl_rand_pool_add_begin:
  353|      1|{
  354|      1|    if (len == 0)
  ------------------
  |  Branch (354:9): [True: 0, False: 1]
  ------------------
  355|      0|        return NULL;
  356|       |
  357|      1|    if (len > pool->max_len - pool->len) {
  ------------------
  |  Branch (357:9): [True: 0, False: 1]
  ------------------
  358|      0|        ERR_raise(ERR_LIB_RAND, RAND_R_RANDOM_POOL_OVERFLOW);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  359|      0|        return NULL;
  360|      0|    }
  361|       |
  362|      1|    if (pool->buffer == NULL) {
  ------------------
  |  Branch (362:9): [True: 0, False: 1]
  ------------------
  363|      0|        ERR_raise(ERR_LIB_RAND, ERR_R_INTERNAL_ERROR);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  364|      0|        return NULL;
  365|      0|    }
  366|       |
  367|       |    /*
  368|       |     * As long as the allocation request stays within the limits given
  369|       |     * by ossl_rand_pool_bytes_needed this rand_pool_grow below is guaranteed
  370|       |     * to succeed, thus no allocation happens.
  371|       |     * We have that only for cases when a pool is used to collect
  372|       |     * additional data. Then the buffer might need to grow here,
  373|       |     * and of course the caller is responsible to check the return
  374|       |     * value of this function.
  375|       |     */
  376|      1|    if (!rand_pool_grow(pool, len))
  ------------------
  |  Branch (376:9): [True: 0, False: 1]
  ------------------
  377|      0|        return NULL;
  378|       |
  379|      1|    return pool->buffer + pool->len;
  380|      1|}
ossl_rand_pool_add_end:
  392|      1|{
  393|      1|    if (len > pool->alloc_len - pool->len) {
  ------------------
  |  Branch (393:9): [True: 0, False: 1]
  ------------------
  394|      0|        ERR_raise(ERR_LIB_RAND, RAND_R_RANDOM_POOL_OVERFLOW);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  395|      0|        return 0;
  396|      0|    }
  397|       |
  398|      1|    if (len > 0) {
  ------------------
  |  Branch (398:9): [True: 1, False: 0]
  ------------------
  399|      1|        pool->len += len;
  400|      1|        pool->entropy += entropy;
  401|      1|    }
  402|       |
  403|      1|    return 1;
  404|      1|}
ossl_rand_pool_adin_mix_in:
  419|      1|{
  420|      1|    if (adin == NULL || adin_len == 0)
  ------------------
  |  Branch (420:9): [True: 0, False: 1]
  |  Branch (420:25): [True: 0, False: 1]
  ------------------
  421|       |        /* Nothing to mix in -> success */
  422|      0|        return 1;
  423|       |
  424|      1|    if (pool->buffer == NULL) {
  ------------------
  |  Branch (424:9): [True: 0, False: 1]
  ------------------
  425|      0|        ERR_raise(ERR_LIB_RAND, ERR_R_INTERNAL_ERROR);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  426|      0|        return 0;
  427|      0|    }
  428|       |
  429|      1|    if (pool->len == 0) {
  ------------------
  |  Branch (429:9): [True: 0, False: 1]
  ------------------
  430|      0|        ERR_raise(ERR_LIB_RAND, RAND_R_RANDOM_POOL_IS_EMPTY);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  431|      0|        return 0;
  432|      0|    }
  433|       |
  434|      1|    if (adin != NULL && adin_len > 0) {
  ------------------
  |  Branch (434:9): [True: 1, False: 0]
  |  Branch (434:25): [True: 1, False: 0]
  ------------------
  435|      1|        size_t i;
  436|       |
  437|       |        /* xor the additional data into the pool */
  438|      9|        for (i = 0; i < adin_len; ++i)
  ------------------
  |  Branch (438:21): [True: 8, False: 1]
  ------------------
  439|      8|            pool->buffer[i % pool->len] ^= adin[i];
  440|      1|    }
  441|       |
  442|      1|    return 1;
  443|      1|}
rand_pool.c:rand_pool_grow:
  197|      2|{
  198|      2|    if (len > pool->alloc_len - pool->len) {
  ------------------
  |  Branch (198:9): [True: 0, False: 2]
  ------------------
  199|      0|        unsigned char *p;
  200|      0|        const size_t limit = pool->max_len / 2;
  201|      0|        size_t newlen = pool->alloc_len;
  202|       |
  203|      0|        if (pool->attached || len > pool->max_len - pool->len) {
  ------------------
  |  Branch (203:13): [True: 0, False: 0]
  |  Branch (203:31): [True: 0, False: 0]
  ------------------
  204|      0|            ERR_raise(ERR_LIB_RAND, ERR_R_INTERNAL_ERROR);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  205|      0|            return 0;
  206|      0|        }
  207|       |
  208|      0|        do
  209|      0|            newlen = newlen < limit ? newlen * 2 : pool->max_len;
  ------------------
  |  Branch (209:22): [True: 0, False: 0]
  ------------------
  210|      0|        while (len > newlen - pool->len);
  ------------------
  |  Branch (210:16): [True: 0, False: 0]
  ------------------
  211|       |
  212|      0|        if (pool->secure)
  ------------------
  |  Branch (212:13): [True: 0, False: 0]
  ------------------
  213|      0|            p = OPENSSL_secure_zalloc(newlen);
  ------------------
  |  |  142|      0|    CRYPTO_secure_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_secure_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  214|      0|        else
  215|      0|            p = OPENSSL_zalloc(newlen);
  ------------------
  |  |  109|      0|    CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  216|      0|        if (p == NULL)
  ------------------
  |  Branch (216:13): [True: 0, False: 0]
  ------------------
  217|      0|            return 0;
  218|      0|        memcpy(p, pool->buffer, pool->len);
  219|      0|        if (pool->secure)
  ------------------
  |  Branch (219:13): [True: 0, False: 0]
  ------------------
  220|      0|            OPENSSL_secure_clear_free(pool->buffer, pool->alloc_len);
  ------------------
  |  |  150|      0|    CRYPTO_secure_clear_free(addr, num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_secure_clear_free(addr, num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  221|      0|        else
  222|      0|            OPENSSL_clear_free(pool->buffer, pool->alloc_len);
  ------------------
  |  |  130|      0|    CRYPTO_clear_free(addr, num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_clear_free(addr, num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  223|      0|        pool->buffer = p;
  224|      0|        pool->alloc_len = newlen;
  225|      0|    }
  226|      2|    return 1;
  227|      2|}

ossl_err_load_RSA_strings:
  158|      1|{
  159|      1|#ifndef OPENSSL_NO_ERR
  160|      1|    if (ERR_reason_error_string(RSA_str_reasons[0].error) == NULL)
  ------------------
  |  Branch (160:9): [True: 1, False: 0]
  ------------------
  161|      1|        ERR_load_strings_const(RSA_str_reasons);
  162|      1|#endif
  163|      1|    return 1;
  164|      1|}

ossl_self_test_set_callback_new:
   35|    110|{
   36|    110|    SELF_TEST_CB *stcb;
   37|       |
   38|    110|    stcb = OPENSSL_zalloc(sizeof(*stcb));
  ------------------
  |  |  109|    110|    CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   39|    110|    return stcb;
   40|    110|}
ossl_self_test_set_callback_free:
   43|    109|{
   44|    109|    OPENSSL_free(stcb);
  ------------------
  |  |  132|    109|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   45|    109|}

ossl_err_load_SM2_strings:
   41|      1|{
   42|      1|#ifndef OPENSSL_NO_ERR
   43|      1|    if (ERR_reason_error_string(SM2_str_reasons[0].error) == NULL)
  ------------------
  |  Branch (43:9): [True: 1, False: 0]
  ------------------
   44|      1|        ERR_load_strings_const(SM2_str_reasons);
   45|      1|#endif
   46|      1|    return 1;
   47|      1|}

EVP_sm3:
   24|      1|{
   25|      1|    return &sm3_md;
   26|      1|}

ossl_sa_new:
   59|  1.76k|{
   60|  1.76k|    OPENSSL_SA *res = OPENSSL_zalloc(sizeof(*res));
  ------------------
  |  |  109|  1.76k|    CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   61|       |
   62|  1.76k|    return res;
   63|  1.76k|}
ossl_sa_free:
  111|  1.74k|{
  112|  1.74k|    if (sa != NULL) {
  ------------------
  |  Branch (112:9): [True: 1.74k, False: 0]
  ------------------
  113|  1.74k|        sa_doall(sa, &sa_free_node, NULL, NULL);
  114|  1.74k|        OPENSSL_free(sa);
  ------------------
  |  |  132|  1.74k|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  115|  1.74k|    }
  116|  1.74k|}
ossl_sa_doall:
  135|     80|{
  136|     80|    struct trampoline_st tramp;
  137|       |
  138|     80|    tramp.func = leaf;
  139|     80|    if (sa != NULL)
  ------------------
  |  Branch (139:9): [True: 80, False: 0]
  ------------------
  140|     80|        sa_doall(sa, NULL, &trampoline, &tramp);
  141|     80|}
ossl_sa_doall_arg:
  146|  1.82k|{
  147|  1.82k|    if (sa != NULL)
  ------------------
  |  Branch (147:9): [True: 1.82k, False: 0]
  ------------------
  148|  1.82k|        sa_doall(sa, NULL, leaf, arg);
  149|  1.82k|}
ossl_sa_get:
  157|  9.19k|{
  158|  9.19k|    int level;
  159|  9.19k|    void **p, *r = NULL;
  160|       |
  161|  9.19k|    if (sa == NULL || sa->nelem == 0)
  ------------------
  |  Branch (161:9): [True: 0, False: 9.19k]
  |  Branch (161:23): [True: 4, False: 9.18k]
  ------------------
  162|      4|        return NULL;
  163|       |
  164|  9.18k|    if (n <= sa->top) {
  ------------------
  |  Branch (164:9): [True: 9.06k, False: 124]
  ------------------
  165|  9.06k|        p = sa->nodes;
  166|  81.2k|        for (level = sa->levels - 1; p != NULL && level > 0; level--)
  ------------------
  |  Branch (166:38): [True: 81.0k, False: 142]
  |  Branch (166:51): [True: 72.1k, False: 8.92k]
  ------------------
  167|  72.1k|            p = (void **)p[(n >> (OPENSSL_SA_BLOCK_BITS * level))
  ------------------
  |  |   34|  72.1k|#define OPENSSL_SA_BLOCK_BITS 4
  ------------------
  168|  72.1k|                & SA_BLOCK_MASK];
  ------------------
  |  |   46|  72.1k|#define SA_BLOCK_MASK (SA_BLOCK_MAX - 1)
  |  |  ------------------
  |  |  |  |   45|  72.1k|#define SA_BLOCK_MAX (1 << OPENSSL_SA_BLOCK_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|  72.1k|#define OPENSSL_SA_BLOCK_BITS 4
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  169|  9.06k|        r = p == NULL ? NULL : p[n & SA_BLOCK_MASK];
  ------------------
  |  |   46|  8.92k|#define SA_BLOCK_MASK (SA_BLOCK_MAX - 1)
  |  |  ------------------
  |  |  |  |   45|  8.92k|#define SA_BLOCK_MAX (1 << OPENSSL_SA_BLOCK_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|  8.92k|#define OPENSSL_SA_BLOCK_BITS 4
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (169:13): [True: 142, False: 8.92k]
  ------------------
  170|  9.06k|    }
  171|  9.18k|    return r;
  172|  9.19k|}
ossl_sa_set:
  180|    140|{
  181|    140|    int i, level = 1;
  182|    140|    ossl_uintmax_t n = posn;
  183|    140|    void **p;
  184|       |
  185|    140|    if (sa == NULL)
  ------------------
  |  Branch (185:9): [True: 0, False: 140]
  ------------------
  186|      0|        return 0;
  187|       |
  188|    543|    for (level = 1; level < SA_BLOCK_MAX_LEVELS; level++)
  ------------------
  |  |   47|    543|#define SA_BLOCK_MAX_LEVELS (((int)sizeof(ossl_uintmax_t) * 8 \
  |  |   48|    543|                                 + OPENSSL_SA_BLOCK_BITS - 1) \
  |  |  ------------------
  |  |  |  |   34|    543|#define OPENSSL_SA_BLOCK_BITS 4
  |  |  ------------------
  |  |   49|    543|    / OPENSSL_SA_BLOCK_BITS)
  |  |  ------------------
  |  |  |  |   34|    543|#define OPENSSL_SA_BLOCK_BITS 4
  |  |  ------------------
  ------------------
  |  Branch (188:21): [True: 543, False: 0]
  ------------------
  189|    543|        if ((n >>= OPENSSL_SA_BLOCK_BITS) == 0)
  ------------------
  |  |   34|    543|#define OPENSSL_SA_BLOCK_BITS 4
  ------------------
  |  Branch (189:13): [True: 140, False: 403]
  ------------------
  190|    140|            break;
  191|       |
  192|    161|    for (; sa->levels < level; sa->levels++) {
  ------------------
  |  Branch (192:12): [True: 21, False: 140]
  ------------------
  193|     21|        p = alloc_node();
  194|     21|        if (p == NULL)
  ------------------
  |  Branch (194:13): [True: 0, False: 21]
  ------------------
  195|      0|            return 0;
  196|     21|        p[0] = sa->nodes;
  197|     21|        sa->nodes = p;
  198|     21|    }
  199|    140|    if (sa->top < posn)
  ------------------
  |  Branch (199:9): [True: 65, False: 75]
  ------------------
  200|     65|        sa->top = posn;
  201|       |
  202|    140|    p = sa->nodes;
  203|    556|    for (level = sa->levels - 1; level > 0; level--) {
  ------------------
  |  Branch (203:34): [True: 416, False: 140]
  ------------------
  204|    416|        i = (posn >> (OPENSSL_SA_BLOCK_BITS * level)) & SA_BLOCK_MASK;
  ------------------
  |  |   34|    416|#define OPENSSL_SA_BLOCK_BITS 4
  ------------------
                      i = (posn >> (OPENSSL_SA_BLOCK_BITS * level)) & SA_BLOCK_MASK;
  ------------------
  |  |   46|    416|#define SA_BLOCK_MASK (SA_BLOCK_MAX - 1)
  |  |  ------------------
  |  |  |  |   45|    416|#define SA_BLOCK_MAX (1 << OPENSSL_SA_BLOCK_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|    416|#define OPENSSL_SA_BLOCK_BITS 4
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  205|    416|        if (p[i] == NULL && (p[i] = alloc_node()) == NULL)
  ------------------
  |  Branch (205:13): [True: 292, False: 124]
  |  Branch (205:29): [True: 0, False: 292]
  ------------------
  206|      0|            return 0;
  207|    416|        p = p[i];
  208|    416|    }
  209|    140|    p += posn & SA_BLOCK_MASK;
  ------------------
  |  |   46|    140|#define SA_BLOCK_MASK (SA_BLOCK_MAX - 1)
  |  |  ------------------
  |  |  |  |   45|    140|#define SA_BLOCK_MAX (1 << OPENSSL_SA_BLOCK_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|    140|#define OPENSSL_SA_BLOCK_BITS 4
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  210|    140|    if (val == NULL && *p != NULL)
  ------------------
  |  Branch (210:9): [True: 0, False: 140]
  |  Branch (210:24): [True: 0, False: 0]
  ------------------
  211|      0|        sa->nelem--;
  212|    140|    else if (val != NULL && *p == NULL)
  ------------------
  |  Branch (212:14): [True: 140, False: 0]
  |  Branch (212:29): [True: 137, False: 3]
  ------------------
  213|    137|        sa->nelem++;
  214|    140|    *p = val;
  215|    140|    return 1;
  216|    140|}
sparse_array.c:sa_doall:
   67|  3.64k|{
   68|  3.64k|    int i[SA_BLOCK_MAX_LEVELS];
   69|  3.64k|    void *nodes[SA_BLOCK_MAX_LEVELS];
   70|  3.64k|    ossl_uintmax_t idx = 0;
   71|  3.64k|    int l = 0;
   72|       |
   73|  3.64k|    i[0] = 0;
   74|  3.64k|    nodes[0] = sa->nodes;
   75|  65.6k|    while (l >= 0) {
  ------------------
  |  Branch (75:12): [True: 62.0k, False: 3.64k]
  ------------------
   76|  62.0k|        const int n = i[l];
   77|  62.0k|        void **const p = nodes[l];
   78|       |
   79|  62.0k|        if (n >= SA_BLOCK_MAX) {
  ------------------
  |  |   45|  62.0k|#define SA_BLOCK_MAX (1 << OPENSSL_SA_BLOCK_BITS)
  |  |  ------------------
  |  |  |  |   34|  62.0k|#define OPENSSL_SA_BLOCK_BITS 4
  |  |  ------------------
  ------------------
  |  Branch (79:13): [True: 3.64k, False: 58.3k]
  ------------------
   80|  3.64k|            if (p != NULL && node != NULL)
  ------------------
  |  Branch (80:17): [True: 0, False: 3.64k]
  |  Branch (80:30): [True: 0, False: 0]
  ------------------
   81|      0|                (*node)(p);
   82|  3.64k|            l--;
   83|  3.64k|            idx >>= OPENSSL_SA_BLOCK_BITS;
  ------------------
  |  |   34|  3.64k|#define OPENSSL_SA_BLOCK_BITS 4
  ------------------
   84|  58.3k|        } else {
   85|  58.3k|            i[l] = n + 1;
   86|  58.3k|            if (p != NULL && p[n] != NULL) {
  ------------------
  |  Branch (86:17): [True: 0, False: 58.3k]
  |  Branch (86:30): [True: 0, False: 0]
  ------------------
   87|      0|                idx = (idx & ~SA_BLOCK_MASK) | n;
  ------------------
  |  |   46|      0|#define SA_BLOCK_MASK (SA_BLOCK_MAX - 1)
  |  |  ------------------
  |  |  |  |   45|      0|#define SA_BLOCK_MAX (1 << OPENSSL_SA_BLOCK_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|      0|#define OPENSSL_SA_BLOCK_BITS 4
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   88|      0|                if (l < sa->levels - 1) {
  ------------------
  |  Branch (88:21): [True: 0, False: 0]
  ------------------
   89|      0|                    i[++l] = 0;
   90|      0|                    nodes[l] = p[n];
   91|      0|                    idx <<= OPENSSL_SA_BLOCK_BITS;
  ------------------
  |  |   34|      0|#define OPENSSL_SA_BLOCK_BITS 4
  ------------------
   92|      0|                } else if (leaf != NULL) {
  ------------------
  |  Branch (92:28): [True: 0, False: 0]
  ------------------
   93|      0|                    (*leaf)(idx, p[n], arg);
   94|      0|                }
   95|      0|            }
   96|  58.3k|        }
   97|  62.0k|    }
   98|  3.64k|}
sparse_array.c:alloc_node:
  175|    313|{
  176|    313|    return OPENSSL_calloc(SA_BLOCK_MAX, sizeof(void *));
  ------------------
  |  |  113|    313|    CRYPTO_calloc(num, size, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_calloc(num, size, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  177|    313|}

OPENSSL_sk_deep_copy:
  101|    219|{
  102|    219|    return internal_copy(sk, copy_func, free_func);
  103|    219|}
OPENSSL_sk_dup:
  106|    132|{
  107|    132|    return internal_copy(sk, NULL, NULL);
  108|    132|}
OPENSSL_sk_new_null:
  111|  1.21k|{
  112|       |    return OPENSSL_sk_new_reserve(NULL, 0);
  113|  1.21k|}
OPENSSL_sk_new:
  116|    225|{
  117|    225|    return OPENSSL_sk_new_reserve(c, 0);
  118|    225|}
OPENSSL_sk_new_reserve:
  212|  1.43k|{
  213|  1.43k|    OPENSSL_STACK *st = OPENSSL_zalloc(sizeof(OPENSSL_STACK));
  ------------------
  |  |  109|  1.43k|    CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  214|       |
  215|  1.43k|    if (st == NULL)
  ------------------
  |  Branch (215:9): [True: 0, False: 1.43k]
  ------------------
  216|      0|        return NULL;
  217|       |
  218|  1.43k|    st->comp = c;
  219|  1.43k|    st->sorted = 1; /* empty or single-element stack is considered sorted */
  220|       |
  221|  1.43k|    if (n <= 0)
  ------------------
  |  Branch (221:9): [True: 1.43k, False: 0]
  ------------------
  222|  1.43k|        return st;
  223|       |
  224|      0|    if (!sk_reserve(st, n, 1)) {
  ------------------
  |  Branch (224:9): [True: 0, False: 0]
  ------------------
  225|      0|        OPENSSL_sk_free(st);
  226|      0|        return NULL;
  227|      0|    }
  228|       |
  229|      0|    return st;
  230|      0|}
OPENSSL_sk_set_thunks:
  245|  3.59k|{
  246|  3.59k|    if (st != NULL)
  ------------------
  |  Branch (246:9): [True: 1.52k, False: 2.07k]
  ------------------
  247|  1.52k|        st->free_thunk = f_thunk;
  248|       |
  249|  3.59k|    return st;
  250|  3.59k|}
OPENSSL_sk_set_cmp_thunks:
  253|    225|{
  254|    225|    if (st != NULL)
  ------------------
  |  Branch (254:9): [True: 225, False: 0]
  ------------------
  255|    225|        st->cmp_thunk = c_thunk;
  256|       |
  257|    225|    return st;
  258|    225|}
OPENSSL_sk_insert:
  261|  1.67k|{
  262|  1.67k|    int cmp_ret;
  263|       |
  264|  1.67k|    if (st == NULL) {
  ------------------
  |  Branch (264:9): [True: 0, False: 1.67k]
  ------------------
  265|      0|        ERR_raise(ERR_LIB_CRYPTO, ERR_R_PASSED_NULL_PARAMETER);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  266|      0|        return 0;
  267|      0|    }
  268|  1.67k|    if (st->num == max_nodes) {
  ------------------
  |  Branch (268:9): [True: 0, False: 1.67k]
  ------------------
  269|      0|        ERR_raise(ERR_LIB_CRYPTO, CRYPTO_R_TOO_MANY_RECORDS);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  270|      0|        return 0;
  271|      0|    }
  272|       |
  273|  1.67k|    if (!sk_reserve(st, 1, 0))
  ------------------
  |  Branch (273:9): [True: 0, False: 1.67k]
  ------------------
  274|      0|        return 0;
  275|       |
  276|  1.67k|    if ((loc >= st->num) || (loc < 0)) {
  ------------------
  |  Branch (276:9): [True: 1.67k, False: 0]
  |  Branch (276:29): [True: 0, False: 0]
  ------------------
  277|  1.67k|        loc = st->num;
  278|  1.67k|        st->data[loc] = data;
  279|  1.67k|    } else {
  280|      0|        memmove(&st->data[loc + 1], &st->data[loc],
  281|      0|            sizeof(st->data[0]) * (st->num - loc));
  282|      0|        st->data[loc] = data;
  283|      0|    }
  284|  1.67k|    st->num++;
  285|  1.67k|    if (st->sorted && st->num > 1) {
  ------------------
  |  Branch (285:9): [True: 1.00k, False: 673]
  |  Branch (285:23): [True: 353, False: 651]
  ------------------
  286|    353|        if (st->comp != NULL) {
  ------------------
  |  Branch (286:13): [True: 5, False: 348]
  ------------------
  287|      5|            if (loc > 0) {
  ------------------
  |  Branch (287:17): [True: 5, False: 0]
  ------------------
  288|      5|                cmp_ret = cmp_with_thunk(st, &st->data[loc - 1], &st->data[loc]);
  289|      5|                if (cmp_ret > 0)
  ------------------
  |  Branch (289:21): [True: 4, False: 1]
  ------------------
  290|      4|                    st->sorted = 0;
  291|      5|            }
  292|      5|            if (loc < st->num - 1) {
  ------------------
  |  Branch (292:17): [True: 0, False: 5]
  ------------------
  293|      0|                cmp_ret = cmp_with_thunk(st, &st->data[loc + 1], &st->data[loc]);
  294|      0|                if (cmp_ret < 0)
  ------------------
  |  Branch (294:21): [True: 0, False: 0]
  ------------------
  295|      0|                    st->sorted = 0;
  296|      0|            }
  297|    348|        } else {
  298|    348|            st->sorted = 0;
  299|    348|        }
  300|    353|    }
  301|  1.67k|    return st->num;
  302|  1.67k|}
OPENSSL_sk_find:
  408|    228|{
  409|    228|    return internal_find(st, data, OSSL_BSEARCH_FIRST_VALUE_ON_MATCH, NULL);
  ------------------
  |  |  150|    228|#define OSSL_BSEARCH_FIRST_VALUE_ON_MATCH 0x02
  ------------------
  410|    228|}
OPENSSL_sk_push:
  423|  1.67k|{
  424|  1.67k|    if (st == NULL)
  ------------------
  |  Branch (424:9): [True: 0, False: 1.67k]
  ------------------
  425|      0|        return 0;
  426|  1.67k|    return OPENSSL_sk_insert(st, data, st->num);
  427|  1.67k|}
OPENSSL_sk_pop_free:
  457|  2.73k|{
  458|  2.73k|    int i;
  459|       |
  460|  2.73k|    if (st == NULL)
  ------------------
  |  Branch (460:9): [True: 2.07k, False: 659]
  ------------------
  461|  2.07k|        return;
  462|       |
  463|    774|    for (i = 0; i < st->num; i++) {
  ------------------
  |  Branch (463:17): [True: 115, False: 659]
  ------------------
  464|    115|        if (st->data[i] != NULL) {
  ------------------
  |  Branch (464:13): [True: 115, False: 0]
  ------------------
  465|    115|            if (st->free_thunk != NULL)
  ------------------
  |  Branch (465:17): [True: 115, False: 0]
  ------------------
  466|    115|                st->free_thunk(func, (void *)st->data[i]);
  467|      0|            else
  468|      0|                func((void *)st->data[i]);
  469|    115|        }
  470|    115|    }
  471|    659|    OPENSSL_sk_free(st);
  472|    659|}
OPENSSL_sk_free:
  475|  1.11k|{
  476|  1.11k|    if (st == NULL)
  ------------------
  |  Branch (476:9): [True: 0, False: 1.11k]
  ------------------
  477|      0|        return;
  478|  1.11k|    OPENSSL_free(st->data);
  ------------------
  |  |  132|  1.11k|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  479|  1.11k|    OPENSSL_free(st);
  ------------------
  |  |  132|  1.11k|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  480|  1.11k|}
OPENSSL_sk_num:
  483|  1.49k|{
  484|  1.49k|    return st == NULL ? -1 : st->num;
  ------------------
  |  Branch (484:12): [True: 0, False: 1.49k]
  ------------------
  485|  1.49k|}
OPENSSL_sk_value:
  488|    786|{
  489|    786|    if (st == NULL || i < 0 || i >= st->num)
  ------------------
  |  Branch (489:9): [True: 0, False: 786]
  |  Branch (489:23): [True: 0, False: 786]
  |  Branch (489:32): [True: 0, False: 786]
  ------------------
  490|      0|        return NULL;
  491|    786|    return (void *)st->data[i];
  492|    786|}
OPENSSL_sk_sort:
  511|      8|{
  512|      8|    if (st != NULL && !st->sorted && st->comp != NULL) {
  ------------------
  |  Branch (512:9): [True: 8, False: 0]
  |  Branch (512:23): [True: 3, False: 5]
  |  Branch (512:38): [True: 3, False: 0]
  ------------------
  513|      3|        if (st->num > 1)
  ------------------
  |  Branch (513:13): [True: 3, False: 0]
  ------------------
  514|      3|            qsort(st->data, st->num, sizeof(void *), st->comp);
  515|      3|        st->sorted = 1; /* empty or single-element stack is considered sorted */
  516|      3|    }
  517|      8|}
OPENSSL_sk_is_sorted:
  520|    226|{
  521|    226|    return st == NULL ? 1 : st->sorted;
  ------------------
  |  Branch (521:12): [True: 0, False: 226]
  ------------------
  522|    226|}
stack.c:internal_copy:
   53|    351|{
   54|    351|    OPENSSL_STACK *ret;
   55|    351|    int i;
   56|       |
   57|    351|    if ((ret = OPENSSL_sk_new_null()) == NULL)
  ------------------
  |  Branch (57:9): [True: 0, False: 351]
  ------------------
   58|      0|        goto err;
   59|       |
   60|    351|    if (sk == NULL)
  ------------------
  |  Branch (60:9): [True: 219, False: 132]
  ------------------
   61|    219|        goto done;
   62|       |
   63|       |    /* direct structure assignment */
   64|    132|    *ret = *sk;
   65|    132|    ret->data = NULL;
   66|    132|    ret->num_alloc = 0;
   67|       |
   68|    132|    if (ret->num == 0)
  ------------------
  |  Branch (68:9): [True: 0, False: 132]
  ------------------
   69|      0|        goto done; /* nothing to copy */
   70|       |
   71|    132|    ret->num_alloc = ret->num > min_nodes ? ret->num : min_nodes;
  ------------------
  |  Branch (71:22): [True: 0, False: 132]
  ------------------
   72|    132|    ret->data = OPENSSL_calloc(ret->num_alloc, sizeof(*ret->data));
  ------------------
  |  |  113|    132|    CRYPTO_calloc(num, size, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_calloc(num, size, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   73|    132|    if (ret->data == NULL)
  ------------------
  |  Branch (73:9): [True: 0, False: 132]
  ------------------
   74|      0|        goto err;
   75|    132|    if (copy_func == NULL) {
  ------------------
  |  Branch (75:9): [True: 132, False: 0]
  ------------------
   76|    132|        memcpy(ret->data, sk->data, sizeof(*ret->data) * ret->num);
   77|    132|    } else {
   78|      0|        for (i = 0; i < ret->num; ++i) {
  ------------------
  |  Branch (78:21): [True: 0, False: 0]
  ------------------
   79|      0|            if (sk->data[i] == NULL)
  ------------------
  |  Branch (79:17): [True: 0, False: 0]
  ------------------
   80|      0|                continue;
   81|      0|            if ((ret->data[i] = copy_func(sk->data[i])) == NULL) {
  ------------------
  |  Branch (81:17): [True: 0, False: 0]
  ------------------
   82|      0|                while (--i >= 0)
  ------------------
  |  Branch (82:24): [True: 0, False: 0]
  ------------------
   83|      0|                    if (ret->data[i] != NULL)
  ------------------
  |  Branch (83:25): [True: 0, False: 0]
  ------------------
   84|      0|                        free_func((void *)ret->data[i]);
   85|      0|                goto err;
   86|      0|            }
   87|      0|        }
   88|      0|    }
   89|       |
   90|    351|done:
   91|    351|    return ret;
   92|       |
   93|      0|err:
   94|      0|    OPENSSL_sk_free(ret);
   95|       |    return NULL;
   96|    132|}
stack.c:sk_reserve:
  158|  1.67k|{
  159|  1.67k|    const void **tmpdata;
  160|  1.67k|    int num_alloc;
  161|       |
  162|       |    /* Check to see the reservation isn't exceeding the hard limit */
  163|  1.67k|    if (n > max_nodes - st->num) {
  ------------------
  |  Branch (163:9): [True: 0, False: 1.67k]
  ------------------
  164|      0|        ERR_raise(ERR_LIB_CRYPTO, CRYPTO_R_TOO_MANY_RECORDS);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  165|      0|        return 0;
  166|      0|    }
  167|       |
  168|       |    /* Figure out the new size */
  169|  1.67k|    num_alloc = st->num + n;
  170|  1.67k|    if (num_alloc < min_nodes)
  ------------------
  |  Branch (170:9): [True: 1.15k, False: 527]
  ------------------
  171|  1.15k|        num_alloc = min_nodes;
  172|       |
  173|       |    /* If |st->data| allocation was postponed */
  174|  1.67k|    if (st->data == NULL) {
  ------------------
  |  Branch (174:9): [True: 651, False: 1.02k]
  ------------------
  175|       |        /*
  176|       |         * At this point, |st->num_alloc| and |st->num| are 0;
  177|       |         * so |num_alloc| value is |n| or |min_nodes| if greater than |n|.
  178|       |         */
  179|    651|        if ((st->data = OPENSSL_calloc(num_alloc, sizeof(void *))) == NULL)
  ------------------
  |  |  113|    651|    CRYPTO_calloc(num, size, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_calloc(num, size, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  |  Branch (179:13): [True: 0, False: 651]
  ------------------
  180|      0|            return 0;
  181|    651|        st->num_alloc = num_alloc;
  182|    651|        return 1;
  183|    651|    }
  184|       |
  185|  1.02k|    if (!exact) {
  ------------------
  |  Branch (185:9): [True: 1.02k, False: 0]
  ------------------
  186|  1.02k|        if (num_alloc <= st->num_alloc)
  ------------------
  |  Branch (186:13): [True: 904, False: 122]
  ------------------
  187|    904|            return 1;
  188|    122|        num_alloc = compute_growth(num_alloc, st->num_alloc);
  189|    122|        if (num_alloc == 0) {
  ------------------
  |  Branch (189:13): [True: 0, False: 122]
  ------------------
  190|      0|            ERR_raise(ERR_LIB_CRYPTO, CRYPTO_R_TOO_MANY_RECORDS);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  191|      0|            return 0;
  192|      0|        }
  193|    122|    } else if (num_alloc == st->num_alloc) {
  ------------------
  |  Branch (193:16): [True: 0, False: 0]
  ------------------
  194|      0|        return 1;
  195|      0|    }
  196|       |
  197|    122|    tmpdata = OPENSSL_realloc_array((void *)st->data, num_alloc, sizeof(void *));
  ------------------
  |  |  125|    122|    CRYPTO_realloc_array(addr, num, size, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_realloc_array(addr, num, size, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  198|    122|    if (tmpdata == NULL)
  ------------------
  |  Branch (198:9): [True: 0, False: 122]
  ------------------
  199|      0|        return 0;
  200|       |
  201|    122|    st->data = tmpdata;
  202|    122|    st->num_alloc = num_alloc;
  203|    122|    return 1;
  204|    122|}
stack.c:compute_growth:
  140|    122|{
  141|    122|    int err = 0;
  142|       |
  143|    244|    while (current < target) {
  ------------------
  |  Branch (143:12): [True: 122, False: 122]
  ------------------
  144|    122|        if (current >= max_nodes)
  ------------------
  |  Branch (144:13): [True: 0, False: 122]
  ------------------
  145|      0|            return 0;
  146|       |
  147|    122|        current = safe_muldiv_int(current, 8, 5, &err);
  148|    122|        if (err != 0)
  ------------------
  |  Branch (148:13): [True: 0, False: 122]
  ------------------
  149|      0|            return 0;
  150|    122|        if (current >= max_nodes)
  ------------------
  |  Branch (150:13): [True: 0, False: 122]
  ------------------
  151|      0|            current = max_nodes;
  152|    122|    }
  153|    122|    return current;
  154|    122|}
stack.c:cmp_with_thunk:
  207|      5|{
  208|      5|    return (st->cmp_thunk == NULL) ? st->comp(a, b) : st->cmp_thunk(st->comp, a, b);
  ------------------
  |  Branch (208:12): [True: 0, False: 5]
  ------------------
  209|      5|}
stack.c:internal_find:
  340|    228|{
  341|    228|    const void *r;
  342|    228|    int i, count = 0;
  343|    228|    int cmp_ret;
  344|    228|    int *pnum = pnum_matched;
  345|       |
  346|    228|    if (st == NULL || st->num == 0)
  ------------------
  |  Branch (346:9): [True: 0, False: 228]
  |  Branch (346:23): [True: 0, False: 228]
  ------------------
  347|      0|        return -1;
  348|       |
  349|    228|    if (pnum == NULL)
  ------------------
  |  Branch (349:9): [True: 228, False: 0]
  ------------------
  350|    228|        pnum = &count;
  351|       |
  352|    228|    if (st->comp == NULL) {
  ------------------
  |  Branch (352:9): [True: 0, False: 228]
  ------------------
  353|      0|        for (i = 0; i < st->num; i++)
  ------------------
  |  Branch (353:21): [True: 0, False: 0]
  ------------------
  354|      0|            if (st->data[i] == data) {
  ------------------
  |  Branch (354:17): [True: 0, False: 0]
  ------------------
  355|      0|                *pnum = 1;
  356|      0|                return i;
  357|      0|            }
  358|      0|        *pnum = 0;
  359|      0|        return -1;
  360|      0|    }
  361|       |
  362|    228|    if (data == NULL)
  ------------------
  |  Branch (362:9): [True: 0, False: 228]
  ------------------
  363|      0|        return -1;
  364|       |
  365|    228|    if (!st->sorted) {
  ------------------
  |  Branch (365:9): [True: 0, False: 228]
  ------------------
  366|      0|        int res = -1;
  367|       |
  368|      0|        for (i = 0; i < st->num; i++) {
  ------------------
  |  Branch (368:21): [True: 0, False: 0]
  ------------------
  369|      0|            cmp_ret = cmp_with_thunk(st, &data, st->data + i);
  370|      0|            if (cmp_ret == 0) {
  ------------------
  |  Branch (370:17): [True: 0, False: 0]
  ------------------
  371|      0|                if (res == -1)
  ------------------
  |  Branch (371:21): [True: 0, False: 0]
  ------------------
  372|      0|                    res = i;
  373|      0|                ++*pnum;
  374|       |                /* Check if only one result is wanted and exit if so */
  375|      0|                if (pnum_matched == NULL)
  ------------------
  |  Branch (375:21): [True: 0, False: 0]
  ------------------
  376|      0|                    return i;
  377|      0|            }
  378|      0|        }
  379|      0|        if (res == -1)
  ------------------
  |  Branch (379:13): [True: 0, False: 0]
  ------------------
  380|      0|            *pnum = 0;
  381|      0|        return res;
  382|      0|    }
  383|       |
  384|    228|    if (pnum_matched != NULL)
  ------------------
  |  Branch (384:9): [True: 0, False: 228]
  ------------------
  385|      0|        ret_val_options |= OSSL_BSEARCH_FIRST_VALUE_ON_MATCH;
  ------------------
  |  |  150|      0|#define OSSL_BSEARCH_FIRST_VALUE_ON_MATCH 0x02
  ------------------
  386|    228|    r = ossl_bsearch(&data, st->data, st->num, sizeof(void *), st->comp, st->cmp_thunk,
  387|    228|        ret_val_options);
  388|       |
  389|    228|    if (pnum_matched != NULL) {
  ------------------
  |  Branch (389:9): [True: 0, False: 228]
  ------------------
  390|      0|        *pnum = 0;
  391|      0|        if (r != NULL) {
  ------------------
  |  Branch (391:13): [True: 0, False: 0]
  ------------------
  392|      0|            const void **p = (const void **)r;
  393|       |
  394|      0|            while (p < st->data + st->num) {
  ------------------
  |  Branch (394:20): [True: 0, False: 0]
  ------------------
  395|      0|                cmp_ret = cmp_with_thunk(st, &data, p);
  396|      0|                if (cmp_ret != 0)
  ------------------
  |  Branch (396:21): [True: 0, False: 0]
  ------------------
  397|      0|                    break;
  398|      0|                ++*pnum;
  399|      0|                ++p;
  400|      0|            }
  401|      0|        }
  402|      0|    }
  403|       |
  404|    228|    return r == NULL ? -1 : (int)((const void **)r - st->data);
  ------------------
  |  Branch (404:12): [True: 222, False: 6]
  ------------------
  405|    228|}

ossl_err_load_OSSL_STORE_strings:
   71|      1|{
   72|      1|#ifndef OPENSSL_NO_ERR
   73|      1|    if (ERR_reason_error_string(OSSL_STORE_str_reasons[0].error) == NULL)
  ------------------
  |  Branch (73:9): [True: 1, False: 0]
  ------------------
   74|      1|        ERR_load_strings_const(OSSL_STORE_str_reasons);
   75|      1|#endif
   76|      1|    return 1;
   77|      1|}

ossl_store_loader_store_cache_flush:
  388|      5|{
  389|      5|    OSSL_METHOD_STORE *store = get_loader_store(libctx);
  390|       |
  391|      5|    if (store != NULL)
  ------------------
  |  Branch (391:9): [True: 5, False: 0]
  ------------------
  392|      5|        return ossl_method_store_cache_flush_all(store);
  393|      0|    return 1;
  394|      5|}
ossl_store_loader_store_remove_all_provided:
  397|      5|{
  398|      5|    OSSL_LIB_CTX *libctx = ossl_provider_libctx(prov);
  399|      5|    OSSL_METHOD_STORE *store = get_loader_store(libctx);
  400|       |
  401|      5|    if (store != NULL)
  ------------------
  |  Branch (401:9): [True: 5, False: 0]
  ------------------
  402|      5|        return ossl_method_store_remove_all_provided(store, prov);
  403|      0|    return 1;
  404|      5|}
store_meth.c:get_loader_store:
  109|     10|{
  110|     10|    return ossl_lib_ctx_get_data(libctx, OSSL_LIB_CTX_STORE_LOADER_STORE_INDEX);
  ------------------
  |  |  112|     10|#define OSSL_LIB_CTX_STORE_LOADER_STORE_INDEX 15
  ------------------
  111|     10|}

ossl_crypto_mutex_new:
   97|    110|{
   98|    110|    pthread_mutex_t *mutex;
   99|       |
  100|    110|    if ((mutex = OPENSSL_zalloc(sizeof(*mutex))) == NULL)
  ------------------
  |  |  109|    110|    CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  |  Branch (100:9): [True: 0, False: 110]
  ------------------
  101|      0|        return NULL;
  102|    110|    if (pthread_mutex_init(mutex, NULL) != 0) {
  ------------------
  |  Branch (102:9): [True: 0, False: 110]
  ------------------
  103|      0|        OPENSSL_free(mutex);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  104|      0|        return NULL;
  105|      0|    }
  106|    110|    return (CRYPTO_MUTEX *)mutex;
  107|    110|}
ossl_crypto_mutex_free:
  142|    109|{
  143|    109|    pthread_mutex_t **mutex_p;
  144|       |
  145|    109|    if (mutex == NULL)
  ------------------
  |  Branch (145:9): [True: 0, False: 109]
  ------------------
  146|      0|        return;
  147|       |
  148|    109|    mutex_p = (pthread_mutex_t **)mutex;
  149|    109|    if (*mutex_p != NULL)
  ------------------
  |  Branch (149:9): [True: 109, False: 0]
  ------------------
  150|    109|        pthread_mutex_destroy(*mutex_p);
  151|    109|    OPENSSL_free(*mutex_p);
  ------------------
  |  |  132|    109|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  152|       |    *mutex = NULL;
  153|    109|}
ossl_crypto_condvar_new:
  156|    110|{
  157|    110|    pthread_cond_t *cv_p;
  158|       |
  159|    110|    if ((cv_p = OPENSSL_zalloc(sizeof(*cv_p))) == NULL)
  ------------------
  |  |  109|    110|    CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  |  Branch (159:9): [True: 0, False: 110]
  ------------------
  160|      0|        return NULL;
  161|    110|    if (pthread_cond_init(cv_p, NULL) != 0) {
  ------------------
  |  Branch (161:9): [True: 0, False: 110]
  ------------------
  162|      0|        OPENSSL_free(cv_p);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  163|      0|        return NULL;
  164|      0|    }
  165|    110|    return (CRYPTO_CONDVAR *)cv_p;
  166|    110|}
ossl_crypto_condvar_free:
  220|    109|{
  221|    109|    pthread_cond_t **cv_p;
  222|       |
  223|    109|    if (cv == NULL)
  ------------------
  |  Branch (223:9): [True: 0, False: 109]
  ------------------
  224|      0|        return;
  225|       |
  226|    109|    cv_p = (pthread_cond_t **)cv;
  227|    109|    if (*cv_p != NULL)
  ------------------
  |  Branch (227:9): [True: 109, False: 0]
  ------------------
  228|    109|        pthread_cond_destroy(*cv_p);
  229|    109|    OPENSSL_free(*cv_p);
  ------------------
  |  |  132|    109|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  230|       |    *cv_p = NULL;
  231|    109|}

ossl_threads_ctx_new:
  128|    110|{
  129|    110|    struct openssl_threads_st *t = OPENSSL_zalloc(sizeof(*t));
  ------------------
  |  |  109|    110|    CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  130|       |
  131|    110|    if (t == NULL)
  ------------------
  |  Branch (131:9): [True: 0, False: 110]
  ------------------
  132|      0|        return NULL;
  133|       |
  134|    110|    t->lock = ossl_crypto_mutex_new();
  135|    110|    t->cond_finished = ossl_crypto_condvar_new();
  136|       |
  137|    110|    if (t->lock == NULL || t->cond_finished == NULL)
  ------------------
  |  Branch (137:9): [True: 0, False: 110]
  |  Branch (137:28): [True: 0, False: 110]
  ------------------
  138|      0|        goto fail;
  139|       |
  140|    110|    return t;
  141|       |
  142|      0|fail:
  143|      0|    ossl_threads_ctx_free((void *)t);
  144|       |    return NULL;
  145|    110|}
ossl_threads_ctx_free:
  148|    109|{
  149|    109|    OSSL_LIB_CTX_THREADS *t = (OSSL_LIB_CTX_THREADS *)vdata;
  150|       |
  151|    109|    if (t == NULL)
  ------------------
  |  Branch (151:9): [True: 0, False: 109]
  ------------------
  152|      0|        return;
  153|       |
  154|    109|    ossl_crypto_mutex_free(&t->lock);
  155|    109|    ossl_crypto_condvar_free(&t->cond_finished);
  156|    109|    OPENSSL_free(t);
  ------------------
  |  |  132|    109|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  157|    109|}

CRYPTO_THREAD_get_local_ex:
  259|  8.91k|{
  260|  8.91k|    MASTER_KEY_ENTRY *mkey;
  261|  8.91k|    CTX_TABLE_ENTRY ctxd;
  262|       |
  263|  8.91k|    ctx = (ctx == CRYPTO_THREAD_NO_CONTEXT) ? NULL : ossl_lib_ctx_get_concrete(ctx);
  ------------------
  |  |   42|  8.91k|#define CRYPTO_THREAD_NO_CONTEXT (void *)1
  ------------------
  |  Branch (263:11): [True: 2.37k, False: 6.53k]
  ------------------
  264|       |    /*
  265|       |     * Make sure the master key has been initialized
  266|       |     * NOTE: We use CRYPTO_THREAD_run_once here, rather than the
  267|       |     * RUN_ONCE macros.  We do this because this code is included both in
  268|       |     * libcrypto, and in fips.[dll|dylib|so].  FIPS attempts to avoid doing
  269|       |     * one time initialization of global data, and so suppresses the definition
  270|       |     * of RUN_ONCE, etc, meaning the build breaks if we were to use that with
  271|       |     * fips-enabled.  However, this is a special case in which we want/need
  272|       |     * this one bit of global data to be initialized in both the fips provider
  273|       |     * and in libcrypto, so we use CRYPTO_THREAD_run_one directly, which is
  274|       |     * always defined.
  275|       |     */
  276|  8.91k|    if (!CRYPTO_THREAD_run_once(&master_once, init_master_key))
  ------------------
  |  Branch (276:9): [True: 0, False: 8.91k]
  ------------------
  277|      0|        return NULL;
  278|       |
  279|  8.91k|    if (!ossl_assert(id < CRYPTO_THREAD_LOCAL_KEY_MAX))
  ------------------
  |  |   52|  8.91k|#define ossl_assert(x) ossl_assert_int((x) != 0, "Assertion failed: " #x, \
  |  |   53|  8.91k|    __FILE__, __LINE__)
  ------------------
  |  Branch (279:9): [True: 0, False: 8.91k]
  ------------------
  280|      0|        return NULL;
  281|       |
  282|       |    /*
  283|       |     * Get our master table sparse array, indexed by key id
  284|       |     */
  285|  8.91k|    mkey = CRYPTO_THREAD_get_local(&master_key);
  286|  8.91k|    if (mkey == NULL)
  ------------------
  |  Branch (286:9): [True: 1, False: 8.90k]
  ------------------
  287|      1|        return NULL;
  288|       |
  289|       |    /*
  290|       |     * Get the specific data entry in the master key
  291|       |     * table for the key id we are searching for
  292|       |     */
  293|  8.90k|    if (mkey[id].ctx_table == NULL)
  ------------------
  |  Branch (293:9): [True: 2, False: 8.90k]
  ------------------
  294|      2|        return NULL;
  295|       |
  296|       |    /*
  297|       |     * If we find an entry above, that will be a sparse array,
  298|       |     * indexed by OSSL_LIB_CTX.
  299|       |     * Note: Because we're using sparse arrays here, we can do an easy
  300|       |     * trick, since we know all OSSL_LIB_CTX pointers are unique.  By casting
  301|       |     * the pointer to a unitptr_t, we can use that as an ordinal index into
  302|       |     * the sparse array.
  303|       |     */
  304|  8.90k|    ctxd = ossl_sa_CTX_TABLE_ENTRY_get(mkey[id].ctx_table, (uintptr_t)ctx);
  305|       |
  306|       |    /*
  307|       |     * If we find an entry for the passed in context, return its data pointer
  308|       |     */
  309|  8.90k|    return ctxd;
  310|  8.90k|}
CRYPTO_THREAD_set_local_ex:
  338|      5|{
  339|      5|    MASTER_KEY_ENTRY *mkey;
  340|       |
  341|      5|    ctx = (ctx == CRYPTO_THREAD_NO_CONTEXT) ? NULL : ossl_lib_ctx_get_concrete(ctx);
  ------------------
  |  |   42|      5|#define CRYPTO_THREAD_NO_CONTEXT (void *)1
  ------------------
  |  Branch (341:11): [True: 4, False: 1]
  ------------------
  342|       |    /*
  343|       |     * Make sure our master key is initialized
  344|       |     * See notes above on the use of CRYPTO_THREAD_run_once here
  345|       |     */
  346|      5|    if (!CRYPTO_THREAD_run_once(&master_once, init_master_key))
  ------------------
  |  Branch (346:9): [True: 0, False: 5]
  ------------------
  347|      0|        return 0;
  348|       |
  349|      5|    if (!ossl_assert(id < CRYPTO_THREAD_LOCAL_KEY_MAX))
  ------------------
  |  |   52|      5|#define ossl_assert(x) ossl_assert_int((x) != 0, "Assertion failed: " #x, \
  |  |   53|      5|    __FILE__, __LINE__)
  ------------------
  |  Branch (349:9): [True: 0, False: 5]
  ------------------
  350|      0|        return 0;
  351|       |
  352|       |    /*
  353|       |     * Get our local master key data, which will be
  354|       |     * a sparse array indexed by the id parameter
  355|       |     */
  356|      5|    mkey = CRYPTO_THREAD_get_local(&master_key);
  357|      5|    if (mkey == NULL) {
  ------------------
  |  Branch (357:9): [True: 1, False: 4]
  ------------------
  358|       |        /*
  359|       |         * we didn't find one, but that's ok, just initialize it now
  360|       |         */
  361|      1|        mkey = OPENSSL_calloc(CRYPTO_THREAD_LOCAL_KEY_MAX,
  ------------------
  |  |  113|      1|    CRYPTO_calloc(num, size, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_calloc(num, size, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  362|      1|            sizeof(MASTER_KEY_ENTRY));
  363|      1|        if (mkey == NULL)
  ------------------
  |  Branch (363:13): [True: 0, False: 1]
  ------------------
  364|      0|            return 0;
  365|       |        /*
  366|       |         * make sure to assign it to our master key thread-local storage
  367|       |         */
  368|      1|        if (!CRYPTO_THREAD_set_local(&master_key, mkey)) {
  ------------------
  |  Branch (368:13): [True: 0, False: 1]
  ------------------
  369|      0|            OPENSSL_free(mkey);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  370|      0|            return 0;
  371|      0|        }
  372|      1|    }
  373|       |
  374|       |    /*
  375|       |     * Find the entry that we are looking for using our id index
  376|       |     */
  377|      5|    if (mkey[id].ctx_table == NULL) {
  ------------------
  |  Branch (377:9): [True: 2, False: 3]
  ------------------
  378|       |
  379|       |        /*
  380|       |         * Didn't find it, that's ok, just add it now
  381|       |         */
  382|      2|        mkey[id].ctx_table = ossl_sa_CTX_TABLE_ENTRY_new();
  383|      2|        if (mkey[id].ctx_table == NULL)
  ------------------
  |  Branch (383:13): [True: 0, False: 2]
  ------------------
  384|      0|            return 0;
  385|      2|    }
  386|       |
  387|       |    /*
  388|       |     * Now go look up our per context entry, using the OSSL_LIB_CTX pointer
  389|       |     * that we've been provided.  Note we cast the pointer to a uintptr_t so
  390|       |     * as to use it as an index in the sparse array
  391|       |     *
  392|       |     * Assign to the entry in the table so that we can find it later
  393|       |     */
  394|      5|    return ossl_sa_CTX_TABLE_ENTRY_set(mkey[id].ctx_table,
  395|      5|        (uintptr_t)ctx, data);
  396|      5|}
threads_common.c:init_master_key:
  216|      1|{
  217|       |    /*
  218|       |     * Note: We assign a cleanup function here, which is atypical for
  219|       |     * uses of CRYPTO_THREAD_init_local.  This is because, nominally
  220|       |     * we expect that the use of ossl_init_thread_start will be used
  221|       |     * to notify openssl of exiting threads.  However, in this case
  222|       |     * we want the metadata for this interface (the sparse arrays) to
  223|       |     * stay valid until the thread actually exits, which is what the
  224|       |     * clean_master_key function does.  Data held in the sparse arrays
  225|       |     * (that is assigned via CRYPTO_THREAD_set_local_ex), are still expected
  226|       |     * to be cleaned via the ossl_init_thread_start/stop api.
  227|       |     */
  228|      1|    if (!CRYPTO_THREAD_init_local(&master_key, clean_master_key))
  ------------------
  |  Branch (228:9): [True: 0, False: 1]
  ------------------
  229|      0|        return;
  230|       |
  231|       |    /*
  232|       |     * Indicate that the key has been set up.
  233|       |     */
  234|      1|    master_key_init = 1;
  235|      1|}

ossl_rcu_write_lock:
  475|    109|{
  476|    109|    pthread_mutex_lock(&lock->write_lock);
  477|    109|    TSAN_FAKE_UNLOCK(&lock->write_lock);
  478|    109|}
ossl_rcu_write_unlock:
  481|    109|{
  482|    109|    TSAN_FAKE_LOCK(&lock->write_lock);
  483|    109|    pthread_mutex_unlock(&lock->write_lock);
  484|    109|}
ossl_synchronize_rcu:
  487|    218|{
  488|    218|    struct rcu_qp *qp;
  489|    218|    uint64_t count;
  490|    218|    uint32_t curr_id;
  491|    218|    struct rcu_cb_item *cb_items, *tmpcb;
  492|       |
  493|    218|    pthread_mutex_lock(&lock->write_lock);
  494|    218|    cb_items = lock->cb_items;
  495|    218|    lock->cb_items = NULL;
  496|    218|    pthread_mutex_unlock(&lock->write_lock);
  497|       |
  498|    218|    qp = update_qp(lock, &curr_id);
  499|       |
  500|       |    /* retire in order */
  501|    218|    pthread_mutex_lock(&lock->prior_lock);
  502|    218|    while (lock->next_to_retire != curr_id)
  ------------------
  |  Branch (502:12): [True: 0, False: 218]
  ------------------
  503|      0|        pthread_cond_wait(&lock->prior_signal, &lock->prior_lock);
  504|       |
  505|       |    /*
  506|       |     * wait for the reader count to reach zero
  507|       |     * Note the use of __ATOMIC_ACQUIRE here to ensure that any
  508|       |     * prior __ATOMIC_RELEASE write operation in ossl_rcu_read_unlock
  509|       |     * is visible prior to our read
  510|       |     * however this is likely just necessary to silence a tsan warning
  511|       |     * because the read side should not do any write operation
  512|       |     * outside the atomic itself
  513|       |     */
  514|    218|    do {
  515|    218|        count = ATOMIC_LOAD_N(uint64_t, &qp->users, __ATOMIC_ACQUIRE);
  ------------------
  |  |  122|    218|#define ATOMIC_LOAD_N(t, p, o) __atomic_load_n(p, o)
  ------------------
  516|    218|    } while (count != (uint64_t)0);
  ------------------
  |  Branch (516:14): [True: 0, False: 218]
  ------------------
  517|       |
  518|    218|    lock->next_to_retire++;
  519|    218|    pthread_cond_broadcast(&lock->prior_signal);
  520|    218|    pthread_mutex_unlock(&lock->prior_lock);
  521|       |
  522|    218|    retire_qp(lock, qp);
  523|       |
  524|       |    /* handle any callbacks that we have */
  525|    327|    while (cb_items != NULL) {
  ------------------
  |  Branch (525:12): [True: 109, False: 218]
  ------------------
  526|    109|        tmpcb = cb_items;
  527|    109|        cb_items = cb_items->next;
  528|    109|        tmpcb->fn(tmpcb->data);
  529|    109|        OPENSSL_free(tmpcb);
  ------------------
  |  |  132|    109|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  530|    109|    }
  531|    218|}
ossl_rcu_cb_item_new:
  534|    109|{
  535|    109|    return OPENSSL_zalloc(sizeof(CRYPTO_RCU_CB_ITEM));
  ------------------
  |  |  109|    109|    CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  536|    109|}
ossl_rcu_call:
  549|    109|{
  550|    109|    item->fn = cb;
  551|    109|    item->data = data;
  552|    109|    item->next = lock->cb_items;
  553|    109|    lock->cb_items = item;
  554|    109|}
ossl_rcu_uptr_deref:
  557|  3.55k|{
  558|  3.55k|    return ATOMIC_LOAD_N(pvoid, p, __ATOMIC_ACQUIRE);
  ------------------
  |  |  122|  3.55k|#define ATOMIC_LOAD_N(t, p, o) __atomic_load_n(p, o)
  ------------------
  559|  3.55k|}
ossl_rcu_assign_uptr:
  562|    470|{
  563|    470|    ATOMIC_STORE(pvoid, p, v, __ATOMIC_RELEASE);
  ------------------
  |  |  124|    470|#define ATOMIC_STORE(t, p, v, o) __atomic_store(p, v, o)
  ------------------
  564|    470|}
ossl_rcu_lock_new:
  567|    110|{
  568|    110|    struct rcu_lock_st *new;
  569|    110|    pthread_mutex_t *mutexes[3] = { NULL };
  570|    110|    pthread_cond_t *conds[2] = { NULL };
  571|    110|    int i;
  572|       |
  573|       |    /*
  574|       |     * We need a minimum of 2 qp's
  575|       |     */
  576|    110|    if (num_writers < 2)
  ------------------
  |  Branch (576:9): [True: 110, False: 0]
  ------------------
  577|    110|        num_writers = 2;
  578|       |
  579|    110|    ctx = ossl_lib_ctx_get_concrete(ctx);
  580|    110|    if (ctx == NULL)
  ------------------
  |  Branch (580:9): [True: 0, False: 110]
  ------------------
  581|      0|        return 0;
  582|       |
  583|    110|    new = OPENSSL_zalloc(sizeof(*new));
  ------------------
  |  |  109|    110|    CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  584|    110|    if (new == NULL)
  ------------------
  |  Branch (584:9): [True: 0, False: 110]
  ------------------
  585|      0|        return NULL;
  586|       |
  587|    110|    new->ctx = ctx;
  588|    110|    i = 0;
  589|    110|    mutexes[i] = pthread_mutex_init(&new->write_lock, NULL) == 0 ? &new->write_lock : NULL;
  ------------------
  |  Branch (589:18): [True: 110, False: 0]
  ------------------
  590|    110|    if (mutexes[i++] == NULL)
  ------------------
  |  Branch (590:9): [True: 0, False: 110]
  ------------------
  591|      0|        goto err;
  592|    110|    mutexes[i] = pthread_mutex_init(&new->prior_lock, NULL) == 0 ? &new->prior_lock : NULL;
  ------------------
  |  Branch (592:18): [True: 110, False: 0]
  ------------------
  593|    110|    if (mutexes[i++] == NULL)
  ------------------
  |  Branch (593:9): [True: 0, False: 110]
  ------------------
  594|      0|        goto err;
  595|    110|    mutexes[i] = pthread_mutex_init(&new->alloc_lock, NULL) == 0 ? &new->alloc_lock : NULL;
  ------------------
  |  Branch (595:18): [True: 110, False: 0]
  ------------------
  596|    110|    if (mutexes[i++] == NULL)
  ------------------
  |  Branch (596:9): [True: 0, False: 110]
  ------------------
  597|      0|        goto err;
  598|    110|    conds[i - 3] = pthread_cond_init(&new->prior_signal, NULL) == 0 ? &new->prior_signal : NULL;
  ------------------
  |  Branch (598:20): [True: 110, False: 0]
  ------------------
  599|    110|    if (conds[i - 3] == NULL)
  ------------------
  |  Branch (599:9): [True: 0, False: 110]
  ------------------
  600|      0|        goto err;
  601|    110|    i++;
  602|    110|    conds[i - 3] = pthread_cond_init(&new->alloc_signal, NULL) == 0 ? &new->alloc_signal : NULL;
  ------------------
  |  Branch (602:20): [True: 110, False: 0]
  ------------------
  603|    110|    if (conds[i - 3] == NULL)
  ------------------
  |  Branch (603:9): [True: 0, False: 110]
  ------------------
  604|      0|        goto err;
  605|    110|    i++;
  606|    110|    new->qp_group = allocate_new_qp_group(new, num_writers);
  607|    110|    if (new->qp_group == NULL)
  ------------------
  |  Branch (607:9): [True: 0, False: 110]
  ------------------
  608|      0|        goto err;
  609|       |
  610|    110|    return new;
  611|       |
  612|      0|err:
  613|      0|    for (i = 0; i < 3; i++)
  ------------------
  |  Branch (613:17): [True: 0, False: 0]
  ------------------
  614|      0|        if (mutexes[i] != NULL)
  ------------------
  |  Branch (614:13): [True: 0, False: 0]
  ------------------
  615|      0|            pthread_mutex_destroy(mutexes[i]);
  616|      0|    for (i = 0; i < 2; i++)
  ------------------
  |  Branch (616:17): [True: 0, False: 0]
  ------------------
  617|      0|        if (conds[i] != NULL)
  ------------------
  |  Branch (617:13): [True: 0, False: 0]
  ------------------
  618|      0|            pthread_cond_destroy(conds[i]);
  619|      0|    OPENSSL_free(new->qp_group);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  620|      0|    OPENSSL_free(new);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  621|       |    return NULL;
  622|    110|}
ossl_rcu_lock_free:
  625|    109|{
  626|    109|    struct rcu_lock_st *rlock = (struct rcu_lock_st *)lock;
  627|       |
  628|    109|    if (lock == NULL)
  ------------------
  |  Branch (628:9): [True: 0, False: 109]
  ------------------
  629|      0|        return;
  630|       |
  631|       |    /* make sure we're synchronized */
  632|    109|    ossl_synchronize_rcu(rlock);
  633|       |
  634|    109|    OPENSSL_free(rlock->qp_group);
  ------------------
  |  |  132|    109|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  635|       |    /*
  636|       |     * Some targets (BSD) allocate heap when initializing
  637|       |     * a mutex or condition, to prevent leaks, those need
  638|       |     * to be destroyed here
  639|       |     */
  640|    109|    pthread_mutex_destroy(&rlock->write_lock);
  641|    109|    pthread_mutex_destroy(&rlock->prior_lock);
  642|    109|    pthread_mutex_destroy(&rlock->alloc_lock);
  643|    109|    pthread_cond_destroy(&rlock->prior_signal);
  644|    109|    pthread_cond_destroy(&rlock->alloc_signal);
  645|       |
  646|       |    /* There should only be a single qp left now */
  647|    109|    OPENSSL_free(rlock);
  ------------------
  |  |  132|    109|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  648|    109|}
CRYPTO_THREAD_lock_new:
  909|  4.07k|{
  910|  4.07k|#ifdef USE_RWLOCK
  911|  4.07k|    CRYPTO_RWLOCK *lock;
  912|       |
  913|  4.07k|    ossl_init_rwlock_contention_data();
  914|       |
  915|  4.07k|    if ((lock = OPENSSL_zalloc(sizeof(pthread_rwlock_t))) == NULL)
  ------------------
  |  |  109|  4.07k|    CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  |  Branch (915:9): [True: 0, False: 4.07k]
  ------------------
  916|       |        /* Don't set error, to avoid recursion blowup. */
  917|      0|        return NULL;
  918|       |
  919|  4.07k|    if (pthread_rwlock_init(lock, NULL) != 0) {
  ------------------
  |  Branch (919:9): [True: 0, False: 4.07k]
  ------------------
  920|      0|        OPENSSL_free(lock);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  921|      0|        return NULL;
  922|      0|    }
  923|       |#else
  924|       |    pthread_mutexattr_t attr;
  925|       |    CRYPTO_RWLOCK *lock;
  926|       |
  927|       |    if ((lock = OPENSSL_zalloc(sizeof(pthread_mutex_t))) == NULL)
  928|       |        /* Don't set error, to avoid recursion blowup. */
  929|       |        return NULL;
  930|       |
  931|       |    /*
  932|       |     * We don't use recursive mutexes, but try to catch errors if we do.
  933|       |     */
  934|       |    pthread_mutexattr_init(&attr);
  935|       |#if !defined(__TANDEM) && !defined(_SPT_MODEL_)
  936|       |#if !defined(NDEBUG) && !defined(OPENSSL_NO_MUTEX_ERRORCHECK)
  937|       |    pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_ERRORCHECK);
  938|       |#endif
  939|       |#else
  940|       |    /* The SPT Thread Library does not define MUTEX attributes. */
  941|       |#endif
  942|       |
  943|       |    if (pthread_mutex_init(lock, &attr) != 0) {
  944|       |        pthread_mutexattr_destroy(&attr);
  945|       |        OPENSSL_free(lock);
  946|       |        return NULL;
  947|       |    }
  948|       |
  949|       |    pthread_mutexattr_destroy(&attr);
  950|       |#endif
  951|       |
  952|  4.07k|    return lock;
  953|  4.07k|}
CRYPTO_THREAD_read_lock:
  956|  28.8k|{
  957|  28.8k|#ifdef USE_RWLOCK
  958|  28.8k|    if (!ossl_assert(ossl_rwlock_rdlock(lock) == 0))
  ------------------
  |  |   52|  28.8k|#define ossl_assert(x) ossl_assert_int((x) != 0, "Assertion failed: " #x, \
  |  |   53|  28.8k|    __FILE__, __LINE__)
  ------------------
  |  Branch (958:9): [True: 0, False: 28.8k]
  ------------------
  959|      0|        return 0;
  960|       |#else
  961|       |    if (pthread_mutex_lock(lock) != 0) {
  962|       |        assert(errno != EDEADLK && errno != EBUSY);
  963|       |        return 0;
  964|       |    }
  965|       |#endif
  966|       |
  967|  28.8k|    return 1;
  968|  28.8k|}
CRYPTO_THREAD_write_lock:
  971|  3.30k|{
  972|  3.30k|#ifdef USE_RWLOCK
  973|  3.30k|    if (!ossl_assert(ossl_rwlock_wrlock(lock) == 0))
  ------------------
  |  |   52|  3.30k|#define ossl_assert(x) ossl_assert_int((x) != 0, "Assertion failed: " #x, \
  |  |   53|  3.30k|    __FILE__, __LINE__)
  ------------------
  |  Branch (973:9): [True: 0, False: 3.30k]
  ------------------
  974|      0|        return 0;
  975|       |#else
  976|       |    if (pthread_mutex_lock(lock) != 0) {
  977|       |        assert(errno != EDEADLK && errno != EBUSY);
  978|       |        return 0;
  979|       |    }
  980|       |#endif
  981|       |
  982|  3.30k|    return 1;
  983|  3.30k|}
CRYPTO_THREAD_unlock:
  986|  32.1k|{
  987|  32.1k|#ifdef USE_RWLOCK
  988|  32.1k|    if (ossl_rwlock_unlock(lock) != 0)
  ------------------
  |  Branch (988:9): [True: 0, False: 32.1k]
  ------------------
  989|      0|        return 0;
  990|       |#else
  991|       |    if (pthread_mutex_unlock(lock) != 0) {
  992|       |        assert(errno != EPERM);
  993|       |        return 0;
  994|       |    }
  995|       |#endif
  996|       |
  997|  32.1k|    return 1;
  998|  32.1k|}
CRYPTO_THREAD_lock_free:
 1001|  4.14k|{
 1002|  4.14k|    if (lock == NULL)
  ------------------
  |  Branch (1002:9): [True: 109, False: 4.03k]
  ------------------
 1003|    109|        return;
 1004|       |
 1005|  4.03k|#ifdef USE_RWLOCK
 1006|  4.03k|    pthread_rwlock_destroy(lock);
 1007|       |#else
 1008|       |    pthread_mutex_destroy(lock);
 1009|       |#endif
 1010|  4.03k|    OPENSSL_free(lock);
  ------------------
  |  |  132|  4.03k|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
 1011|       |
 1012|  4.03k|    return;
 1013|  4.14k|}
CRYPTO_THREAD_run_once:
 1016|  66.0k|{
 1017|  66.0k|    if (ossl_unlikely(pthread_once(once, init) != 0))
  ------------------
  |  |   23|  66.0k|#define ossl_unlikely(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (23:26): [True: 0, False: 66.0k]
  |  |  ------------------
  ------------------
 1018|      0|        return 0;
 1019|       |
 1020|  66.0k|    return 1;
 1021|  66.0k|}
CRYPTO_THREAD_init_local:
 1024|      4|{
 1025|      4|    if (pthread_key_create(key, cleanup) != 0)
  ------------------
  |  Branch (1025:9): [True: 0, False: 4]
  ------------------
 1026|      0|        return 0;
 1027|       |
 1028|      4|    return 1;
 1029|      4|}
CRYPTO_THREAD_get_local:
 1032|  28.9k|{
 1033|  28.9k|    return pthread_getspecific(*key);
 1034|  28.9k|}
CRYPTO_THREAD_set_local:
 1037|      3|{
 1038|      3|    if (pthread_setspecific(*key, val) != 0)
  ------------------
  |  Branch (1038:9): [True: 0, False: 3]
  ------------------
 1039|      0|        return 0;
 1040|       |
 1041|      3|    return 1;
 1042|      3|}
CRYPTO_atomic_add:
 1063|    239|{
 1064|    239|#if defined(__GNUC__) && defined(__ATOMIC_ACQ_REL) && !defined(BROKEN_CLANG_ATOMICS)
 1065|    239|    if (__atomic_is_lock_free(sizeof(*val), val)) {
  ------------------
  |  Branch (1065:9): [True: 239, Folded]
  ------------------
 1066|    239|        *ret = __atomic_add_fetch(val, amount, __ATOMIC_ACQ_REL);
 1067|    239|        return 1;
 1068|    239|    }
 1069|       |#elif defined(__sun) && (defined(__SunOS_5_10) || defined(__SunOS_5_11))
 1070|       |    /* This will work for all future Solaris versions. */
 1071|       |    if (ret != NULL) {
 1072|       |        *ret = atomic_add_int_nv((volatile unsigned int *)val, amount);
 1073|       |        return 1;
 1074|       |    }
 1075|       |#endif
 1076|      0|    if (lock == NULL || !CRYPTO_THREAD_write_lock(lock))
  ------------------
  |  Branch (1076:9): [True: 0, False: 0]
  |  Branch (1076:25): [True: 0, False: 0]
  ------------------
 1077|      0|        return 0;
 1078|       |
 1079|      0|    *val += amount;
 1080|      0|    *ret = *val;
 1081|       |
 1082|      0|    if (!CRYPTO_THREAD_unlock(lock))
  ------------------
  |  Branch (1082:9): [True: 0, False: 0]
  ------------------
 1083|      0|        return 0;
 1084|       |
 1085|      0|    return 1;
 1086|      0|}
CRYPTO_atomic_or:
 1142|      2|{
 1143|      2|#if defined(__GNUC__) && defined(__ATOMIC_ACQ_REL) && !defined(BROKEN_CLANG_ATOMICS)
 1144|      2|    if (__atomic_is_lock_free(sizeof(*val), val)) {
  ------------------
  |  Branch (1144:9): [True: 2, Folded]
  ------------------
 1145|      2|        *ret = __atomic_or_fetch(val, op, __ATOMIC_ACQ_REL);
 1146|      2|        return 1;
 1147|      2|    }
 1148|       |#elif defined(__sun) && (defined(__SunOS_5_10) || defined(__SunOS_5_11))
 1149|       |    /* This will work for all future Solaris versions. */
 1150|       |    if (ret != NULL) {
 1151|       |        *ret = atomic_or_64_nv(val, op);
 1152|       |        return 1;
 1153|       |    }
 1154|       |#endif
 1155|      0|    if (lock == NULL || !CRYPTO_THREAD_write_lock(lock))
  ------------------
  |  Branch (1155:9): [True: 0, False: 0]
  |  Branch (1155:25): [True: 0, False: 0]
  ------------------
 1156|      0|        return 0;
 1157|      0|    *val |= op;
 1158|      0|    *ret = *val;
 1159|       |
 1160|      0|    if (!CRYPTO_THREAD_unlock(lock))
  ------------------
  |  Branch (1160:9): [True: 0, False: 0]
  ------------------
 1161|      0|        return 0;
 1162|       |
 1163|      0|    return 1;
 1164|      0|}
CRYPTO_atomic_load:
 1167|  3.82k|{
 1168|  3.82k|#if defined(__GNUC__) && defined(__ATOMIC_ACQ_REL) && !defined(BROKEN_CLANG_ATOMICS)
 1169|  3.82k|    if (__atomic_is_lock_free(sizeof(*val), val)) {
  ------------------
  |  Branch (1169:9): [True: 3.82k, Folded]
  ------------------
 1170|  3.82k|        __atomic_load(val, ret, __ATOMIC_ACQUIRE);
 1171|  3.82k|        return 1;
 1172|  3.82k|    }
 1173|       |#elif defined(__sun) && (defined(__SunOS_5_10) || defined(__SunOS_5_11))
 1174|       |    /* This will work for all future Solaris versions. */
 1175|       |    if (ret != NULL) {
 1176|       |        *ret = atomic_or_64_nv(val, 0);
 1177|       |        return 1;
 1178|       |    }
 1179|       |#endif
 1180|      0|    if (lock == NULL || !CRYPTO_THREAD_read_lock(lock))
  ------------------
  |  Branch (1180:9): [True: 0, False: 0]
  |  Branch (1180:25): [True: 0, False: 0]
  ------------------
 1181|      0|        return 0;
 1182|      0|    *ret = *val;
 1183|      0|    if (!CRYPTO_THREAD_unlock(lock))
  ------------------
  |  Branch (1183:9): [True: 0, False: 0]
  ------------------
 1184|      0|        return 0;
 1185|       |
 1186|      0|    return 1;
 1187|      0|}
CRYPTO_atomic_store:
 1190|    361|{
 1191|    361|#if defined(__GNUC__) && defined(__ATOMIC_ACQ_REL) && !defined(BROKEN_CLANG_ATOMICS)
 1192|    361|    if (__atomic_is_lock_free(sizeof(*dst), dst)) {
  ------------------
  |  Branch (1192:9): [True: 361, Folded]
  ------------------
 1193|    361|        __atomic_store(dst, &val, __ATOMIC_RELEASE);
 1194|    361|        return 1;
 1195|    361|    }
 1196|       |#elif defined(__sun) && (defined(__SunOS_5_10) || defined(__SunOS_5_11))
 1197|       |    /* This will work for all future Solaris versions. */
 1198|       |    if (dst != NULL) {
 1199|       |        atomic_swap_64(dst, val);
 1200|       |        return 1;
 1201|       |    }
 1202|       |#endif
 1203|      0|    if (lock == NULL || !CRYPTO_THREAD_write_lock(lock))
  ------------------
  |  Branch (1203:9): [True: 0, False: 0]
  |  Branch (1203:25): [True: 0, False: 0]
  ------------------
 1204|      0|        return 0;
 1205|      0|    *dst = val;
 1206|      0|    if (!CRYPTO_THREAD_unlock(lock))
  ------------------
  |  Branch (1206:9): [True: 0, False: 0]
  ------------------
 1207|      0|        return 0;
 1208|       |
 1209|      0|    return 1;
 1210|      0|}
openssl_get_fork_id:
 1266|  6.53k|{
 1267|  6.53k|    return getpid();
 1268|  6.53k|}
threads_pthread.c:update_qp:
  412|    218|{
  413|    218|    uint32_t current_idx;
  414|       |
  415|    218|    pthread_mutex_lock(&lock->alloc_lock);
  416|       |
  417|       |    /*
  418|       |     * we need at least one qp to be available with one
  419|       |     * left over, so that readers can start working on
  420|       |     * one that isn't yet being waited on
  421|       |     */
  422|    218|    while (lock->group_count - lock->writers_alloced < 2)
  ------------------
  |  Branch (422:12): [True: 0, False: 218]
  ------------------
  423|       |        /* we have to wait for one to be free */
  424|      0|        pthread_cond_wait(&lock->alloc_signal, &lock->alloc_lock);
  425|       |
  426|    218|    current_idx = lock->current_alloc_idx;
  427|       |
  428|       |    /* Allocate the qp */
  429|    218|    lock->writers_alloced++;
  430|       |
  431|       |    /* increment the allocation index */
  432|    218|    lock->current_alloc_idx = (lock->current_alloc_idx + 1) % lock->group_count;
  433|       |
  434|    218|    *curr_id = lock->id_ctr;
  435|    218|    lock->id_ctr++;
  436|       |
  437|       |    /*
  438|       |     * make the current state of everything visible by this release
  439|       |     * when get_hold_current_qp acquires the next qp
  440|       |     */
  441|    218|    ATOMIC_STORE_N(uint32_t, &lock->reader_idx, lock->current_alloc_idx,
  ------------------
  |  |  123|    218|#define ATOMIC_STORE_N(t, p, v, o) __atomic_store_n(p, v, o)
  ------------------
  442|    218|        __ATOMIC_RELEASE);
  443|       |
  444|       |    /*
  445|       |     * this should make sure that the new value of reader_idx is visible in
  446|       |     * get_hold_current_qp, directly after incrementing the users count
  447|       |     */
  448|    218|    ATOMIC_ADD_FETCH(&lock->qp_group[current_idx].users, (uint64_t)0,
  ------------------
  |  |  125|    218|#define ATOMIC_ADD_FETCH(p, v, o) __atomic_add_fetch(p, v, o)
  ------------------
  449|    218|        __ATOMIC_RELEASE);
  450|       |
  451|       |    /* wake up any waiters */
  452|    218|    pthread_cond_signal(&lock->alloc_signal);
  453|    218|    pthread_mutex_unlock(&lock->alloc_lock);
  454|    218|    return &lock->qp_group[current_idx];
  455|    218|}
threads_pthread.c:retire_qp:
  458|    218|{
  459|    218|    pthread_mutex_lock(&lock->alloc_lock);
  460|    218|    lock->writers_alloced--;
  461|    218|    pthread_cond_signal(&lock->alloc_signal);
  462|    218|    pthread_mutex_unlock(&lock->alloc_lock);
  463|    218|}
threads_pthread.c:allocate_new_qp_group:
  467|    110|{
  468|    110|    struct rcu_qp *new = OPENSSL_calloc(count, sizeof(*new));
  ------------------
  |  |  113|    110|    CRYPTO_calloc(num, size, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_calloc(num, size, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  469|       |
  470|    110|    lock->group_count = count;
  471|    110|    return new;
  472|    110|}
threads_pthread.c:ossl_init_rwlock_contention_data:
  888|  4.07k|{
  889|  4.07k|}
threads_pthread.c:ossl_rwlock_rdlock:
  892|  28.8k|{
  893|  28.8k|    return pthread_rwlock_rdlock(rwlock);
  894|  28.8k|}
threads_pthread.c:ossl_rwlock_wrlock:
  897|  3.30k|{
  898|  3.30k|    return pthread_rwlock_wrlock(rwlock);
  899|  3.30k|}
threads_pthread.c:ossl_rwlock_unlock:
  902|  32.1k|{
  903|  32.1k|    return pthread_rwlock_unlock(rwlock);
  904|  32.1k|}

ossl_err_load_TS_strings:
   82|      1|{
   83|      1|#ifndef OPENSSL_NO_ERR
   84|      1|    if (ERR_reason_error_string(TS_str_reasons[0].error) == NULL)
  ------------------
  |  Branch (84:9): [True: 1, False: 0]
  ------------------
   85|      1|        ERR_load_strings_const(TS_str_reasons);
   86|      1|#endif
   87|      1|    return 1;
   88|      1|}

ossl_err_load_UI_strings:
   41|      1|{
   42|      1|#ifndef OPENSSL_NO_ERR
   43|      1|    if (ERR_reason_error_string(UI_str_reasons[0].error) == NULL)
  ------------------
  |  Branch (43:9): [True: 1, False: 0]
  ------------------
   44|      1|        ERR_load_strings_const(UI_str_reasons);
   45|      1|#endif
   46|      1|    return 1;
   47|      1|}

ossl_err_load_X509V3_strings:
  146|      1|{
  147|      1|#ifndef OPENSSL_NO_ERR
  148|      1|    if (ERR_reason_error_string(X509V3_str_reasons[0].error) == NULL)
  ------------------
  |  Branch (148:9): [True: 1, False: 0]
  ------------------
  149|      1|        ERR_load_strings_const(X509V3_str_reasons);
  150|      1|#endif
  151|      1|    return 1;
  152|      1|}

X509_get_default_cert_area:
   79|    110|{
   80|       |#if defined(_WIN32)
   81|       |    RUN_ONCE(&openssldir_setup_init, do_openssldir_setup);
   82|       |    return x509_cert_areaptr;
   83|       |#else
   84|    110|    return X509_CERT_AREA;
  ------------------
  |  |   83|    110|#define X509_CERT_AREA OPENSSLDIR
  ------------------
   85|    110|#endif
   86|    110|}

ossl_err_load_X509_strings:
   93|      1|{
   94|      1|#ifndef OPENSSL_NO_ERR
   95|      1|    if (ERR_reason_error_string(X509_str_reasons[0].error) == NULL)
  ------------------
  |  Branch (95:9): [True: 1, False: 0]
  ------------------
   96|      1|        ERR_load_strings_const(X509_str_reasons);
   97|      1|#endif
   98|      1|    return 1;
   99|      1|}

EVP_aria_128_cbc:
  272|      1|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_aria_128_cfb128:
  272|      1|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_aria_128_ofb:
  272|      1|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_aria_128_ecb:
  272|      1|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_aria_192_cbc:
  272|      1|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_aria_192_cfb128:
  272|      1|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_aria_192_ofb:
  272|      1|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_aria_192_ecb:
  272|      1|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_aria_256_cbc:
  272|      1|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_aria_256_cfb128:
  272|      1|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_aria_256_ofb:
  272|      1|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_aria_256_ecb:
  272|      1|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_aria_128_cfb1:
  272|      1|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_aria_192_cfb1:
  272|      1|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_aria_256_cfb1:
  272|      1|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_aria_128_cfb8:
  272|      1|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_aria_192_cfb8:
  272|      1|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_aria_256_cfb8:
  272|      1|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_bf_cbc:
  272|      1|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_bf_cfb64:
  272|      1|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_bf_ofb:
  272|      1|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_bf_ecb:
  272|      1|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_cast5_cbc:
  272|      1|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_cast5_cfb64:
  272|      1|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_cast5_ofb:
  272|      1|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_cast5_ecb:
  272|      1|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_des_cbc:
  272|      1|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_des_cfb64:
  272|      1|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_des_ofb:
  272|      1|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_des_ecb:
  272|      1|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_des_cfb1:
  272|      1|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_des_cfb8:
  272|      1|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_des_ede_cbc:
  272|      1|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_des_ede_cfb64:
  272|      1|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_des_ede_ofb:
  272|      1|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_des_ede3_cbc:
  272|      1|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_des_ede3_cfb64:
  272|      1|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_des_ede3_ofb:
  272|      1|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_des_ede3_cfb1:
  272|      1|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_des_ede3_cfb8:
  272|      1|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_idea_cbc:
  272|      1|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_idea_cfb64:
  272|      1|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_idea_ofb:
  272|      1|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_idea_ecb:
  272|      1|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_rc2_cbc:
  272|      1|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_rc2_cfb64:
  272|      1|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_rc2_ofb:
  272|      1|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_rc2_ecb:
  272|      1|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_rc5_32_12_16_cbc:
  272|      1|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_rc5_32_12_16_cfb64:
  272|      1|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_rc5_32_12_16_ofb:
  272|      1|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_rc5_32_12_16_ecb:
  272|      1|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_seed_cbc:
  272|      1|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_seed_cfb128:
  272|      1|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_seed_ofb:
  272|      1|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }
EVP_seed_ecb:
  272|      1|    const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; }

threads_common.c:ossl_sa_CTX_TABLE_ENTRY_get:
   60|  8.90k|    {                                                                                                              \
   61|  8.90k|        return (type *)ossl_sa_get((OPENSSL_SA *)sa, n);                                                           \
   62|  8.90k|    }                                                                                                              \
threads_common.c:ossl_sa_CTX_TABLE_ENTRY_new:
   26|      2|    {                                                                                                              \
   27|      2|        return (SPARSE_ARRAY_OF(type) *)ossl_sa_new();                                                             \
   28|      2|    }                                                                                                              \
threads_common.c:ossl_sa_CTX_TABLE_ENTRY_set:
   66|      5|    {                                                                                                              \
   67|      5|        return ossl_sa_set((OPENSSL_SA *)sa, n, (void *)val);                                                      \
   68|      5|    }                                                                                                              \
property.c:ossl_sa_ALGORITHM_new:
   26|  1.76k|    {                                                                                                              \
   27|  1.76k|        return (SPARSE_ARRAY_OF(type) *)ossl_sa_new();                                                             \
   28|  1.76k|    }                                                                                                              \
property.c:ossl_sa_ALGORITHM_free:
   31|  1.74k|    {                                                                                                              \
   32|  1.74k|        ossl_sa_free((OPENSSL_SA *)sa);                                                                            \
   33|  1.74k|    }                                                                                                              \
property.c:ossl_sa_ALGORITHM_get:
   60|    283|    {                                                                                                              \
   61|    283|        return (type *)ossl_sa_get((OPENSSL_SA *)sa, n);                                                           \
   62|    283|    }                                                                                                              \
property.c:ossl_sa_ALGORITHM_set:
   66|    135|    {                                                                                                              \
   67|    135|        return ossl_sa_set((OPENSSL_SA *)sa, n, (void *)val);                                                      \
   68|    135|    }                                                                                                              \
property.c:ossl_sa_ALGORITHM_doall_arg:
   55|  1.82k|    {                                                                                                              \
   56|  1.82k|        ossl_sa_doall_arg((OPENSSL_SA *)sa,                                                                        \
   57|  1.82k|            (void (*)(ossl_uintmax_t, void *, void *))leaf, arg);                                                  \
   58|  1.82k|    }                                                                                                              \
property.c:ossl_sa_ALGORITHM_doall:
   47|     80|    {                                                                                                              \
   48|     80|        ossl_sa_doall((OPENSSL_SA *)sa,                                                                            \
   49|     80|            (void (*)(ossl_uintmax_t, void *))leaf);                                                               \
   50|     80|    }                                                                                                              \

evp_enc.c:ossl_assert_int:
   45|  39.2k|{
   46|  39.2k|    if (!expr)
  ------------------
  |  Branch (46:9): [True: 0, False: 39.2k]
  ------------------
   47|      0|        OPENSSL_die(exprstr, file, line);
   48|       |
   49|  39.2k|    return expr;
   50|  39.2k|}
evp_fetch.c:ossl_assert_int:
   45|    303|{
   46|    303|    if (!expr)
  ------------------
  |  Branch (46:9): [True: 0, False: 303]
  ------------------
   47|      0|        OPENSSL_die(exprstr, file, line);
   48|       |
   49|    303|    return expr;
   50|    303|}
core_algorithm.c:ossl_assert_int:
   45|      2|{
   46|      2|    if (!expr)
  ------------------
  |  Branch (46:9): [True: 0, False: 2]
  ------------------
   47|      0|        OPENSSL_die(exprstr, file, line);
   48|       |
   49|      2|    return expr;
   50|      2|}
core_fetch.c:ossl_assert_int:
   45|      6|{
   46|      6|    if (!expr)
  ------------------
  |  Branch (46:9): [True: 0, False: 6]
  ------------------
   47|      0|        OPENSSL_die(exprstr, file, line);
   48|       |
   49|      6|    return expr;
   50|      6|}
core_namemap.c:ossl_assert_int:
   45|    313|{
   46|    313|    if (!expr)
  ------------------
  |  Branch (46:9): [True: 0, False: 313]
  ------------------
   47|      0|        OPENSSL_die(exprstr, file, line);
   48|       |
   49|    313|    return expr;
   50|    313|}
provider_core.c:ossl_assert_int:
   45|    340|{
   46|    340|    if (!expr)
  ------------------
  |  Branch (46:9): [True: 0, False: 340]
  ------------------
   47|      0|        OPENSSL_die(exprstr, file, line);
   48|       |
   49|    340|    return expr;
   50|    340|}
threads_common.c:ossl_assert_int:
   45|  8.91k|{
   46|  8.91k|    if (!expr)
  ------------------
  |  Branch (46:9): [True: 0, False: 8.91k]
  ------------------
   47|      0|        OPENSSL_die(exprstr, file, line);
   48|       |
   49|  8.91k|    return expr;
   50|  8.91k|}
threads_pthread.c:ossl_assert_int:
   45|  32.1k|{
   46|  32.1k|    if (!expr)
  ------------------
  |  Branch (46:9): [True: 0, False: 32.1k]
  ------------------
   47|      0|        OPENSSL_die(exprstr, file, line);
   48|       |
   49|  32.1k|    return expr;
   50|  32.1k|}
defn_cache.c:ossl_assert_int:
   45|    270|{
   46|    270|    if (!expr)
  ------------------
  |  Branch (46:9): [True: 0, False: 270]
  ------------------
   47|      0|        OPENSSL_die(exprstr, file, line);
   48|       |
   49|    270|    return expr;
   50|    270|}
property.c:ossl_assert_int:
   45|    139|{
   46|    139|    if (!expr)
  ------------------
  |  Branch (46:9): [True: 0, False: 139]
  ------------------
   47|      0|        OPENSSL_die(exprstr, file, line);
   48|       |
   49|    139|    return expr;
   50|    139|}
drbg_ctr.c:ossl_assert_int:
   45|      7|{
   46|      7|    if (!expr)
  ------------------
  |  Branch (46:9): [True: 0, False: 7]
  ------------------
   47|      0|        OPENSSL_die(exprstr, file, line);
   48|       |
   49|      7|    return expr;
   50|      7|}

core_namemap.c:ossl_ht_strcase:
  320|  1.65k|{
  321|  1.65k|    size_t i;
  322|       |#if defined(CHARSET_EBCDIC) && !defined(CHARSET_EBCDIC_TEST)
  323|       |    const long int case_adjust = ~0x40;
  324|       |#else
  325|  1.65k|    const long int case_adjust = ~0x20;
  326|  1.65k|#endif
  327|       |
  328|  1.65k|    if (src == NULL)
  ------------------
  |  Branch (328:9): [True: 0, False: 1.65k]
  ------------------
  329|      0|        return;
  330|       |
  331|       |    /*
  332|       |     * If we're passed a key, we're doing raw key copies
  333|       |     * so check that we don't overflow here, and truncate if
  334|       |     * we copy more space than we have available
  335|       |     */
  336|  1.65k|    if (key != NULL && key->keysize + len > key->bufsize)
  ------------------
  |  Branch (336:9): [True: 1.65k, False: 0]
  |  Branch (336:24): [True: 0, False: 1.65k]
  ------------------
  337|      0|        len = (size_t)(key->bufsize - key->keysize);
  338|       |
  339|  24.6k|    for (i = 0; src[i] != '\0' && i < len; i++)
  ------------------
  |  Branch (339:17): [True: 23.0k, False: 1.57k]
  |  Branch (339:35): [True: 22.9k, False: 80]
  ------------------
  340|  22.9k|        tgt[i] = case_adjust & src[i];
  341|  1.65k|}

array_alloc.c:ossl_size_mul:
   88|  2.57k|{
   89|  2.57k|    int err = 0;
   90|  2.57k|    *bytes = safe_mul_size_t(num, size, &err);
   91|       |
   92|  2.57k|    if (ossl_unlikely(err != 0)) {
  ------------------
  |  |   23|  2.57k|#define ossl_unlikely(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (23:26): [True: 0, False: 2.57k]
  |  |  ------------------
  ------------------
   93|      0|        ossl_report_alloc_err_of(file, line);
   94|       |
   95|      0|        return false;
   96|      0|    }
   97|       |
   98|  2.57k|    return true;
   99|  2.57k|}

dso_lib.c:CRYPTO_NEW_REF:
  280|    104|{
  281|    104|    refcnt->val = n;
  282|    104|    return 1;
  283|    104|}
dso_lib.c:CRYPTO_DOWN_REF:
   56|    104|{
   57|       |#ifdef OSSL_TSAN_BUILD
   58|       |    /*
   59|       |     * TSAN requires acq_rel as it indicates a false positive error when
   60|       |     * the object that contains the refcount is freed otherwise.
   61|       |     */
   62|       |    *ret = atomic_fetch_sub_explicit(&refcnt->val, 1, memory_order_acq_rel) - 1;
   63|       |#else
   64|    104|    *ret = atomic_fetch_sub_explicit(&refcnt->val, 1, memory_order_release) - 1;
   65|    104|    if (*ret == 0)
  ------------------
  |  Branch (65:9): [True: 104, False: 0]
  ------------------
   66|       |        atomic_thread_fence(memory_order_acquire);
   67|    104|#endif
   68|    104|    return 1;
   69|    104|}
dso_lib.c:CRYPTO_FREE_REF:
  286|    104|{
  287|    104|}
evp_enc.c:CRYPTO_NEW_REF:
  280|    130|{
  281|    130|    refcnt->val = n;
  282|    130|    return 1;
  283|    130|}
evp_enc.c:CRYPTO_UP_REF:
   40|    142|{
   41|       |    *ret = atomic_fetch_add_explicit(&refcnt->val, 1, memory_order_relaxed) + 1;
   42|    142|    return 1;
   43|    142|}
evp_enc.c:CRYPTO_DOWN_REF:
   56|    130|{
   57|       |#ifdef OSSL_TSAN_BUILD
   58|       |    /*
   59|       |     * TSAN requires acq_rel as it indicates a false positive error when
   60|       |     * the object that contains the refcount is freed otherwise.
   61|       |     */
   62|       |    *ret = atomic_fetch_sub_explicit(&refcnt->val, 1, memory_order_acq_rel) - 1;
   63|       |#else
   64|    130|    *ret = atomic_fetch_sub_explicit(&refcnt->val, 1, memory_order_release) - 1;
   65|    130|    if (*ret == 0)
  ------------------
  |  Branch (65:9): [True: 0, False: 130]
  ------------------
   66|       |        atomic_thread_fence(memory_order_acquire);
   67|    130|#endif
   68|    130|    return 1;
   69|    130|}
provider_core.c:CRYPTO_UP_REF:
   40|    148|{
   41|       |    *ret = atomic_fetch_add_explicit(&refcnt->val, 1, memory_order_relaxed) + 1;
   42|    148|    return 1;
   43|    148|}
provider_core.c:CRYPTO_NEW_REF:
  280|    219|{
  281|    219|    refcnt->val = n;
  282|    219|    return 1;
  283|    219|}
provider_core.c:CRYPTO_DOWN_REF:
   56|    231|{
   57|       |#ifdef OSSL_TSAN_BUILD
   58|       |    /*
   59|       |     * TSAN requires acq_rel as it indicates a false positive error when
   60|       |     * the object that contains the refcount is freed otherwise.
   61|       |     */
   62|       |    *ret = atomic_fetch_sub_explicit(&refcnt->val, 1, memory_order_acq_rel) - 1;
   63|       |#else
   64|    231|    *ret = atomic_fetch_sub_explicit(&refcnt->val, 1, memory_order_release) - 1;
   65|    231|    if (*ret == 0)
  ------------------
  |  Branch (65:9): [True: 218, False: 13]
  ------------------
   66|       |        atomic_thread_fence(memory_order_acquire);
   67|    231|#endif
   68|    231|    return 1;
   69|    231|}
provider_core.c:CRYPTO_FREE_REF:
  286|    218|{
  287|    218|}
evp_rand.c:CRYPTO_UP_REF:
   40|     15|{
   41|       |    *ret = atomic_fetch_add_explicit(&refcnt->val, 1, memory_order_relaxed) + 1;
   42|     15|    return 1;
   43|     15|}
evp_rand.c:CRYPTO_NEW_REF:
  280|      8|{
  281|      8|    refcnt->val = n;
  282|      8|    return 1;
  283|      8|}
evp_rand.c:CRYPTO_DOWN_REF:
   56|      8|{
   57|       |#ifdef OSSL_TSAN_BUILD
   58|       |    /*
   59|       |     * TSAN requires acq_rel as it indicates a false positive error when
   60|       |     * the object that contains the refcount is freed otherwise.
   61|       |     */
   62|       |    *ret = atomic_fetch_sub_explicit(&refcnt->val, 1, memory_order_acq_rel) - 1;
   63|       |#else
   64|      8|    *ret = atomic_fetch_sub_explicit(&refcnt->val, 1, memory_order_release) - 1;
   65|      8|    if (*ret == 0)
  ------------------
  |  Branch (65:9): [True: 0, False: 8]
  ------------------
   66|       |        atomic_thread_fence(memory_order_acquire);
   67|      8|#endif
   68|      8|    return 1;
   69|      8|}

array_alloc.c:safe_mul_size_t:
  151|  2.57k|    {                                                                \
  152|  2.57k|        type r;                                                      \
  153|  2.57k|                                                                     \
  154|  2.57k|        if (!__builtin_mul_overflow(a, b, &r))                       \
  ------------------
  |  Branch (154:13): [True: 2.57k, False: 0]
  ------------------
  155|  2.57k|            return r;                                                \
  156|  2.57k|        *err |= 1;                                                   \
  157|      0|        return a * b;                                                \
  158|  2.57k|    }
stack.c:safe_muldiv_int:
  324|    122|    {                                                                   \
  325|    122|        int e2 = 0;                                                     \
  326|    122|        type q, r, x, y;                                                \
  327|    122|                                                                        \
  328|    122|        if (c == 0) {                                                   \
  ------------------
  |  Branch (328:13): [True: 0, False: 122]
  ------------------
  329|      0|            *err |= 1;                                                  \
  330|      0|            return a == 0 || b == 0 ? 0 : max;                          \
  ------------------
  |  Branch (330:20): [True: 0, False: 0]
  |  Branch (330:30): [True: 0, False: 0]
  ------------------
  331|      0|        }                                                               \
  332|    122|        x = safe_mul_##type_name(a, b, &e2);                            \
  333|    122|        if (!e2)                                                        \
  ------------------
  |  Branch (333:13): [True: 122, False: 0]
  ------------------
  334|    122|            return safe_div_##type_name(x, c, err);                     \
  335|    122|        if (b > a) {                                                    \
  ------------------
  |  Branch (335:13): [True: 0, False: 0]
  ------------------
  336|      0|            x = b;                                                      \
  337|      0|            b = a;                                                      \
  338|      0|            a = x;                                                      \
  339|      0|        }                                                               \
  340|      0|        q = safe_div_##type_name(a, c, err);                            \
  341|      0|        r = safe_mod_##type_name(a, c, err);                            \
  342|      0|        x = safe_mul_##type_name(r, b, err);                            \
  343|      0|        y = safe_mul_##type_name(q, b, err);                            \
  344|      0|        q = safe_div_##type_name(x, c, err);                            \
  345|      0|        return safe_add_##type_name(y, q, err);                         \
  346|    122|    }
stack.c:safe_mul_int:
  138|    122|    {                                                                \
  139|    122|        type r;                                                      \
  140|    122|                                                                     \
  141|    122|        if (!__builtin_mul_overflow(a, b, &r))                       \
  ------------------
  |  Branch (141:13): [True: 122, False: 0]
  ------------------
  142|    122|            return r;                                                \
  143|    122|        *err |= 1;                                                   \
  144|      0|        return (a < 0) ^ (b < 0) ? min : max;                        \
  ------------------
  |  Branch (144:16): [True: 0, False: 0]
  ------------------
  145|    122|    }
stack.c:safe_div_int:
  201|    122|    {                                                                \
  202|    122|        if (b == 0) {                                                \
  ------------------
  |  Branch (202:13): [True: 0, False: 122]
  ------------------
  203|      0|            *err |= 1;                                               \
  204|      0|            return a < 0 ? min : max;                                \
  ------------------
  |  Branch (204:20): [True: 0, False: 0]
  ------------------
  205|      0|        }                                                            \
  206|    122|        if (b == -1 && a == min) {                                   \
  ------------------
  |  Branch (206:13): [True: 0, False: 122]
  |  Branch (206:24): [True: 0, False: 0]
  ------------------
  207|      0|            *err |= 1;                                               \
  208|      0|            return max;                                              \
  209|      0|        }                                                            \
  210|    122|        return a / b;                                                \
  211|    122|    }

ssl_init.c:ossl_init_ssl_base_ossl_:
   73|      1|    {                                \
   74|      1|        init##_ossl_ret_ = init();   \
   75|      1|    }                                \
err.c:do_err_strings_init_ossl_:
   73|      1|    {                                \
   74|      1|        init##_ossl_ret_ = init();   \
   75|      1|    }                                \
context.c:default_context_do_thread_key_init_ossl_:
   73|      1|    {                                \
   74|      1|        init##_ossl_ret_ = init();   \
   75|      1|    }                                \
context.c:default_context_do_init_ossl_:
   73|      1|    {                                \
   74|      1|        init##_ossl_ret_ = init();   \
   75|      1|    }                                \
init.c:ossl_init_base_ossl_:
   73|      1|    {                                \
   74|      1|        init##_ossl_ret_ = init();   \
   75|      1|    }                                \
init.c:ossl_init_load_crypto_strings_ossl_:
   73|      1|    {                                \
   74|      1|        init##_ossl_ret_ = init();   \
   75|      1|    }                                \
init.c:ossl_init_add_all_ciphers_ossl_:
   73|      1|    {                                \
   74|      1|        init##_ossl_ret_ = init();   \
   75|      1|    }                                \
init.c:ossl_init_add_all_digests_ossl_:
   73|      1|    {                                \
   74|      1|        init##_ossl_ret_ = init();   \
   75|      1|    }                                \
init.c:ossl_init_config_ossl_:
   73|      1|    {                                \
   74|      1|        init##_ossl_ret_ = init();   \
   75|      1|    }                                \
initthread.c:create_global_tevent_register_ossl_:
   73|      1|    {                                \
   74|      1|        init##_ossl_ret_ = init();   \
   75|      1|    }                                \
o_names.c:o_names_init_ossl_:
   73|      1|    {                                \
   74|      1|        init##_ossl_ret_ = init();   \
   75|      1|    }                                \
rand_lib.c:do_rand_init_ossl_:
   73|      1|    {                                \
   74|      1|        init##_ossl_ret_ = init();   \
   75|      1|    }                                \

evp_enc.c:OSSL_FUNC_cipher_newctx:
   60|    130|    {                                                  \
   61|    130|        return (OSSL_FUNC_##name##_fn *)opf->function; \
   62|    130|    }
evp_enc.c:OSSL_FUNC_cipher_encrypt_init:
   60|    130|    {                                                  \
   61|    130|        return (OSSL_FUNC_##name##_fn *)opf->function; \
   62|    130|    }
evp_enc.c:OSSL_FUNC_cipher_decrypt_init:
   60|    130|    {                                                  \
   61|    130|        return (OSSL_FUNC_##name##_fn *)opf->function; \
   62|    130|    }
evp_enc.c:OSSL_FUNC_cipher_encrypt_skey_init:
   60|     68|    {                                                  \
   61|     68|        return (OSSL_FUNC_##name##_fn *)opf->function; \
   62|     68|    }
evp_enc.c:OSSL_FUNC_cipher_decrypt_skey_init:
   60|     68|    {                                                  \
   61|     68|        return (OSSL_FUNC_##name##_fn *)opf->function; \
   62|     68|    }
evp_enc.c:OSSL_FUNC_cipher_update:
   60|    130|    {                                                  \
   61|    130|        return (OSSL_FUNC_##name##_fn *)opf->function; \
   62|    130|    }
evp_enc.c:OSSL_FUNC_cipher_final:
   60|    130|    {                                                  \
   61|    130|        return (OSSL_FUNC_##name##_fn *)opf->function; \
   62|    130|    }
evp_enc.c:OSSL_FUNC_cipher_cipher:
   60|    118|    {                                                  \
   61|    118|        return (OSSL_FUNC_##name##_fn *)opf->function; \
   62|    118|    }
evp_enc.c:OSSL_FUNC_cipher_freectx:
   60|    130|    {                                                  \
   61|    130|        return (OSSL_FUNC_##name##_fn *)opf->function; \
   62|    130|    }
evp_enc.c:OSSL_FUNC_cipher_dupctx:
   60|    129|    {                                                  \
   61|    129|        return (OSSL_FUNC_##name##_fn *)opf->function; \
   62|    129|    }
evp_enc.c:OSSL_FUNC_cipher_get_params:
   60|    130|    {                                                  \
   61|    130|        return (OSSL_FUNC_##name##_fn *)opf->function; \
   62|    130|    }
evp_enc.c:OSSL_FUNC_cipher_get_ctx_params:
   60|    130|    {                                                  \
   61|    130|        return (OSSL_FUNC_##name##_fn *)opf->function; \
   62|    130|    }
evp_enc.c:OSSL_FUNC_cipher_set_ctx_params:
   60|    130|    {                                                  \
   61|    130|        return (OSSL_FUNC_##name##_fn *)opf->function; \
   62|    130|    }
evp_enc.c:OSSL_FUNC_cipher_gettable_params:
   60|    130|    {                                                  \
   61|    130|        return (OSSL_FUNC_##name##_fn *)opf->function; \
   62|    130|    }
evp_enc.c:OSSL_FUNC_cipher_gettable_ctx_params:
   60|    130|    {                                                  \
   61|    130|        return (OSSL_FUNC_##name##_fn *)opf->function; \
   62|    130|    }
evp_enc.c:OSSL_FUNC_cipher_settable_ctx_params:
   60|    130|    {                                                  \
   61|    130|        return (OSSL_FUNC_##name##_fn *)opf->function; \
   62|    130|    }
provider_core.c:OSSL_FUNC_provider_teardown:
   60|    114|    {                                                  \
   61|    114|        return (OSSL_FUNC_##name##_fn *)opf->function; \
   62|    114|    }
provider_core.c:OSSL_FUNC_provider_gettable_params:
   60|    115|    {                                                  \
   61|    115|        return (OSSL_FUNC_##name##_fn *)opf->function; \
   62|    115|    }
provider_core.c:OSSL_FUNC_provider_get_params:
   60|    115|    {                                                  \
   61|    115|        return (OSSL_FUNC_##name##_fn *)opf->function; \
   62|    115|    }
provider_core.c:OSSL_FUNC_provider_get_capabilities:
   60|    110|    {                                                  \
   61|    110|        return (OSSL_FUNC_##name##_fn *)opf->function; \
   62|    110|    }
provider_core.c:OSSL_FUNC_provider_query_operation:
   60|    115|    {                                                  \
   61|    115|        return (OSSL_FUNC_##name##_fn *)opf->function; \
   62|    115|    }
baseprov.c:OSSL_FUNC_core_gettable_params:
   60|      4|    {                                                  \
   61|      4|        return (OSSL_FUNC_##name##_fn *)opf->function; \
   62|      4|    }
baseprov.c:OSSL_FUNC_core_get_params:
   60|      4|    {                                                  \
   61|      4|        return (OSSL_FUNC_##name##_fn *)opf->function; \
   62|      4|    }
baseprov.c:OSSL_FUNC_core_get_libctx:
   60|      4|    {                                                  \
   61|      4|        return (OSSL_FUNC_##name##_fn *)opf->function; \
   62|      4|    }
defltprov.c:OSSL_FUNC_core_gettable_params:
   60|    110|    {                                                  \
   61|    110|        return (OSSL_FUNC_##name##_fn *)opf->function; \
   62|    110|    }
defltprov.c:OSSL_FUNC_core_get_params:
   60|    110|    {                                                  \
   61|    110|        return (OSSL_FUNC_##name##_fn *)opf->function; \
   62|    110|    }
defltprov.c:OSSL_FUNC_core_get_libctx:
   60|    110|    {                                                  \
   61|    110|        return (OSSL_FUNC_##name##_fn *)opf->function; \
   62|    110|    }
bio_prov.c:OSSL_FUNC_BIO_new_file:
   60|      1|    {                                                  \
   61|      1|        return (OSSL_FUNC_##name##_fn *)opf->function; \
   62|      1|    }
bio_prov.c:OSSL_FUNC_BIO_new_membuf:
   60|      1|    {                                                  \
   61|      1|        return (OSSL_FUNC_##name##_fn *)opf->function; \
   62|      1|    }
bio_prov.c:OSSL_FUNC_BIO_read_ex:
   60|      1|    {                                                  \
   61|      1|        return (OSSL_FUNC_##name##_fn *)opf->function; \
   62|      1|    }
bio_prov.c:OSSL_FUNC_BIO_write_ex:
   60|      1|    {                                                  \
   61|      1|        return (OSSL_FUNC_##name##_fn *)opf->function; \
   62|      1|    }
bio_prov.c:OSSL_FUNC_BIO_gets:
   60|      1|    {                                                  \
   61|      1|        return (OSSL_FUNC_##name##_fn *)opf->function; \
   62|      1|    }
bio_prov.c:OSSL_FUNC_BIO_puts:
   60|      1|    {                                                  \
   61|      1|        return (OSSL_FUNC_##name##_fn *)opf->function; \
   62|      1|    }
bio_prov.c:OSSL_FUNC_BIO_ctrl:
   60|      1|    {                                                  \
   61|      1|        return (OSSL_FUNC_##name##_fn *)opf->function; \
   62|      1|    }
bio_prov.c:OSSL_FUNC_BIO_up_ref:
   60|      1|    {                                                  \
   61|      1|        return (OSSL_FUNC_##name##_fn *)opf->function; \
   62|      1|    }
bio_prov.c:OSSL_FUNC_BIO_free:
   60|      1|    {                                                  \
   61|      1|        return (OSSL_FUNC_##name##_fn *)opf->function; \
   62|      1|    }
bio_prov.c:OSSL_FUNC_BIO_vprintf:
   60|      1|    {                                                  \
   61|      1|        return (OSSL_FUNC_##name##_fn *)opf->function; \
   62|      1|    }
provider_seeding.c:OSSL_FUNC_get_entropy:
   60|    110|    {                                                  \
   61|    110|        return (OSSL_FUNC_##name##_fn *)opf->function; \
   62|    110|    }
provider_seeding.c:OSSL_FUNC_get_user_entropy:
   60|    110|    {                                                  \
   61|    110|        return (OSSL_FUNC_##name##_fn *)opf->function; \
   62|    110|    }
provider_seeding.c:OSSL_FUNC_cleanup_entropy:
   60|    110|    {                                                  \
   61|    110|        return (OSSL_FUNC_##name##_fn *)opf->function; \
   62|    110|    }
provider_seeding.c:OSSL_FUNC_cleanup_user_entropy:
   60|    110|    {                                                  \
   61|    110|        return (OSSL_FUNC_##name##_fn *)opf->function; \
   62|    110|    }
provider_seeding.c:OSSL_FUNC_get_nonce:
   60|    110|    {                                                  \
   61|    110|        return (OSSL_FUNC_##name##_fn *)opf->function; \
   62|    110|    }
provider_seeding.c:OSSL_FUNC_get_user_nonce:
   60|    110|    {                                                  \
   61|    110|        return (OSSL_FUNC_##name##_fn *)opf->function; \
   62|    110|    }
provider_seeding.c:OSSL_FUNC_cleanup_nonce:
   60|    110|    {                                                  \
   61|    110|        return (OSSL_FUNC_##name##_fn *)opf->function; \
   62|    110|    }
provider_seeding.c:OSSL_FUNC_cleanup_user_nonce:
   60|    110|    {                                                  \
   61|    110|        return (OSSL_FUNC_##name##_fn *)opf->function; \
   62|    110|    }
drbg.c:OSSL_FUNC_rand_enable_locking:
   60|      2|    {                                                  \
   61|      2|        return (OSSL_FUNC_##name##_fn *)opf->function; \
   62|      2|    }
drbg.c:OSSL_FUNC_rand_lock:
   60|      2|    {                                                  \
   61|      2|        return (OSSL_FUNC_##name##_fn *)opf->function; \
   62|      2|    }
drbg.c:OSSL_FUNC_rand_unlock:
   60|      2|    {                                                  \
   61|      2|        return (OSSL_FUNC_##name##_fn *)opf->function; \
   62|      2|    }
drbg.c:OSSL_FUNC_rand_get_ctx_params:
   60|      2|    {                                                  \
   61|      2|        return (OSSL_FUNC_##name##_fn *)opf->function; \
   62|      2|    }
drbg.c:OSSL_FUNC_rand_get_seed:
   60|      2|    {                                                  \
   61|      2|        return (OSSL_FUNC_##name##_fn *)opf->function; \
   62|      2|    }
drbg.c:OSSL_FUNC_rand_clear_seed:
   60|      2|    {                                                  \
   61|      2|        return (OSSL_FUNC_##name##_fn *)opf->function; \
   62|      2|    }
evp_rand.c:OSSL_FUNC_rand_newctx:
   60|      5|    {                                                  \
   61|      5|        return (OSSL_FUNC_##name##_fn *)opf->function; \
   62|      5|    }
evp_rand.c:OSSL_FUNC_rand_freectx:
   60|      5|    {                                                  \
   61|      5|        return (OSSL_FUNC_##name##_fn *)opf->function; \
   62|      5|    }
evp_rand.c:OSSL_FUNC_rand_instantiate:
   60|      5|    {                                                  \
   61|      5|        return (OSSL_FUNC_##name##_fn *)opf->function; \
   62|      5|    }
evp_rand.c:OSSL_FUNC_rand_uninstantiate:
   60|      5|    {                                                  \
   61|      5|        return (OSSL_FUNC_##name##_fn *)opf->function; \
   62|      5|    }
evp_rand.c:OSSL_FUNC_rand_generate:
   60|      5|    {                                                  \
   61|      5|        return (OSSL_FUNC_##name##_fn *)opf->function; \
   62|      5|    }
evp_rand.c:OSSL_FUNC_rand_reseed:
   60|      5|    {                                                  \
   61|      5|        return (OSSL_FUNC_##name##_fn *)opf->function; \
   62|      5|    }
evp_rand.c:OSSL_FUNC_rand_nonce:
   60|      1|    {                                                  \
   61|      1|        return (OSSL_FUNC_##name##_fn *)opf->function; \
   62|      1|    }
evp_rand.c:OSSL_FUNC_rand_enable_locking:
   60|      5|    {                                                  \
   61|      5|        return (OSSL_FUNC_##name##_fn *)opf->function; \
   62|      5|    }
evp_rand.c:OSSL_FUNC_rand_lock:
   60|      5|    {                                                  \
   61|      5|        return (OSSL_FUNC_##name##_fn *)opf->function; \
   62|      5|    }
evp_rand.c:OSSL_FUNC_rand_unlock:
   60|      5|    {                                                  \
   61|      5|        return (OSSL_FUNC_##name##_fn *)opf->function; \
   62|      5|    }
evp_rand.c:OSSL_FUNC_rand_gettable_ctx_params:
   60|      5|    {                                                  \
   61|      5|        return (OSSL_FUNC_##name##_fn *)opf->function; \
   62|      5|    }
evp_rand.c:OSSL_FUNC_rand_settable_ctx_params:
   60|      4|    {                                                  \
   61|      4|        return (OSSL_FUNC_##name##_fn *)opf->function; \
   62|      4|    }
evp_rand.c:OSSL_FUNC_rand_get_ctx_params:
   60|      5|    {                                                  \
   61|      5|        return (OSSL_FUNC_##name##_fn *)opf->function; \
   62|      5|    }
evp_rand.c:OSSL_FUNC_rand_set_ctx_params:
   60|      4|    {                                                  \
   61|      4|        return (OSSL_FUNC_##name##_fn *)opf->function; \
   62|      4|    }
evp_rand.c:OSSL_FUNC_rand_verify_zeroization:
   60|      5|    {                                                  \
   61|      5|        return (OSSL_FUNC_##name##_fn *)opf->function; \
   62|      5|    }
evp_rand.c:OSSL_FUNC_rand_get_seed:
   60|      5|    {                                                  \
   61|      5|        return (OSSL_FUNC_##name##_fn *)opf->function; \
   62|      5|    }
evp_rand.c:OSSL_FUNC_rand_clear_seed:
   60|      4|    {                                                  \
   61|      4|        return (OSSL_FUNC_##name##_fn *)opf->function; \
   62|      4|    }

conf_mod.c:ERR_GET_REASON:
  239|      1|{
  240|      1|    if (ERR_SYSTEM_ERROR(errcode))
  ------------------
  |  |  222|      1|#define ERR_SYSTEM_ERROR(errcode) (((errcode) & ERR_SYSTEM_FLAG) != 0)
  |  |  ------------------
  |  |  |  |  201|      1|#define ERR_SYSTEM_FLAG ((unsigned int)INT_MAX + 1)
  |  |  ------------------
  |  |  |  Branch (222:35): [True: 0, False: 1]
  |  |  ------------------
  ------------------
  241|      0|        return errcode & ERR_SYSTEM_MASK;
  ------------------
  |  |  202|      0|#define ERR_SYSTEM_MASK ((unsigned int)INT_MAX)
  ------------------
  242|      1|    return errcode & ERR_REASON_MASK;
  ------------------
  |  |  213|      1|#define ERR_REASON_MASK 0X7FFFFF
  ------------------
  243|      1|}
err.c:ERR_GET_LIB:
  225|  4.91k|{
  226|  4.91k|    if (ERR_SYSTEM_ERROR(errcode))
  ------------------
  |  |  222|  4.91k|#define ERR_SYSTEM_ERROR(errcode) (((errcode) & ERR_SYSTEM_FLAG) != 0)
  |  |  ------------------
  |  |  |  |  201|  4.91k|#define ERR_SYSTEM_FLAG ((unsigned int)INT_MAX + 1)
  |  |  ------------------
  |  |  |  Branch (222:35): [True: 16, False: 4.89k]
  |  |  ------------------
  ------------------
  227|     16|        return ERR_LIB_SYS;
  ------------------
  |  |   55|     16|#define ERR_LIB_SYS 2
  ------------------
  228|  4.89k|    return (errcode >> ERR_LIB_OFFSET) & ERR_LIB_MASK;
  ------------------
  |  |  209|  4.89k|#define ERR_LIB_OFFSET 23L
  ------------------
                  return (errcode >> ERR_LIB_OFFSET) & ERR_LIB_MASK;
  ------------------
  |  |  210|  4.89k|#define ERR_LIB_MASK 0xFF
  ------------------
  229|  4.91k|}
err.c:ERR_GET_REASON:
  239|    234|{
  240|    234|    if (ERR_SYSTEM_ERROR(errcode))
  ------------------
  |  |  222|    234|#define ERR_SYSTEM_ERROR(errcode) (((errcode) & ERR_SYSTEM_FLAG) != 0)
  |  |  ------------------
  |  |  |  |  201|    234|#define ERR_SYSTEM_FLAG ((unsigned int)INT_MAX + 1)
  |  |  ------------------
  |  |  |  Branch (222:35): [True: 8, False: 226]
  |  |  ------------------
  ------------------
  241|      8|        return errcode & ERR_SYSTEM_MASK;
  ------------------
  |  |  202|      8|#define ERR_SYSTEM_MASK ((unsigned int)INT_MAX)
  ------------------
  242|    226|    return errcode & ERR_REASON_MASK;
  ------------------
  |  |  213|    226|#define ERR_REASON_MASK 0X7FFFFF
  ------------------
  243|    234|}
conf_def.c:ERR_GET_REASON:
  239|    110|{
  240|    110|    if (ERR_SYSTEM_ERROR(errcode))
  ------------------
  |  |  222|    110|#define ERR_SYSTEM_ERROR(errcode) (((errcode) & ERR_SYSTEM_FLAG) != 0)
  |  |  ------------------
  |  |  |  |  201|    110|#define ERR_SYSTEM_FLAG ((unsigned int)INT_MAX + 1)
  |  |  ------------------
  |  |  |  Branch (222:35): [True: 0, False: 110]
  |  |  ------------------
  ------------------
  241|      0|        return errcode & ERR_SYSTEM_MASK;
  ------------------
  |  |  202|      0|#define ERR_SYSTEM_MASK ((unsigned int)INT_MAX)
  ------------------
  242|    110|    return errcode & ERR_REASON_MASK;
  ------------------
  |  |  213|    110|#define ERR_REASON_MASK 0X7FFFFF
  ------------------
  243|    110|}

decoder_pkey.c:lh_DECODER_CACHE_ENTRY_new:
  334|    110|    {                                                                                                                      \
  335|    110|        return (LHASH_OF(type) *)OPENSSL_LH_set_thunks(OPENSSL_LH_new((OPENSSL_LH_HASHFUNC)hfn, (OPENSSL_LH_COMPFUNC)cfn), \
  336|    110|            lh_##type##_hfn_thunk, lh_##type##_cfn_thunk,                                                                  \
  337|    110|            lh_##type##_doall_thunk,                                                                                       \
  338|    110|            lh_##type##_doall_arg_thunk);                                                                                  \
  339|    110|    }                                                                                                                      \
decoder_pkey.c:lh_DECODER_CACHE_ENTRY_doall:
  328|    119|    {                                                                                                                      \
  329|    119|        OPENSSL_LH_doall((OPENSSL_LHASH *)lh, (OPENSSL_LH_DOALL_FUNC)doall);                                               \
  330|    119|    }                                                                                                                      \
decoder_pkey.c:lh_DECODER_CACHE_ENTRY_free:
  271|    109|    {                                                                                                                      \
  272|    109|        OPENSSL_LH_free((OPENSSL_LHASH *)lh);                                                                              \
  273|    109|    }                                                                                                                      \
decoder_pkey.c:lh_DECODER_CACHE_ENTRY_flush:
  276|     10|    {                                                                                                                      \
  277|     10|        OPENSSL_LH_flush((OPENSSL_LHASH *)lh);                                                                             \
  278|     10|    }                                                                                                                      \
err.c:ossl_check_ERR_STRING_DATA_lh_type:
  208|  4.57k|    {                                                                                                          \
  209|  4.57k|        return (OPENSSL_LHASH *)lh;                                                                            \
  210|  4.57k|    }                                                                                                          \
err.c:ossl_check_ERR_STRING_DATA_lh_hashfunc_type:
  218|      1|    {                                                                                                          \
  219|      1|        return (OPENSSL_LH_HASHFUNC)hfn;                                                                       \
  220|      1|    }                                                                                                          \
err.c:ossl_check_ERR_STRING_DATA_lh_compfunc_type:
  213|      1|    {                                                                                                          \
  214|      1|        return (OPENSSL_LH_COMPFUNC)cmp;                                                                       \
  215|      1|    }                                                                                                          \
err.c:lh_ERR_STRING_DATA_hash_thunk:
  172|  4.57k|    {                                                                                                          \
  173|  4.57k|        unsigned long (*hfn_conv)(const type *) = (unsigned long (*)(const type *))hfn;                        \
  174|  4.57k|        return hfn_conv((const type *)data);                                                                   \
  175|  4.57k|    }                                                                                                          \
err.c:lh_ERR_STRING_DATA_comp_thunk:
  177|  3.14k|    {                                                                                                          \
  178|  3.14k|        int (*cfn_conv)(const type *, const type *) = (int (*)(const type *, const type *))cfn;                \
  179|  3.14k|        return cfn_conv((const type *)da, (const type *)db);                                                   \
  180|  3.14k|    }                                                                                                          \
err.c:ossl_check_ERR_STRING_DATA_lh_plain_type:
  193|  4.30k|    {                                                                                                          \
  194|  4.30k|        return ptr;                                                                                            \
  195|  4.30k|    }                                                                                                          \
err.c:ossl_check_const_ERR_STRING_DATA_lh_plain_type:
  198|    268|    {                                                                                                          \
  199|    268|        return ptr;                                                                                            \
  200|    268|    }                                                                                                          \
o_names.c:lh_OBJ_NAME_new:
  334|      1|    {                                                                                                                      \
  335|      1|        return (LHASH_OF(type) *)OPENSSL_LH_set_thunks(OPENSSL_LH_new((OPENSSL_LH_HASHFUNC)hfn, (OPENSSL_LH_COMPFUNC)cfn), \
  336|      1|            lh_##type##_hfn_thunk, lh_##type##_cfn_thunk,                                                                  \
  337|      1|            lh_##type##_doall_thunk,                                                                                       \
  338|      1|            lh_##type##_doall_arg_thunk);                                                                                  \
  339|      1|    }                                                                                                                      \
o_names.c:lh_OBJ_NAME_hfn_thunk:
  260|  1.00k|    {                                                                                                                      \
  261|  1.00k|        unsigned long (*hfn_conv)(const type *) = (unsigned long (*)(const type *))hfn;                                    \
  262|  1.00k|        return hfn_conv((const type *)data);                                                                               \
  263|  1.00k|    }                                                                                                                      \
o_names.c:lh_OBJ_NAME_cfn_thunk:
  265|    649|    {                                                                                                                      \
  266|    649|        int (*cfn_conv)(const type *, const type *) = (int (*)(const type *, const type *))cfn;                            \
  267|    649|        return cfn_conv((const type *)da, (const type *)db);                                                               \
  268|    649|    }                                                                                                                      \
o_names.c:lh_OBJ_NAME_retrieve:
  291|    576|    {                                                                                                                      \
  292|    576|        return (type *)OPENSSL_LH_retrieve((OPENSSL_LHASH *)lh, d);                                                        \
  293|    576|    }                                                                                                                      \
o_names.c:lh_OBJ_NAME_insert:
  281|    424|    {                                                                                                                      \
  282|    424|        return (type *)OPENSSL_LH_insert((OPENSSL_LHASH *)lh, d);                                                          \
  283|    424|    }                                                                                                                      \
o_names.c:lh_OBJ_NAME_error:
  296|    242|    {                                                                                                                      \
  297|    242|        return OPENSSL_LH_error((OPENSSL_LHASH *)lh);                                                                      \
  298|    242|    }                                                                                                                      \
o_names.c:lh_OBJ_NAME_doall_OBJ_DOALL:
  371|      2|    {                                                                                       \
  372|      2|        OPENSSL_LH_doall_arg_thunk((OPENSSL_LHASH *)lh,                                     \
  373|      2|            lh_##type##_doall_##argtype##_thunk,                                            \
  374|      2|            (OPENSSL_LH_DOALL_FUNCARG)fn,                                                   \
  375|      2|            (void *)arg);                                                                   \
  376|      2|    }                                                                                       \
o_names.c:lh_OBJ_NAME_doall_OBJ_DOALL_thunk:
  363|    484|    {                                                                                       \
  364|    484|        void (*fn_conv)(cbargtype *, argtype *) = (void (*)(cbargtype *, argtype *))fn;     \
  365|    484|        fn_conv((cbargtype *)node, (argtype *)arg);                                         \
  366|    484|    }                                                                                       \
defn_cache.c:lh_PROPERTY_DEFN_ELEM_doall:
  328|    109|    {                                                                                                                      \
  329|    109|        OPENSSL_LH_doall((OPENSSL_LHASH *)lh, (OPENSSL_LH_DOALL_FUNC)doall);                                               \
  330|    109|    }                                                                                                                      \
defn_cache.c:lh_PROPERTY_DEFN_ELEM_free:
  271|    109|    {                                                                                                                      \
  272|    109|        OPENSSL_LH_free((OPENSSL_LHASH *)lh);                                                                              \
  273|    109|    }                                                                                                                      \
defn_cache.c:lh_PROPERTY_DEFN_ELEM_new:
  334|    110|    {                                                                                                                      \
  335|    110|        return (LHASH_OF(type) *)OPENSSL_LH_set_thunks(OPENSSL_LH_new((OPENSSL_LH_HASHFUNC)hfn, (OPENSSL_LH_COMPFUNC)cfn), \
  336|    110|            lh_##type##_hfn_thunk, lh_##type##_cfn_thunk,                                                                  \
  337|    110|            lh_##type##_doall_thunk,                                                                                       \
  338|    110|            lh_##type##_doall_arg_thunk);                                                                                  \
  339|    110|    }                                                                                                                      \
defn_cache.c:lh_PROPERTY_DEFN_ELEM_hfn_thunk:
  260|    137|    {                                                                                                                      \
  261|    137|        unsigned long (*hfn_conv)(const type *) = (unsigned long (*)(const type *))hfn;                                    \
  262|    137|        return hfn_conv((const type *)data);                                                                               \
  263|    137|    }                                                                                                                      \
defn_cache.c:lh_PROPERTY_DEFN_ELEM_cfn_thunk:
  265|    134|    {                                                                                                                      \
  266|    134|        int (*cfn_conv)(const type *, const type *) = (int (*)(const type *, const type *))cfn;                            \
  267|    134|        return cfn_conv((const type *)da, (const type *)db);                                                               \
  268|    134|    }                                                                                                                      \
defn_cache.c:lh_PROPERTY_DEFN_ELEM_retrieve:
  291|    136|    {                                                                                                                      \
  292|    136|        return (type *)OPENSSL_LH_retrieve((OPENSSL_LHASH *)lh, d);                                                        \
  293|    136|    }                                                                                                                      \
defn_cache.c:lh_PROPERTY_DEFN_ELEM_insert:
  281|      1|    {                                                                                                                      \
  282|      1|        return (type *)OPENSSL_LH_insert((OPENSSL_LHASH *)lh, d);                                                          \
  283|      1|    }                                                                                                                      \
defn_cache.c:lh_PROPERTY_DEFN_ELEM_error:
  296|      1|    {                                                                                                                      \
  297|      1|        return OPENSSL_LH_error((OPENSSL_LHASH *)lh);                                                                      \
  298|      1|    }                                                                                                                      \
property.c:lh_QUERY_new:
  334|    135|    {                                                                                                                      \
  335|    135|        return (LHASH_OF(type) *)OPENSSL_LH_set_thunks(OPENSSL_LH_new((OPENSSL_LH_HASHFUNC)hfn, (OPENSSL_LH_COMPFUNC)cfn), \
  336|    135|            lh_##type##_hfn_thunk, lh_##type##_cfn_thunk,                                                                  \
  337|    135|            lh_##type##_doall_thunk,                                                                                       \
  338|    135|            lh_##type##_doall_arg_thunk);                                                                                  \
  339|    135|    }                                                                                                                      \
property.c:lh_QUERY_hfn_thunk:
  260|      9|    {                                                                                                                      \
  261|      9|        unsigned long (*hfn_conv)(const type *) = (unsigned long (*)(const type *))hfn;                                    \
  262|      9|        return hfn_conv((const type *)data);                                                                               \
  263|      9|    }                                                                                                                      \
property.c:lh_QUERY_cfn_thunk:
  265|      3|    {                                                                                                                      \
  266|      3|        int (*cfn_conv)(const type *, const type *) = (int (*)(const type *, const type *))cfn;                            \
  267|      3|        return cfn_conv((const type *)da, (const type *)db);                                                               \
  268|      3|    }                                                                                                                      \
property.c:lh_QUERY_retrieve:
  291|      5|    {                                                                                                                      \
  292|      5|        return (type *)OPENSSL_LH_retrieve((OPENSSL_LHASH *)lh, d);                                                        \
  293|      5|    }                                                                                                                      \
property.c:lh_QUERY_insert:
  281|      4|    {                                                                                                                      \
  282|      4|        return (type *)OPENSSL_LH_insert((OPENSSL_LHASH *)lh, d);                                                          \
  283|      4|    }                                                                                                                      \
property.c:lh_QUERY_error:
  296|      4|    {                                                                                                                      \
  297|      4|        return OPENSSL_LH_error((OPENSSL_LHASH *)lh);                                                                      \
  298|      4|    }                                                                                                                      \
property_string.c:lh_PROPERTY_STRING_doall:
  328|    218|    {                                                                                                                      \
  329|    218|        OPENSSL_LH_doall((OPENSSL_LHASH *)lh, (OPENSSL_LH_DOALL_FUNC)doall);                                               \
  330|    218|    }                                                                                                                      \
property_string.c:lh_PROPERTY_STRING_free:
  271|    218|    {                                                                                                                      \
  272|    218|        OPENSSL_LH_free((OPENSSL_LHASH *)lh);                                                                              \
  273|    218|    }                                                                                                                      \
property_string.c:lh_PROPERTY_STRING_new:
  334|    220|    {                                                                                                                      \
  335|    220|        return (LHASH_OF(type) *)OPENSSL_LH_set_thunks(OPENSSL_LH_new((OPENSSL_LH_HASHFUNC)hfn, (OPENSSL_LH_COMPFUNC)cfn), \
  336|    220|            lh_##type##_hfn_thunk, lh_##type##_cfn_thunk,                                                                  \
  337|    220|            lh_##type##_doall_thunk,                                                                                       \
  338|    220|            lh_##type##_doall_arg_thunk);                                                                                  \
  339|    220|    }                                                                                                                      \
property_string.c:lh_PROPERTY_STRING_hfn_thunk:
  260|  2.64k|    {                                                                                                                      \
  261|  2.64k|        unsigned long (*hfn_conv)(const type *) = (unsigned long (*)(const type *))hfn;                                    \
  262|  2.64k|        return hfn_conv((const type *)data);                                                                               \
  263|  2.64k|    }                                                                                                                      \
property_string.c:lh_PROPERTY_STRING_cfn_thunk:
  265|      1|    {                                                                                                                      \
  266|      1|        int (*cfn_conv)(const type *, const type *) = (int (*)(const type *, const type *))cfn;                            \
  267|      1|        return cfn_conv((const type *)da, (const type *)db);                                                               \
  268|      1|    }                                                                                                                      \
property_string.c:lh_PROPERTY_STRING_doall_thunk:
  316|    872|    {                                                                                                                      \
  317|    872|        void (*doall_conv)(type *) = (void (*)(type *))doall;                                                              \
  318|    872|        doall_conv((type *)node);                                                                                          \
  319|    872|    }                                                                                                                      \
property_string.c:lh_PROPERTY_STRING_retrieve:
  291|  1.76k|    {                                                                                                                      \
  292|  1.76k|        return (type *)OPENSSL_LH_retrieve((OPENSSL_LHASH *)lh, d);                                                        \
  293|  1.76k|    }                                                                                                                      \
property_string.c:lh_PROPERTY_STRING_insert:
  281|    881|    {                                                                                                                      \
  282|    881|        return (type *)OPENSSL_LH_insert((OPENSSL_LHASH *)lh, d);                                                          \
  283|    881|    }                                                                                                                      \
property_string.c:lh_PROPERTY_STRING_error:
  296|    881|    {                                                                                                                      \
  297|    881|        return OPENSSL_LH_error((OPENSSL_LHASH *)lh);                                                                      \
  298|    881|    }                                                                                                                      \

dso_lib.c:ossl_check_void_sk_type:
   63|    104|    {                                                                                                                    \
   64|    104|        return (OPENSSL_STACK *)sk;                                                                                      \
   65|    104|    }                                                                                                                    \
core_namemap.c:sk_NAMES_value:
  102|    308|    {                                                                                                                      \
  103|    308|        return (t2 *)OPENSSL_sk_value((const OPENSSL_STACK *)sk, idx);                                                     \
  104|    308|    }                                                                                                                      \
core_namemap.c:ossl_check_const_OPENSSL_STRING_sk_type:
   59|    746|    {                                                                                                                    \
   60|    746|        return (const OPENSSL_STACK *)sk;                                                                                \
   61|    746|    }                                                                                                                    \
core_namemap.c:ossl_check_OPENSSL_STRING_sk_type:
   63|    491|    {                                                                                                                    \
   64|    491|        return (OPENSSL_STACK *)sk;                                                                                      \
   65|    491|    }                                                                                                                    \
core_namemap.c:ossl_check_OPENSSL_STRING_type:
   55|    361|    {                                                                                                                    \
   56|    361|        return ptr;                                                                                                      \
   57|    361|    }                                                                                                                    \
core_namemap.c:sk_NAMES_push:
  154|    183|    {                                                                                                                      \
  155|    183|        return OPENSSL_sk_push((OPENSSL_STACK *)sk, (const void *)ptr);                                                    \
  156|    183|    }                                                                                                                      \
core_namemap.c:sk_NAMES_num:
   98|    183|    {                                                                                                                      \
   99|    183|        return OPENSSL_sk_num((const OPENSSL_STACK *)sk);                                                                  \
  100|    183|    }                                                                                                                      \
core_namemap.c:sk_NAMES_new_null:
  115|    110|    {                                                                                                                      \
  116|    110|        OPENSSL_STACK *ret = OPENSSL_sk_new_null();                                                                        \
  117|    110|        OPENSSL_sk_freefunc_thunk f_thunk;                                                                                 \
  118|    110|                                                                                                                           \
  119|    110|        f_thunk = (OPENSSL_sk_freefunc_thunk)sk_##t1##_freefunc_thunk;                                                     \
  120|    110|                                                                                                                           \
  121|    110|        return (STACK_OF(t1) *)OPENSSL_sk_set_thunks(ret, f_thunk);                                                        \
  122|    110|    }                                                                                                                      \
core_namemap.c:sk_NAMES_pop_free:
  170|    109|    {                                                                                                                      \
  171|    109|        OPENSSL_sk_freefunc_thunk f_thunk;                                                                                 \
  172|    109|                                                                                                                           \
  173|    109|        f_thunk = (OPENSSL_sk_freefunc_thunk)sk_##t1##_freefunc_thunk;                                                     \
  174|    109|        sk = (STACK_OF(t1) *)OPENSSL_sk_set_thunks((OPENSSL_STACK *)sk, f_thunk);                                          \
  175|    109|                                                                                                                           \
  176|    109|        OPENSSL_sk_pop_free((OPENSSL_STACK *)sk, (OPENSSL_sk_freefunc)freefunc);                                           \
  177|    109|    }                                                                                                                      \
ex_data.c:sk_EX_CALLBACK_pop_free:
  170|  1.96k|    {                                                                                                                      \
  171|  1.96k|        OPENSSL_sk_freefunc_thunk f_thunk;                                                                                 \
  172|  1.96k|                                                                                                                           \
  173|  1.96k|        f_thunk = (OPENSSL_sk_freefunc_thunk)sk_##t1##_freefunc_thunk;                                                     \
  174|  1.96k|        sk = (STACK_OF(t1) *)OPENSSL_sk_set_thunks((OPENSSL_STACK *)sk, f_thunk);                                          \
  175|  1.96k|                                                                                                                           \
  176|  1.96k|        OPENSSL_sk_pop_free((OPENSSL_STACK *)sk, (OPENSSL_sk_freefunc)freefunc);                                           \
  177|  1.96k|    }                                                                                                                      \
initthread.c:sk_THREAD_EVENT_HANDLER_PTR_new_null:
  115|      1|    {                                                                                                                      \
  116|      1|        OPENSSL_STACK *ret = OPENSSL_sk_new_null();                                                                        \
  117|      1|        OPENSSL_sk_freefunc_thunk f_thunk;                                                                                 \
  118|      1|                                                                                                                           \
  119|      1|        f_thunk = (OPENSSL_sk_freefunc_thunk)sk_##t1##_freefunc_thunk;                                                     \
  120|      1|                                                                                                                           \
  121|      1|        return (STACK_OF(t1) *)OPENSSL_sk_set_thunks(ret, f_thunk);                                                        \
  122|      1|    }                                                                                                                      \
initthread.c:sk_THREAD_EVENT_HANDLER_PTR_push:
  154|      1|    {                                                                                                                      \
  155|      1|        return OPENSSL_sk_push((OPENSSL_STACK *)sk, (const void *)ptr);                                                    \
  156|      1|    }                                                                                                                      \
initthread.c:sk_THREAD_EVENT_HANDLER_PTR_num:
   98|    436|    {                                                                                                                      \
   99|    436|        return OPENSSL_sk_num((const OPENSSL_STACK *)sk);                                                                  \
  100|    436|    }                                                                                                                      \
initthread.c:sk_THREAD_EVENT_HANDLER_PTR_value:
  102|    218|    {                                                                                                                      \
  103|    218|        return (t2 *)OPENSSL_sk_value((const OPENSSL_STACK *)sk, idx);                                                     \
  104|    218|    }                                                                                                                      \
provider_conf.c:sk_OSSL_PROVIDER_pop_free:
  170|    109|    {                                                                                                                      \
  171|    109|        OPENSSL_sk_freefunc_thunk f_thunk;                                                                                 \
  172|    109|                                                                                                                           \
  173|    109|        f_thunk = (OPENSSL_sk_freefunc_thunk)sk_##t1##_freefunc_thunk;                                                     \
  174|    109|        sk = (STACK_OF(t1) *)OPENSSL_sk_set_thunks((OPENSSL_STACK *)sk, f_thunk);                                          \
  175|    109|                                                                                                                           \
  176|    109|        OPENSSL_sk_pop_free((OPENSSL_STACK *)sk, (OPENSSL_sk_freefunc)freefunc);                                           \
  177|    109|    }                                                                                                                      \
provider_core.c:sk_INFOPAIR_pop_free:
  170|    218|    {                                                                                                                      \
  171|    218|        OPENSSL_sk_freefunc_thunk f_thunk;                                                                                 \
  172|    218|                                                                                                                           \
  173|    218|        f_thunk = (OPENSSL_sk_freefunc_thunk)sk_##t1##_freefunc_thunk;                                                     \
  174|    218|        sk = (STACK_OF(t1) *)OPENSSL_sk_set_thunks((OPENSSL_STACK *)sk, f_thunk);                                          \
  175|    218|                                                                                                                           \
  176|    218|        OPENSSL_sk_pop_free((OPENSSL_STACK *)sk, (OPENSSL_sk_freefunc)freefunc);                                           \
  177|    218|    }                                                                                                                      \
provider_core.c:sk_OSSL_PROVIDER_pop_free:
  170|    109|    {                                                                                                                      \
  171|    109|        OPENSSL_sk_freefunc_thunk f_thunk;                                                                                 \
  172|    109|                                                                                                                           \
  173|    109|        f_thunk = (OPENSSL_sk_freefunc_thunk)sk_##t1##_freefunc_thunk;                                                     \
  174|    109|        sk = (STACK_OF(t1) *)OPENSSL_sk_set_thunks((OPENSSL_STACK *)sk, f_thunk);                                          \
  175|    109|                                                                                                                           \
  176|    109|        OPENSSL_sk_pop_free((OPENSSL_STACK *)sk, (OPENSSL_sk_freefunc)freefunc);                                           \
  177|    109|    }                                                                                                                      \
provider_core.c:sk_OSSL_PROVIDER_freefunc_thunk:
   85|    114|    {                                                                                                                      \
   86|    114|        sk_##t1##_freefunc freefunc = (sk_##t1##_freefunc)freefunc_arg;                                                    \
   87|    114|        freefunc((t3 *)ptr);                                                                                               \
   88|    114|    }                                                                                                                      \
provider_core.c:sk_OSSL_PROVIDER_CHILD_CB_pop_free:
  170|    109|    {                                                                                                                      \
  171|    109|        OPENSSL_sk_freefunc_thunk f_thunk;                                                                                 \
  172|    109|                                                                                                                           \
  173|    109|        f_thunk = (OPENSSL_sk_freefunc_thunk)sk_##t1##_freefunc_thunk;                                                     \
  174|    109|        sk = (STACK_OF(t1) *)OPENSSL_sk_set_thunks((OPENSSL_STACK *)sk, f_thunk);                                          \
  175|    109|                                                                                                                           \
  176|    109|        OPENSSL_sk_pop_free((OPENSSL_STACK *)sk, (OPENSSL_sk_freefunc)freefunc);                                           \
  177|    109|    }                                                                                                                      \
provider_core.c:sk_OSSL_PROVIDER_new:
  106|    110|    {                                                                                                                      \
  107|    110|        OPENSSL_STACK *ret = OPENSSL_sk_new((OPENSSL_sk_compfunc)compare);                                                 \
  108|    110|        OPENSSL_sk_freefunc_thunk f_thunk;                                                                                 \
  109|    110|                                                                                                                           \
  110|    110|        f_thunk = (OPENSSL_sk_freefunc_thunk)sk_##t1##_freefunc_thunk;                                                     \
  111|    110|        OPENSSL_sk_set_cmp_thunks(ret, sk_##t1##_cmpfunc_thunk);                                                           \
  112|    110|        return (STACK_OF(t1) *)OPENSSL_sk_set_thunks(ret, f_thunk);                                                        \
  113|    110|    }                                                                                                                      \
provider_core.c:sk_OSSL_PROVIDER_cmpfunc_thunk:
   90|    238|    {                                                                                                                      \
   91|    238|        int (*realcmp)(const t3 *const *a, const t3 *const *b) = (int (*)(const t3 *const *a, const t3 *const *b))(cmp);   \
   92|    238|        const t3 *const *at = (const t3 *const *)a;                                                                        \
   93|    238|        const t3 *const *bt = (const t3 *const *)b;                                                                        \
   94|    238|                                                                                                                           \
   95|    238|        return realcmp(at, bt);                                                                                            \
   96|    238|    }                                                                                                                      \
provider_core.c:sk_OSSL_PROVIDER_CHILD_CB_new_null:
  115|    110|    {                                                                                                                      \
  116|    110|        OPENSSL_STACK *ret = OPENSSL_sk_new_null();                                                                        \
  117|    110|        OPENSSL_sk_freefunc_thunk f_thunk;                                                                                 \
  118|    110|                                                                                                                           \
  119|    110|        f_thunk = (OPENSSL_sk_freefunc_thunk)sk_##t1##_freefunc_thunk;                                                     \
  120|    110|                                                                                                                           \
  121|    110|        return (STACK_OF(t1) *)OPENSSL_sk_set_thunks(ret, f_thunk);                                                        \
  122|    110|    }                                                                                                                      \
provider_core.c:sk_OSSL_PROVIDER_is_sorted:
  204|    226|    {                                                                                                                      \
  205|    226|        return OPENSSL_sk_is_sorted((const OPENSSL_STACK *)sk);                                                            \
  206|    226|    }                                                                                                                      \
provider_core.c:sk_OSSL_PROVIDER_sort:
  200|      3|    {                                                                                                                      \
  201|      3|        OPENSSL_sk_sort((OPENSSL_STACK *)sk);                                                                              \
  202|      3|    }                                                                                                                      \
provider_core.c:sk_OSSL_PROVIDER_find:
  187|    228|    {                                                                                                                      \
  188|    228|        return OPENSSL_sk_find((const OPENSSL_STACK *)sk, (const void *)ptr);                                              \
  189|    228|    }                                                                                                                      \
provider_core.c:sk_OSSL_PROVIDER_value:
  102|     12|    {                                                                                                                      \
  103|     12|        return (t2 *)OPENSSL_sk_value((const OPENSSL_STACK *)sk, idx);                                                     \
  104|     12|    }                                                                                                                      \
provider_core.c:sk_INFOPAIR_deep_copy:
  214|    219|    {                                                                                                                      \
  215|    219|        return (STACK_OF(t1) *)OPENSSL_sk_deep_copy((const OPENSSL_STACK *)sk,                                             \
  216|    219|            (OPENSSL_sk_copyfunc)copyfunc,                                                                                 \
  217|    219|            (OPENSSL_sk_freefunc)freefunc);                                                                                \
  218|    219|    }                                                                                                                      \
provider_core.c:sk_OSSL_PROVIDER_push:
  154|    115|    {                                                                                                                      \
  155|    115|        return OPENSSL_sk_push((OPENSSL_STACK *)sk, (const void *)ptr);                                                    \
  156|    115|    }                                                                                                                      \
provider_core.c:sk_OSSL_PROVIDER_dup:
  208|      2|    {                                                                                                                      \
  209|      2|        return (STACK_OF(t1) *)OPENSSL_sk_dup((const OPENSSL_STACK *)sk);                                                  \
  210|      2|    }                                                                                                                      \
provider_core.c:sk_OSSL_PROVIDER_num:
   98|      2|    {                                                                                                                      \
   99|      2|        return OPENSSL_sk_num((const OPENSSL_STACK *)sk);                                                                  \
  100|      2|    }                                                                                                                      \
provider_core.c:sk_OSSL_PROVIDER_free:
  137|      2|    {                                                                                                                      \
  138|      2|        OPENSSL_sk_free((OPENSSL_STACK *)sk);                                                                              \
  139|      2|    }                                                                                                                      \
provider_core.c:sk_OSSL_PROVIDER_CHILD_CB_num:
   98|    119|    {                                                                                                                      \
   99|    119|        return OPENSSL_sk_num((const OPENSSL_STACK *)sk);                                                                  \
  100|    119|    }                                                                                                                      \
property.c:sk_IMPLEMENTATION_new_null:
  115|    135|    {                                                                                                                      \
  116|    135|        OPENSSL_STACK *ret = OPENSSL_sk_new_null();                                                                        \
  117|    135|        OPENSSL_sk_freefunc_thunk f_thunk;                                                                                 \
  118|    135|                                                                                                                           \
  119|    135|        f_thunk = (OPENSSL_sk_freefunc_thunk)sk_##t1##_freefunc_thunk;                                                     \
  120|    135|                                                                                                                           \
  121|    135|        return (STACK_OF(t1) *)OPENSSL_sk_set_thunks(ret, f_thunk);                                                        \
  122|    135|    }                                                                                                                      \
property.c:sk_IMPLEMENTATION_num:
   98|    274|    {                                                                                                                      \
   99|    274|        return OPENSSL_sk_num((const OPENSSL_STACK *)sk);                                                                  \
  100|    274|    }                                                                                                                      \
property.c:sk_IMPLEMENTATION_value:
  102|      4|    {                                                                                                                      \
  103|      4|        return (t2 *)OPENSSL_sk_value((const OPENSSL_STACK *)sk, idx);                                                     \
  104|      4|    }                                                                                                                      \
property.c:sk_IMPLEMENTATION_push:
  154|    135|    {                                                                                                                      \
  155|    135|        return OPENSSL_sk_push((OPENSSL_STACK *)sk, (const void *)ptr);                                                    \
  156|    135|    }                                                                                                                      \
property_parse.c:sk_OSSL_PROPERTY_DEFINITION_new:
  106|      5|    {                                                                                                                      \
  107|      5|        OPENSSL_STACK *ret = OPENSSL_sk_new((OPENSSL_sk_compfunc)compare);                                                 \
  108|      5|        OPENSSL_sk_freefunc_thunk f_thunk;                                                                                 \
  109|      5|                                                                                                                           \
  110|      5|        f_thunk = (OPENSSL_sk_freefunc_thunk)sk_##t1##_freefunc_thunk;                                                     \
  111|      5|        OPENSSL_sk_set_cmp_thunks(ret, sk_##t1##_cmpfunc_thunk);                                                           \
  112|      5|        return (STACK_OF(t1) *)OPENSSL_sk_set_thunks(ret, f_thunk);                                                        \
  113|      5|    }                                                                                                                      \
property_parse.c:sk_OSSL_PROPERTY_DEFINITION_freefunc_thunk:
   85|      1|    {                                                                                                                      \
   86|      1|        sk_##t1##_freefunc freefunc = (sk_##t1##_freefunc)freefunc_arg;                                                    \
   87|      1|        freefunc((t3 *)ptr);                                                                                               \
   88|      1|    }                                                                                                                      \
property_parse.c:sk_OSSL_PROPERTY_DEFINITION_push:
  154|      1|    {                                                                                                                      \
  155|      1|        return OPENSSL_sk_push((OPENSSL_STACK *)sk, (const void *)ptr);                                                    \
  156|      1|    }                                                                                                                      \
property_parse.c:sk_OSSL_PROPERTY_DEFINITION_num:
   98|      5|    {                                                                                                                      \
   99|      5|        return OPENSSL_sk_num((const OPENSSL_STACK *)sk);                                                                  \
  100|      5|    }                                                                                                                      \
property_parse.c:sk_OSSL_PROPERTY_DEFINITION_sort:
  200|      5|    {                                                                                                                      \
  201|      5|        OPENSSL_sk_sort((OPENSSL_STACK *)sk);                                                                              \
  202|      5|    }                                                                                                                      \
property_parse.c:sk_OSSL_PROPERTY_DEFINITION_value:
  102|      1|    {                                                                                                                      \
  103|      1|        return (t2 *)OPENSSL_sk_value((const OPENSSL_STACK *)sk, idx);                                                     \
  104|      1|    }                                                                                                                      \
property_parse.c:sk_OSSL_PROPERTY_DEFINITION_pop_free:
  170|      5|    {                                                                                                                      \
  171|      5|        OPENSSL_sk_freefunc_thunk f_thunk;                                                                                 \
  172|      5|                                                                                                                           \
  173|      5|        f_thunk = (OPENSSL_sk_freefunc_thunk)sk_##t1##_freefunc_thunk;                                                     \
  174|      5|        sk = (STACK_OF(t1) *)OPENSSL_sk_set_thunks((OPENSSL_STACK *)sk, f_thunk);                                          \
  175|      5|                                                                                                                           \
  176|      5|        OPENSSL_sk_pop_free((OPENSSL_STACK *)sk, (OPENSSL_sk_freefunc)freefunc);                                           \
  177|      5|    }                                                                                                                      \
property_string.c:ossl_check_OPENSSL_CSTRING_sk_type:
   63|  1.09k|    {                                                                                                                    \
   64|  1.09k|        return (OPENSSL_STACK *)sk;                                                                                      \
   65|  1.09k|    }                                                                                                                    \
property_string.c:ossl_check_OPENSSL_CSTRING_type:
   55|    881|    {                                                                                                                    \
   56|    881|        return ptr;                                                                                                      \
   57|    881|    }                                                                                                                    \
dso_dlfcn.c:ossl_check_const_void_sk_type:
   59|    104|    {                                                                                                                    \
   60|    104|        return (const OPENSSL_STACK *)sk;                                                                                \
   61|    104|    }                                                                                                                    \
comp_methods.c:ossl_check_SSL_COMP_compfunc_type:
   67|    110|    {                                                                                                                    \
   68|    110|        return (OPENSSL_sk_compfunc)cmp;                                                                                 \
   69|    110|    }                                                                                                                    \
comp_methods.c:ossl_check_SSL_COMP_sk_type:
   63|    109|    {                                                                                                                    \
   64|    109|        return (OPENSSL_STACK *)sk;                                                                                      \
   65|    109|    }                                                                                                                    \
comp_methods.c:ossl_check_SSL_COMP_freefunc_type:
   75|    109|    {                                                                                                                    \
   76|    109|        return (OPENSSL_sk_freefunc)fr;                                                                                  \
   77|    109|    }

ossl_base_provider_init:
  140|      4|{
  141|      4|    OSSL_FUNC_core_get_libctx_fn *c_get_libctx = NULL;
  142|      4|    BIO_METHOD *corebiometh;
  143|       |
  144|      4|    if (!ossl_prov_bio_from_dispatch(in))
  ------------------
  |  Branch (144:9): [True: 0, False: 4]
  ------------------
  145|      0|        return 0;
  146|    216|    for (; in->function_id != 0; in++) {
  ------------------
  |  Branch (146:12): [True: 212, False: 4]
  ------------------
  147|    212|        switch (in->function_id) {
  148|      4|        case OSSL_FUNC_CORE_GETTABLE_PARAMS:
  ------------------
  |  |   72|      4|#define OSSL_FUNC_CORE_GETTABLE_PARAMS 1
  ------------------
  |  Branch (148:9): [True: 4, False: 208]
  ------------------
  149|      4|            c_gettable_params = OSSL_FUNC_core_gettable_params(in);
  150|      4|            break;
  151|      4|        case OSSL_FUNC_CORE_GET_PARAMS:
  ------------------
  |  |   75|      4|#define OSSL_FUNC_CORE_GET_PARAMS 2
  ------------------
  |  Branch (151:9): [True: 4, False: 208]
  ------------------
  152|      4|            c_get_params = OSSL_FUNC_core_get_params(in);
  153|      4|            break;
  154|      4|        case OSSL_FUNC_CORE_GET_LIBCTX:
  ------------------
  |  |   79|      4|#define OSSL_FUNC_CORE_GET_LIBCTX 4
  ------------------
  |  Branch (154:9): [True: 4, False: 208]
  ------------------
  155|      4|            c_get_libctx = OSSL_FUNC_core_get_libctx(in);
  156|      4|            break;
  157|    200|        default:
  ------------------
  |  Branch (157:9): [True: 200, False: 12]
  ------------------
  158|       |            /* Just ignore anything we don't understand */
  159|    200|            break;
  160|    212|        }
  161|    212|    }
  162|       |
  163|      4|    if (c_get_libctx == NULL)
  ------------------
  |  Branch (163:9): [True: 0, False: 4]
  ------------------
  164|      0|        return 0;
  165|       |
  166|       |    /*
  167|       |     * We want to make sure that all calls from this provider that requires
  168|       |     * a library context use the same context as the one used to call our
  169|       |     * functions.  We do that by passing it along in the provider context.
  170|       |     *
  171|       |     * This only works for built-in providers.  Most providers should
  172|       |     * create their own library context.
  173|       |     */
  174|      4|    if ((*provctx = ossl_prov_ctx_new()) == NULL
  ------------------
  |  Branch (174:9): [True: 0, False: 4]
  ------------------
  175|      4|        || (corebiometh = ossl_bio_prov_init_bio_method()) == NULL) {
  ------------------
  |  Branch (175:12): [True: 0, False: 4]
  ------------------
  176|      0|        ossl_prov_ctx_free(*provctx);
  177|      0|        *provctx = NULL;
  178|      0|        return 0;
  179|      0|    }
  180|      4|    ossl_prov_ctx_set0_libctx(*provctx,
  181|      4|        (OSSL_LIB_CTX *)c_get_libctx(handle));
  182|      4|    ossl_prov_ctx_set0_handle(*provctx, handle);
  183|      4|    ossl_prov_ctx_set0_core_bio_method(*provctx, corebiometh);
  184|      4|    ossl_prov_ctx_set0_core_get_params(*provctx, c_get_params);
  185|       |
  186|      4|    *out = base_dispatch_table;
  187|       |
  188|      4|    return 1;
  189|      4|}
baseprov.c:base_teardown:
  120|      4|{
  121|      4|    BIO_meth_free(ossl_prov_ctx_get0_core_bio_method(provctx));
  122|      4|    ossl_prov_ctx_free(provctx);
  123|      4|}

ossl_prov_bio_from_dispatch:
   27|    114|{
   28|  6.15k|    for (; fns->function_id != 0; fns++) {
  ------------------
  |  Branch (28:12): [True: 6.04k, False: 114]
  ------------------
   29|  6.04k|        switch (fns->function_id) {
  ------------------
  |  Branch (29:17): [True: 1.14k, False: 4.90k]
  ------------------
   30|    114|        case OSSL_FUNC_BIO_NEW_FILE:
  ------------------
  |  |  151|    114|#define OSSL_FUNC_BIO_NEW_FILE 40
  ------------------
  |  Branch (30:9): [True: 114, False: 5.92k]
  ------------------
   31|    114|            if (c_bio_new_file == NULL)
  ------------------
  |  Branch (31:17): [True: 1, False: 113]
  ------------------
   32|      1|                c_bio_new_file = OSSL_FUNC_BIO_new_file(fns);
   33|    114|            break;
   34|    114|        case OSSL_FUNC_BIO_NEW_MEMBUF:
  ------------------
  |  |  152|    114|#define OSSL_FUNC_BIO_NEW_MEMBUF 41
  ------------------
  |  Branch (34:9): [True: 114, False: 5.92k]
  ------------------
   35|    114|            if (c_bio_new_membuf == NULL)
  ------------------
  |  Branch (35:17): [True: 1, False: 113]
  ------------------
   36|      1|                c_bio_new_membuf = OSSL_FUNC_BIO_new_membuf(fns);
   37|    114|            break;
   38|    114|        case OSSL_FUNC_BIO_READ_EX:
  ------------------
  |  |  153|    114|#define OSSL_FUNC_BIO_READ_EX 42
  ------------------
  |  Branch (38:9): [True: 114, False: 5.92k]
  ------------------
   39|    114|            if (c_bio_read_ex == NULL)
  ------------------
  |  Branch (39:17): [True: 1, False: 113]
  ------------------
   40|      1|                c_bio_read_ex = OSSL_FUNC_BIO_read_ex(fns);
   41|    114|            break;
   42|    114|        case OSSL_FUNC_BIO_WRITE_EX:
  ------------------
  |  |  154|    114|#define OSSL_FUNC_BIO_WRITE_EX 43
  ------------------
  |  Branch (42:9): [True: 114, False: 5.92k]
  ------------------
   43|    114|            if (c_bio_write_ex == NULL)
  ------------------
  |  Branch (43:17): [True: 1, False: 113]
  ------------------
   44|      1|                c_bio_write_ex = OSSL_FUNC_BIO_write_ex(fns);
   45|    114|            break;
   46|    114|        case OSSL_FUNC_BIO_GETS:
  ------------------
  |  |  160|    114|#define OSSL_FUNC_BIO_GETS 49
  ------------------
  |  Branch (46:9): [True: 114, False: 5.92k]
  ------------------
   47|    114|            if (c_bio_gets == NULL)
  ------------------
  |  Branch (47:17): [True: 1, False: 113]
  ------------------
   48|      1|                c_bio_gets = OSSL_FUNC_BIO_gets(fns);
   49|    114|            break;
   50|    114|        case OSSL_FUNC_BIO_PUTS:
  ------------------
  |  |  159|    114|#define OSSL_FUNC_BIO_PUTS 48
  ------------------
  |  Branch (50:9): [True: 114, False: 5.92k]
  ------------------
   51|    114|            if (c_bio_puts == NULL)
  ------------------
  |  Branch (51:17): [True: 1, False: 113]
  ------------------
   52|      1|                c_bio_puts = OSSL_FUNC_BIO_puts(fns);
   53|    114|            break;
   54|    114|        case OSSL_FUNC_BIO_CTRL:
  ------------------
  |  |  161|    114|#define OSSL_FUNC_BIO_CTRL 50
  ------------------
  |  Branch (54:9): [True: 114, False: 5.92k]
  ------------------
   55|    114|            if (c_bio_ctrl == NULL)
  ------------------
  |  Branch (55:17): [True: 1, False: 113]
  ------------------
   56|      1|                c_bio_ctrl = OSSL_FUNC_BIO_ctrl(fns);
   57|    114|            break;
   58|    114|        case OSSL_FUNC_BIO_UP_REF:
  ------------------
  |  |  155|    114|#define OSSL_FUNC_BIO_UP_REF 44
  ------------------
  |  Branch (58:9): [True: 114, False: 5.92k]
  ------------------
   59|    114|            if (c_bio_up_ref == NULL)
  ------------------
  |  Branch (59:17): [True: 1, False: 113]
  ------------------
   60|      1|                c_bio_up_ref = OSSL_FUNC_BIO_up_ref(fns);
   61|    114|            break;
   62|    114|        case OSSL_FUNC_BIO_FREE:
  ------------------
  |  |  156|    114|#define OSSL_FUNC_BIO_FREE 45
  ------------------
  |  Branch (62:9): [True: 114, False: 5.92k]
  ------------------
   63|    114|            if (c_bio_free == NULL)
  ------------------
  |  Branch (63:17): [True: 1, False: 113]
  ------------------
   64|      1|                c_bio_free = OSSL_FUNC_BIO_free(fns);
   65|    114|            break;
   66|    114|        case OSSL_FUNC_BIO_VPRINTF:
  ------------------
  |  |  157|    114|#define OSSL_FUNC_BIO_VPRINTF 46
  ------------------
  |  Branch (66:9): [True: 114, False: 5.92k]
  ------------------
   67|    114|            if (c_bio_vprintf == NULL)
  ------------------
  |  Branch (67:17): [True: 1, False: 113]
  ------------------
   68|      1|                c_bio_vprintf = OSSL_FUNC_BIO_vprintf(fns);
   69|    114|            break;
   70|  6.04k|        }
   71|  6.04k|    }
   72|       |
   73|    114|    return 1;
   74|    114|}
ossl_bio_prov_init_bio_method:
  207|    114|{
  208|    114|    BIO_METHOD *corebiometh = NULL;
  209|       |
  210|    114|    corebiometh = BIO_meth_new(BIO_TYPE_CORE_TO_PROV, "BIO to Core filter");
  ------------------
  |  |   71|    114|#define BIO_TYPE_CORE_TO_PROV (25 | BIO_TYPE_SOURCE_SINK)
  |  |  ------------------
  |  |  |  |   43|    114|#define BIO_TYPE_SOURCE_SINK 0x0400
  |  |  ------------------
  ------------------
  211|    114|    if (corebiometh == NULL
  ------------------
  |  Branch (211:9): [True: 0, False: 114]
  ------------------
  212|    114|        || !BIO_meth_set_write_ex(corebiometh, bio_core_write_ex)
  ------------------
  |  Branch (212:12): [True: 0, False: 114]
  ------------------
  213|    114|        || !BIO_meth_set_read_ex(corebiometh, bio_core_read_ex)
  ------------------
  |  Branch (213:12): [True: 0, False: 114]
  ------------------
  214|    114|        || !BIO_meth_set_puts(corebiometh, bio_core_puts)
  ------------------
  |  Branch (214:12): [True: 0, False: 114]
  ------------------
  215|    114|        || !BIO_meth_set_gets(corebiometh, bio_core_gets)
  ------------------
  |  Branch (215:12): [True: 0, False: 114]
  ------------------
  216|    114|        || !BIO_meth_set_ctrl(corebiometh, bio_core_ctrl)
  ------------------
  |  Branch (216:12): [True: 0, False: 114]
  ------------------
  217|    114|        || !BIO_meth_set_create(corebiometh, bio_core_new)
  ------------------
  |  Branch (217:12): [True: 0, False: 114]
  ------------------
  218|    114|        || !BIO_meth_set_destroy(corebiometh, bio_core_free)) {
  ------------------
  |  Branch (218:12): [True: 0, False: 114]
  ------------------
  219|      0|        BIO_meth_free(corebiometh);
  220|      0|        return NULL;
  221|      0|    }
  222|       |
  223|    114|    return corebiometh;
  224|    114|}

ciphercommon.c:ossl_param_is_empty:
   30|  19.6k|{
   31|  19.6k|    return params == NULL || params->key == NULL;
  ------------------
  |  Branch (31:12): [True: 19.6k, False: 0]
  |  Branch (31:30): [True: 0, False: 0]
  ------------------
   32|  19.6k|}

ossl_prov_ctx_new:
   16|    114|{
   17|    114|    return OPENSSL_zalloc(sizeof(PROV_CTX));
  ------------------
  |  |  109|    114|    CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   18|    114|}
ossl_prov_ctx_free:
   21|    113|{
   22|    113|    OPENSSL_free(ctx);
  ------------------
  |  |  132|    113|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   23|    113|}
ossl_prov_ctx_set0_libctx:
   26|    114|{
   27|    114|    if (ctx != NULL)
  ------------------
  |  Branch (27:9): [True: 114, False: 0]
  ------------------
   28|    114|        ctx->libctx = libctx;
   29|    114|}
ossl_prov_ctx_set0_handle:
   32|    114|{
   33|    114|    if (ctx != NULL)
  ------------------
  |  Branch (33:9): [True: 114, False: 0]
  ------------------
   34|    114|        ctx->handle = handle;
   35|    114|}
ossl_prov_ctx_set0_core_bio_method:
   38|    114|{
   39|    114|    if (ctx != NULL)
  ------------------
  |  Branch (39:9): [True: 114, False: 0]
  ------------------
   40|    114|        ctx->corebiometh = corebiometh;
   41|    114|}
ossl_prov_ctx_set0_core_get_params:
   45|    114|{
   46|    114|    if (ctx != NULL)
  ------------------
  |  Branch (46:9): [True: 114, False: 0]
  ------------------
   47|    114|        ctx->core_get_params = c_get_params;
   48|    114|}
ossl_prov_ctx_get0_libctx:
   51|      8|{
   52|      8|    if (ctx == NULL)
  ------------------
  |  Branch (52:9): [True: 0, False: 8]
  ------------------
   53|      0|        return NULL;
   54|      8|    return ctx->libctx;
   55|      8|}
ossl_prov_ctx_get0_core_bio_method:
   65|    113|{
   66|    113|    if (ctx == NULL)
  ------------------
  |  Branch (66:9): [True: 0, False: 113]
  ------------------
   67|      0|        return NULL;
   68|    113|    return ctx->corebiometh;
   69|    113|}

ossl_err_load_PROV_strings:
  273|      1|{
  274|      1|#ifndef OPENSSL_NO_ERR
  275|      1|    if (ERR_reason_error_string(PROV_str_reasons[0].error) == NULL)
  ------------------
  |  Branch (275:9): [True: 1, False: 0]
  ------------------
  276|      1|        ERR_load_strings_const(PROV_str_reasons);
  277|      1|#endif
  278|      1|    return 1;
  279|      1|}

ossl_prov_seeding_from_dispatch:
   42|    110|{
   43|  5.94k|    for (; fns->function_id != 0; fns++) {
  ------------------
  |  Branch (43:12): [True: 5.83k, False: 110]
  ------------------
   44|       |        /*
   45|       |         * We do not support the scenario of an application linked against
   46|       |         * multiple versions of libcrypto (e.g. one static and one dynamic), but
   47|       |         * sharing a single fips.so. We do a simple sanity check here.
   48|       |         */
   49|  5.83k|#define set_func(c, f)   \
   50|  5.83k|    do {                 \
   51|  5.83k|        if (c == NULL)   \
   52|  5.83k|            c = f;       \
   53|  5.83k|        else if (c != f) \
   54|  5.83k|            return 0;    \
   55|  5.83k|    } while (0)
   56|  5.83k|        switch (fns->function_id) {
  ------------------
  |  Branch (56:17): [True: 880, False: 4.95k]
  ------------------
   57|    110|        case OSSL_FUNC_GET_ENTROPY:
  ------------------
  |  |  188|    110|#define OSSL_FUNC_GET_ENTROPY 101
  ------------------
  |  Branch (57:9): [True: 110, False: 5.72k]
  ------------------
   58|    110|            set_func(c_get_entropy, OSSL_FUNC_get_entropy(fns));
  ------------------
  |  |   50|    110|    do {                 \
  |  |   51|    110|        if (c == NULL)   \
  |  |  ------------------
  |  |  |  Branch (51:13): [True: 1, False: 109]
  |  |  ------------------
  |  |   52|    110|            c = f;       \
  |  |   53|    110|        else if (c != f) \
  |  |  ------------------
  |  |  |  Branch (53:18): [True: 0, False: 109]
  |  |  ------------------
  |  |   54|    109|            return 0;    \
  |  |   55|    110|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 110]
  |  |  ------------------
  ------------------
   59|    110|            break;
   60|    110|        case OSSL_FUNC_GET_USER_ENTROPY:
  ------------------
  |  |  179|    110|#define OSSL_FUNC_GET_USER_ENTROPY 98
  ------------------
  |  Branch (60:9): [True: 110, False: 5.72k]
  ------------------
   61|    110|            set_func(c_get_user_entropy, OSSL_FUNC_get_user_entropy(fns));
  ------------------
  |  |   50|    110|    do {                 \
  |  |   51|    110|        if (c == NULL)   \
  |  |  ------------------
  |  |  |  Branch (51:13): [True: 1, False: 109]
  |  |  ------------------
  |  |   52|    110|            c = f;       \
  |  |   53|    110|        else if (c != f) \
  |  |  ------------------
  |  |  |  Branch (53:18): [True: 0, False: 109]
  |  |  ------------------
  |  |   54|    109|            return 0;    \
  |  |   55|    110|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 110]
  |  |  ------------------
  ------------------
   62|    110|            break;
   63|    110|        case OSSL_FUNC_CLEANUP_ENTROPY:
  ------------------
  |  |  189|    110|#define OSSL_FUNC_CLEANUP_ENTROPY 102
  ------------------
  |  Branch (63:9): [True: 110, False: 5.72k]
  ------------------
   64|    110|            set_func(c_cleanup_entropy, OSSL_FUNC_cleanup_entropy(fns));
  ------------------
  |  |   50|    110|    do {                 \
  |  |   51|    110|        if (c == NULL)   \
  |  |  ------------------
  |  |  |  Branch (51:13): [True: 1, False: 109]
  |  |  ------------------
  |  |   52|    110|            c = f;       \
  |  |   53|    110|        else if (c != f) \
  |  |  ------------------
  |  |  |  Branch (53:18): [True: 0, False: 109]
  |  |  ------------------
  |  |   54|    109|            return 0;    \
  |  |   55|    110|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 110]
  |  |  ------------------
  ------------------
   65|    110|            break;
   66|    110|        case OSSL_FUNC_CLEANUP_USER_ENTROPY:
  ------------------
  |  |  177|    110|#define OSSL_FUNC_CLEANUP_USER_ENTROPY 96
  ------------------
  |  Branch (66:9): [True: 110, False: 5.72k]
  ------------------
   67|    110|            set_func(c_cleanup_user_entropy, OSSL_FUNC_cleanup_user_entropy(fns));
  ------------------
  |  |   50|    110|    do {                 \
  |  |   51|    110|        if (c == NULL)   \
  |  |  ------------------
  |  |  |  Branch (51:13): [True: 1, False: 109]
  |  |  ------------------
  |  |   52|    110|            c = f;       \
  |  |   53|    110|        else if (c != f) \
  |  |  ------------------
  |  |  |  Branch (53:18): [True: 0, False: 109]
  |  |  ------------------
  |  |   54|    109|            return 0;    \
  |  |   55|    110|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 110]
  |  |  ------------------
  ------------------
   68|    110|            break;
   69|    110|        case OSSL_FUNC_GET_NONCE:
  ------------------
  |  |  190|    110|#define OSSL_FUNC_GET_NONCE 103
  ------------------
  |  Branch (69:9): [True: 110, False: 5.72k]
  ------------------
   70|    110|            set_func(c_get_nonce, OSSL_FUNC_get_nonce(fns));
  ------------------
  |  |   50|    110|    do {                 \
  |  |   51|    110|        if (c == NULL)   \
  |  |  ------------------
  |  |  |  Branch (51:13): [True: 1, False: 109]
  |  |  ------------------
  |  |   52|    110|            c = f;       \
  |  |   53|    110|        else if (c != f) \
  |  |  ------------------
  |  |  |  Branch (53:18): [True: 0, False: 109]
  |  |  ------------------
  |  |   54|    109|            return 0;    \
  |  |   55|    110|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 110]
  |  |  ------------------
  ------------------
   71|    110|            break;
   72|    110|        case OSSL_FUNC_GET_USER_NONCE:
  ------------------
  |  |  180|    110|#define OSSL_FUNC_GET_USER_NONCE 99
  ------------------
  |  Branch (72:9): [True: 110, False: 5.72k]
  ------------------
   73|    110|            set_func(c_get_user_nonce, OSSL_FUNC_get_user_nonce(fns));
  ------------------
  |  |   50|    110|    do {                 \
  |  |   51|    110|        if (c == NULL)   \
  |  |  ------------------
  |  |  |  Branch (51:13): [True: 1, False: 109]
  |  |  ------------------
  |  |   52|    110|            c = f;       \
  |  |   53|    110|        else if (c != f) \
  |  |  ------------------
  |  |  |  Branch (53:18): [True: 0, False: 109]
  |  |  ------------------
  |  |   54|    109|            return 0;    \
  |  |   55|    110|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 110]
  |  |  ------------------
  ------------------
   74|    110|            break;
   75|    110|        case OSSL_FUNC_CLEANUP_NONCE:
  ------------------
  |  |  191|    110|#define OSSL_FUNC_CLEANUP_NONCE 104
  ------------------
  |  Branch (75:9): [True: 110, False: 5.72k]
  ------------------
   76|    110|            set_func(c_cleanup_nonce, OSSL_FUNC_cleanup_nonce(fns));
  ------------------
  |  |   50|    110|    do {                 \
  |  |   51|    110|        if (c == NULL)   \
  |  |  ------------------
  |  |  |  Branch (51:13): [True: 1, False: 109]
  |  |  ------------------
  |  |   52|    110|            c = f;       \
  |  |   53|    110|        else if (c != f) \
  |  |  ------------------
  |  |  |  Branch (53:18): [True: 0, False: 109]
  |  |  ------------------
  |  |   54|    109|            return 0;    \
  |  |   55|    110|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 110]
  |  |  ------------------
  ------------------
   77|    110|            break;
   78|    110|        case OSSL_FUNC_CLEANUP_USER_NONCE:
  ------------------
  |  |  178|    110|#define OSSL_FUNC_CLEANUP_USER_NONCE 97
  ------------------
  |  Branch (78:9): [True: 110, False: 5.72k]
  ------------------
   79|    110|            set_func(c_cleanup_user_nonce, OSSL_FUNC_cleanup_user_nonce(fns));
  ------------------
  |  |   50|    110|    do {                 \
  |  |   51|    110|        if (c == NULL)   \
  |  |  ------------------
  |  |  |  Branch (51:13): [True: 1, False: 109]
  |  |  ------------------
  |  |   52|    110|            c = f;       \
  |  |   53|    110|        else if (c != f) \
  |  |  ------------------
  |  |  |  Branch (53:18): [True: 0, False: 109]
  |  |  ------------------
  |  |   54|    109|            return 0;    \
  |  |   55|    110|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 110]
  |  |  ------------------
  ------------------
   80|    110|            break;
   81|  5.83k|        }
   82|  5.83k|#undef set_func
   83|  5.83k|    }
   84|    110|    return 1;
   85|    110|}

ossl_prov_cache_exported_algorithms:
  221|    110|{
  222|    110|    int i, j;
  223|       |
  224|    110|    if (out[0].algorithm_names == NULL) {
  ------------------
  |  Branch (224:9): [True: 1, False: 109]
  ------------------
  225|    140|        for (i = j = 0; in[i].alg.algorithm_names != NULL; ++i) {
  ------------------
  |  Branch (225:25): [True: 139, False: 1]
  ------------------
  226|    139|            if (in[i].capable == NULL || in[i].capable())
  ------------------
  |  Branch (226:17): [True: 126, False: 13]
  |  Branch (226:42): [True: 4, False: 9]
  ------------------
  227|    130|                out[j++] = in[i].alg;
  228|    139|        }
  229|      1|        out[j++] = in[i].alg;
  230|      1|    }
  231|    110|}

ossl_default_provider_init:
  797|    110|{
  798|    110|    OSSL_FUNC_core_get_libctx_fn *c_get_libctx = NULL;
  799|    110|    BIO_METHOD *corebiometh;
  800|       |
  801|    110|    if (!ossl_prov_bio_from_dispatch(in)
  ------------------
  |  Branch (801:9): [True: 0, False: 110]
  ------------------
  802|    110|        || !ossl_prov_seeding_from_dispatch(in))
  ------------------
  |  Branch (802:12): [True: 0, False: 110]
  ------------------
  803|      0|        return 0;
  804|  5.94k|    for (; in->function_id != 0; in++) {
  ------------------
  |  Branch (804:12): [True: 5.83k, False: 110]
  ------------------
  805|  5.83k|        switch (in->function_id) {
  806|    110|        case OSSL_FUNC_CORE_GETTABLE_PARAMS:
  ------------------
  |  |   72|    110|#define OSSL_FUNC_CORE_GETTABLE_PARAMS 1
  ------------------
  |  Branch (806:9): [True: 110, False: 5.72k]
  ------------------
  807|    110|            c_gettable_params = OSSL_FUNC_core_gettable_params(in);
  808|    110|            break;
  809|    110|        case OSSL_FUNC_CORE_GET_PARAMS:
  ------------------
  |  |   75|    110|#define OSSL_FUNC_CORE_GET_PARAMS 2
  ------------------
  |  Branch (809:9): [True: 110, False: 5.72k]
  ------------------
  810|    110|            c_get_params = OSSL_FUNC_core_get_params(in);
  811|    110|            break;
  812|    110|        case OSSL_FUNC_CORE_GET_LIBCTX:
  ------------------
  |  |   79|    110|#define OSSL_FUNC_CORE_GET_LIBCTX 4
  ------------------
  |  Branch (812:9): [True: 110, False: 5.72k]
  ------------------
  813|    110|            c_get_libctx = OSSL_FUNC_core_get_libctx(in);
  814|    110|            break;
  815|  5.50k|        default:
  ------------------
  |  Branch (815:9): [True: 5.50k, False: 330]
  ------------------
  816|       |            /* Just ignore anything we don't understand */
  817|  5.50k|            break;
  818|  5.83k|        }
  819|  5.83k|    }
  820|       |
  821|    110|    if (c_get_libctx == NULL)
  ------------------
  |  Branch (821:9): [True: 0, False: 110]
  ------------------
  822|      0|        return 0;
  823|       |
  824|       |    /*
  825|       |     * We want to make sure that all calls from this provider that requires
  826|       |     * a library context use the same context as the one used to call our
  827|       |     * functions.  We do that by passing it along in the provider context.
  828|       |     *
  829|       |     * This only works for built-in providers.  Most providers should
  830|       |     * create their own library context.
  831|       |     */
  832|    110|    if ((*provctx = ossl_prov_ctx_new()) == NULL
  ------------------
  |  Branch (832:9): [True: 0, False: 110]
  ------------------
  833|    110|        || (corebiometh = ossl_bio_prov_init_bio_method()) == NULL) {
  ------------------
  |  Branch (833:12): [True: 0, False: 110]
  ------------------
  834|      0|        ossl_prov_ctx_free(*provctx);
  835|      0|        *provctx = NULL;
  836|      0|        return 0;
  837|      0|    }
  838|    110|    ossl_prov_ctx_set0_libctx(*provctx,
  839|    110|        (OSSL_LIB_CTX *)c_get_libctx(handle));
  840|    110|    ossl_prov_ctx_set0_handle(*provctx, handle);
  841|    110|    ossl_prov_ctx_set0_core_bio_method(*provctx, corebiometh);
  842|    110|    ossl_prov_ctx_set0_core_get_params(*provctx, c_get_params);
  843|       |
  844|    110|    *out = deflt_dispatch_table;
  845|    110|    ossl_prov_cache_exported_algorithms(deflt_ciphers, exported_ciphers);
  846|       |
  847|    110|    return 1;
  848|    110|}
defltprov.c:deflt_teardown:
  775|    109|{
  776|    109|    BIO_meth_free(ossl_prov_ctx_get0_core_bio_method(provctx));
  777|    109|    ossl_prov_ctx_free(provctx);
  778|    109|}
defltprov.c:deflt_query:
  739|      4|{
  740|      4|    *no_cache = 0;
  741|      4|    switch (operation_id) {
  ------------------
  |  Branch (741:13): [True: 4, False: 0]
  ------------------
  742|      0|    case OSSL_OP_DIGEST:
  ------------------
  |  |  283|      0|#define OSSL_OP_DIGEST 1
  ------------------
  |  Branch (742:5): [True: 0, False: 4]
  ------------------
  743|      0|        return deflt_digests;
  744|      2|    case OSSL_OP_CIPHER:
  ------------------
  |  |  284|      2|#define OSSL_OP_CIPHER 2 /* Symmetric Ciphers */
  ------------------
  |  Branch (744:5): [True: 2, False: 2]
  ------------------
  745|      2|        return exported_ciphers;
  746|      0|    case OSSL_OP_MAC:
  ------------------
  |  |  285|      0|#define OSSL_OP_MAC 3
  ------------------
  |  Branch (746:5): [True: 0, False: 4]
  ------------------
  747|      0|        return deflt_macs;
  748|      0|    case OSSL_OP_KDF:
  ------------------
  |  |  286|      0|#define OSSL_OP_KDF 4
  ------------------
  |  Branch (748:5): [True: 0, False: 4]
  ------------------
  749|      0|        return deflt_kdfs;
  750|      2|    case OSSL_OP_RAND:
  ------------------
  |  |  287|      2|#define OSSL_OP_RAND 5
  ------------------
  |  Branch (750:5): [True: 2, False: 2]
  ------------------
  751|      2|        return deflt_rands;
  752|      0|    case OSSL_OP_KEYMGMT:
  ------------------
  |  |  288|      0|#define OSSL_OP_KEYMGMT 10
  ------------------
  |  Branch (752:5): [True: 0, False: 4]
  ------------------
  753|      0|        return deflt_keymgmt;
  754|      0|    case OSSL_OP_KEYEXCH:
  ------------------
  |  |  289|      0|#define OSSL_OP_KEYEXCH 11
  ------------------
  |  Branch (754:5): [True: 0, False: 4]
  ------------------
  755|      0|        return deflt_keyexch;
  756|      0|    case OSSL_OP_SIGNATURE:
  ------------------
  |  |  290|      0|#define OSSL_OP_SIGNATURE 12
  ------------------
  |  Branch (756:5): [True: 0, False: 4]
  ------------------
  757|      0|        return deflt_signature;
  758|      0|    case OSSL_OP_ASYM_CIPHER:
  ------------------
  |  |  291|      0|#define OSSL_OP_ASYM_CIPHER 13
  ------------------
  |  Branch (758:5): [True: 0, False: 4]
  ------------------
  759|      0|        return deflt_asym_cipher;
  760|      0|    case OSSL_OP_KEM:
  ------------------
  |  |  292|      0|#define OSSL_OP_KEM 14
  ------------------
  |  Branch (760:5): [True: 0, False: 4]
  ------------------
  761|      0|        return deflt_asym_kem;
  762|      0|    case OSSL_OP_ENCODER:
  ------------------
  |  |  295|      0|#define OSSL_OP_ENCODER 20
  ------------------
  |  Branch (762:5): [True: 0, False: 4]
  ------------------
  763|      0|        return deflt_encoder;
  764|      0|    case OSSL_OP_DECODER:
  ------------------
  |  |  296|      0|#define OSSL_OP_DECODER 21
  ------------------
  |  Branch (764:5): [True: 0, False: 4]
  ------------------
  765|      0|        return deflt_decoder;
  766|      0|    case OSSL_OP_STORE:
  ------------------
  |  |  297|      0|#define OSSL_OP_STORE 22
  ------------------
  |  Branch (766:5): [True: 0, False: 4]
  ------------------
  767|      0|        return deflt_store;
  768|      0|    case OSSL_OP_SKEYMGMT:
  ------------------
  |  |  293|      0|#define OSSL_OP_SKEYMGMT 15
  ------------------
  |  Branch (768:5): [True: 0, False: 4]
  ------------------
  769|      0|        return deflt_skeymgmt;
  770|      4|    }
  771|      0|    return NULL;
  772|      4|}

cipher_aes_cbc_hmac_sha.c:aes_128_cbc_hmac_sha1_get_params:
  384|      1|    {                                                                               \
  385|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_CBC_MODE,            \
  ------------------
  |  |  211|      1|#define EVP_CIPH_CBC_MODE 0x2
  ------------------
  386|      1|            flags, kbits, blkbits, ivbits);                                         \
  387|      1|    }                                                                               \
cipher_aes_cbc_hmac_sha.c:aes_gettable_ctx_params:
  266|      4|{
  267|      4|    return aes_cbc_hmac_sha_get_ctx_params_list;
  268|      4|}
cipher_aes_cbc_hmac_sha.c:aes_256_cbc_hmac_sha1_get_params:
  384|      1|    {                                                                               \
  385|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_CBC_MODE,            \
  ------------------
  |  |  211|      1|#define EVP_CIPH_CBC_MODE 0x2
  ------------------
  386|      1|            flags, kbits, blkbits, ivbits);                                         \
  387|      1|    }                                                                               \
cipher_aes_cbc_hmac_sha.c:aes_128_cbc_hmac_sha256_get_params:
  384|      1|    {                                                                               \
  385|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_CBC_MODE,            \
  ------------------
  |  |  211|      1|#define EVP_CIPH_CBC_MODE 0x2
  ------------------
  386|      1|            flags, kbits, blkbits, ivbits);                                         \
  387|      1|    }                                                                               \
cipher_aes_cbc_hmac_sha.c:aes_256_cbc_hmac_sha256_get_params:
  384|      1|    {                                                                               \
  385|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_CBC_MODE,            \
  ------------------
  |  |  211|      1|#define EVP_CIPH_CBC_MODE 0x2
  ------------------
  386|      1|            flags, kbits, blkbits, ivbits);                                         \
  387|      1|    }                                                                               \

ossl_cipher_capable_aes_cbc_hmac_sha1_etm:
   14|      3|{
   15|      3|    return 0;
   16|      3|}

ossl_cipher_capable_aes_cbc_hmac_sha1:
   41|      2|{
   42|      2|    return AESNI_CBC_HMAC_SHA_CAPABLE;
  ------------------
  |  |  171|      2|#define AESNI_CBC_HMAC_SHA_CAPABLE (OPENSSL_ia32cap_P[1] & (1 << (57 - 32)))
  ------------------
   43|      2|}

ossl_cipher_capable_aes_cbc_hmac_sha256_etm:
   14|      3|{
   15|      3|    return 0;
   16|      3|}

ossl_cipher_capable_aes_cbc_hmac_sha256:
   41|      2|{
   42|      2|    return AESNI_CBC_HMAC_SHA_CAPABLE
  ------------------
  |  |  171|      4|#define AESNI_CBC_HMAC_SHA_CAPABLE (OPENSSL_ia32cap_P[1] & (1 << (57 - 32)))
  |  |  ------------------
  |  |  |  Branch (171:36): [True: 2, False: 0]
  |  |  ------------------
  ------------------
   43|      2|        && aesni_cbc_sha256_enc(NULL, NULL, 0, NULL, NULL, NULL, NULL);
  ------------------
  |  Branch (43:12): [True: 2, False: 0]
  ------------------
   44|      2|}

ossl_cipher_capable_aes_cbc_hmac_sha512_etm:
   20|      3|{
   21|      3|    return 0;
   22|      3|}

cipher_aes_gcm_siv.c:ossl_aes_128_gcm_siv_get_params:
  278|      1|    {                                                                                                      \
  279|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,                            \
  ------------------
  |  |  221|      1|#define EVP_CIPH_GCM_SIV_MODE 0x10005
  ------------------
  280|      1|            flags, kbits, blkbits, ivbits);                                                                \
  281|      1|    }                                                                                                      \
cipher_aes_gcm_siv.c:ossl_aes_gcm_siv_gettable_ctx_params:
  208|      3|{
  209|      3|    return ossl_aes_gcm_siv_get_ctx_params_list;
  210|      3|}
cipher_aes_gcm_siv.c:ossl_aes_192_gcm_siv_get_params:
  278|      1|    {                                                                                                      \
  279|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,                            \
  ------------------
  |  |  221|      1|#define EVP_CIPH_GCM_SIV_MODE 0x10005
  ------------------
  280|      1|            flags, kbits, blkbits, ivbits);                                                                \
  281|      1|    }                                                                                                      \
cipher_aes_gcm_siv.c:ossl_aes_256_gcm_siv_get_params:
  278|      1|    {                                                                                                      \
  279|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,                            \
  ------------------
  |  |  221|      1|#define EVP_CIPH_GCM_SIV_MODE 0x10005
  ------------------
  280|      1|            flags, kbits, blkbits, ivbits);                                                                \
  281|      1|    }                                                                                                      \

ossl_prov_cipher_hw_aes_ecb:
  139|      4|    {                                                   \
  140|      4|        PROV_CIPHER_HW_select(mode) return &aes_##mode; \
  ------------------
  |  |   79|      4|#define PROV_CIPHER_HW_select(mode)                                            \
  |  |   80|      4|if (AESNI_CAPABLE)                                                             \
  |  |  ------------------
  |  |  |  |  185|      4|#define AESNI_CAPABLE (OPENSSL_ia32cap_P[1] & (1 << (57 - 32)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (185:23): [True: 4, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   81|      4|    return &aesni_##mode;
  ------------------
  141|      4|    }
ossl_prov_cipher_hw_aes_ctr:
  139|      2|    {                                                   \
  140|      2|        PROV_CIPHER_HW_select(mode) return &aes_##mode; \
  ------------------
  |  |   79|      2|#define PROV_CIPHER_HW_select(mode)                                            \
  |  |   80|      2|if (AESNI_CAPABLE)                                                             \
  |  |  ------------------
  |  |  |  |  185|      2|#define AESNI_CAPABLE (OPENSSL_ia32cap_P[1] & (1 << (57 - 32)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (185:23): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   81|      2|    return &aesni_##mode;
  ------------------
  141|      2|    }

cipher_aes_hw.c:cipher_hw_aesni_initkey:
   20|  13.0k|{
   21|  13.0k|    int ret;
   22|  13.0k|    PROV_AES_CTX *adat = (PROV_AES_CTX *)dat;
   23|  13.0k|    AES_KEY *ks = &adat->ks.ks;
   24|       |
   25|  13.0k|    dat->ks = ks;
   26|       |
   27|  13.0k|    if ((dat->mode == EVP_CIPH_ECB_MODE || dat->mode == EVP_CIPH_CBC_MODE)
  ------------------
  |  |  210|  26.1k|#define EVP_CIPH_ECB_MODE 0x1
  ------------------
                  if ((dat->mode == EVP_CIPH_ECB_MODE || dat->mode == EVP_CIPH_CBC_MODE)
  ------------------
  |  |  211|  6.54k|#define EVP_CIPH_CBC_MODE 0x2
  ------------------
  |  Branch (27:10): [True: 6.55k, False: 6.54k]
  |  Branch (27:44): [True: 0, False: 6.54k]
  ------------------
   28|  6.55k|        && !dat->enc) {
  ------------------
  |  Branch (28:12): [True: 0, False: 6.55k]
  ------------------
   29|      0|        ret = aesni_set_decrypt_key(key, (int)(keylen * 8), ks);
   30|      0|        dat->block = (block128_f) aesni_decrypt;
   31|      0|        dat->stream.cbc = dat->mode == EVP_CIPH_CBC_MODE ?
  ------------------
  |  |  211|      0|#define EVP_CIPH_CBC_MODE 0x2
  ------------------
  |  Branch (31:27): [True: 0, False: 0]
  ------------------
   32|      0|            (cbc128_f) aesni_cbc_encrypt : NULL;
   33|  13.0k|    } else {
   34|  13.0k|        ret = aesni_set_encrypt_key(key, (int)(keylen * 8), ks);
   35|  13.0k|        dat->block = (block128_f) aesni_encrypt;
   36|  13.0k|        if (dat->mode == EVP_CIPH_CBC_MODE)
  ------------------
  |  |  211|  13.0k|#define EVP_CIPH_CBC_MODE 0x2
  ------------------
  |  Branch (36:13): [True: 0, False: 13.0k]
  ------------------
   37|      0|            dat->stream.cbc = (cbc128_f) aesni_cbc_encrypt;
   38|  13.0k|        else if (dat->mode == EVP_CIPH_CTR_MODE)
  ------------------
  |  |  214|  13.0k|#define EVP_CIPH_CTR_MODE 0x5
  ------------------
  |  Branch (38:18): [True: 6.54k, False: 6.55k]
  ------------------
   39|  6.54k|            dat->stream.ctr = (ctr128_f) aesni_ctr32_encrypt_blocks;
   40|  6.55k|        else
   41|  6.55k|            dat->stream.cbc = NULL;
   42|  13.0k|    }
   43|       |
   44|  13.0k|    if (ret < 0) {
  ------------------
  |  Branch (44:9): [True: 0, False: 13.0k]
  ------------------
   45|      0|        ERR_raise(ERR_LIB_PROV, PROV_R_KEY_SETUP_FAILED);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
   46|      0|        return 0;
   47|      0|    }
   48|       |
   49|  13.0k|    return 1;
   50|  13.0k|}
cipher_aes_hw.c:cipher_hw_aesni_ecb:
   64|  6.58k|{
   65|  6.58k|    if (len < ctx->blocksize)
  ------------------
  |  Branch (65:9): [True: 0, False: 6.58k]
  ------------------
   66|      0|        return 1;
   67|       |
   68|  6.58k|    aesni_ecb_encrypt(in, out, len, ctx->ks, ctx->enc);
   69|       |
   70|  6.58k|    return 1;
   71|  6.58k|}

cipher_aes_ocb.c:aes_256_ocb_get_params:
  526|      1|    {                                                                           \
  527|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE, \
  ------------------
  |  |  219|      1|#define EVP_CIPH_OCB_MODE 0x10003
  ------------------
  528|      1|            flags, kbits, blkbits, ivbits);                                     \
  529|      1|    }                                                                           \
cipher_aes_ocb.c:cipher_ocb_gettable_ctx_params:
  421|      3|{
  422|      3|    return aes_ocb_get_ctx_params_list;
  423|      3|}
cipher_aes_ocb.c:aes_192_ocb_get_params:
  526|      1|    {                                                                           \
  527|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE, \
  ------------------
  |  |  219|      1|#define EVP_CIPH_OCB_MODE 0x10003
  ------------------
  528|      1|            flags, kbits, blkbits, ivbits);                                     \
  529|      1|    }                                                                           \
cipher_aes_ocb.c:aes_128_ocb_get_params:
  526|      1|    {                                                                           \
  527|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE, \
  ------------------
  |  |  219|      1|#define EVP_CIPH_OCB_MODE 0x10003
  ------------------
  528|      1|            flags, kbits, blkbits, ivbits);                                     \
  529|      1|    }                                                                           \

cipher_aes_siv.c:aes_128_siv_get_params:
  258|      1|    {                                                                            \
  259|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  220|      1|#define EVP_CIPH_SIV_MODE 0x10004
  ------------------
  260|      1|            flags, 2 * kbits, blkbits, ivbits);                                  \
  261|      1|    }                                                                            \
cipher_aes_siv.c:aes_siv_gettable_ctx_params:
  187|      3|{
  188|      3|    return aes_siv_get_ctx_params_list;
  189|      3|}
cipher_aes_siv.c:aes_192_siv_get_params:
  258|      1|    {                                                                            \
  259|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  220|      1|#define EVP_CIPH_SIV_MODE 0x10004
  ------------------
  260|      1|            flags, 2 * kbits, blkbits, ivbits);                                  \
  261|      1|    }                                                                            \
cipher_aes_siv.c:aes_256_siv_get_params:
  258|      1|    {                                                                            \
  259|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  220|      1|#define EVP_CIPH_SIV_MODE 0x10004
  ------------------
  260|      1|            flags, 2 * kbits, blkbits, ivbits);                                  \
  261|      1|    }                                                                            \

cipher_aes_wrp.c:aes_256_wrap_get_params:
  309|      1|    {                                                                           \
  310|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE, \
  ------------------
  |  |  218|      1|#define EVP_CIPH_WRAP_MODE 0x10002
  ------------------
  311|      1|            flags, kbits, blkbits, ivbits);                                     \
  312|      1|    }                                                                           \
cipher_aes_wrp.c:aes_192_wrap_get_params:
  309|      1|    {                                                                           \
  310|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE, \
  ------------------
  |  |  218|      1|#define EVP_CIPH_WRAP_MODE 0x10002
  ------------------
  311|      1|            flags, kbits, blkbits, ivbits);                                     \
  312|      1|    }                                                                           \
cipher_aes_wrp.c:aes_128_wrap_get_params:
  309|      1|    {                                                                           \
  310|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE, \
  ------------------
  |  |  218|      1|#define EVP_CIPH_WRAP_MODE 0x10002
  ------------------
  311|      1|            flags, kbits, blkbits, ivbits);                                     \
  312|      1|    }                                                                           \
cipher_aes_wrp.c:aes_256_wrappad_get_params:
  309|      1|    {                                                                           \
  310|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE, \
  ------------------
  |  |  218|      1|#define EVP_CIPH_WRAP_MODE 0x10002
  ------------------
  311|      1|            flags, kbits, blkbits, ivbits);                                     \
  312|      1|    }                                                                           \
cipher_aes_wrp.c:aes_192_wrappad_get_params:
  309|      1|    {                                                                           \
  310|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE, \
  ------------------
  |  |  218|      1|#define EVP_CIPH_WRAP_MODE 0x10002
  ------------------
  311|      1|            flags, kbits, blkbits, ivbits);                                     \
  312|      1|    }                                                                           \
cipher_aes_wrp.c:aes_128_wrappad_get_params:
  309|      1|    {                                                                           \
  310|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE, \
  ------------------
  |  |  218|      1|#define EVP_CIPH_WRAP_MODE 0x10002
  ------------------
  311|      1|            flags, kbits, blkbits, ivbits);                                     \
  312|      1|    }                                                                           \
cipher_aes_wrp.c:aes_256_wrapinv_get_params:
  309|      1|    {                                                                           \
  310|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE, \
  ------------------
  |  |  218|      1|#define EVP_CIPH_WRAP_MODE 0x10002
  ------------------
  311|      1|            flags, kbits, blkbits, ivbits);                                     \
  312|      1|    }                                                                           \
cipher_aes_wrp.c:aes_192_wrapinv_get_params:
  309|      1|    {                                                                           \
  310|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE, \
  ------------------
  |  |  218|      1|#define EVP_CIPH_WRAP_MODE 0x10002
  ------------------
  311|      1|            flags, kbits, blkbits, ivbits);                                     \
  312|      1|    }                                                                           \
cipher_aes_wrp.c:aes_128_wrapinv_get_params:
  309|      1|    {                                                                           \
  310|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE, \
  ------------------
  |  |  218|      1|#define EVP_CIPH_WRAP_MODE 0x10002
  ------------------
  311|      1|            flags, kbits, blkbits, ivbits);                                     \
  312|      1|    }                                                                           \
cipher_aes_wrp.c:aes_256_wrappadinv_get_params:
  309|      1|    {                                                                           \
  310|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE, \
  ------------------
  |  |  218|      1|#define EVP_CIPH_WRAP_MODE 0x10002
  ------------------
  311|      1|            flags, kbits, blkbits, ivbits);                                     \
  312|      1|    }                                                                           \
cipher_aes_wrp.c:aes_192_wrappadinv_get_params:
  309|      1|    {                                                                           \
  310|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE, \
  ------------------
  |  |  218|      1|#define EVP_CIPH_WRAP_MODE 0x10002
  ------------------
  311|      1|            flags, kbits, blkbits, ivbits);                                     \
  312|      1|    }                                                                           \
cipher_aes_wrp.c:aes_128_wrappadinv_get_params:
  309|      1|    {                                                                           \
  310|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE, \
  ------------------
  |  |  218|      1|#define EVP_CIPH_WRAP_MODE 0x10002
  ------------------
  311|      1|            flags, kbits, blkbits, ivbits);                                     \
  312|      1|    }                                                                           \

cipher_aes_xts.c:aes_256_xts_get_params:
  275|      1|    {                                                                              \
  276|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,    \
  ------------------
  |  |  217|      1|#define EVP_CIPH_XTS_MODE 0x10001
  ------------------
  277|      1|            flags, 2 * kbits, AES_XTS_BLOCK_BITS,                                  \
  ------------------
  |  |   26|      1|#define AES_XTS_BLOCK_BITS 8
  ------------------
  278|      1|            AES_XTS_IV_BITS);                                                      \
  ------------------
  |  |   25|      1|#define AES_XTS_IV_BITS 128
  ------------------
  279|      1|    }                                                                              \
cipher_aes_xts.c:aes_128_xts_get_params:
  275|      1|    {                                                                              \
  276|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,    \
  ------------------
  |  |  217|      1|#define EVP_CIPH_XTS_MODE 0x10001
  ------------------
  277|      1|            flags, 2 * kbits, AES_XTS_BLOCK_BITS,                                  \
  ------------------
  |  |   26|      1|#define AES_XTS_BLOCK_BITS 8
  ------------------
  278|      1|            AES_XTS_IV_BITS);                                                      \
  ------------------
  |  |   25|      1|#define AES_XTS_IV_BITS 128
  ------------------
  279|      1|    }                                                                              \

cipher_chacha20.c:chacha20_get_params:
   97|      1|{
   98|      1|    return ossl_cipher_generic_get_params(params, 0, CHACHA20_FLAGS,
  ------------------
  |  |   22|      1|#define CHACHA20_FLAGS (PROV_CIPHER_FLAG_CUSTOM_IV)
  |  |  ------------------
  |  |  |  |   40|      1|#define PROV_CIPHER_FLAG_CUSTOM_IV 0x0002
  |  |  ------------------
  ------------------
   99|      1|        CHACHA20_KEYLEN * 8,
  ------------------
  |  |   19|      1|#define CHACHA20_KEYLEN (CHACHA_KEY_SIZE)
  |  |  ------------------
  |  |  |  |   44|      1|#define CHACHA_KEY_SIZE 32
  |  |  ------------------
  ------------------
  100|      1|        CHACHA20_BLKLEN * 8,
  ------------------
  |  |   20|      1|#define CHACHA20_BLKLEN (1)
  ------------------
  101|      1|        CHACHA20_IVLEN * 8);
  ------------------
  |  |   21|      1|#define CHACHA20_IVLEN (CHACHA_CTR_SIZE)
  |  |  ------------------
  |  |  |  |   45|      1|#define CHACHA_CTR_SIZE 16
  |  |  ------------------
  ------------------
  102|      1|}
cipher_chacha20.c:chacha20_gettable_ctx_params:
  138|      1|{
  139|      1|    return chacha20_get_ctx_params_list;
  140|      1|}

cipher_chacha20_poly1305.c:chacha20_poly1305_get_params:
   93|      1|{
   94|      1|    return ossl_cipher_generic_get_params(params, 0, CHACHA20_POLY1305_FLAGS,
  ------------------
  |  |   23|      1|#define CHACHA20_POLY1305_FLAGS (PROV_CIPHER_FLAG_AEAD \
  |  |  ------------------
  |  |  |  |   39|      1|#define PROV_CIPHER_FLAG_AEAD 0x0001
  |  |  ------------------
  |  |   24|      1|    | PROV_CIPHER_FLAG_CUSTOM_IV)
  |  |  ------------------
  |  |  |  |   40|      1|#define PROV_CIPHER_FLAG_CUSTOM_IV 0x0002
  |  |  ------------------
  ------------------
   95|      1|        CHACHA20_POLY1305_KEYLEN * 8,
  ------------------
  |  |   19|      1|#define CHACHA20_POLY1305_KEYLEN CHACHA_KEY_SIZE
  |  |  ------------------
  |  |  |  |   44|      1|#define CHACHA_KEY_SIZE 32
  |  |  ------------------
  ------------------
   96|      1|        CHACHA20_POLY1305_BLKLEN * 8,
  ------------------
  |  |   20|      1|#define CHACHA20_POLY1305_BLKLEN 1
  ------------------
   97|      1|        CHACHA20_POLY1305_IVLEN * 8);
  ------------------
  |  |   16|      1|#define CHACHA20_POLY1305_IVLEN 12
  ------------------
   98|      1|}
cipher_chacha20_poly1305.c:chacha20_poly1305_gettable_ctx_params:
  151|      1|{
  152|      1|    return chacha20_poly1305_get_ctx_params_list;
  153|      1|}

cipher_aes.c:aes_cts_256_cbc_get_params:
   17|      1|    {                                                                            \
   18|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  211|      1|#define EVP_CIPH_CBC_MODE 0x2
  ------------------
   19|      1|            flags, kbits, blkbits, ivbits);                                      \
   20|      1|    }                                                                            \
cipher_aes.c:aes_cts_192_cbc_get_params:
   17|      1|    {                                                                            \
   18|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  211|      1|#define EVP_CIPH_CBC_MODE 0x2
  ------------------
   19|      1|            flags, kbits, blkbits, ivbits);                                      \
   20|      1|    }                                                                            \
cipher_aes.c:aes_cts_128_cbc_get_params:
   17|      1|    {                                                                            \
   18|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  211|      1|#define EVP_CIPH_CBC_MODE 0x2
  ------------------
   19|      1|            flags, kbits, blkbits, ivbits);                                      \
   20|      1|    }                                                                            \
cipher_camellia.c:camellia_cts_256_cbc_get_params:
   17|      1|    {                                                                            \
   18|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  211|      1|#define EVP_CIPH_CBC_MODE 0x2
  ------------------
   19|      1|            flags, kbits, blkbits, ivbits);                                      \
   20|      1|    }                                                                            \
cipher_camellia.c:camellia_cts_192_cbc_get_params:
   17|      1|    {                                                                            \
   18|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  211|      1|#define EVP_CIPH_CBC_MODE 0x2
  ------------------
   19|      1|            flags, kbits, blkbits, ivbits);                                      \
   20|      1|    }                                                                            \
cipher_camellia.c:camellia_cts_128_cbc_get_params:
   17|      1|    {                                                                            \
   18|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  211|      1|#define EVP_CIPH_CBC_MODE 0x2
  ------------------
   19|      1|            flags, kbits, blkbits, ivbits);                                      \
   20|      1|    }                                                                            \

cipher_null.c:null_get_params:
  105|      1|{
  106|      1|    return ossl_cipher_generic_get_params(params, 0, 0, 0, 8, 0);
  107|      1|}
cipher_null.c:null_gettable_ctx_params:
  112|      1|{
  113|      1|    return null_get_ctx_params_list;
  114|      1|}

cipher_sm4_xts.c:sm4_128_xts_get_params:
  239|      1|    {                                                                              \
  240|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,    \
  ------------------
  |  |  217|      1|#define EVP_CIPH_XTS_MODE 0x10001
  ------------------
  241|      1|            flags, 2 * kbits, SM4_XTS_BLOCK_BITS,                                  \
  ------------------
  |  |   20|      1|#define SM4_XTS_BLOCK_BITS 8
  ------------------
  242|      1|            SM4_XTS_IV_BITS);                                                      \
  ------------------
  |  |   19|      1|#define SM4_XTS_IV_BITS 128
  ------------------
  243|      1|    }                                                                              \

cipher_tdes.c:tdes_ede3_ecb_get_params:
   44|      1|    {                                                                              \
   45|      1|        return ossl_tdes_get_params(params, EVP_CIPH_##UCMODE##_MODE,              \
  ------------------
  |  |  210|      1|#define EVP_CIPH_ECB_MODE 0x1
  ------------------
   46|      1|            flags, kbits, blkbits, ivbits);                                        \
   47|      1|    }                                                                              \
cipher_tdes.c:tdes_ede3_cbc_get_params:
   44|      1|    {                                                                              \
   45|      1|        return ossl_tdes_get_params(params, EVP_CIPH_##UCMODE##_MODE,              \
  ------------------
  |  |  211|      1|#define EVP_CIPH_CBC_MODE 0x2
  ------------------
   46|      1|            flags, kbits, blkbits, ivbits);                                        \
   47|      1|    }                                                                              \
cipher_tdes_default.c:tdes_ede3_ofb_get_params:
   44|      1|    {                                                                              \
   45|      1|        return ossl_tdes_get_params(params, EVP_CIPH_##UCMODE##_MODE,              \
  ------------------
  |  |  213|      1|#define EVP_CIPH_OFB_MODE 0x4
  ------------------
   46|      1|            flags, kbits, blkbits, ivbits);                                        \
   47|      1|    }                                                                              \
cipher_tdes_default.c:tdes_ede3_cfb_get_params:
   44|      1|    {                                                                              \
   45|      1|        return ossl_tdes_get_params(params, EVP_CIPH_##UCMODE##_MODE,              \
  ------------------
  |  |  212|      1|#define EVP_CIPH_CFB_MODE 0x3
  ------------------
   46|      1|            flags, kbits, blkbits, ivbits);                                        \
   47|      1|    }                                                                              \
cipher_tdes_default.c:tdes_ede3_cfb1_get_params:
   44|      1|    {                                                                              \
   45|      1|        return ossl_tdes_get_params(params, EVP_CIPH_##UCMODE##_MODE,              \
  ------------------
  |  |  212|      1|#define EVP_CIPH_CFB_MODE 0x3
  ------------------
   46|      1|            flags, kbits, blkbits, ivbits);                                        \
   47|      1|    }                                                                              \
cipher_tdes_default.c:tdes_ede3_cfb8_get_params:
   44|      1|    {                                                                              \
   45|      1|        return ossl_tdes_get_params(params, EVP_CIPH_##UCMODE##_MODE,              \
  ------------------
  |  |  212|      1|#define EVP_CIPH_CFB_MODE 0x3
  ------------------
   46|      1|            flags, kbits, blkbits, ivbits);                                        \
   47|      1|    }                                                                              \
cipher_tdes_default.c:tdes_ede2_ecb_get_params:
   44|      1|    {                                                                              \
   45|      1|        return ossl_tdes_get_params(params, EVP_CIPH_##UCMODE##_MODE,              \
  ------------------
  |  |  210|      1|#define EVP_CIPH_ECB_MODE 0x1
  ------------------
   46|      1|            flags, kbits, blkbits, ivbits);                                        \
   47|      1|    }                                                                              \
cipher_tdes_default.c:tdes_ede2_cbc_get_params:
   44|      1|    {                                                                              \
   45|      1|        return ossl_tdes_get_params(params, EVP_CIPH_##UCMODE##_MODE,              \
  ------------------
  |  |  211|      1|#define EVP_CIPH_CBC_MODE 0x2
  ------------------
   46|      1|            flags, kbits, blkbits, ivbits);                                        \
   47|      1|    }                                                                              \
cipher_tdes_default.c:tdes_ede2_ofb_get_params:
   44|      1|    {                                                                              \
   45|      1|        return ossl_tdes_get_params(params, EVP_CIPH_##UCMODE##_MODE,              \
  ------------------
  |  |  213|      1|#define EVP_CIPH_OFB_MODE 0x4
  ------------------
   46|      1|            flags, kbits, blkbits, ivbits);                                        \
   47|      1|    }                                                                              \
cipher_tdes_default.c:tdes_ede2_cfb_get_params:
   44|      1|    {                                                                              \
   45|      1|        return ossl_tdes_get_params(params, EVP_CIPH_##UCMODE##_MODE,              \
  ------------------
  |  |  212|      1|#define EVP_CIPH_CFB_MODE 0x3
  ------------------
   46|      1|            flags, kbits, blkbits, ivbits);                                        \
   47|      1|    }                                                                              \

ossl_tdes_get_params:
  184|     10|{
  185|       |#ifdef FIPS_MODULE
  186|       |    const int decrypt_only = 1;
  187|       |#else
  188|     10|    const int decrypt_only = 0;
  189|     10|#endif
  190|     10|    OSSL_PARAM *p;
  191|       |
  192|     10|    p = OSSL_PARAM_locate(params, OSSL_CIPHER_PARAM_DECRYPT_ONLY);
  ------------------
  |  |  190|     10|# define OSSL_CIPHER_PARAM_DECRYPT_ONLY "decrypt-only"
  ------------------
  193|     10|    if (p != NULL && !OSSL_PARAM_set_int(p, decrypt_only)) {
  ------------------
  |  Branch (193:9): [True: 0, False: 10]
  |  Branch (193:22): [True: 0, False: 0]
  ------------------
  194|      0|        ERR_raise(ERR_LIB_PROV, PROV_R_FAILED_TO_SET_PARAMETER);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  195|      0|        return 0;
  196|      0|    }
  197|       |
  198|     10|    return ossl_cipher_generic_get_params(params, md, flags,
  199|     10|        kbits, blkbits, ivbits);
  200|     10|}

cipher_tdes_wrap.c:tdes_wrap_get_params:
  181|      1|    {                                                                            \
  182|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_WRAP_MODE, flags, \
  ------------------
  |  |  218|      1|#define EVP_CIPH_WRAP_MODE 0x10002
  ------------------
  183|      1|            kbits, blkbits, ivbits);                                             \
  184|      1|    }                                                                            \

ossl_cipher_generic_get_params:
   43|    130|{
   44|    130|    struct ossl_cipher_generic_get_params_st p;
   45|       |
   46|    130|    if (!ossl_cipher_generic_get_params_decoder(params, &p))
  ------------------
  |  Branch (46:9): [True: 0, False: 130]
  ------------------
   47|      0|        return 0;
   48|       |
   49|    130|    if (p.mode != NULL && !OSSL_PARAM_set_uint(p.mode, md)) {
  ------------------
  |  Branch (49:9): [True: 130, False: 0]
  |  Branch (49:27): [True: 0, False: 130]
  ------------------
   50|      0|        ERR_raise(ERR_LIB_PROV, PROV_R_FAILED_TO_SET_PARAMETER);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
   51|      0|        return 0;
   52|      0|    }
   53|    130|    if (p.aead != NULL
  ------------------
  |  Branch (53:9): [True: 130, False: 0]
  ------------------
   54|    130|        && !OSSL_PARAM_set_int(p.aead, (flags & PROV_CIPHER_FLAG_AEAD) != 0)) {
  ------------------
  |  |   39|    130|#define PROV_CIPHER_FLAG_AEAD 0x0001
  ------------------
  |  Branch (54:12): [True: 0, False: 130]
  ------------------
   55|      0|        ERR_raise(ERR_LIB_PROV, PROV_R_FAILED_TO_SET_PARAMETER);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
   56|      0|        return 0;
   57|      0|    }
   58|    130|    if (p.custiv != NULL
  ------------------
  |  Branch (58:9): [True: 130, False: 0]
  ------------------
   59|    130|        && !OSSL_PARAM_set_int(p.custiv, (flags & PROV_CIPHER_FLAG_CUSTOM_IV) != 0)) {
  ------------------
  |  |   40|    130|#define PROV_CIPHER_FLAG_CUSTOM_IV 0x0002
  ------------------
  |  Branch (59:12): [True: 0, False: 130]
  ------------------
   60|      0|        ERR_raise(ERR_LIB_PROV, PROV_R_FAILED_TO_SET_PARAMETER);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
   61|      0|        return 0;
   62|      0|    }
   63|    130|    if (p.cts != NULL
  ------------------
  |  Branch (63:9): [True: 130, False: 0]
  ------------------
   64|    130|        && !OSSL_PARAM_set_int(p.cts, (flags & PROV_CIPHER_FLAG_CTS) != 0)) {
  ------------------
  |  |   41|    130|#define PROV_CIPHER_FLAG_CTS 0x0004
  ------------------
  |  Branch (64:12): [True: 0, False: 130]
  ------------------
   65|      0|        ERR_raise(ERR_LIB_PROV, PROV_R_FAILED_TO_SET_PARAMETER);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
   66|      0|        return 0;
   67|      0|    }
   68|    130|    if (p.mb != NULL
  ------------------
  |  Branch (68:9): [True: 130, False: 0]
  ------------------
   69|    130|        && !OSSL_PARAM_set_int(p.mb, (flags & PROV_CIPHER_FLAG_TLS1_MULTIBLOCK) != 0)) {
  ------------------
  |  |   42|    130|#define PROV_CIPHER_FLAG_TLS1_MULTIBLOCK 0x0008
  ------------------
  |  Branch (69:12): [True: 0, False: 130]
  ------------------
   70|      0|        ERR_raise(ERR_LIB_PROV, PROV_R_FAILED_TO_SET_PARAMETER);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
   71|      0|        return 0;
   72|      0|    }
   73|    130|    if (p.rand != NULL
  ------------------
  |  Branch (73:9): [True: 130, False: 0]
  ------------------
   74|    130|        && !OSSL_PARAM_set_int(p.rand, (flags & PROV_CIPHER_FLAG_RAND_KEY) != 0)) {
  ------------------
  |  |   43|    130|#define PROV_CIPHER_FLAG_RAND_KEY 0x0010
  ------------------
  |  Branch (74:12): [True: 0, False: 130]
  ------------------
   75|      0|        ERR_raise(ERR_LIB_PROV, PROV_R_FAILED_TO_SET_PARAMETER);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
   76|      0|        return 0;
   77|      0|    }
   78|    130|    if (p.etm != NULL
  ------------------
  |  Branch (78:9): [True: 130, False: 0]
  ------------------
   79|    130|        && !OSSL_PARAM_set_int(p.etm, (flags & EVP_CIPH_FLAG_ENC_THEN_MAC) != 0)) {
  ------------------
  |  |  267|    130|#define EVP_CIPH_FLAG_ENC_THEN_MAC 0x10000000
  ------------------
  |  Branch (79:12): [True: 0, False: 130]
  ------------------
   80|      0|        ERR_raise(ERR_LIB_PROV, PROV_R_FAILED_TO_SET_PARAMETER);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
   81|      0|        return 0;
   82|      0|    }
   83|    130|    if (p.keylen != NULL && !OSSL_PARAM_set_size_t(p.keylen, kbits / 8)) {
  ------------------
  |  Branch (83:9): [True: 130, False: 0]
  |  Branch (83:29): [True: 0, False: 130]
  ------------------
   84|      0|        ERR_raise(ERR_LIB_PROV, PROV_R_FAILED_TO_SET_PARAMETER);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
   85|      0|        return 0;
   86|      0|    }
   87|    130|    if (p.bsize != NULL && !OSSL_PARAM_set_size_t(p.bsize, blkbits / 8)) {
  ------------------
  |  Branch (87:9): [True: 130, False: 0]
  |  Branch (87:28): [True: 0, False: 130]
  ------------------
   88|      0|        ERR_raise(ERR_LIB_PROV, PROV_R_FAILED_TO_SET_PARAMETER);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
   89|      0|        return 0;
   90|      0|    }
   91|    130|    if (p.ivlen != NULL && !OSSL_PARAM_set_size_t(p.ivlen, ivbits / 8)) {
  ------------------
  |  Branch (91:9): [True: 130, False: 0]
  |  Branch (91:28): [True: 0, False: 130]
  ------------------
   92|      0|        ERR_raise(ERR_LIB_PROV, PROV_R_FAILED_TO_SET_PARAMETER);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
   93|      0|        return 0;
   94|      0|    }
   95|    130|    return 1;
   96|    130|}
ossl_cipher_generic_gettable_ctx_params:
   99|     83|{
  100|     83|    return cipher_generic_get_ctx_params_list;
  101|     83|}
ossl_cipher_generic_einit:
  194|  19.6k|{
  195|  19.6k|    return cipher_generic_init_internal((PROV_CIPHER_CTX *)vctx, key, keylen,
  196|  19.6k|        iv, ivlen, params, 1);
  197|  19.6k|}
ossl_cipher_generic_block_update:
  235|  6.58k|{
  236|  6.58k|    size_t outlint = 0;
  237|  6.58k|    PROV_CIPHER_CTX *ctx = (PROV_CIPHER_CTX *)vctx;
  238|  6.58k|    size_t blksz = ctx->blocksize;
  239|  6.58k|    size_t nextblocks;
  240|       |
  241|  6.58k|    if (!ctx->key_set) {
  ------------------
  |  Branch (241:9): [True: 0, False: 6.58k]
  ------------------
  242|      0|        ERR_raise(ERR_LIB_PROV, PROV_R_NO_KEY_SET);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  243|      0|        return 0;
  244|      0|    }
  245|       |
  246|  6.58k|    if (ctx->tlsversion > 0) {
  ------------------
  |  Branch (246:9): [True: 0, False: 6.58k]
  ------------------
  247|       |        /*
  248|       |         * Each update call corresponds to a TLS record and is individually
  249|       |         * padded
  250|       |         */
  251|       |
  252|       |        /* Sanity check inputs */
  253|      0|        if (in == NULL
  ------------------
  |  Branch (253:13): [True: 0, False: 0]
  ------------------
  254|      0|            || in != out
  ------------------
  |  Branch (254:16): [True: 0, False: 0]
  ------------------
  255|      0|            || outsize < inl
  ------------------
  |  Branch (255:16): [True: 0, False: 0]
  ------------------
  256|      0|            || !ctx->pad) {
  ------------------
  |  Branch (256:16): [True: 0, False: 0]
  ------------------
  257|      0|            ERR_raise(ERR_LIB_PROV, PROV_R_CIPHER_OPERATION_FAILED);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  258|      0|            return 0;
  259|      0|        }
  260|       |
  261|      0|        if (ctx->enc) {
  ------------------
  |  Branch (261:13): [True: 0, False: 0]
  ------------------
  262|      0|            unsigned char padval;
  263|      0|            size_t padnum, loop;
  264|       |
  265|       |            /* Add padding */
  266|       |
  267|      0|            padnum = blksz - (inl % blksz);
  268|       |
  269|      0|            if (outsize < inl + padnum) {
  ------------------
  |  Branch (269:17): [True: 0, False: 0]
  ------------------
  270|      0|                ERR_raise(ERR_LIB_PROV, PROV_R_CIPHER_OPERATION_FAILED);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  271|      0|                return 0;
  272|      0|            }
  273|       |
  274|      0|            if (padnum > MAX_PADDING) {
  ------------------
  |  |  230|      0|#define MAX_PADDING 256
  ------------------
  |  Branch (274:17): [True: 0, False: 0]
  ------------------
  275|      0|                ERR_raise(ERR_LIB_PROV, PROV_R_CIPHER_OPERATION_FAILED);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  276|      0|                return 0;
  277|      0|            }
  278|      0|            padval = (unsigned char)(padnum - 1);
  279|      0|            if (ctx->tlsversion == SSL3_VERSION) {
  ------------------
  |  |   23|      0|#define SSL3_VERSION 0x0300
  ------------------
  |  Branch (279:17): [True: 0, False: 0]
  ------------------
  280|      0|                if (padnum > 1)
  ------------------
  |  Branch (280:21): [True: 0, False: 0]
  ------------------
  281|      0|                    memset(out + inl, 0, padnum - 1);
  282|      0|                *(out + inl + padnum - 1) = padval;
  283|      0|            } else {
  284|       |                /* we need to add 'padnum' padding bytes of value padval */
  285|      0|                for (loop = inl; loop < inl + padnum; loop++)
  ------------------
  |  Branch (285:34): [True: 0, False: 0]
  ------------------
  286|      0|                    out[loop] = padval;
  287|      0|            }
  288|      0|            inl += padnum;
  289|      0|        }
  290|       |
  291|      0|        if ((inl % blksz) != 0) {
  ------------------
  |  Branch (291:13): [True: 0, False: 0]
  ------------------
  292|      0|            ERR_raise(ERR_LIB_PROV, PROV_R_CIPHER_OPERATION_FAILED);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  293|      0|            return 0;
  294|      0|        }
  295|       |
  296|       |        /* Shouldn't normally fail */
  297|      0|        if (!ctx->hw->cipher(ctx, out, in, inl)) {
  ------------------
  |  Branch (297:13): [True: 0, False: 0]
  ------------------
  298|      0|            ERR_raise(ERR_LIB_PROV, PROV_R_CIPHER_OPERATION_FAILED);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  299|      0|            return 0;
  300|      0|        }
  301|       |
  302|      0|        if (ctx->alloced) {
  ------------------
  |  Branch (302:13): [True: 0, False: 0]
  ------------------
  303|      0|            OPENSSL_free(ctx->tlsmac);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  304|      0|            ctx->alloced = 0;
  305|      0|            ctx->tlsmac = NULL;
  306|      0|        }
  307|       |
  308|       |        /* This only fails if padding is publicly invalid */
  309|      0|        *outl = inl;
  310|      0|        if (!ctx->enc
  ------------------
  |  Branch (310:13): [True: 0, False: 0]
  ------------------
  311|      0|            && !ossl_cipher_tlsunpadblock(ctx->libctx, ctx->tlsversion,
  ------------------
  |  Branch (311:16): [True: 0, False: 0]
  ------------------
  312|      0|                out, outl,
  313|      0|                blksz, &ctx->tlsmac, &ctx->alloced,
  314|      0|                ctx->tlsmacsize, 0)) {
  315|      0|            ERR_raise(ERR_LIB_PROV, PROV_R_CIPHER_OPERATION_FAILED);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  316|      0|            return 0;
  317|      0|        }
  318|      0|        return 1;
  319|      0|    }
  320|       |
  321|  6.58k|    if (ctx->bufsz != 0)
  ------------------
  |  Branch (321:9): [True: 0, False: 6.58k]
  ------------------
  322|      0|        nextblocks = ossl_cipher_fillblock(ctx->buf, &ctx->bufsz, blksz,
  323|      0|            &in, &inl);
  324|  6.58k|    else
  325|  6.58k|        nextblocks = inl & ~(blksz - 1);
  326|       |
  327|       |    /*
  328|       |     * If we're decrypting and we end an update on a block boundary we hold
  329|       |     * the last block back in case this is the last update call and the last
  330|       |     * block is padded.
  331|       |     */
  332|  6.58k|    if (ctx->bufsz == blksz && (ctx->enc || inl > 0 || !ctx->pad)) {
  ------------------
  |  Branch (332:9): [True: 0, False: 6.58k]
  |  Branch (332:33): [True: 0, False: 0]
  |  Branch (332:45): [True: 0, False: 0]
  |  Branch (332:56): [True: 0, False: 0]
  ------------------
  333|      0|        if (outsize < blksz) {
  ------------------
  |  Branch (333:13): [True: 0, False: 0]
  ------------------
  334|      0|            ERR_raise(ERR_LIB_PROV, PROV_R_OUTPUT_BUFFER_TOO_SMALL);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  335|      0|            return 0;
  336|      0|        }
  337|      0|        if (!ctx->hw->cipher(ctx, out, ctx->buf, blksz)) {
  ------------------
  |  Branch (337:13): [True: 0, False: 0]
  ------------------
  338|      0|            ERR_raise(ERR_LIB_PROV, PROV_R_CIPHER_OPERATION_FAILED);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  339|      0|            return 0;
  340|      0|        }
  341|      0|        ctx->bufsz = 0;
  342|      0|        outlint = blksz;
  343|      0|        out += blksz;
  344|      0|    }
  345|  6.58k|    if (nextblocks > 0) {
  ------------------
  |  Branch (345:9): [True: 6.58k, False: 0]
  ------------------
  346|  6.58k|        if (!ctx->enc && ctx->pad && nextblocks == inl) {
  ------------------
  |  Branch (346:13): [True: 0, False: 6.58k]
  |  Branch (346:26): [True: 0, False: 0]
  |  Branch (346:38): [True: 0, False: 0]
  ------------------
  347|      0|            if (!ossl_assert(inl >= blksz)) {
  ------------------
  |  |   52|      0|#define ossl_assert(x) ossl_assert_int((x) != 0, "Assertion failed: " #x, \
  |  |   53|      0|    __FILE__, __LINE__)
  ------------------
  |  Branch (347:17): [True: 0, False: 0]
  ------------------
  348|      0|                ERR_raise(ERR_LIB_PROV, PROV_R_OUTPUT_BUFFER_TOO_SMALL);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  349|      0|                return 0;
  350|      0|            }
  351|      0|            nextblocks -= blksz;
  352|      0|        }
  353|  6.58k|        outlint += nextblocks;
  354|  6.58k|        if (outsize < outlint) {
  ------------------
  |  Branch (354:13): [True: 0, False: 6.58k]
  ------------------
  355|      0|            ERR_raise(ERR_LIB_PROV, PROV_R_OUTPUT_BUFFER_TOO_SMALL);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  356|      0|            return 0;
  357|      0|        }
  358|  6.58k|    }
  359|  6.58k|    if (nextblocks > 0) {
  ------------------
  |  Branch (359:9): [True: 6.58k, False: 0]
  ------------------
  360|  6.58k|        if (!ctx->hw->cipher(ctx, out, in, nextblocks)) {
  ------------------
  |  Branch (360:13): [True: 0, False: 6.58k]
  ------------------
  361|      0|            ERR_raise(ERR_LIB_PROV, PROV_R_CIPHER_OPERATION_FAILED);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  362|      0|            return 0;
  363|      0|        }
  364|  6.58k|        in += nextblocks;
  365|  6.58k|        inl -= nextblocks;
  366|  6.58k|    }
  367|  6.58k|    if (inl != 0
  ------------------
  |  Branch (367:9): [True: 0, False: 6.58k]
  ------------------
  368|      0|        && !ossl_cipher_trailingdata(ctx->buf, &ctx->bufsz, blksz, &in, &inl)) {
  ------------------
  |  Branch (368:12): [True: 0, False: 0]
  ------------------
  369|       |        /* ERR_raise already called */
  370|      0|        return 0;
  371|      0|    }
  372|       |
  373|  6.58k|    *outl = outlint;
  374|  6.58k|    return inl == 0;
  375|  6.58k|}
ossl_cipher_generic_stream_update:
  454|  6.53k|{
  455|  6.53k|    PROV_CIPHER_CTX *ctx = (PROV_CIPHER_CTX *)vctx;
  456|       |
  457|  6.53k|    if (!ctx->key_set) {
  ------------------
  |  Branch (457:9): [True: 0, False: 6.53k]
  ------------------
  458|      0|        ERR_raise(ERR_LIB_PROV, PROV_R_NO_KEY_SET);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  459|      0|        return 0;
  460|      0|    }
  461|       |
  462|  6.53k|    if (inl == 0) {
  ------------------
  |  Branch (462:9): [True: 0, False: 6.53k]
  ------------------
  463|      0|        *outl = 0;
  464|      0|        return 1;
  465|      0|    }
  466|       |
  467|  6.53k|    if (outsize < inl) {
  ------------------
  |  Branch (467:9): [True: 0, False: 6.53k]
  ------------------
  468|      0|        ERR_raise(ERR_LIB_PROV, PROV_R_OUTPUT_BUFFER_TOO_SMALL);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  469|      0|        return 0;
  470|      0|    }
  471|       |
  472|  6.53k|    if (!ctx->hw->cipher(ctx, out, in, inl)) {
  ------------------
  |  Branch (472:9): [True: 0, False: 6.53k]
  ------------------
  473|      0|        ERR_raise(ERR_LIB_PROV, PROV_R_CIPHER_OPERATION_FAILED);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  474|      0|        return 0;
  475|      0|    }
  476|       |
  477|  6.53k|    *outl = inl;
  478|  6.53k|    if (!ctx->enc && ctx->tlsversion > 0) {
  ------------------
  |  Branch (478:9): [True: 0, False: 6.53k]
  |  Branch (478:22): [True: 0, False: 0]
  ------------------
  479|       |        /*
  480|       |         * Remove any TLS padding. Only used by cipher_aes_cbc_hmac_sha1_hw.c and
  481|       |         * cipher_aes_cbc_hmac_sha256_hw.c
  482|       |         */
  483|      0|        if (ctx->removetlspad) {
  ------------------
  |  Branch (483:13): [True: 0, False: 0]
  ------------------
  484|       |            /*
  485|       |             * We should have already failed in the cipher() call above if this
  486|       |             * isn't true.
  487|       |             */
  488|      0|            if (!ossl_assert(*outl >= (size_t)(out[inl - 1] + 1)))
  ------------------
  |  |   52|      0|#define ossl_assert(x) ossl_assert_int((x) != 0, "Assertion failed: " #x, \
  |  |   53|      0|    __FILE__, __LINE__)
  ------------------
  |  Branch (488:17): [True: 0, False: 0]
  ------------------
  489|      0|                return 0;
  490|       |            /* The actual padding length */
  491|      0|            *outl -= out[inl - 1] + 1;
  492|      0|        }
  493|       |
  494|       |        /* TLS MAC and explicit IV if relevant. We should have already failed
  495|       |         * in the cipher() call above if *outl is too short.
  496|       |         */
  497|      0|        if (!ossl_assert(*outl >= ctx->removetlsfixed))
  ------------------
  |  |   52|      0|#define ossl_assert(x) ossl_assert_int((x) != 0, "Assertion failed: " #x, \
  |  |   53|      0|    __FILE__, __LINE__)
  ------------------
  |  Branch (497:13): [True: 0, False: 0]
  ------------------
  498|      0|            return 0;
  499|      0|        *outl -= ctx->removetlsfixed;
  500|       |
  501|       |        /* Extract the MAC if there is one */
  502|      0|        if (ctx->tlsmacsize > 0) {
  ------------------
  |  Branch (502:13): [True: 0, False: 0]
  ------------------
  503|      0|            if (*outl < ctx->tlsmacsize)
  ------------------
  |  Branch (503:17): [True: 0, False: 0]
  ------------------
  504|      0|                return 0;
  505|       |
  506|      0|            ctx->tlsmac = out + *outl - ctx->tlsmacsize;
  507|      0|            *outl -= ctx->tlsmacsize;
  508|      0|        }
  509|      0|    }
  510|       |
  511|  6.53k|    return 1;
  512|  6.53k|}
ossl_cipher_common_get_ctx_params:
  559|      8|{
  560|      8|    if (p->ivlen != NULL && !OSSL_PARAM_set_size_t(p->ivlen, ctx->ivlen)) {
  ------------------
  |  Branch (560:9): [True: 2, False: 6]
  |  Branch (560:29): [True: 0, False: 2]
  ------------------
  561|      0|        ERR_raise(ERR_LIB_PROV, PROV_R_FAILED_TO_SET_PARAMETER);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  562|      0|        return 0;
  563|      0|    }
  564|       |
  565|      8|    if (p->pad != NULL && !OSSL_PARAM_set_uint(p->pad, ctx->pad)) {
  ------------------
  |  Branch (565:9): [True: 0, False: 8]
  |  Branch (565:27): [True: 0, False: 0]
  ------------------
  566|      0|        ERR_raise(ERR_LIB_PROV, PROV_R_FAILED_TO_SET_PARAMETER);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  567|      0|        return 0;
  568|      0|    }
  569|       |
  570|      8|    if (p->iv != NULL
  ------------------
  |  Branch (570:9): [True: 0, False: 8]
  ------------------
  571|      0|        && !OSSL_PARAM_set_octet_string_or_ptr(p->iv, ctx->oiv, ctx->ivlen)) {
  ------------------
  |  Branch (571:12): [True: 0, False: 0]
  ------------------
  572|      0|        ERR_raise(ERR_LIB_PROV, PROV_R_FAILED_TO_SET_PARAMETER);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  573|      0|        return 0;
  574|      0|    }
  575|       |
  576|      8|    if (p->updiv != NULL
  ------------------
  |  Branch (576:9): [True: 0, False: 8]
  ------------------
  577|      0|        && !OSSL_PARAM_set_octet_string_or_ptr(p->updiv, ctx->iv, ctx->ivlen)) {
  ------------------
  |  Branch (577:12): [True: 0, False: 0]
  ------------------
  578|      0|        ERR_raise(ERR_LIB_PROV, PROV_R_FAILED_TO_SET_PARAMETER);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  579|      0|        return 0;
  580|      0|    }
  581|       |
  582|      8|    if (p->num != NULL && !OSSL_PARAM_set_uint(p->num, ctx->num)) {
  ------------------
  |  Branch (582:9): [True: 0, False: 8]
  |  Branch (582:27): [True: 0, False: 0]
  ------------------
  583|      0|        ERR_raise(ERR_LIB_PROV, PROV_R_FAILED_TO_SET_PARAMETER);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  584|      0|        return 0;
  585|      0|    }
  586|       |
  587|      8|    if (p->keylen != NULL && !OSSL_PARAM_set_size_t(p->keylen, ctx->keylen)) {
  ------------------
  |  Branch (587:9): [True: 6, False: 2]
  |  Branch (587:30): [True: 0, False: 6]
  ------------------
  588|      0|        ERR_raise(ERR_LIB_PROV, PROV_R_FAILED_TO_SET_PARAMETER);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  589|      0|        return 0;
  590|      0|    }
  591|       |
  592|      8|    if (p->tlsmac != NULL
  ------------------
  |  Branch (592:9): [True: 0, False: 8]
  ------------------
  593|      0|        && !OSSL_PARAM_set_octet_ptr(p->tlsmac, ctx->tlsmac, ctx->tlsmacsize)) {
  ------------------
  |  Branch (593:12): [True: 0, False: 0]
  ------------------
  594|      0|        ERR_raise(ERR_LIB_PROV, PROV_R_FAILED_TO_SET_PARAMETER);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  595|      0|        return 0;
  596|      0|    }
  597|      8|    return 1;
  598|      8|}
ossl_cipher_generic_get_ctx_params:
  601|      8|{
  602|      8|    PROV_CIPHER_CTX *ctx = (PROV_CIPHER_CTX *)vctx;
  603|      8|    struct ossl_cipher_get_ctx_param_list_st p;
  604|       |
  605|      8|    if (ctx == NULL || !cipher_generic_get_ctx_params_decoder(params, &p))
  ------------------
  |  Branch (605:9): [True: 0, False: 8]
  |  Branch (605:24): [True: 0, False: 8]
  ------------------
  606|      0|        return 0;
  607|      8|    return ossl_cipher_common_get_ctx_params(ctx, &p);
  608|      8|}
ossl_cipher_generic_set_ctx_params:
  663|  19.6k|{
  664|  19.6k|    PROV_CIPHER_CTX *ctx = (PROV_CIPHER_CTX *)vctx;
  665|  19.6k|    struct ossl_cipher_set_ctx_param_list_st p;
  666|       |
  667|  19.6k|    if (ossl_param_is_empty(params))
  ------------------
  |  Branch (667:9): [True: 19.6k, False: 0]
  ------------------
  668|  19.6k|        return 1;
  669|       |
  670|      0|    if (ctx == NULL || !cipher_generic_set_ctx_params_decoder(params, &p))
  ------------------
  |  Branch (670:9): [True: 0, False: 0]
  |  Branch (670:24): [True: 0, False: 0]
  ------------------
  671|      0|        return 0;
  672|      0|    return ossl_cipher_common_set_ctx_params(ctx, &p);
  673|      0|}
ossl_cipher_generic_initiv:
  677|  6.53k|{
  678|  6.53k|    if (ivlen != ctx->ivlen
  ------------------
  |  Branch (678:9): [True: 0, False: 6.53k]
  ------------------
  679|  6.53k|        || ivlen > sizeof(ctx->iv)) {
  ------------------
  |  Branch (679:12): [True: 0, False: 6.53k]
  ------------------
  680|      0|        ERR_raise(ERR_LIB_PROV, PROV_R_INVALID_IV_LENGTH);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  681|      0|        return 0;
  682|      0|    }
  683|  6.53k|    ctx->iv_set = 1;
  684|  6.53k|    memcpy(ctx->iv, iv, ivlen);
  685|  6.53k|    memcpy(ctx->oiv, iv, ivlen);
  686|  6.53k|    return 1;
  687|  6.53k|}
ossl_cipher_generic_initkey:
  693|      6|{
  694|      6|    PROV_CIPHER_CTX *ctx = (PROV_CIPHER_CTX *)vctx;
  695|       |
  696|      6|    if ((flags & PROV_CIPHER_FLAG_INVERSE_CIPHER) != 0)
  ------------------
  |  |   46|      6|#define PROV_CIPHER_FLAG_INVERSE_CIPHER 0x0200
  ------------------
  |  Branch (696:9): [True: 0, False: 6]
  ------------------
  697|      0|        ctx->inverse_cipher = 1;
  698|      6|    if ((flags & PROV_CIPHER_FLAG_VARIABLE_LENGTH) != 0)
  ------------------
  |  |   45|      6|#define PROV_CIPHER_FLAG_VARIABLE_LENGTH 0x0100
  ------------------
  |  Branch (698:9): [True: 0, False: 6]
  ------------------
  699|      0|        ctx->variable_keylength = 1;
  700|       |
  701|      6|    ctx->pad = 1;
  702|      6|    ctx->keylen = ((kbits) / 8);
  703|      6|    ctx->ivlen = ((ivbits) / 8);
  704|      6|    ctx->hw = hw;
  705|      6|    ctx->mode = mode;
  706|      6|    ctx->blocksize = blkbits / 8;
  707|      6|    if (provctx != NULL)
  ------------------
  |  Branch (707:9): [True: 6, False: 0]
  ------------------
  708|      6|        ctx->libctx = PROV_LIBCTX_OF(provctx); /* used for rand */
  ------------------
  |  |   31|      6|    ossl_prov_ctx_get0_libctx((provctx))
  ------------------
  709|      6|}
ciphercommon.c:cipher_generic_init_internal:
  155|  19.6k|{
  156|  19.6k|    ctx->num = 0;
  157|  19.6k|    ctx->bufsz = 0;
  158|  19.6k|    ctx->updated = 0;
  159|  19.6k|    ctx->enc = enc ? 1 : 0;
  ------------------
  |  Branch (159:16): [True: 19.6k, False: 0]
  ------------------
  160|       |
  161|  19.6k|    if (!ossl_prov_is_running())
  ------------------
  |  Branch (161:9): [True: 0, False: 19.6k]
  ------------------
  162|      0|        return 0;
  163|       |
  164|  19.6k|    if (iv != NULL && ctx->mode != EVP_CIPH_ECB_MODE) {
  ------------------
  |  |  210|  6.53k|#define EVP_CIPH_ECB_MODE 0x1
  ------------------
  |  Branch (164:9): [True: 6.53k, False: 13.0k]
  |  Branch (164:23): [True: 6.53k, False: 0]
  ------------------
  165|  6.53k|        if (!ossl_cipher_generic_initiv(ctx, iv, ivlen))
  ------------------
  |  Branch (165:13): [True: 0, False: 6.53k]
  ------------------
  166|      0|            return 0;
  167|  6.53k|    }
  168|  19.6k|    if (iv == NULL && ctx->iv_set
  ------------------
  |  Branch (168:9): [True: 13.0k, False: 6.53k]
  |  Branch (168:23): [True: 6.53k, False: 6.55k]
  ------------------
  169|  6.53k|        && (ctx->mode == EVP_CIPH_CBC_MODE
  ------------------
  |  |  211|  13.0k|#define EVP_CIPH_CBC_MODE 0x2
  ------------------
  |  Branch (169:13): [True: 0, False: 6.53k]
  ------------------
  170|  6.53k|            || ctx->mode == EVP_CIPH_CFB_MODE
  ------------------
  |  |  212|  13.0k|#define EVP_CIPH_CFB_MODE 0x3
  ------------------
  |  Branch (170:16): [True: 0, False: 6.53k]
  ------------------
  171|  6.53k|            || ctx->mode == EVP_CIPH_OFB_MODE))
  ------------------
  |  |  213|  6.53k|#define EVP_CIPH_OFB_MODE 0x4
  ------------------
  |  Branch (171:16): [True: 0, False: 6.53k]
  ------------------
  172|       |        /* reset IV for these modes to keep compatibility with 1.1.1 */
  173|      0|        memcpy(ctx->iv, ctx->oiv, ctx->ivlen);
  174|       |
  175|  19.6k|    if (key != NULL) {
  ------------------
  |  Branch (175:9): [True: 13.0k, False: 6.54k]
  ------------------
  176|  13.0k|        if (ctx->variable_keylength == 0) {
  ------------------
  |  Branch (176:13): [True: 13.0k, False: 0]
  ------------------
  177|  13.0k|            if (keylen != ctx->keylen) {
  ------------------
  |  Branch (177:17): [True: 0, False: 13.0k]
  ------------------
  178|      0|                ERR_raise(ERR_LIB_PROV, PROV_R_INVALID_KEY_LENGTH);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  179|      0|                return 0;
  180|      0|            }
  181|  13.0k|        } else {
  182|      0|            ctx->keylen = keylen;
  183|      0|        }
  184|  13.0k|        if (!ctx->hw->init(ctx, key, ctx->keylen))
  ------------------
  |  Branch (184:13): [True: 0, False: 13.0k]
  ------------------
  185|      0|            return 0;
  186|  13.0k|        ctx->key_set = 1;
  187|  13.0k|    }
  188|  19.6k|    return ossl_cipher_generic_set_ctx_params(ctx, params);
  189|  19.6k|}

ciphercommon.c:ossl_cipher_generic_get_params_decoder:
   47|    130|{
   48|    130|    const char *s;
   49|       |
   50|    130|    memset(r, 0, sizeof(*r));
   51|    130|    if (p != NULL)
  ------------------
  |  Branch (51:9): [True: 130, False: 0]
  ------------------
   52|  1.43k|        for (; (s = p->key) != NULL; p++)
  ------------------
  |  Branch (52:16): [True: 1.30k, False: 130]
  ------------------
   53|  1.30k|            switch(s[0]) {
   54|      0|            default:
  ------------------
  |  Branch (54:13): [True: 0, False: 1.30k]
  ------------------
   55|      0|                break;
   56|    130|            case 'a':
  ------------------
  |  Branch (56:13): [True: 130, False: 1.17k]
  ------------------
   57|    130|                if (ossl_likely(strcmp("ead", s + 1) == 0)) {
  ------------------
  |  |   22|    130|#define ossl_likely(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (22:24): [True: 130, False: 0]
  |  |  ------------------
  ------------------
   58|       |                    /* OSSL_CIPHER_PARAM_AEAD */
   59|    130|                    if (ossl_unlikely(r->aead != NULL)) {
  ------------------
  |  |   23|    130|#define ossl_unlikely(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (23:26): [True: 0, False: 130]
  |  |  ------------------
  ------------------
   60|      0|                        ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  ------------------
  |  |  361|      0|        ERR_set_error)
  ------------------
                                      ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  101|      0|#define ERR_LIB_PROV 57
  ------------------
                                      ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  142|      0|#define PROV_R_REPEATED_PARAMETER 252
  ------------------
   61|      0|                                       "param %s is repeated", s);
   62|      0|                        return 0;
   63|      0|                    }
   64|    130|                    r->aead = (OSSL_PARAM *)p;
   65|    130|                }
   66|    130|                break;
   67|    130|            case 'b':
  ------------------
  |  Branch (67:13): [True: 130, False: 1.17k]
  ------------------
   68|    130|                if (ossl_likely(strcmp("locksize", s + 1) == 0)) {
  ------------------
  |  |   22|    130|#define ossl_likely(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (22:24): [True: 130, False: 0]
  |  |  ------------------
  ------------------
   69|       |                    /* OSSL_CIPHER_PARAM_BLOCK_SIZE */
   70|    130|                    if (ossl_unlikely(r->bsize != NULL)) {
  ------------------
  |  |   23|    130|#define ossl_unlikely(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (23:26): [True: 0, False: 130]
  |  |  ------------------
  ------------------
   71|      0|                        ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  ------------------
  |  |  361|      0|        ERR_set_error)
  ------------------
                                      ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  101|      0|#define ERR_LIB_PROV 57
  ------------------
                                      ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  142|      0|#define PROV_R_REPEATED_PARAMETER 252
  ------------------
   72|      0|                                       "param %s is repeated", s);
   73|      0|                        return 0;
   74|      0|                    }
   75|    130|                    r->bsize = (OSSL_PARAM *)p;
   76|    130|                }
   77|    130|                break;
   78|    260|            case 'c':
  ------------------
  |  Branch (78:13): [True: 260, False: 1.04k]
  ------------------
   79|    260|                switch(s[1]) {
   80|      0|                default:
  ------------------
  |  Branch (80:17): [True: 0, False: 260]
  ------------------
   81|      0|                    break;
   82|    130|                case 't':
  ------------------
  |  Branch (82:17): [True: 130, False: 130]
  ------------------
   83|    130|                    if (ossl_likely(strcmp("s", s + 2) == 0)) {
  ------------------
  |  |   22|    130|#define ossl_likely(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (22:24): [True: 130, False: 0]
  |  |  ------------------
  ------------------
   84|       |                        /* OSSL_CIPHER_PARAM_CTS */
   85|    130|                        if (ossl_unlikely(r->cts != NULL)) {
  ------------------
  |  |   23|    130|#define ossl_unlikely(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (23:26): [True: 0, False: 130]
  |  |  ------------------
  ------------------
   86|      0|                            ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  ------------------
  |  |  361|      0|        ERR_set_error)
  ------------------
                                          ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  101|      0|#define ERR_LIB_PROV 57
  ------------------
                                          ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  142|      0|#define PROV_R_REPEATED_PARAMETER 252
  ------------------
   87|      0|                                           "param %s is repeated", s);
   88|      0|                            return 0;
   89|      0|                        }
   90|    130|                        r->cts = (OSSL_PARAM *)p;
   91|    130|                    }
   92|    130|                    break;
   93|    130|                case 'u':
  ------------------
  |  Branch (93:17): [True: 130, False: 130]
  ------------------
   94|    130|                    if (ossl_likely(strcmp("stom-iv", s + 2) == 0)) {
  ------------------
  |  |   22|    130|#define ossl_likely(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (22:24): [True: 130, False: 0]
  |  |  ------------------
  ------------------
   95|       |                        /* OSSL_CIPHER_PARAM_CUSTOM_IV */
   96|    130|                        if (ossl_unlikely(r->custiv != NULL)) {
  ------------------
  |  |   23|    130|#define ossl_unlikely(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (23:26): [True: 0, False: 130]
  |  |  ------------------
  ------------------
   97|      0|                            ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  ------------------
  |  |  361|      0|        ERR_set_error)
  ------------------
                                          ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  101|      0|#define ERR_LIB_PROV 57
  ------------------
                                          ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  142|      0|#define PROV_R_REPEATED_PARAMETER 252
  ------------------
   98|      0|                                           "param %s is repeated", s);
   99|      0|                            return 0;
  100|      0|                        }
  101|    130|                        r->custiv = (OSSL_PARAM *)p;
  102|    130|                    }
  103|    260|                }
  104|    260|                break;
  105|    260|            case 'e':
  ------------------
  |  Branch (105:13): [True: 130, False: 1.17k]
  ------------------
  106|    130|                if (ossl_likely(strcmp("ncrypt-then-mac", s + 1) == 0)) {
  ------------------
  |  |   22|    130|#define ossl_likely(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (22:24): [True: 130, False: 0]
  |  |  ------------------
  ------------------
  107|       |                    /* OSSL_CIPHER_PARAM_ENCRYPT_THEN_MAC */
  108|    130|                    if (ossl_unlikely(r->etm != NULL)) {
  ------------------
  |  |   23|    130|#define ossl_unlikely(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (23:26): [True: 0, False: 130]
  |  |  ------------------
  ------------------
  109|      0|                        ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  ------------------
  |  |  361|      0|        ERR_set_error)
  ------------------
                                      ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  101|      0|#define ERR_LIB_PROV 57
  ------------------
                                      ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  142|      0|#define PROV_R_REPEATED_PARAMETER 252
  ------------------
  110|      0|                                       "param %s is repeated", s);
  111|      0|                        return 0;
  112|      0|                    }
  113|    130|                    r->etm = (OSSL_PARAM *)p;
  114|    130|                }
  115|    130|                break;
  116|    130|            case 'h':
  ------------------
  |  Branch (116:13): [True: 130, False: 1.17k]
  ------------------
  117|    130|                if (ossl_likely(strcmp("as-randkey", s + 1) == 0)) {
  ------------------
  |  |   22|    130|#define ossl_likely(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (22:24): [True: 130, False: 0]
  |  |  ------------------
  ------------------
  118|       |                    /* OSSL_CIPHER_PARAM_HAS_RAND_KEY */
  119|    130|                    if (ossl_unlikely(r->rand != NULL)) {
  ------------------
  |  |   23|    130|#define ossl_unlikely(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (23:26): [True: 0, False: 130]
  |  |  ------------------
  ------------------
  120|      0|                        ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  ------------------
  |  |  361|      0|        ERR_set_error)
  ------------------
                                      ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  101|      0|#define ERR_LIB_PROV 57
  ------------------
                                      ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  142|      0|#define PROV_R_REPEATED_PARAMETER 252
  ------------------
  121|      0|                                       "param %s is repeated", s);
  122|      0|                        return 0;
  123|      0|                    }
  124|    130|                    r->rand = (OSSL_PARAM *)p;
  125|    130|                }
  126|    130|                break;
  127|    130|            case 'i':
  ------------------
  |  Branch (127:13): [True: 130, False: 1.17k]
  ------------------
  128|    130|                if (ossl_likely(strcmp("vlen", s + 1) == 0)) {
  ------------------
  |  |   22|    130|#define ossl_likely(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (22:24): [True: 130, False: 0]
  |  |  ------------------
  ------------------
  129|       |                    /* OSSL_CIPHER_PARAM_IVLEN */
  130|    130|                    if (ossl_unlikely(r->ivlen != NULL)) {
  ------------------
  |  |   23|    130|#define ossl_unlikely(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (23:26): [True: 0, False: 130]
  |  |  ------------------
  ------------------
  131|      0|                        ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  ------------------
  |  |  361|      0|        ERR_set_error)
  ------------------
                                      ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  101|      0|#define ERR_LIB_PROV 57
  ------------------
                                      ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  142|      0|#define PROV_R_REPEATED_PARAMETER 252
  ------------------
  132|      0|                                       "param %s is repeated", s);
  133|      0|                        return 0;
  134|      0|                    }
  135|    130|                    r->ivlen = (OSSL_PARAM *)p;
  136|    130|                }
  137|    130|                break;
  138|    130|            case 'k':
  ------------------
  |  Branch (138:13): [True: 130, False: 1.17k]
  ------------------
  139|    130|                if (ossl_likely(strcmp("eylen", s + 1) == 0)) {
  ------------------
  |  |   22|    130|#define ossl_likely(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (22:24): [True: 130, False: 0]
  |  |  ------------------
  ------------------
  140|       |                    /* OSSL_CIPHER_PARAM_KEYLEN */
  141|    130|                    if (ossl_unlikely(r->keylen != NULL)) {
  ------------------
  |  |   23|    130|#define ossl_unlikely(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (23:26): [True: 0, False: 130]
  |  |  ------------------
  ------------------
  142|      0|                        ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  ------------------
  |  |  361|      0|        ERR_set_error)
  ------------------
                                      ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  101|      0|#define ERR_LIB_PROV 57
  ------------------
                                      ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  142|      0|#define PROV_R_REPEATED_PARAMETER 252
  ------------------
  143|      0|                                       "param %s is repeated", s);
  144|      0|                        return 0;
  145|      0|                    }
  146|    130|                    r->keylen = (OSSL_PARAM *)p;
  147|    130|                }
  148|    130|                break;
  149|    130|            case 'm':
  ------------------
  |  Branch (149:13): [True: 130, False: 1.17k]
  ------------------
  150|    130|                if (ossl_likely(strcmp("ode", s + 1) == 0)) {
  ------------------
  |  |   22|    130|#define ossl_likely(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (22:24): [True: 130, False: 0]
  |  |  ------------------
  ------------------
  151|       |                    /* OSSL_CIPHER_PARAM_MODE */
  152|    130|                    if (ossl_unlikely(r->mode != NULL)) {
  ------------------
  |  |   23|    130|#define ossl_unlikely(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (23:26): [True: 0, False: 130]
  |  |  ------------------
  ------------------
  153|      0|                        ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  ------------------
  |  |  361|      0|        ERR_set_error)
  ------------------
                                      ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  101|      0|#define ERR_LIB_PROV 57
  ------------------
                                      ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  142|      0|#define PROV_R_REPEATED_PARAMETER 252
  ------------------
  154|      0|                                       "param %s is repeated", s);
  155|      0|                        return 0;
  156|      0|                    }
  157|    130|                    r->mode = (OSSL_PARAM *)p;
  158|    130|                }
  159|    130|                break;
  160|    130|            case 't':
  ------------------
  |  Branch (160:13): [True: 130, False: 1.17k]
  ------------------
  161|    130|                if (ossl_likely(strcmp("ls-multi", s + 1) == 0)) {
  ------------------
  |  |   22|    130|#define ossl_likely(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (22:24): [True: 130, False: 0]
  |  |  ------------------
  ------------------
  162|       |                    /* OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK */
  163|    130|                    if (ossl_unlikely(r->mb != NULL)) {
  ------------------
  |  |   23|    130|#define ossl_unlikely(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (23:26): [True: 0, False: 130]
  |  |  ------------------
  ------------------
  164|      0|                        ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  ------------------
  |  |  361|      0|        ERR_set_error)
  ------------------
                                      ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  101|      0|#define ERR_LIB_PROV 57
  ------------------
                                      ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  142|      0|#define PROV_R_REPEATED_PARAMETER 252
  ------------------
  165|      0|                                       "param %s is repeated", s);
  166|      0|                        return 0;
  167|      0|                    }
  168|    130|                    r->mb = (OSSL_PARAM *)p;
  169|    130|                }
  170|  1.30k|            }
  171|    130|    return 1;
  172|    130|}
ciphercommon.c:cipher_generic_get_ctx_params_decoder:
  205|      8|{
  206|      8|    const char *s;
  207|       |
  208|      8|    memset(r, 0, sizeof(*r));
  209|      8|    if (p != NULL)
  ------------------
  |  Branch (209:9): [True: 8, False: 0]
  ------------------
  210|     16|        for (; (s = p->key) != NULL; p++)
  ------------------
  |  Branch (210:16): [True: 8, False: 8]
  ------------------
  211|      8|            switch(s[0]) {
  212|      0|            default:
  ------------------
  |  Branch (212:13): [True: 0, False: 8]
  ------------------
  213|      0|                break;
  214|      2|            case 'i':
  ------------------
  |  Branch (214:13): [True: 2, False: 6]
  ------------------
  215|      2|                switch(s[1]) {
  216|      0|                default:
  ------------------
  |  Branch (216:17): [True: 0, False: 2]
  ------------------
  217|      0|                    break;
  218|      2|                case 'v':
  ------------------
  |  Branch (218:17): [True: 2, False: 0]
  ------------------
  219|      2|                    switch(s[2]) {
  220|      0|                    default:
  ------------------
  |  Branch (220:21): [True: 0, False: 2]
  ------------------
  221|      0|                        break;
  222|      2|                    case 'l':
  ------------------
  |  Branch (222:21): [True: 2, False: 0]
  ------------------
  223|      2|                        if (ossl_likely(strcmp("en", s + 3) == 0)) {
  ------------------
  |  |   22|      2|#define ossl_likely(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (22:24): [True: 2, False: 0]
  |  |  ------------------
  ------------------
  224|       |                            /* OSSL_CIPHER_PARAM_IVLEN */
  225|      2|                            if (ossl_unlikely(r->ivlen != NULL)) {
  ------------------
  |  |   23|      2|#define ossl_unlikely(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (23:26): [True: 0, False: 2]
  |  |  ------------------
  ------------------
  226|      0|                                ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  ------------------
  |  |  361|      0|        ERR_set_error)
  ------------------
                                              ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  101|      0|#define ERR_LIB_PROV 57
  ------------------
                                              ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  142|      0|#define PROV_R_REPEATED_PARAMETER 252
  ------------------
  227|      0|                                               "param %s is repeated", s);
  228|      0|                                return 0;
  229|      0|                            }
  230|      2|                            r->ivlen = (OSSL_PARAM *)p;
  231|      2|                        }
  232|      2|                        break;
  233|      2|                    case '\0':
  ------------------
  |  Branch (233:21): [True: 0, False: 2]
  ------------------
  234|      0|                        if (ossl_unlikely(r->iv != NULL)) {
  ------------------
  |  |   23|      0|#define ossl_unlikely(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (23:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  235|      0|                            ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  ------------------
  |  |  361|      0|        ERR_set_error)
  ------------------
                                          ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  101|      0|#define ERR_LIB_PROV 57
  ------------------
                                          ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  142|      0|#define PROV_R_REPEATED_PARAMETER 252
  ------------------
  236|      0|                                           "param %s is repeated", s);
  237|      0|                            return 0;
  238|      0|                        }
  239|      0|                        r->iv = (OSSL_PARAM *)p;
  240|      2|                    }
  241|      2|                }
  242|      2|                break;
  243|      6|            case 'k':
  ------------------
  |  Branch (243:13): [True: 6, False: 2]
  ------------------
  244|      6|                if (ossl_likely(strcmp("eylen", s + 1) == 0)) {
  ------------------
  |  |   22|      6|#define ossl_likely(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (22:24): [True: 6, False: 0]
  |  |  ------------------
  ------------------
  245|       |                    /* OSSL_CIPHER_PARAM_KEYLEN */
  246|      6|                    if (ossl_unlikely(r->keylen != NULL)) {
  ------------------
  |  |   23|      6|#define ossl_unlikely(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (23:26): [True: 0, False: 6]
  |  |  ------------------
  ------------------
  247|      0|                        ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  ------------------
  |  |  361|      0|        ERR_set_error)
  ------------------
                                      ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  101|      0|#define ERR_LIB_PROV 57
  ------------------
                                      ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  142|      0|#define PROV_R_REPEATED_PARAMETER 252
  ------------------
  248|      0|                                       "param %s is repeated", s);
  249|      0|                        return 0;
  250|      0|                    }
  251|      6|                    r->keylen = (OSSL_PARAM *)p;
  252|      6|                }
  253|      6|                break;
  254|      6|            case 'n':
  ------------------
  |  Branch (254:13): [True: 0, False: 8]
  ------------------
  255|      0|                if (ossl_likely(strcmp("um", s + 1) == 0)) {
  ------------------
  |  |   22|      0|#define ossl_likely(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (22:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  256|       |                    /* OSSL_CIPHER_PARAM_NUM */
  257|      0|                    if (ossl_unlikely(r->num != NULL)) {
  ------------------
  |  |   23|      0|#define ossl_unlikely(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (23:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  258|      0|                        ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  ------------------
  |  |  361|      0|        ERR_set_error)
  ------------------
                                      ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  101|      0|#define ERR_LIB_PROV 57
  ------------------
                                      ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  142|      0|#define PROV_R_REPEATED_PARAMETER 252
  ------------------
  259|      0|                                       "param %s is repeated", s);
  260|      0|                        return 0;
  261|      0|                    }
  262|      0|                    r->num = (OSSL_PARAM *)p;
  263|      0|                }
  264|      0|                break;
  265|      0|            case 'p':
  ------------------
  |  Branch (265:13): [True: 0, False: 8]
  ------------------
  266|      0|                if (ossl_likely(strcmp("adding", s + 1) == 0)) {
  ------------------
  |  |   22|      0|#define ossl_likely(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (22:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  267|       |                    /* OSSL_CIPHER_PARAM_PADDING */
  268|      0|                    if (ossl_unlikely(r->pad != NULL)) {
  ------------------
  |  |   23|      0|#define ossl_unlikely(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (23:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  269|      0|                        ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  ------------------
  |  |  361|      0|        ERR_set_error)
  ------------------
                                      ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  101|      0|#define ERR_LIB_PROV 57
  ------------------
                                      ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  142|      0|#define PROV_R_REPEATED_PARAMETER 252
  ------------------
  270|      0|                                       "param %s is repeated", s);
  271|      0|                        return 0;
  272|      0|                    }
  273|      0|                    r->pad = (OSSL_PARAM *)p;
  274|      0|                }
  275|      0|                break;
  276|      0|            case 't':
  ------------------
  |  Branch (276:13): [True: 0, False: 8]
  ------------------
  277|      0|                if (ossl_likely(strcmp("ls-mac", s + 1) == 0)) {
  ------------------
  |  |   22|      0|#define ossl_likely(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (22:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  278|       |                    /* OSSL_CIPHER_PARAM_TLS_MAC */
  279|      0|                    if (ossl_unlikely(r->tlsmac != NULL)) {
  ------------------
  |  |   23|      0|#define ossl_unlikely(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (23:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  280|      0|                        ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  ------------------
  |  |  361|      0|        ERR_set_error)
  ------------------
                                      ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  101|      0|#define ERR_LIB_PROV 57
  ------------------
                                      ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  142|      0|#define PROV_R_REPEATED_PARAMETER 252
  ------------------
  281|      0|                                       "param %s is repeated", s);
  282|      0|                        return 0;
  283|      0|                    }
  284|      0|                    r->tlsmac = (OSSL_PARAM *)p;
  285|      0|                }
  286|      0|                break;
  287|      0|            case 'u':
  ------------------
  |  Branch (287:13): [True: 0, False: 8]
  ------------------
  288|      0|                if (ossl_likely(strcmp("pdated-iv", s + 1) == 0)) {
  ------------------
  |  |   22|      0|#define ossl_likely(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (22:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  289|       |                    /* OSSL_CIPHER_PARAM_UPDATED_IV */
  290|      0|                    if (ossl_unlikely(r->updiv != NULL)) {
  ------------------
  |  |   23|      0|#define ossl_unlikely(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (23:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  291|      0|                        ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  ------------------
  |  |  361|      0|        ERR_set_error)
  ------------------
                                      ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  101|      0|#define ERR_LIB_PROV 57
  ------------------
                                      ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  142|      0|#define PROV_R_REPEATED_PARAMETER 252
  ------------------
  292|      0|                                       "param %s is repeated", s);
  293|      0|                        return 0;
  294|      0|                    }
  295|      0|                    r->updiv = (OSSL_PARAM *)p;
  296|      0|                }
  297|      8|            }
  298|      8|    return 1;
  299|      8|}

ossl_ccm_gettable_ctx_params:
  150|      7|{
  151|      7|    return ossl_cipher_ccm_get_ctx_params_list;
  152|      7|}

ossl_gcm_gettable_ctx_params:
  149|      7|{
  150|      7|    return ossl_cipher_gcm_get_ctx_params_list;
  151|      7|}

ossl_cipher_hw_generic_ctr:
  112|  6.53k|{
  113|  6.53k|    unsigned int num = dat->num;
  114|       |
  115|  6.53k|    if (dat->stream.ctr)
  ------------------
  |  Branch (115:9): [True: 6.53k, False: 0]
  ------------------
  116|  6.53k|        CRYPTO_ctr128_encrypt_ctr32(in, out, len, dat->ks, dat->iv, dat->buf,
  117|  6.53k|            &num, dat->stream.ctr);
  118|      0|    else
  119|      0|        CRYPTO_ctr128_encrypt(in, out, len, dat->ks, dat->iv, dat->buf,
  120|      0|            &num, dat->block);
  121|  6.53k|    dat->num = num;
  122|       |
  123|  6.53k|    return 1;
  124|  6.53k|}

cipher_aes.c:aes_256_ecb_get_params:
  213|      1|    {                                                                            \
  214|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  210|      1|#define EVP_CIPH_ECB_MODE 0x1
  ------------------
  215|      1|            flags, kbits, blkbits, ivbits);                                      \
  216|      1|    }                                                                            \
cipher_aes.c:aes_192_ecb_get_params:
  213|      1|    {                                                                            \
  214|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  210|      1|#define EVP_CIPH_ECB_MODE 0x1
  ------------------
  215|      1|            flags, kbits, blkbits, ivbits);                                      \
  216|      1|    }                                                                            \
cipher_aes.c:aes_128_ecb_get_params:
  213|      1|    {                                                                            \
  214|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  210|      1|#define EVP_CIPH_ECB_MODE 0x1
  ------------------
  215|      1|            flags, kbits, blkbits, ivbits);                                      \
  216|      1|    }                                                                            \
cipher_aes.c:aes_256_cbc_get_params:
  213|      1|    {                                                                            \
  214|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  211|      1|#define EVP_CIPH_CBC_MODE 0x2
  ------------------
  215|      1|            flags, kbits, blkbits, ivbits);                                      \
  216|      1|    }                                                                            \
cipher_aes.c:aes_192_cbc_get_params:
  213|      1|    {                                                                            \
  214|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  211|      1|#define EVP_CIPH_CBC_MODE 0x2
  ------------------
  215|      1|            flags, kbits, blkbits, ivbits);                                      \
  216|      1|    }                                                                            \
cipher_aes.c:aes_128_cbc_get_params:
  213|      1|    {                                                                            \
  214|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  211|      1|#define EVP_CIPH_CBC_MODE 0x2
  ------------------
  215|      1|            flags, kbits, blkbits, ivbits);                                      \
  216|      1|    }                                                                            \
cipher_aes.c:aes_256_ofb_get_params:
  213|      1|    {                                                                            \
  214|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  213|      1|#define EVP_CIPH_OFB_MODE 0x4
  ------------------
  215|      1|            flags, kbits, blkbits, ivbits);                                      \
  216|      1|    }                                                                            \
cipher_aes.c:aes_192_ofb_get_params:
  213|      1|    {                                                                            \
  214|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  213|      1|#define EVP_CIPH_OFB_MODE 0x4
  ------------------
  215|      1|            flags, kbits, blkbits, ivbits);                                      \
  216|      1|    }                                                                            \
cipher_aes.c:aes_128_ofb_get_params:
  213|      1|    {                                                                            \
  214|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  213|      1|#define EVP_CIPH_OFB_MODE 0x4
  ------------------
  215|      1|            flags, kbits, blkbits, ivbits);                                      \
  216|      1|    }                                                                            \
cipher_aes.c:aes_256_cfb_get_params:
  213|      1|    {                                                                            \
  214|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  212|      1|#define EVP_CIPH_CFB_MODE 0x3
  ------------------
  215|      1|            flags, kbits, blkbits, ivbits);                                      \
  216|      1|    }                                                                            \
cipher_aes.c:aes_192_cfb_get_params:
  213|      1|    {                                                                            \
  214|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  212|      1|#define EVP_CIPH_CFB_MODE 0x3
  ------------------
  215|      1|            flags, kbits, blkbits, ivbits);                                      \
  216|      1|    }                                                                            \
cipher_aes.c:aes_128_cfb_get_params:
  213|      1|    {                                                                            \
  214|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  212|      1|#define EVP_CIPH_CFB_MODE 0x3
  ------------------
  215|      1|            flags, kbits, blkbits, ivbits);                                      \
  216|      1|    }                                                                            \
cipher_aes.c:aes_256_cfb1_get_params:
  213|      1|    {                                                                            \
  214|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  212|      1|#define EVP_CIPH_CFB_MODE 0x3
  ------------------
  215|      1|            flags, kbits, blkbits, ivbits);                                      \
  216|      1|    }                                                                            \
cipher_aes.c:aes_192_cfb1_get_params:
  213|      1|    {                                                                            \
  214|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  212|      1|#define EVP_CIPH_CFB_MODE 0x3
  ------------------
  215|      1|            flags, kbits, blkbits, ivbits);                                      \
  216|      1|    }                                                                            \
cipher_aes.c:aes_128_cfb1_get_params:
  213|      1|    {                                                                            \
  214|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  212|      1|#define EVP_CIPH_CFB_MODE 0x3
  ------------------
  215|      1|            flags, kbits, blkbits, ivbits);                                      \
  216|      1|    }                                                                            \
cipher_aes.c:aes_256_cfb8_get_params:
  213|      1|    {                                                                            \
  214|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  212|      1|#define EVP_CIPH_CFB_MODE 0x3
  ------------------
  215|      1|            flags, kbits, blkbits, ivbits);                                      \
  216|      1|    }                                                                            \
cipher_aes.c:aes_192_cfb8_get_params:
  213|      1|    {                                                                            \
  214|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  212|      1|#define EVP_CIPH_CFB_MODE 0x3
  ------------------
  215|      1|            flags, kbits, blkbits, ivbits);                                      \
  216|      1|    }                                                                            \
cipher_aes.c:aes_128_cfb8_get_params:
  213|      1|    {                                                                            \
  214|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  212|      1|#define EVP_CIPH_CFB_MODE 0x3
  ------------------
  215|      1|            flags, kbits, blkbits, ivbits);                                      \
  216|      1|    }                                                                            \
cipher_aes.c:aes_256_ctr_get_params:
  213|      1|    {                                                                            \
  214|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  214|      1|#define EVP_CIPH_CTR_MODE 0x5
  ------------------
  215|      1|            flags, kbits, blkbits, ivbits);                                      \
  216|      1|    }                                                                            \
cipher_aes.c:aes_192_ctr_get_params:
  213|      1|    {                                                                            \
  214|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  214|      1|#define EVP_CIPH_CTR_MODE 0x5
  ------------------
  215|      1|            flags, kbits, blkbits, ivbits);                                      \
  216|      1|    }                                                                            \
cipher_aes.c:aes_128_ctr_get_params:
  213|      1|    {                                                                            \
  214|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  214|      1|#define EVP_CIPH_CTR_MODE 0x5
  ------------------
  215|      1|            flags, kbits, blkbits, ivbits);                                      \
  216|      1|    }                                                                            \
cipher_aes.c:aes_cbc_cts_gettable_ctx_params:
  364|      3|    {                                                                    \
  365|      3|        return name##_known_gettable_ctx_params;                         \
  366|      3|    }
cipher_aria.c:aria_256_ecb_get_params:
  213|      1|    {                                                                            \
  214|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  210|      1|#define EVP_CIPH_ECB_MODE 0x1
  ------------------
  215|      1|            flags, kbits, blkbits, ivbits);                                      \
  216|      1|    }                                                                            \
cipher_aria.c:aria_192_ecb_get_params:
  213|      1|    {                                                                            \
  214|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  210|      1|#define EVP_CIPH_ECB_MODE 0x1
  ------------------
  215|      1|            flags, kbits, blkbits, ivbits);                                      \
  216|      1|    }                                                                            \
cipher_aria.c:aria_128_ecb_get_params:
  213|      1|    {                                                                            \
  214|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  210|      1|#define EVP_CIPH_ECB_MODE 0x1
  ------------------
  215|      1|            flags, kbits, blkbits, ivbits);                                      \
  216|      1|    }                                                                            \
cipher_aria.c:aria_256_cbc_get_params:
  213|      1|    {                                                                            \
  214|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  211|      1|#define EVP_CIPH_CBC_MODE 0x2
  ------------------
  215|      1|            flags, kbits, blkbits, ivbits);                                      \
  216|      1|    }                                                                            \
cipher_aria.c:aria_192_cbc_get_params:
  213|      1|    {                                                                            \
  214|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  211|      1|#define EVP_CIPH_CBC_MODE 0x2
  ------------------
  215|      1|            flags, kbits, blkbits, ivbits);                                      \
  216|      1|    }                                                                            \
cipher_aria.c:aria_128_cbc_get_params:
  213|      1|    {                                                                            \
  214|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  211|      1|#define EVP_CIPH_CBC_MODE 0x2
  ------------------
  215|      1|            flags, kbits, blkbits, ivbits);                                      \
  216|      1|    }                                                                            \
cipher_aria.c:aria_256_ofb_get_params:
  213|      1|    {                                                                            \
  214|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  213|      1|#define EVP_CIPH_OFB_MODE 0x4
  ------------------
  215|      1|            flags, kbits, blkbits, ivbits);                                      \
  216|      1|    }                                                                            \
cipher_aria.c:aria_192_ofb_get_params:
  213|      1|    {                                                                            \
  214|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  213|      1|#define EVP_CIPH_OFB_MODE 0x4
  ------------------
  215|      1|            flags, kbits, blkbits, ivbits);                                      \
  216|      1|    }                                                                            \
cipher_aria.c:aria_128_ofb_get_params:
  213|      1|    {                                                                            \
  214|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  213|      1|#define EVP_CIPH_OFB_MODE 0x4
  ------------------
  215|      1|            flags, kbits, blkbits, ivbits);                                      \
  216|      1|    }                                                                            \
cipher_aria.c:aria_256_cfb_get_params:
  213|      1|    {                                                                            \
  214|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  212|      1|#define EVP_CIPH_CFB_MODE 0x3
  ------------------
  215|      1|            flags, kbits, blkbits, ivbits);                                      \
  216|      1|    }                                                                            \
cipher_aria.c:aria_192_cfb_get_params:
  213|      1|    {                                                                            \
  214|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  212|      1|#define EVP_CIPH_CFB_MODE 0x3
  ------------------
  215|      1|            flags, kbits, blkbits, ivbits);                                      \
  216|      1|    }                                                                            \
cipher_aria.c:aria_128_cfb_get_params:
  213|      1|    {                                                                            \
  214|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  212|      1|#define EVP_CIPH_CFB_MODE 0x3
  ------------------
  215|      1|            flags, kbits, blkbits, ivbits);                                      \
  216|      1|    }                                                                            \
cipher_aria.c:aria_256_cfb1_get_params:
  213|      1|    {                                                                            \
  214|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  212|      1|#define EVP_CIPH_CFB_MODE 0x3
  ------------------
  215|      1|            flags, kbits, blkbits, ivbits);                                      \
  216|      1|    }                                                                            \
cipher_aria.c:aria_192_cfb1_get_params:
  213|      1|    {                                                                            \
  214|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  212|      1|#define EVP_CIPH_CFB_MODE 0x3
  ------------------
  215|      1|            flags, kbits, blkbits, ivbits);                                      \
  216|      1|    }                                                                            \
cipher_aria.c:aria_128_cfb1_get_params:
  213|      1|    {                                                                            \
  214|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  212|      1|#define EVP_CIPH_CFB_MODE 0x3
  ------------------
  215|      1|            flags, kbits, blkbits, ivbits);                                      \
  216|      1|    }                                                                            \
cipher_aria.c:aria_256_cfb8_get_params:
  213|      1|    {                                                                            \
  214|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  212|      1|#define EVP_CIPH_CFB_MODE 0x3
  ------------------
  215|      1|            flags, kbits, blkbits, ivbits);                                      \
  216|      1|    }                                                                            \
cipher_aria.c:aria_192_cfb8_get_params:
  213|      1|    {                                                                            \
  214|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  212|      1|#define EVP_CIPH_CFB_MODE 0x3
  ------------------
  215|      1|            flags, kbits, blkbits, ivbits);                                      \
  216|      1|    }                                                                            \
cipher_aria.c:aria_128_cfb8_get_params:
  213|      1|    {                                                                            \
  214|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  212|      1|#define EVP_CIPH_CFB_MODE 0x3
  ------------------
  215|      1|            flags, kbits, blkbits, ivbits);                                      \
  216|      1|    }                                                                            \
cipher_aria.c:aria_256_ctr_get_params:
  213|      1|    {                                                                            \
  214|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  214|      1|#define EVP_CIPH_CTR_MODE 0x5
  ------------------
  215|      1|            flags, kbits, blkbits, ivbits);                                      \
  216|      1|    }                                                                            \
cipher_aria.c:aria_192_ctr_get_params:
  213|      1|    {                                                                            \
  214|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  214|      1|#define EVP_CIPH_CTR_MODE 0x5
  ------------------
  215|      1|            flags, kbits, blkbits, ivbits);                                      \
  216|      1|    }                                                                            \
cipher_aria.c:aria_128_ctr_get_params:
  213|      1|    {                                                                            \
  214|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  214|      1|#define EVP_CIPH_CTR_MODE 0x5
  ------------------
  215|      1|            flags, kbits, blkbits, ivbits);                                      \
  216|      1|    }                                                                            \
cipher_camellia.c:camellia_256_ecb_get_params:
  213|      1|    {                                                                            \
  214|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  210|      1|#define EVP_CIPH_ECB_MODE 0x1
  ------------------
  215|      1|            flags, kbits, blkbits, ivbits);                                      \
  216|      1|    }                                                                            \
cipher_camellia.c:camellia_192_ecb_get_params:
  213|      1|    {                                                                            \
  214|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  210|      1|#define EVP_CIPH_ECB_MODE 0x1
  ------------------
  215|      1|            flags, kbits, blkbits, ivbits);                                      \
  216|      1|    }                                                                            \
cipher_camellia.c:camellia_128_ecb_get_params:
  213|      1|    {                                                                            \
  214|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  210|      1|#define EVP_CIPH_ECB_MODE 0x1
  ------------------
  215|      1|            flags, kbits, blkbits, ivbits);                                      \
  216|      1|    }                                                                            \
cipher_camellia.c:camellia_256_cbc_get_params:
  213|      1|    {                                                                            \
  214|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  211|      1|#define EVP_CIPH_CBC_MODE 0x2
  ------------------
  215|      1|            flags, kbits, blkbits, ivbits);                                      \
  216|      1|    }                                                                            \
cipher_camellia.c:camellia_192_cbc_get_params:
  213|      1|    {                                                                            \
  214|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  211|      1|#define EVP_CIPH_CBC_MODE 0x2
  ------------------
  215|      1|            flags, kbits, blkbits, ivbits);                                      \
  216|      1|    }                                                                            \
cipher_camellia.c:camellia_128_cbc_get_params:
  213|      1|    {                                                                            \
  214|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  211|      1|#define EVP_CIPH_CBC_MODE 0x2
  ------------------
  215|      1|            flags, kbits, blkbits, ivbits);                                      \
  216|      1|    }                                                                            \
cipher_camellia.c:camellia_256_ofb_get_params:
  213|      1|    {                                                                            \
  214|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  213|      1|#define EVP_CIPH_OFB_MODE 0x4
  ------------------
  215|      1|            flags, kbits, blkbits, ivbits);                                      \
  216|      1|    }                                                                            \
cipher_camellia.c:camellia_192_ofb_get_params:
  213|      1|    {                                                                            \
  214|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  213|      1|#define EVP_CIPH_OFB_MODE 0x4
  ------------------
  215|      1|            flags, kbits, blkbits, ivbits);                                      \
  216|      1|    }                                                                            \
cipher_camellia.c:camellia_128_ofb_get_params:
  213|      1|    {                                                                            \
  214|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  213|      1|#define EVP_CIPH_OFB_MODE 0x4
  ------------------
  215|      1|            flags, kbits, blkbits, ivbits);                                      \
  216|      1|    }                                                                            \
cipher_camellia.c:camellia_256_cfb_get_params:
  213|      1|    {                                                                            \
  214|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  212|      1|#define EVP_CIPH_CFB_MODE 0x3
  ------------------
  215|      1|            flags, kbits, blkbits, ivbits);                                      \
  216|      1|    }                                                                            \
cipher_camellia.c:camellia_192_cfb_get_params:
  213|      1|    {                                                                            \
  214|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  212|      1|#define EVP_CIPH_CFB_MODE 0x3
  ------------------
  215|      1|            flags, kbits, blkbits, ivbits);                                      \
  216|      1|    }                                                                            \
cipher_camellia.c:camellia_128_cfb_get_params:
  213|      1|    {                                                                            \
  214|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  212|      1|#define EVP_CIPH_CFB_MODE 0x3
  ------------------
  215|      1|            flags, kbits, blkbits, ivbits);                                      \
  216|      1|    }                                                                            \
cipher_camellia.c:camellia_256_cfb1_get_params:
  213|      1|    {                                                                            \
  214|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  212|      1|#define EVP_CIPH_CFB_MODE 0x3
  ------------------
  215|      1|            flags, kbits, blkbits, ivbits);                                      \
  216|      1|    }                                                                            \
cipher_camellia.c:camellia_192_cfb1_get_params:
  213|      1|    {                                                                            \
  214|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  212|      1|#define EVP_CIPH_CFB_MODE 0x3
  ------------------
  215|      1|            flags, kbits, blkbits, ivbits);                                      \
  216|      1|    }                                                                            \
cipher_camellia.c:camellia_128_cfb1_get_params:
  213|      1|    {                                                                            \
  214|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  212|      1|#define EVP_CIPH_CFB_MODE 0x3
  ------------------
  215|      1|            flags, kbits, blkbits, ivbits);                                      \
  216|      1|    }                                                                            \
cipher_camellia.c:camellia_256_cfb8_get_params:
  213|      1|    {                                                                            \
  214|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  212|      1|#define EVP_CIPH_CFB_MODE 0x3
  ------------------
  215|      1|            flags, kbits, blkbits, ivbits);                                      \
  216|      1|    }                                                                            \
cipher_camellia.c:camellia_192_cfb8_get_params:
  213|      1|    {                                                                            \
  214|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  212|      1|#define EVP_CIPH_CFB_MODE 0x3
  ------------------
  215|      1|            flags, kbits, blkbits, ivbits);                                      \
  216|      1|    }                                                                            \
cipher_camellia.c:camellia_128_cfb8_get_params:
  213|      1|    {                                                                            \
  214|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  212|      1|#define EVP_CIPH_CFB_MODE 0x3
  ------------------
  215|      1|            flags, kbits, blkbits, ivbits);                                      \
  216|      1|    }                                                                            \
cipher_camellia.c:camellia_256_ctr_get_params:
  213|      1|    {                                                                            \
  214|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  214|      1|#define EVP_CIPH_CTR_MODE 0x5
  ------------------
  215|      1|            flags, kbits, blkbits, ivbits);                                      \
  216|      1|    }                                                                            \
cipher_camellia.c:camellia_192_ctr_get_params:
  213|      1|    {                                                                            \
  214|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  214|      1|#define EVP_CIPH_CTR_MODE 0x5
  ------------------
  215|      1|            flags, kbits, blkbits, ivbits);                                      \
  216|      1|    }                                                                            \
cipher_camellia.c:camellia_128_ctr_get_params:
  213|      1|    {                                                                            \
  214|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  214|      1|#define EVP_CIPH_CTR_MODE 0x5
  ------------------
  215|      1|            flags, kbits, blkbits, ivbits);                                      \
  216|      1|    }                                                                            \
cipher_camellia.c:camellia_cbc_cts_gettable_ctx_params:
  364|      3|    {                                                                    \
  365|      3|        return name##_known_gettable_ctx_params;                         \
  366|      3|    }
cipher_sm4.c:sm4_128_ecb_get_params:
  213|      1|    {                                                                            \
  214|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  210|      1|#define EVP_CIPH_ECB_MODE 0x1
  ------------------
  215|      1|            flags, kbits, blkbits, ivbits);                                      \
  216|      1|    }                                                                            \
cipher_sm4.c:sm4_128_cbc_get_params:
  213|      1|    {                                                                            \
  214|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  211|      1|#define EVP_CIPH_CBC_MODE 0x2
  ------------------
  215|      1|            flags, kbits, blkbits, ivbits);                                      \
  216|      1|    }                                                                            \
cipher_sm4.c:sm4_128_ctr_get_params:
  213|      1|    {                                                                            \
  214|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  214|      1|#define EVP_CIPH_CTR_MODE 0x5
  ------------------
  215|      1|            flags, kbits, blkbits, ivbits);                                      \
  216|      1|    }                                                                            \
cipher_sm4.c:sm4_128_ofb128_get_params:
  213|      1|    {                                                                            \
  214|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  213|      1|#define EVP_CIPH_OFB_MODE 0x4
  ------------------
  215|      1|            flags, kbits, blkbits, ivbits);                                      \
  216|      1|    }                                                                            \
cipher_sm4.c:sm4_128_cfb128_get_params:
  213|      1|    {                                                                            \
  214|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE,  \
  ------------------
  |  |  212|      1|#define EVP_CIPH_CFB_MODE 0x3
  ------------------
  215|      1|            flags, kbits, blkbits, ivbits);                                      \
  216|      1|    }                                                                            \
ossl_tdes_gettable_ctx_params:
  364|     11|    {                                                                    \
  365|     11|        return name##_known_gettable_ctx_params;                         \
  366|     11|    }

cipher_aes_ccm.c:aes_128_ccm_get_params:
   21|      1|    {                                                                           \
   22|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE, \
  ------------------
  |  |  216|      1|#define EVP_CIPH_CCM_MODE 0x7
  ------------------
   23|      1|            flags, kbits, blkbits, ivbits);                                     \
   24|      1|    }                                                                           \
cipher_aes_ccm.c:aes_192_ccm_get_params:
   21|      1|    {                                                                           \
   22|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE, \
  ------------------
  |  |  216|      1|#define EVP_CIPH_CCM_MODE 0x7
  ------------------
   23|      1|            flags, kbits, blkbits, ivbits);                                     \
   24|      1|    }                                                                           \
cipher_aes_ccm.c:aes_256_ccm_get_params:
   21|      1|    {                                                                           \
   22|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE, \
  ------------------
  |  |  216|      1|#define EVP_CIPH_CCM_MODE 0x7
  ------------------
   23|      1|            flags, kbits, blkbits, ivbits);                                     \
   24|      1|    }                                                                           \
cipher_aes_gcm.c:aes_128_gcm_get_params:
   21|      1|    {                                                                           \
   22|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE, \
  ------------------
  |  |  215|      1|#define EVP_CIPH_GCM_MODE 0x6
  ------------------
   23|      1|            flags, kbits, blkbits, ivbits);                                     \
   24|      1|    }                                                                           \
cipher_aes_gcm.c:aes_192_gcm_get_params:
   21|      1|    {                                                                           \
   22|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE, \
  ------------------
  |  |  215|      1|#define EVP_CIPH_GCM_MODE 0x6
  ------------------
   23|      1|            flags, kbits, blkbits, ivbits);                                     \
   24|      1|    }                                                                           \
cipher_aes_gcm.c:aes_256_gcm_get_params:
   21|      1|    {                                                                           \
   22|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE, \
  ------------------
  |  |  215|      1|#define EVP_CIPH_GCM_MODE 0x6
  ------------------
   23|      1|            flags, kbits, blkbits, ivbits);                                     \
   24|      1|    }                                                                           \
cipher_aria_ccm.c:aria_128_ccm_get_params:
   21|      1|    {                                                                           \
   22|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE, \
  ------------------
  |  |  216|      1|#define EVP_CIPH_CCM_MODE 0x7
  ------------------
   23|      1|            flags, kbits, blkbits, ivbits);                                     \
   24|      1|    }                                                                           \
cipher_aria_ccm.c:aria_192_ccm_get_params:
   21|      1|    {                                                                           \
   22|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE, \
  ------------------
  |  |  216|      1|#define EVP_CIPH_CCM_MODE 0x7
  ------------------
   23|      1|            flags, kbits, blkbits, ivbits);                                     \
   24|      1|    }                                                                           \
cipher_aria_ccm.c:aria_256_ccm_get_params:
   21|      1|    {                                                                           \
   22|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE, \
  ------------------
  |  |  216|      1|#define EVP_CIPH_CCM_MODE 0x7
  ------------------
   23|      1|            flags, kbits, blkbits, ivbits);                                     \
   24|      1|    }                                                                           \
cipher_aria_gcm.c:aria_128_gcm_get_params:
   21|      1|    {                                                                           \
   22|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE, \
  ------------------
  |  |  215|      1|#define EVP_CIPH_GCM_MODE 0x6
  ------------------
   23|      1|            flags, kbits, blkbits, ivbits);                                     \
   24|      1|    }                                                                           \
cipher_aria_gcm.c:aria_192_gcm_get_params:
   21|      1|    {                                                                           \
   22|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE, \
  ------------------
  |  |  215|      1|#define EVP_CIPH_GCM_MODE 0x6
  ------------------
   23|      1|            flags, kbits, blkbits, ivbits);                                     \
   24|      1|    }                                                                           \
cipher_aria_gcm.c:aria_256_gcm_get_params:
   21|      1|    {                                                                           \
   22|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE, \
  ------------------
  |  |  215|      1|#define EVP_CIPH_GCM_MODE 0x6
  ------------------
   23|      1|            flags, kbits, blkbits, ivbits);                                     \
   24|      1|    }                                                                           \
cipher_sm4_ccm.c:sm4_128_ccm_get_params:
   21|      1|    {                                                                           \
   22|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE, \
  ------------------
  |  |  216|      1|#define EVP_CIPH_CCM_MODE 0x7
  ------------------
   23|      1|            flags, kbits, blkbits, ivbits);                                     \
   24|      1|    }                                                                           \
cipher_sm4_gcm.c:sm4_128_gcm_get_params:
   21|      1|    {                                                                           \
   22|      1|        return ossl_cipher_generic_get_params(params, EVP_CIPH_##UCMODE##_MODE, \
  ------------------
  |  |  215|      1|#define EVP_CIPH_GCM_MODE 0x6
  ------------------
   23|      1|            flags, kbits, blkbits, ivbits);                                     \
   24|      1|    }                                                                           \

ossl_drbg_lock:
   54|  19.6k|{
   55|  19.6k|    return 1;
   56|  19.6k|}
ossl_drbg_unlock:
   60|  19.6k|{
   61|  19.6k|}
ossl_drbg_get_seed:
  148|      2|{
  149|      2|    PROV_DRBG *drbg = (PROV_DRBG *)vdrbg;
  150|      2|    size_t bytes_needed;
  151|      2|    unsigned char *buffer;
  152|       |
  153|       |    /* Figure out how many bytes we need */
  154|      2|    bytes_needed = entropy >= 0 ? (entropy + 7) / 8 : 0;
  ------------------
  |  Branch (154:20): [True: 2, False: 0]
  ------------------
  155|      2|    if (bytes_needed < min_len)
  ------------------
  |  Branch (155:9): [True: 0, False: 2]
  ------------------
  156|      0|        bytes_needed = min_len;
  157|      2|    if (bytes_needed > max_len)
  ------------------
  |  Branch (157:9): [True: 0, False: 2]
  ------------------
  158|      0|        bytes_needed = max_len;
  159|       |
  160|       |    /* Allocate storage */
  161|      2|    buffer = OPENSSL_secure_malloc(bytes_needed);
  ------------------
  |  |  140|      2|    CRYPTO_secure_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_secure_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  162|      2|    if (buffer == NULL)
  ------------------
  |  Branch (162:9): [True: 0, False: 2]
  ------------------
  163|      0|        return 0;
  164|       |
  165|       |    /*
  166|       |     * Get random data.  Include our DRBG address as
  167|       |     * additional input, in order to provide a distinction between
  168|       |     * different DRBG child instances.
  169|       |     *
  170|       |     * Note: using the sizeof() operator on a pointer triggers
  171|       |     *       a warning in some static code analyzers, but it's
  172|       |     *       intentional and correct here.
  173|       |     */
  174|      2|    if (!ossl_prov_drbg_generate(drbg, buffer, bytes_needed,
  ------------------
  |  Branch (174:9): [True: 0, False: 2]
  ------------------
  175|      2|            drbg->strength, prediction_resistance,
  176|      2|            (unsigned char *)&drbg, sizeof(drbg))) {
  177|      0|        OPENSSL_secure_clear_free(buffer, bytes_needed);
  ------------------
  |  |  150|      0|    CRYPTO_secure_clear_free(addr, num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_secure_clear_free(addr, num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  178|      0|        ERR_raise(ERR_LIB_PROV, PROV_R_GENERATE_ERROR);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  179|      0|        return 0;
  180|      0|    }
  181|      2|    *pout = buffer;
  182|      2|    return bytes_needed;
  183|      2|}
ossl_drbg_clear_seed:
  188|      2|{
  189|      2|    OPENSSL_secure_clear_free(out, outlen);
  ------------------
  |  |  150|      2|    CRYPTO_secure_clear_free(addr, num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_secure_clear_free(addr, num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  190|      2|}
ossl_prov_drbg_nonce_ctx_new:
  272|    110|{
  273|    110|    PROV_DRBG_NONCE_GLOBAL *dngbl = OPENSSL_zalloc(sizeof(*dngbl));
  ------------------
  |  |  109|    110|    CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  274|       |
  275|    110|    if (dngbl == NULL)
  ------------------
  |  Branch (275:9): [True: 0, False: 110]
  ------------------
  276|      0|        return NULL;
  277|       |
  278|    110|    dngbl->rand_nonce_lock = CRYPTO_THREAD_lock_new();
  279|    110|    if (dngbl->rand_nonce_lock == NULL) {
  ------------------
  |  Branch (279:9): [True: 0, False: 110]
  ------------------
  280|      0|        OPENSSL_free(dngbl);
  ------------------
  |  |  132|      0|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  281|      0|        return NULL;
  282|      0|    }
  283|       |
  284|    110|    return dngbl;
  285|    110|}
ossl_prov_drbg_nonce_ctx_free:
  288|    109|{
  289|    109|    PROV_DRBG_NONCE_GLOBAL *dngbl = vdngbl;
  290|       |
  291|    109|    if (dngbl == NULL)
  ------------------
  |  Branch (291:9): [True: 0, False: 109]
  ------------------
  292|      0|        return;
  293|       |
  294|    109|    CRYPTO_THREAD_lock_free(dngbl->rand_nonce_lock);
  295|       |
  296|    109|    OPENSSL_free(dngbl);
  ------------------
  |  |  132|    109|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  297|    109|}
ossl_prov_drbg_instantiate:
  352|      2|{
  353|      2|    unsigned char *nonce = NULL, *entropy = NULL;
  354|      2|    size_t noncelen = 0, entropylen = 0;
  355|      2|    unsigned int min_entropy;
  356|      2|    size_t min_entropylen, max_entropylen;
  357|       |
  358|      2|    if (strength > drbg->strength) {
  ------------------
  |  Branch (358:9): [True: 0, False: 2]
  ------------------
  359|      0|        ERR_raise(ERR_LIB_PROV, PROV_R_INSUFFICIENT_DRBG_STRENGTH);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  360|      0|        goto end;
  361|      0|    }
  362|      2|    min_entropy = drbg->strength;
  363|      2|    min_entropylen = drbg->min_entropylen;
  364|      2|    max_entropylen = drbg->max_entropylen;
  365|       |
  366|      2|    if (pers == NULL) {
  ------------------
  |  Branch (366:9): [True: 2, False: 0]
  ------------------
  367|      2|        pers = (const unsigned char *)ossl_pers_string;
  368|      2|        perslen = sizeof(ossl_pers_string);
  369|      2|    }
  370|      2|    if (perslen > drbg->max_perslen) {
  ------------------
  |  Branch (370:9): [True: 0, False: 2]
  ------------------
  371|      0|        ERR_raise(ERR_LIB_PROV, PROV_R_PERSONALISATION_STRING_TOO_LONG);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  372|      0|        goto end;
  373|      0|    }
  374|       |
  375|      2|    if (drbg->state != EVP_RAND_STATE_UNINITIALISED) {
  ------------------
  |  | 1249|      2|#define EVP_RAND_STATE_UNINITIALISED 0
  ------------------
  |  Branch (375:9): [True: 0, False: 2]
  ------------------
  376|      0|        if (drbg->state == EVP_RAND_STATE_ERROR)
  ------------------
  |  | 1251|      0|#define EVP_RAND_STATE_ERROR 2
  ------------------
  |  Branch (376:13): [True: 0, False: 0]
  ------------------
  377|      0|            ERR_raise(ERR_LIB_PROV, PROV_R_IN_ERROR_STATE);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  378|      0|        else
  379|      0|            ERR_raise(ERR_LIB_PROV, PROV_R_ALREADY_INSTANTIATED);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  380|      0|        goto end;
  381|      0|    }
  382|       |
  383|      2|    drbg->state = EVP_RAND_STATE_ERROR;
  ------------------
  |  | 1251|      2|#define EVP_RAND_STATE_ERROR 2
  ------------------
  384|       |
  385|      2|    if (drbg->min_noncelen > 0) {
  ------------------
  |  Branch (385:9): [True: 2, False: 0]
  ------------------
  386|      2|        if (drbg->parent_nonce != NULL) {
  ------------------
  |  Branch (386:13): [True: 0, False: 2]
  ------------------
  387|      0|            noncelen = drbg->parent_nonce(drbg->parent, NULL, drbg->strength,
  388|      0|                drbg->min_noncelen,
  389|      0|                drbg->max_noncelen);
  390|      0|            if (noncelen == 0) {
  ------------------
  |  Branch (390:17): [True: 0, False: 0]
  ------------------
  391|      0|                ERR_raise(ERR_LIB_PROV, PROV_R_ERROR_RETRIEVING_NONCE);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  392|      0|                goto end;
  393|      0|            }
  394|      0|            nonce = OPENSSL_malloc(noncelen);
  ------------------
  |  |  107|      0|    CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  395|      0|            if (nonce == NULL) {
  ------------------
  |  Branch (395:17): [True: 0, False: 0]
  ------------------
  396|      0|                ERR_raise(ERR_LIB_PROV, PROV_R_ERROR_RETRIEVING_NONCE);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  397|      0|                goto end;
  398|      0|            }
  399|      0|            if (noncelen != drbg->parent_nonce(drbg->parent, nonce, drbg->strength, drbg->min_noncelen, drbg->max_noncelen)) {
  ------------------
  |  Branch (399:17): [True: 0, False: 0]
  ------------------
  400|      0|                ERR_raise(ERR_LIB_PROV, PROV_R_ERROR_RETRIEVING_NONCE);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  401|      0|                goto end;
  402|      0|            }
  403|      0|#ifndef PROV_RAND_GET_RANDOM_NONCE
  404|      2|        } else if (drbg->parent != NULL) {
  ------------------
  |  Branch (404:20): [True: 2, False: 0]
  ------------------
  405|      2|#endif
  406|       |            /*
  407|       |             * NIST SP800-90Ar1 section 9.1 says you can combine getting
  408|       |             * the entropy and nonce in 1 call by increasing the entropy
  409|       |             * with 50% and increasing the minimum length to accommodate
  410|       |             * the length of the nonce. We do this in case a nonce is
  411|       |             * required and there is no parental nonce capability.
  412|       |             */
  413|      2|            min_entropy += drbg->strength / 2;
  414|      2|            min_entropylen += drbg->min_noncelen;
  415|      2|            max_entropylen += drbg->max_noncelen;
  416|      2|        }
  417|      0|#ifndef PROV_RAND_GET_RANDOM_NONCE
  418|      0|        else { /* parent == NULL */
  419|      0|            noncelen = prov_drbg_get_nonce(drbg, &nonce, drbg->min_noncelen,
  420|      0|                drbg->max_noncelen);
  421|      0|            if (noncelen < drbg->min_noncelen
  ------------------
  |  Branch (421:17): [True: 0, False: 0]
  ------------------
  422|      0|                || noncelen > drbg->max_noncelen) {
  ------------------
  |  Branch (422:20): [True: 0, False: 0]
  ------------------
  423|      0|                ERR_raise(ERR_LIB_PROV, PROV_R_ERROR_RETRIEVING_NONCE);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  424|      0|                goto end;
  425|      0|            }
  426|      0|        }
  427|      2|#endif
  428|      2|    }
  429|       |
  430|      2|    drbg->reseed_next_counter = tsan_load(&drbg->reseed_counter);
  ------------------
  |  |   61|      2|#define tsan_load(ptr) atomic_load_explicit((ptr), memory_order_relaxed)
  ------------------
  431|      2|    if (drbg->reseed_next_counter) {
  ------------------
  |  Branch (431:9): [True: 2, False: 0]
  ------------------
  432|      2|        drbg->reseed_next_counter++;
  433|      2|        if (!drbg->reseed_next_counter)
  ------------------
  |  Branch (433:13): [True: 0, False: 2]
  ------------------
  434|      0|            drbg->reseed_next_counter = 1;
  435|      2|    }
  436|       |
  437|      2|    entropylen = get_entropy(drbg, &entropy, min_entropy,
  438|      2|        min_entropylen, max_entropylen,
  439|      2|        prediction_resistance);
  440|      2|    if (entropylen < min_entropylen
  ------------------
  |  Branch (440:9): [True: 0, False: 2]
  ------------------
  441|      2|        || entropylen > max_entropylen) {
  ------------------
  |  Branch (441:12): [True: 0, False: 2]
  ------------------
  442|      0|        ERR_raise(ERR_LIB_PROV, PROV_R_ERROR_RETRIEVING_ENTROPY);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  443|      0|        goto end;
  444|      0|    }
  445|       |
  446|      2|    if (!drbg->instantiate(drbg, entropy, entropylen, nonce, noncelen,
  ------------------
  |  Branch (446:9): [True: 0, False: 2]
  ------------------
  447|      2|            pers, perslen)) {
  448|      0|        cleanup_entropy(drbg, entropy, entropylen);
  449|      0|        ERR_raise(ERR_LIB_PROV, PROV_R_ERROR_INSTANTIATING_DRBG);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  450|      0|        goto end;
  451|      0|    }
  452|      2|    cleanup_entropy(drbg, entropy, entropylen);
  453|       |
  454|      2|    drbg->state = EVP_RAND_STATE_READY;
  ------------------
  |  | 1250|      2|#define EVP_RAND_STATE_READY 1
  ------------------
  455|      2|    drbg->generate_counter = 1;
  456|      2|    drbg->reseed_time = time(NULL);
  457|      2|    tsan_store(&drbg->reseed_counter, drbg->reseed_next_counter);
  ------------------
  |  |   62|      2|#define tsan_store(ptr, val) atomic_store_explicit((ptr), (val), memory_order_relaxed)
  ------------------
  458|       |
  459|      2|end:
  460|      2|    if (nonce != NULL)
  ------------------
  |  Branch (460:9): [True: 0, False: 2]
  ------------------
  461|      0|        ossl_prov_cleanup_nonce(drbg->provctx, nonce, noncelen);
  462|      2|    if (drbg->state == EVP_RAND_STATE_READY)
  ------------------
  |  | 1250|      2|#define EVP_RAND_STATE_READY 1
  ------------------
  |  Branch (462:9): [True: 2, False: 0]
  ------------------
  463|      2|        return 1;
  464|      0|    return 0;
  465|      2|}
ossl_prov_drbg_generate:
  625|  6.53k|{
  626|  6.53k|    int fork_id;
  627|  6.53k|    int reseed_required = 0;
  628|  6.53k|    int ret = 0;
  629|  6.53k|    time_t reseed_time_interval = drbg->reseed_time_interval;
  630|  6.53k|    time_t now = 0;
  631|       |
  632|  6.53k|    if (!ossl_prov_is_running())
  ------------------
  |  Branch (632:9): [True: 0, False: 6.53k]
  ------------------
  633|      0|        return 0;
  634|       |
  635|  6.53k|    fork_id = openssl_get_fork_id();
  636|       |
  637|  6.53k|    if (reseed_time_interval > 0)
  ------------------
  |  Branch (637:9): [True: 6.53k, False: 0]
  ------------------
  638|  6.53k|        now = time(NULL);
  639|       |
  640|  6.53k|    if (drbg->lock != NULL && !CRYPTO_THREAD_write_lock(drbg->lock))
  ------------------
  |  Branch (640:9): [True: 2, False: 6.53k]
  |  Branch (640:31): [True: 0, False: 2]
  ------------------
  641|      0|        return 0;
  642|       |
  643|  6.53k|    if (drbg->state != EVP_RAND_STATE_READY) {
  ------------------
  |  | 1250|  6.53k|#define EVP_RAND_STATE_READY 1
  ------------------
  |  Branch (643:9): [True: 0, False: 6.53k]
  ------------------
  644|       |        /* try to recover from previous errors */
  645|      0|        rand_drbg_restart(drbg);
  646|       |
  647|      0|        if (drbg->state == EVP_RAND_STATE_ERROR) {
  ------------------
  |  | 1251|      0|#define EVP_RAND_STATE_ERROR 2
  ------------------
  |  Branch (647:13): [True: 0, False: 0]
  ------------------
  648|      0|            ERR_raise(ERR_LIB_PROV, PROV_R_IN_ERROR_STATE);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  649|      0|            goto err;
  650|      0|        }
  651|      0|        if (drbg->state == EVP_RAND_STATE_UNINITIALISED) {
  ------------------
  |  | 1249|      0|#define EVP_RAND_STATE_UNINITIALISED 0
  ------------------
  |  Branch (651:13): [True: 0, False: 0]
  ------------------
  652|      0|            ERR_raise(ERR_LIB_PROV, PROV_R_NOT_INSTANTIATED);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  653|      0|            goto err;
  654|      0|        }
  655|      0|    }
  656|  6.53k|    if (strength > drbg->strength) {
  ------------------
  |  Branch (656:9): [True: 0, False: 6.53k]
  ------------------
  657|      0|        ERR_raise(ERR_LIB_PROV, PROV_R_INSUFFICIENT_DRBG_STRENGTH);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  658|      0|        goto err;
  659|      0|    }
  660|       |
  661|  6.53k|    if (outlen > drbg->max_request) {
  ------------------
  |  Branch (661:9): [True: 0, False: 6.53k]
  ------------------
  662|      0|        ERR_raise(ERR_LIB_PROV, PROV_R_REQUEST_TOO_LARGE_FOR_DRBG);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  663|      0|        goto err;
  664|      0|    }
  665|  6.53k|    if (adinlen > drbg->max_adinlen) {
  ------------------
  |  Branch (665:9): [True: 0, False: 6.53k]
  ------------------
  666|      0|        ERR_raise(ERR_LIB_PROV, PROV_R_ADDITIONAL_INPUT_TOO_LONG);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  667|      0|        goto err;
  668|      0|    }
  669|       |
  670|  6.53k|    if (drbg->fork_id != fork_id) {
  ------------------
  |  Branch (670:9): [True: 0, False: 6.53k]
  ------------------
  671|      0|        drbg->fork_id = fork_id;
  672|      0|        reseed_required = 1;
  673|      0|    }
  674|       |
  675|  6.53k|    if (drbg->reseed_interval > 0) {
  ------------------
  |  Branch (675:9): [True: 6.53k, False: 0]
  ------------------
  676|  6.53k|        if (drbg->generate_counter >= drbg->reseed_interval)
  ------------------
  |  Branch (676:13): [True: 0, False: 6.53k]
  ------------------
  677|      0|            reseed_required = 1;
  678|  6.53k|    }
  679|  6.53k|    if (reseed_time_interval > 0) {
  ------------------
  |  Branch (679:9): [True: 6.53k, False: 0]
  ------------------
  680|  6.53k|        if (now < drbg->reseed_time
  ------------------
  |  Branch (680:13): [True: 0, False: 6.53k]
  ------------------
  681|  6.53k|            || now - drbg->reseed_time >= reseed_time_interval)
  ------------------
  |  Branch (681:16): [True: 0, False: 6.53k]
  ------------------
  682|      0|            reseed_required = 1;
  683|  6.53k|    }
  684|  6.53k|    if (drbg->parent != NULL
  ------------------
  |  Branch (684:9): [True: 6.53k, False: 0]
  ------------------
  685|  6.53k|        && get_parent_reseed_count(drbg) != drbg->parent_reseed_counter)
  ------------------
  |  Branch (685:12): [True: 1, False: 6.53k]
  ------------------
  686|      1|        reseed_required = 1;
  687|       |
  688|  6.53k|    if (reseed_required || prediction_resistance) {
  ------------------
  |  Branch (688:9): [True: 1, False: 6.53k]
  |  Branch (688:28): [True: 0, False: 6.53k]
  ------------------
  689|      1|        if (!ossl_prov_drbg_reseed_unlocked(drbg, prediction_resistance, NULL,
  ------------------
  |  Branch (689:13): [True: 0, False: 1]
  ------------------
  690|      1|                0, adin, adinlen)) {
  691|      0|            ERR_raise(ERR_LIB_PROV, PROV_R_RESEED_ERROR);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  692|      0|            goto err;
  693|      0|        }
  694|      1|        adin = NULL;
  695|      1|        adinlen = 0;
  696|      1|    }
  697|       |
  698|  6.53k|    if (!drbg->generate(drbg, out, outlen, adin, adinlen)) {
  ------------------
  |  Branch (698:9): [True: 0, False: 6.53k]
  ------------------
  699|      0|        drbg->state = EVP_RAND_STATE_ERROR;
  ------------------
  |  | 1251|      0|#define EVP_RAND_STATE_ERROR 2
  ------------------
  700|      0|        ERR_raise(ERR_LIB_PROV, PROV_R_GENERATE_ERROR);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  701|      0|        goto err;
  702|      0|    }
  703|       |
  704|  6.53k|    drbg->generate_counter++;
  705|       |
  706|  6.53k|    ret = 1;
  707|  6.53k|err:
  708|  6.53k|    if (drbg->lock != NULL)
  ------------------
  |  Branch (708:9): [True: 2, False: 6.53k]
  ------------------
  709|      2|        CRYPTO_THREAD_unlock(drbg->lock);
  710|       |
  711|  6.53k|    return ret;
  712|  6.53k|}
ossl_drbg_enable_locking:
  759|      1|{
  760|      1|    PROV_DRBG *drbg = vctx;
  761|       |
  762|      1|    if (drbg != NULL && drbg->lock == NULL) {
  ------------------
  |  Branch (762:9): [True: 1, False: 0]
  |  Branch (762:25): [True: 1, False: 0]
  ------------------
  763|      1|        if (drbg->parent_enable_locking != NULL)
  ------------------
  |  Branch (763:13): [True: 1, False: 0]
  ------------------
  764|      1|            if (!drbg->parent_enable_locking(drbg->parent)) {
  ------------------
  |  Branch (764:17): [True: 0, False: 1]
  ------------------
  765|      0|                ERR_raise(ERR_LIB_PROV, PROV_R_PARENT_LOCKING_NOT_ENABLED);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  766|      0|                return 0;
  767|      0|            }
  768|      1|        drbg->lock = CRYPTO_THREAD_lock_new();
  769|      1|        if (drbg->lock == NULL) {
  ------------------
  |  Branch (769:13): [True: 0, False: 1]
  ------------------
  770|      0|            ERR_raise(ERR_LIB_PROV, PROV_R_FAILED_TO_CREATE_LOCK);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  771|      0|            return 0;
  772|      0|        }
  773|      1|    }
  774|      1|    return 1;
  775|      1|}
ossl_rand_drbg_new:
  797|      2|{
  798|      2|    PROV_DRBG *drbg;
  799|      2|    unsigned int p_str;
  800|      2|    const OSSL_DISPATCH *pfunc;
  801|       |
  802|      2|    if (!ossl_prov_is_running())
  ------------------
  |  Branch (802:9): [True: 0, False: 2]
  ------------------
  803|      0|        return NULL;
  804|       |
  805|      2|    drbg = OPENSSL_zalloc(sizeof(*drbg));
  ------------------
  |  |  109|      2|    CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  806|      2|    if (drbg == NULL)
  ------------------
  |  Branch (806:9): [True: 0, False: 2]
  ------------------
  807|      0|        return NULL;
  808|       |
  809|      2|    drbg->provctx = provctx;
  810|      2|    drbg->instantiate = instantiate;
  811|      2|    drbg->uninstantiate = uninstantiate;
  812|      2|    drbg->reseed = reseed;
  813|      2|    drbg->generate = generate;
  814|      2|    drbg->fork_id = openssl_get_fork_id();
  815|       |
  816|       |    /* Extract parent's functions */
  817|      2|    drbg->parent = parent;
  818|      2|    if ((pfunc = find_call(p_dispatch, OSSL_FUNC_RAND_ENABLE_LOCKING)) != NULL)
  ------------------
  |  |  548|      2|#define OSSL_FUNC_RAND_ENABLE_LOCKING 8
  ------------------
  |  Branch (818:9): [True: 2, False: 0]
  ------------------
  819|      2|        drbg->parent_enable_locking = OSSL_FUNC_rand_enable_locking(pfunc);
  820|      2|    if ((pfunc = find_call(p_dispatch, OSSL_FUNC_RAND_LOCK)) != NULL)
  ------------------
  |  |  549|      2|#define OSSL_FUNC_RAND_LOCK 9
  ------------------
  |  Branch (820:9): [True: 2, False: 0]
  ------------------
  821|      2|        drbg->parent_lock = OSSL_FUNC_rand_lock(pfunc);
  822|      2|    if ((pfunc = find_call(p_dispatch, OSSL_FUNC_RAND_UNLOCK)) != NULL)
  ------------------
  |  |  550|      2|#define OSSL_FUNC_RAND_UNLOCK 10
  ------------------
  |  Branch (822:9): [True: 2, False: 0]
  ------------------
  823|      2|        drbg->parent_unlock = OSSL_FUNC_rand_unlock(pfunc);
  824|      2|    if ((pfunc = find_call(p_dispatch, OSSL_FUNC_RAND_GET_CTX_PARAMS)) != NULL)
  ------------------
  |  |  555|      2|#define OSSL_FUNC_RAND_GET_CTX_PARAMS 15
  ------------------
  |  Branch (824:9): [True: 2, False: 0]
  ------------------
  825|      2|        drbg->parent_get_ctx_params = OSSL_FUNC_rand_get_ctx_params(pfunc);
  826|      2|    if ((pfunc = find_call(p_dispatch, OSSL_FUNC_RAND_NONCE)) != NULL)
  ------------------
  |  |  547|      2|#define OSSL_FUNC_RAND_NONCE 7
  ------------------
  |  Branch (826:9): [True: 0, False: 2]
  ------------------
  827|      0|        drbg->parent_nonce = OSSL_FUNC_rand_nonce(pfunc);
  828|      2|    if ((pfunc = find_call(p_dispatch, OSSL_FUNC_RAND_GET_SEED)) != NULL)
  ------------------
  |  |  558|      2|#define OSSL_FUNC_RAND_GET_SEED 18
  ------------------
  |  Branch (828:9): [True: 2, False: 0]
  ------------------
  829|      2|        drbg->parent_get_seed = OSSL_FUNC_rand_get_seed(pfunc);
  830|      2|    if ((pfunc = find_call(p_dispatch, OSSL_FUNC_RAND_CLEAR_SEED)) != NULL)
  ------------------
  |  |  559|      2|#define OSSL_FUNC_RAND_CLEAR_SEED 19
  ------------------
  |  Branch (830:9): [True: 2, False: 0]
  ------------------
  831|      2|        drbg->parent_clear_seed = OSSL_FUNC_rand_clear_seed(pfunc);
  832|       |
  833|       |    /* Set some default maximums up */
  834|      2|    drbg->max_entropylen = DRBG_MAX_LENGTH;
  ------------------
  |  |   41|      2|#define DRBG_MAX_LENGTH INT32_MAX
  ------------------
  835|      2|    drbg->max_noncelen = DRBG_MAX_LENGTH;
  ------------------
  |  |   41|      2|#define DRBG_MAX_LENGTH INT32_MAX
  ------------------
  836|      2|    drbg->max_perslen = DRBG_MAX_LENGTH;
  ------------------
  |  |   41|      2|#define DRBG_MAX_LENGTH INT32_MAX
  ------------------
  837|      2|    drbg->max_adinlen = DRBG_MAX_LENGTH;
  ------------------
  |  |   41|      2|#define DRBG_MAX_LENGTH INT32_MAX
  ------------------
  838|      2|    drbg->generate_counter = 1;
  839|      2|    drbg->reseed_counter = 1;
  840|      2|    drbg->reseed_interval = RESEED_INTERVAL;
  ------------------
  |  |   31|      2|#define RESEED_INTERVAL (1 << 8)
  ------------------
  841|      2|    drbg->reseed_time_interval = TIME_INTERVAL;
  ------------------
  |  |   32|      2|#define TIME_INTERVAL (60 * 60) /* 1 hour */
  ------------------
  842|       |
  843|      2|    if (!dnew(drbg))
  ------------------
  |  Branch (843:9): [True: 0, False: 2]
  ------------------
  844|      0|        goto err;
  845|       |
  846|      2|    if (parent != NULL) {
  ------------------
  |  Branch (846:9): [True: 2, False: 0]
  ------------------
  847|      2|        if (!get_parent_strength(drbg, &p_str))
  ------------------
  |  Branch (847:13): [True: 0, False: 2]
  ------------------
  848|      0|            goto err;
  849|      2|        if (drbg->strength > p_str) {
  ------------------
  |  Branch (849:13): [True: 0, False: 2]
  ------------------
  850|       |            /*
  851|       |             * We currently don't support the algorithm from NIST SP 800-90C
  852|       |             * 10.1.2 to use a weaker DRBG as source
  853|       |             */
  854|      0|            ERR_raise(ERR_LIB_PROV, PROV_R_PARENT_STRENGTH_TOO_WEAK);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  855|      0|            goto err;
  856|      0|        }
  857|      2|    }
  858|       |#ifdef TSAN_REQUIRES_LOCKING
  859|       |    if (!ossl_drbg_enable_locking(drbg))
  860|       |        goto err;
  861|       |#endif
  862|      2|    return drbg;
  863|       |
  864|      0|err:
  865|      0|    dfree(drbg);
  866|       |    return NULL;
  867|      2|}
ossl_drbg_get_ctx_params:
  884|  6.53k|{
  885|  6.53k|    if (p->state != NULL && !OSSL_PARAM_set_int(p->state, drbg->state))
  ------------------
  |  Branch (885:9): [True: 6.53k, False: 3]
  |  Branch (885:29): [True: 0, False: 6.53k]
  ------------------
  886|      0|        return 0;
  887|       |
  888|  6.53k|    if (p->str != NULL && !OSSL_PARAM_set_int(p->str, drbg->strength))
  ------------------
  |  Branch (888:9): [True: 3, False: 6.53k]
  |  Branch (888:27): [True: 0, False: 3]
  ------------------
  889|      0|        return 0;
  890|       |
  891|  6.53k|    if (p->minentlen != NULL
  ------------------
  |  Branch (891:9): [True: 0, False: 6.53k]
  ------------------
  892|      0|        && !OSSL_PARAM_set_size_t(p->minentlen, drbg->min_entropylen))
  ------------------
  |  Branch (892:12): [True: 0, False: 0]
  ------------------
  893|      0|        return 0;
  894|       |
  895|  6.53k|    if (p->maxentlen != NULL
  ------------------
  |  Branch (895:9): [True: 0, False: 6.53k]
  ------------------
  896|      0|        && !OSSL_PARAM_set_size_t(p->maxentlen, drbg->max_entropylen))
  ------------------
  |  Branch (896:12): [True: 0, False: 0]
  ------------------
  897|      0|        return 0;
  898|       |
  899|  6.53k|    if (p->minnonlen != NULL
  ------------------
  |  Branch (899:9): [True: 0, False: 6.53k]
  ------------------
  900|      0|        && !OSSL_PARAM_set_size_t(p->minnonlen, drbg->min_noncelen))
  ------------------
  |  Branch (900:12): [True: 0, False: 0]
  ------------------
  901|      0|        return 0;
  902|       |
  903|  6.53k|    if (p->maxnonlen != NULL
  ------------------
  |  Branch (903:9): [True: 0, False: 6.53k]
  ------------------
  904|      0|        && !OSSL_PARAM_set_size_t(p->maxnonlen, drbg->max_noncelen))
  ------------------
  |  Branch (904:12): [True: 0, False: 0]
  ------------------
  905|      0|        return 0;
  906|       |
  907|  6.53k|    if (p->maxperlen != NULL
  ------------------
  |  Branch (907:9): [True: 0, False: 6.53k]
  ------------------
  908|      0|        && !OSSL_PARAM_set_size_t(p->maxperlen, drbg->max_perslen))
  ------------------
  |  Branch (908:12): [True: 0, False: 0]
  ------------------
  909|      0|        return 0;
  910|       |
  911|  6.53k|    if (p->maxadlen != NULL
  ------------------
  |  Branch (911:9): [True: 0, False: 6.53k]
  ------------------
  912|      0|        && !OSSL_PARAM_set_size_t(p->maxadlen, drbg->max_adinlen))
  ------------------
  |  Branch (912:12): [True: 0, False: 0]
  ------------------
  913|      0|        return 0;
  914|       |
  915|  6.53k|    if (p->reseed_req != NULL
  ------------------
  |  Branch (915:9): [True: 0, False: 6.53k]
  ------------------
  916|      0|        && !OSSL_PARAM_set_uint(p->reseed_req, drbg->reseed_interval))
  ------------------
  |  Branch (916:12): [True: 0, False: 0]
  ------------------
  917|      0|        return 0;
  918|       |
  919|  6.53k|    if (p->reseed_time != NULL
  ------------------
  |  Branch (919:9): [True: 0, False: 6.53k]
  ------------------
  920|      0|        && !OSSL_PARAM_set_time_t(p->reseed_time, drbg->reseed_time))
  ------------------
  |  Branch (920:12): [True: 0, False: 0]
  ------------------
  921|      0|        return 0;
  922|       |
  923|  6.53k|    if (p->reseed_int != NULL
  ------------------
  |  Branch (923:9): [True: 0, False: 6.53k]
  ------------------
  924|      0|        && !OSSL_PARAM_set_time_t(p->reseed_int, drbg->reseed_time_interval))
  ------------------
  |  Branch (924:12): [True: 0, False: 0]
  ------------------
  925|      0|        return 0;
  926|       |
  927|  6.53k|    if (!OSSL_FIPS_IND_GET_CTX_FROM_PARAM(drbg, p->ind))
  ------------------
  |  |  161|  6.53k|#define OSSL_FIPS_IND_GET_CTX_FROM_PARAM(ctx, params) 1
  ------------------
  |  Branch (927:9): [Folded, False: 6.53k]
  ------------------
  928|      0|        return 0;
  929|       |
  930|  6.53k|    return 1;
  931|  6.53k|}
ossl_drbg_get_ctx_params_no_lock:
  940|  19.6k|{
  941|  19.6k|    size_t cnt = 0;
  942|       |
  943|       |    /* This value never changes once set */
  944|  19.6k|    if (p->maxreq != NULL) {
  ------------------
  |  Branch (944:9): [True: 6.53k, False: 13.0k]
  ------------------
  945|  6.53k|        if (!OSSL_PARAM_set_size_t(p->maxreq, drbg->max_request))
  ------------------
  |  Branch (945:13): [True: 0, False: 6.53k]
  ------------------
  946|      0|            return 0;
  947|  6.53k|        cnt++;
  948|  6.53k|    }
  949|       |
  950|       |    /*
  951|       |     * Can be changed by multiple threads, but we tolerate inaccuracies in this
  952|       |     * value.
  953|       |     */
  954|  19.6k|    if (p->reseed_cnt != NULL) {
  ------------------
  |  Branch (954:9): [True: 6.53k, False: 13.0k]
  ------------------
  955|  6.53k|        if (!OSSL_PARAM_set_uint(p->reseed_cnt, tsan_load(&drbg->reseed_counter)))
  ------------------
  |  |   61|  6.53k|#define tsan_load(ptr) atomic_load_explicit((ptr), memory_order_relaxed)
  ------------------
  |  Branch (955:13): [True: 0, False: 6.53k]
  ------------------
  956|      0|            return 0;
  957|  6.53k|        cnt++;
  958|  6.53k|    }
  959|       |
  960|  19.6k|    if (params[cnt].key == NULL)
  ------------------
  |  Branch (960:9): [True: 13.0k, False: 6.53k]
  ------------------
  961|  13.0k|        *complete = 1;
  962|  6.53k|    else
  963|  6.53k|        *complete = 0;
  964|       |
  965|  19.6k|    return 1;
  966|  19.6k|}
ossl_drbg_set_ctx_params:
  970|      2|{
  971|      2|    if (p->reseed_req != NULL
  ------------------
  |  Branch (971:9): [True: 2, False: 0]
  ------------------
  972|      2|        && !OSSL_PARAM_get_uint(p->reseed_req, &drbg->reseed_interval))
  ------------------
  |  Branch (972:12): [True: 0, False: 2]
  ------------------
  973|      0|        return 0;
  974|       |
  975|      2|    if (p->reseed_time != NULL
  ------------------
  |  Branch (975:9): [True: 2, False: 0]
  ------------------
  976|      2|        && !OSSL_PARAM_get_time_t(p->reseed_time, &drbg->reseed_time_interval))
  ------------------
  |  Branch (976:12): [True: 0, False: 2]
  ------------------
  977|      0|        return 0;
  978|       |
  979|      2|    return 1;
  980|      2|}
drbg.c:get_entropy:
  195|      3|{
  196|      3|    size_t bytes;
  197|      3|    unsigned int p_str;
  198|       |
  199|      3|    if (drbg->parent == NULL)
  ------------------
  |  Branch (199:9): [True: 0, False: 3]
  ------------------
  200|       |        /*
  201|       |         * In normal use (i.e. OpenSSL's own uses), this is never called.
  202|       |         * This remains purely for legacy reasons.
  203|       |         */
  204|      0|        return ossl_prov_get_entropy(drbg->provctx, pout, entropy, min_len,
  205|      0|            max_len);
  206|       |
  207|      3|    if (drbg->parent_get_seed == NULL) {
  ------------------
  |  Branch (207:9): [True: 0, False: 3]
  ------------------
  208|      0|        ERR_raise(ERR_LIB_PROV, PROV_R_PARENT_CANNOT_SUPPLY_ENTROPY_SEED);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  209|      0|        return 0;
  210|      0|    }
  211|      3|    if (!get_parent_strength(drbg, &p_str))
  ------------------
  |  Branch (211:9): [True: 0, False: 3]
  ------------------
  212|      0|        return 0;
  213|      3|    if (drbg->strength > p_str) {
  ------------------
  |  Branch (213:9): [True: 0, False: 3]
  ------------------
  214|       |        /*
  215|       |         * We currently don't support the algorithm from NIST SP 800-90C
  216|       |         * 10.1.2 to use a weaker DRBG as source
  217|       |         */
  218|      0|        ERR_raise(ERR_LIB_PROV, PROV_R_PARENT_STRENGTH_TOO_WEAK);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  219|      0|        return 0;
  220|      0|    }
  221|       |
  222|       |    /*
  223|       |     * Our lock is already held, but we need to lock our parent before
  224|       |     * generating bits from it.  Note: taking the lock will be a no-op
  225|       |     * if locking is not required (while drbg->parent->lock == NULL).
  226|       |     */
  227|      3|    if (!ossl_drbg_lock_parent(drbg))
  ------------------
  |  Branch (227:9): [True: 0, False: 3]
  ------------------
  228|      0|        return 0;
  229|       |    /*
  230|       |     * Get random data from parent.  Include our DRBG address as
  231|       |     * additional input, in order to provide a distinction between
  232|       |     * different DRBG child instances.
  233|       |     *
  234|       |     * Note: using the sizeof() operator on a pointer triggers
  235|       |     *       a warning in some static code analyzers, but it's
  236|       |     *       intentional and correct here.
  237|       |     */
  238|      3|    bytes = drbg->parent_get_seed(drbg->parent, pout,
  239|      3|        entropy > 0 ? entropy : (int)drbg->strength,
  ------------------
  |  Branch (239:9): [True: 3, False: 0]
  ------------------
  240|      3|        min_len, max_len, prediction_resistance,
  241|      3|        (unsigned char *)&drbg, sizeof(drbg));
  242|      3|    ossl_drbg_unlock_parent(drbg);
  243|      3|    return bytes;
  244|      3|}
drbg.c:ossl_drbg_lock_parent:
   64|  6.54k|{
   65|  6.54k|    void *parent = drbg->parent;
   66|       |
   67|  6.54k|    if (parent != NULL
  ------------------
  |  Branch (67:9): [True: 6.54k, False: 0]
  ------------------
   68|  6.54k|        && drbg->parent_lock != NULL
  ------------------
  |  Branch (68:12): [True: 6.54k, False: 0]
  ------------------
   69|  6.54k|        && !drbg->parent_lock(parent)) {
  ------------------
  |  Branch (69:12): [True: 0, False: 6.54k]
  ------------------
   70|      0|        ERR_raise(ERR_LIB_PROV, PROV_R_PARENT_LOCKING_NOT_ENABLED);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
   71|      0|        return 0;
   72|      0|    }
   73|  6.54k|    return 1;
   74|  6.54k|}
drbg.c:ossl_drbg_unlock_parent:
   77|  6.54k|{
   78|  6.54k|    void *parent = drbg->parent;
   79|       |
   80|  6.54k|    if (parent != NULL && drbg->parent_unlock != NULL)
  ------------------
  |  Branch (80:9): [True: 6.54k, False: 0]
  |  Branch (80:27): [True: 6.54k, False: 0]
  ------------------
   81|  6.54k|        drbg->parent_unlock(parent);
   82|  6.54k|}
drbg.c:cleanup_entropy:
  247|      3|{
  248|      3|    if (drbg->parent == NULL) {
  ------------------
  |  Branch (248:9): [True: 0, False: 3]
  ------------------
  249|      0|        ossl_prov_cleanup_entropy(drbg->provctx, out, outlen);
  250|      3|    } else if (drbg->parent_clear_seed != NULL) {
  ------------------
  |  Branch (250:16): [True: 3, False: 0]
  ------------------
  251|      3|        if (!ossl_drbg_lock_parent(drbg))
  ------------------
  |  Branch (251:13): [True: 0, False: 3]
  ------------------
  252|      0|            return;
  253|      3|        drbg->parent_clear_seed(drbg->parent, out, outlen);
  254|      3|        ossl_drbg_unlock_parent(drbg);
  255|      3|    }
  256|      3|}
drbg.c:ossl_prov_drbg_reseed_unlocked:
  486|      1|{
  487|      1|    unsigned char *entropy = NULL;
  488|      1|    size_t entropylen = 0;
  489|       |
  490|      1|    if (!ossl_prov_is_running())
  ------------------
  |  Branch (490:9): [True: 0, False: 1]
  ------------------
  491|      0|        return 0;
  492|       |
  493|      1|    if (drbg->state != EVP_RAND_STATE_READY) {
  ------------------
  |  | 1250|      1|#define EVP_RAND_STATE_READY 1
  ------------------
  |  Branch (493:9): [True: 0, False: 1]
  ------------------
  494|       |        /* try to recover from previous errors */
  495|      0|        rand_drbg_restart(drbg);
  496|       |
  497|      0|        if (drbg->state == EVP_RAND_STATE_ERROR) {
  ------------------
  |  | 1251|      0|#define EVP_RAND_STATE_ERROR 2
  ------------------
  |  Branch (497:13): [True: 0, False: 0]
  ------------------
  498|      0|            ERR_raise(ERR_LIB_PROV, PROV_R_IN_ERROR_STATE);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  499|      0|            return 0;
  500|      0|        }
  501|      0|        if (drbg->state == EVP_RAND_STATE_UNINITIALISED) {
  ------------------
  |  | 1249|      0|#define EVP_RAND_STATE_UNINITIALISED 0
  ------------------
  |  Branch (501:13): [True: 0, False: 0]
  ------------------
  502|      0|            ERR_raise(ERR_LIB_PROV, PROV_R_NOT_INSTANTIATED);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  503|      0|            return 0;
  504|      0|        }
  505|      0|    }
  506|       |
  507|      1|    if (ent != NULL) {
  ------------------
  |  Branch (507:9): [True: 0, False: 1]
  ------------------
  508|      0|        if (ent_len < drbg->min_entropylen) {
  ------------------
  |  Branch (508:13): [True: 0, False: 0]
  ------------------
  509|      0|            ERR_raise(ERR_LIB_RAND, RAND_R_ENTROPY_OUT_OF_RANGE);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  510|      0|            drbg->state = EVP_RAND_STATE_ERROR;
  ------------------
  |  | 1251|      0|#define EVP_RAND_STATE_ERROR 2
  ------------------
  511|      0|            return 0;
  512|      0|        }
  513|      0|        if (ent_len > drbg->max_entropylen) {
  ------------------
  |  Branch (513:13): [True: 0, False: 0]
  ------------------
  514|      0|            ERR_raise(ERR_LIB_RAND, RAND_R_ENTROPY_INPUT_TOO_LONG);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  515|      0|            drbg->state = EVP_RAND_STATE_ERROR;
  ------------------
  |  | 1251|      0|#define EVP_RAND_STATE_ERROR 2
  ------------------
  516|      0|            return 0;
  517|      0|        }
  518|      0|    }
  519|       |
  520|      1|    if (adin == NULL) {
  ------------------
  |  Branch (520:9): [True: 1, False: 0]
  ------------------
  521|      1|        adinlen = 0;
  522|      1|    } else if (adinlen > drbg->max_adinlen) {
  ------------------
  |  Branch (522:16): [True: 0, False: 0]
  ------------------
  523|      0|        ERR_raise(ERR_LIB_PROV, PROV_R_ADDITIONAL_INPUT_TOO_LONG);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  524|      0|        return 0;
  525|      0|    }
  526|       |
  527|      1|    drbg->state = EVP_RAND_STATE_ERROR;
  ------------------
  |  | 1251|      1|#define EVP_RAND_STATE_ERROR 2
  ------------------
  528|       |
  529|      1|    drbg->reseed_next_counter = tsan_load(&drbg->reseed_counter);
  ------------------
  |  |   61|      1|#define tsan_load(ptr) atomic_load_explicit((ptr), memory_order_relaxed)
  ------------------
  530|      1|    if (drbg->reseed_next_counter) {
  ------------------
  |  Branch (530:9): [True: 1, False: 0]
  ------------------
  531|      1|        drbg->reseed_next_counter++;
  532|      1|        if (!drbg->reseed_next_counter)
  ------------------
  |  Branch (532:13): [True: 0, False: 1]
  ------------------
  533|      0|            drbg->reseed_next_counter = 1;
  534|      1|    }
  535|       |
  536|      1|    if (ent != NULL) {
  ------------------
  |  Branch (536:9): [True: 0, False: 1]
  ------------------
  537|       |#ifdef FIPS_MODULE
  538|       |        /*
  539|       |         * NIST SP-800-90A mandates that entropy *shall not* be provided
  540|       |         * by the consuming application. Instead the data is added as additional
  541|       |         * input.
  542|       |         *
  543|       |         * (NIST SP-800-90Ar1, Sections 9.1 and 9.2)
  544|       |         */
  545|       |        if (!drbg->reseed(drbg, NULL, 0, ent, ent_len)) {
  546|       |            ERR_raise(ERR_LIB_PROV, PROV_R_UNABLE_TO_RESEED);
  547|       |            return 0;
  548|       |        }
  549|       |#else
  550|      0|        if (!drbg->reseed(drbg, ent, ent_len, adin, adinlen)) {
  ------------------
  |  Branch (550:13): [True: 0, False: 0]
  ------------------
  551|      0|            ERR_raise(ERR_LIB_PROV, PROV_R_UNABLE_TO_RESEED);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  552|      0|            return 0;
  553|      0|        }
  554|       |        /* There isn't much point adding the same additional input twice */
  555|      0|        adin = NULL;
  556|      0|        adinlen = 0;
  557|      0|#endif
  558|      0|    }
  559|       |
  560|       |    /* Reseed using our sources in addition */
  561|      1|    entropylen = get_entropy(drbg, &entropy, drbg->strength,
  562|      1|        drbg->min_entropylen, drbg->max_entropylen,
  563|      1|        prediction_resistance);
  564|      1|    if (entropylen < drbg->min_entropylen
  ------------------
  |  Branch (564:9): [True: 0, False: 1]
  ------------------
  565|      1|        || entropylen > drbg->max_entropylen) {
  ------------------
  |  Branch (565:12): [True: 0, False: 1]
  ------------------
  566|      0|        ERR_raise(ERR_LIB_PROV, PROV_R_ERROR_RETRIEVING_ENTROPY);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  567|      0|        goto end;
  568|      0|    }
  569|       |
  570|      1|    if (!drbg->reseed(drbg, entropy, entropylen, adin, adinlen))
  ------------------
  |  Branch (570:9): [True: 0, False: 1]
  ------------------
  571|      0|        goto end;
  572|       |
  573|      1|    drbg->state = EVP_RAND_STATE_READY;
  ------------------
  |  | 1250|      1|#define EVP_RAND_STATE_READY 1
  ------------------
  574|      1|    drbg->generate_counter = 1;
  575|      1|    drbg->reseed_time = time(NULL);
  576|      1|    tsan_store(&drbg->reseed_counter, drbg->reseed_next_counter);
  ------------------
  |  |   62|      1|#define tsan_store(ptr, val) atomic_store_explicit((ptr), (val), memory_order_relaxed)
  ------------------
  577|      1|    if (drbg->parent != NULL)
  ------------------
  |  Branch (577:9): [True: 1, False: 0]
  ------------------
  578|      1|        drbg->parent_reseed_counter = get_parent_reseed_count(drbg);
  579|       |
  580|      1|end:
  581|      1|    cleanup_entropy(drbg, entropy, entropylen);
  582|      1|    if (drbg->state == EVP_RAND_STATE_READY)
  ------------------
  |  | 1250|      1|#define EVP_RAND_STATE_READY 1
  ------------------
  |  Branch (582:9): [True: 1, False: 0]
  ------------------
  583|      1|        return 1;
  584|      0|    return 0;
  585|      1|}
drbg.c:get_parent_reseed_count:
  110|  6.53k|{
  111|  6.53k|    OSSL_PARAM params[2] = { OSSL_PARAM_END, OSSL_PARAM_END };
  ------------------
  |  |   25|  6.53k|    { NULL, 0, NULL, 0, 0 }
  ------------------
                  OSSL_PARAM params[2] = { OSSL_PARAM_END, OSSL_PARAM_END };
  ------------------
  |  |   25|  6.53k|    { NULL, 0, NULL, 0, 0 }
  ------------------
  112|  6.53k|    void *parent = drbg->parent;
  113|  6.53k|    unsigned int r = 0;
  114|       |
  115|  6.53k|    *params = OSSL_PARAM_construct_uint(OSSL_DRBG_PARAM_RESEED_COUNTER, &r);
  ------------------
  |  |  254|  6.53k|# define OSSL_DRBG_PARAM_RESEED_COUNTER "reseed_counter"
  ------------------
  116|  6.53k|    if (!ossl_drbg_lock_parent(drbg)) {
  ------------------
  |  Branch (116:9): [True: 0, False: 6.53k]
  ------------------
  117|      0|        ERR_raise(ERR_LIB_PROV, PROV_R_UNABLE_TO_LOCK_PARENT);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  118|      0|        goto err;
  119|      0|    }
  120|  6.53k|    if (!drbg->parent_get_ctx_params(parent, params))
  ------------------
  |  Branch (120:9): [True: 0, False: 6.53k]
  ------------------
  121|      0|        r = 0;
  122|  6.53k|    ossl_drbg_unlock_parent(drbg);
  123|  6.53k|    return r;
  124|       |
  125|      0|err:
  126|      0|    r = tsan_load(&drbg->reseed_counter) - 2;
  ------------------
  |  |   61|      0|#define tsan_load(ptr) atomic_load_explicit((ptr), memory_order_relaxed)
  ------------------
  127|      0|    if (r == 0)
  ------------------
  |  Branch (127:9): [True: 0, False: 0]
  ------------------
  128|      0|        r = UINT_MAX;
  129|      0|    return r;
  130|  6.53k|}
drbg.c:find_call:
  748|     14|{
  749|     14|    if (dispatch != NULL)
  ------------------
  |  Branch (749:9): [True: 14, False: 0]
  ------------------
  750|    162|        while (dispatch->function_id != 0) {
  ------------------
  |  Branch (750:16): [True: 160, False: 2]
  ------------------
  751|    160|            if (dispatch->function_id == function)
  ------------------
  |  Branch (751:17): [True: 12, False: 148]
  ------------------
  752|     12|                return dispatch;
  753|    148|            dispatch++;
  754|    148|        }
  755|      2|    return NULL;
  756|     14|}
drbg.c:get_parent_strength:
   85|      5|{
   86|      5|    OSSL_PARAM params[2] = { OSSL_PARAM_END, OSSL_PARAM_END };
  ------------------
  |  |   25|      5|    { NULL, 0, NULL, 0, 0 }
  ------------------
                  OSSL_PARAM params[2] = { OSSL_PARAM_END, OSSL_PARAM_END };
  ------------------
  |  |   25|      5|    { NULL, 0, NULL, 0, 0 }
  ------------------
   87|      5|    void *parent = drbg->parent;
   88|      5|    int res;
   89|       |
   90|      5|    if (drbg->parent_get_ctx_params == NULL) {
  ------------------
  |  Branch (90:9): [True: 0, False: 5]
  ------------------
   91|      0|        ERR_raise(ERR_LIB_PROV, PROV_R_UNABLE_TO_GET_PARENT_STRENGTH);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
   92|      0|        return 0;
   93|      0|    }
   94|       |
   95|      5|    *params = OSSL_PARAM_construct_uint(OSSL_RAND_PARAM_STRENGTH, str);
  ------------------
  |  |  553|      5|# define OSSL_RAND_PARAM_STRENGTH "strength"
  ------------------
   96|      5|    if (!ossl_drbg_lock_parent(drbg)) {
  ------------------
  |  Branch (96:9): [True: 0, False: 5]
  ------------------
   97|      0|        ERR_raise(ERR_LIB_PROV, PROV_R_UNABLE_TO_LOCK_PARENT);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
   98|      0|        return 0;
   99|      0|    }
  100|      5|    res = drbg->parent_get_ctx_params(parent, params);
  101|      5|    ossl_drbg_unlock_parent(drbg);
  102|      5|    if (!res) {
  ------------------
  |  Branch (102:9): [True: 0, False: 5]
  ------------------
  103|      0|        ERR_raise(ERR_LIB_PROV, PROV_R_UNABLE_TO_GET_PARENT_STRENGTH);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  104|      0|        return 0;
  105|      0|    }
  106|      5|    return 1;
  107|      5|}

drbg_ctr.c:drbg_ctr_new_wrapper:
  649|      2|{
  650|       |#ifdef FIPS_MODULE
  651|       |    if (!ossl_deferred_self_test(PROV_LIBCTX_OF(provctx),
  652|       |            ST_ID_DRBG_CTR))
  653|       |        return NULL;
  654|       |#endif
  655|       |
  656|      2|    return ossl_rand_drbg_new(provctx, parent, parent_dispatch,
  657|      2|        &drbg_ctr_new, &drbg_ctr_free,
  658|      2|        &drbg_ctr_instantiate, &drbg_ctr_uninstantiate,
  659|      2|        &drbg_ctr_reseed, &drbg_ctr_generate);
  660|      2|}
drbg_ctr.c:drbg_ctr_new:
  634|      2|{
  635|      2|    PROV_DRBG_CTR *ctr;
  636|       |
  637|      2|    ctr = OPENSSL_secure_zalloc(sizeof(*ctr));
  ------------------
  |  |  142|      2|    CRYPTO_secure_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_secure_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  638|      2|    if (ctr == NULL)
  ------------------
  |  Branch (638:9): [True: 0, False: 2]
  ------------------
  639|      0|        return 0;
  640|       |
  641|      2|    ctr->use_df = 1;
  642|      2|    drbg->data = ctr;
  643|      2|    OSSL_FIPS_IND_INIT(drbg)
  644|      2|    return drbg_ctr_init_lengths(drbg);
  645|      2|}
drbg_ctr.c:drbg_ctr_init_lengths:
  540|      4|{
  541|      4|    PROV_DRBG_CTR *ctr = (PROV_DRBG_CTR *)drbg->data;
  542|      4|    int res = 1;
  543|       |
  544|       |    /* Maximum number of bits per request = 2^19  = 2^16 bytes */
  545|      4|    drbg->max_request = 1 << 16;
  546|      4|    if (ctr->use_df) {
  ------------------
  |  Branch (546:9): [True: 4, False: 0]
  ------------------
  547|      4|        drbg->min_entropylen = 0;
  548|      4|        drbg->max_entropylen = DRBG_MAX_LENGTH;
  ------------------
  |  |   41|      4|#define DRBG_MAX_LENGTH INT32_MAX
  ------------------
  549|      4|        drbg->min_noncelen = 0;
  550|      4|        drbg->max_noncelen = DRBG_MAX_LENGTH;
  ------------------
  |  |   41|      4|#define DRBG_MAX_LENGTH INT32_MAX
  ------------------
  551|      4|        drbg->max_perslen = DRBG_MAX_LENGTH;
  ------------------
  |  |   41|      4|#define DRBG_MAX_LENGTH INT32_MAX
  ------------------
  552|      4|        drbg->max_adinlen = DRBG_MAX_LENGTH;
  ------------------
  |  |   41|      4|#define DRBG_MAX_LENGTH INT32_MAX
  ------------------
  553|       |
  554|      4|        if (ctr->keylen > 0) {
  ------------------
  |  Branch (554:13): [True: 2, False: 2]
  ------------------
  555|      2|            drbg->min_entropylen = ctr->keylen;
  556|      2|            drbg->min_noncelen = drbg->min_entropylen / 2;
  557|      2|        }
  558|      4|    } else {
  559|      0|        const size_t len = ctr->keylen > 0 ? drbg->seedlen : DRBG_MAX_LENGTH;
  ------------------
  |  |   41|      0|#define DRBG_MAX_LENGTH INT32_MAX
  ------------------
  |  Branch (559:28): [True: 0, False: 0]
  ------------------
  560|       |
  561|      0|        drbg->min_entropylen = len;
  562|      0|        drbg->max_entropylen = len;
  563|       |        /* Nonce not used */
  564|      0|        drbg->min_noncelen = 0;
  565|      0|        drbg->max_noncelen = 0;
  566|      0|        drbg->max_perslen = len;
  567|      0|        drbg->max_adinlen = len;
  568|      0|    }
  569|      4|    return res;
  570|      4|}
drbg_ctr.c:drbg_ctr_instantiate:
  323|      2|{
  324|      2|    PROV_DRBG_CTR *ctr = (PROV_DRBG_CTR *)drbg->data;
  325|       |
  326|      2|    if (entropy == NULL)
  ------------------
  |  Branch (326:9): [True: 0, False: 2]
  ------------------
  327|      0|        return 0;
  328|       |
  329|      2|    memset(ctr->K, 0, sizeof(ctr->K));
  330|      2|    memset(ctr->V, 0, sizeof(ctr->V));
  331|      2|    if (!EVP_CipherInit_ex(ctr->ctx_ecb, NULL, NULL, ctr->K, NULL, -1))
  ------------------
  |  Branch (331:9): [True: 0, False: 2]
  ------------------
  332|      0|        return 0;
  333|       |
  334|      2|    inc_128(ctr);
  335|      2|    if (!ctr_update(drbg, entropy, entropylen, pers, perslen, nonce, noncelen))
  ------------------
  |  Branch (335:9): [True: 0, False: 2]
  ------------------
  336|      0|        return 0;
  337|      2|    return 1;
  338|      2|}
drbg_ctr.c:inc_128:
   72|  19.6k|{
   73|  19.6k|    unsigned char *p = &ctr->V[0];
   74|  19.6k|    u32 n = 16, c = 1;
   75|       |
   76|   313k|    do {
   77|   313k|        --n;
   78|   313k|        c += p[n];
   79|   313k|        p[n] = (u8)c;
   80|   313k|        c >>= 8;
   81|   313k|    } while (n);
  ------------------
  |  Branch (81:14): [True: 294k, False: 19.6k]
  ------------------
   82|  19.6k|}
drbg_ctr.c:ctr_update:
  277|  6.54k|{
  278|  6.54k|    PROV_DRBG_CTR *ctr = (PROV_DRBG_CTR *)drbg->data;
  279|  6.54k|    int outlen = AES_BLOCK_SIZE;
  ------------------
  |  |   26|  6.54k|#define AES_BLOCK_SIZE 16
  ------------------
  280|  6.54k|    unsigned char V_tmp[48], out[48];
  281|  6.54k|    unsigned char len;
  282|       |
  283|       |    /* correct key is already set up. */
  284|  6.54k|    memcpy(V_tmp, ctr->V, 16);
  285|  6.54k|    inc_128(ctr);
  286|  6.54k|    memcpy(V_tmp + 16, ctr->V, 16);
  287|  6.54k|    if (ctr->keylen == 16) {
  ------------------
  |  Branch (287:9): [True: 0, False: 6.54k]
  ------------------
  288|      0|        len = 32;
  289|  6.54k|    } else {
  290|  6.54k|        inc_128(ctr);
  291|  6.54k|        memcpy(V_tmp + 32, ctr->V, 16);
  292|  6.54k|        len = 48;
  293|  6.54k|    }
  294|  6.54k|    if (!EVP_CipherUpdate(ctr->ctx_ecb, out, &outlen, V_tmp, len)
  ------------------
  |  Branch (294:9): [True: 0, False: 6.54k]
  ------------------
  295|  6.54k|        || outlen != len)
  ------------------
  |  Branch (295:12): [True: 0, False: 6.54k]
  ------------------
  296|      0|        return 0;
  297|  6.54k|    memcpy(ctr->K, out, ctr->keylen);
  298|  6.54k|    memcpy(ctr->V, out + ctr->keylen, 16);
  299|       |
  300|  6.54k|    if (ctr->use_df) {
  ------------------
  |  Branch (300:9): [True: 6.54k, False: 0]
  ------------------
  301|       |        /* If no input reuse existing derived value */
  302|  6.54k|        if (in1 != NULL || nonce != NULL || in2 != NULL)
  ------------------
  |  Branch (302:13): [True: 5, False: 6.53k]
  |  Branch (302:28): [True: 0, False: 6.53k]
  |  Branch (302:45): [True: 0, False: 6.53k]
  ------------------
  303|      5|            if (!ctr_df(ctr, in1, in1len, nonce, noncelen, in2, in2len))
  ------------------
  |  Branch (303:17): [True: 0, False: 5]
  ------------------
  304|      0|                return 0;
  305|       |        /* If this a reuse input in1len != 0 */
  306|  6.54k|        if (in1len)
  ------------------
  |  Branch (306:13): [True: 7, False: 6.53k]
  ------------------
  307|      7|            ctr_XOR(ctr, ctr->KX, drbg->seedlen);
  308|  6.54k|    } else {
  309|      0|        ctr_XOR(ctr, in1, in1len);
  310|      0|        ctr_XOR(ctr, in2, in2len);
  311|      0|    }
  312|       |
  313|  6.54k|    if (!EVP_CipherInit_ex(ctr->ctx_ecb, NULL, NULL, ctr->K, NULL, -1)
  ------------------
  |  Branch (313:9): [True: 0, False: 6.54k]
  ------------------
  314|  6.54k|        || !EVP_CipherInit_ex(ctr->ctx_ctr, NULL, NULL, ctr->K, NULL, -1))
  ------------------
  |  Branch (314:12): [True: 0, False: 6.54k]
  ------------------
  315|      0|        return 0;
  316|  6.54k|    return 1;
  317|  6.54k|}
drbg_ctr.c:ctr_df:
  214|      5|{
  215|      5|    static unsigned char c80 = 0x80;
  216|      5|    size_t inlen;
  217|      5|    unsigned char *p = ctr->bltmp;
  218|      5|    int outlen = AES_BLOCK_SIZE;
  ------------------
  |  |   26|      5|#define AES_BLOCK_SIZE 16
  ------------------
  219|       |
  220|      5|    if (!ctr_BCC_init(ctr))
  ------------------
  |  Branch (220:9): [True: 0, False: 5]
  ------------------
  221|      0|        return 0;
  222|      5|    if (in1 == NULL)
  ------------------
  |  Branch (222:9): [True: 0, False: 5]
  ------------------
  223|      0|        in1len = 0;
  224|      5|    if (in2 == NULL)
  ------------------
  |  Branch (224:9): [True: 5, False: 0]
  ------------------
  225|      5|        in2len = 0;
  226|      5|    if (in3 == NULL)
  ------------------
  |  Branch (226:9): [True: 3, False: 2]
  ------------------
  227|      3|        in3len = 0;
  228|      5|    inlen = in1len + in2len + in3len;
  229|       |    /* Initialise L||N in temporary block */
  230|      5|    *p++ = (inlen >> 24) & 0xff;
  231|      5|    *p++ = (inlen >> 16) & 0xff;
  232|      5|    *p++ = (inlen >> 8) & 0xff;
  233|      5|    *p++ = inlen & 0xff;
  234|       |
  235|       |    /* NB keylen is at most 32 bytes */
  236|      5|    *p++ = 0;
  237|      5|    *p++ = 0;
  238|      5|    *p++ = 0;
  239|      5|    *p = (unsigned char)((ctr->keylen + 16) & 0xff);
  240|      5|    ctr->bltmp_pos = 8;
  241|      5|    if (!ctr_BCC_update(ctr, in1, in1len)
  ------------------
  |  Branch (241:9): [True: 0, False: 5]
  ------------------
  242|      5|        || !ctr_BCC_update(ctr, in2, in2len)
  ------------------
  |  Branch (242:12): [True: 0, False: 5]
  ------------------
  243|      5|        || !ctr_BCC_update(ctr, in3, in3len)
  ------------------
  |  Branch (243:12): [True: 0, False: 5]
  ------------------
  244|      5|        || !ctr_BCC_update(ctr, &c80, 1)
  ------------------
  |  Branch (244:12): [True: 0, False: 5]
  ------------------
  245|      5|        || !ctr_BCC_final(ctr))
  ------------------
  |  Branch (245:12): [True: 0, False: 5]
  ------------------
  246|      0|        return 0;
  247|       |    /* Set up key K */
  248|      5|    if (!EVP_CipherInit_ex(ctr->ctx_ecb, NULL, NULL, ctr->KX, NULL, -1))
  ------------------
  |  Branch (248:9): [True: 0, False: 5]
  ------------------
  249|      0|        return 0;
  250|       |    /* X follows key K */
  251|      5|    if (!EVP_CipherUpdate(ctr->ctx_ecb, ctr->KX, &outlen, ctr->KX + ctr->keylen,
  ------------------
  |  Branch (251:9): [True: 0, False: 5]
  ------------------
  252|      5|            AES_BLOCK_SIZE)
  ------------------
  |  |   26|      5|#define AES_BLOCK_SIZE 16
  ------------------
  253|      5|        || outlen != AES_BLOCK_SIZE)
  ------------------
  |  |   26|      5|#define AES_BLOCK_SIZE 16
  ------------------
  |  Branch (253:12): [True: 0, False: 5]
  ------------------
  254|      0|        return 0;
  255|      5|    if (!EVP_CipherUpdate(ctr->ctx_ecb, ctr->KX + 16, &outlen, ctr->KX,
  ------------------
  |  Branch (255:9): [True: 0, False: 5]
  ------------------
  256|      5|            AES_BLOCK_SIZE)
  ------------------
  |  |   26|      5|#define AES_BLOCK_SIZE 16
  ------------------
  257|      5|        || outlen != AES_BLOCK_SIZE)
  ------------------
  |  |   26|      5|#define AES_BLOCK_SIZE 16
  ------------------
  |  Branch (257:12): [True: 0, False: 5]
  ------------------
  258|      0|        return 0;
  259|      5|    if (ctr->keylen != 16)
  ------------------
  |  Branch (259:9): [True: 5, False: 0]
  ------------------
  260|      5|        if (!EVP_CipherUpdate(ctr->ctx_ecb, ctr->KX + 32, &outlen,
  ------------------
  |  Branch (260:13): [True: 0, False: 5]
  ------------------
  261|      5|                ctr->KX + 16, AES_BLOCK_SIZE)
  ------------------
  |  |   26|      5|#define AES_BLOCK_SIZE 16
  ------------------
  262|      5|            || outlen != AES_BLOCK_SIZE)
  ------------------
  |  |   26|      5|#define AES_BLOCK_SIZE 16
  ------------------
  |  Branch (262:16): [True: 0, False: 5]
  ------------------
  263|      0|            return 0;
  264|      5|    return 1;
  265|      5|}
drbg_ctr.c:ctr_BCC_init:
  151|      5|{
  152|      5|    unsigned char bltmp[48] = { 0 };
  153|      5|    unsigned char num_of_blk;
  154|       |
  155|      5|    memset(ctr->KX, 0, 48);
  156|      5|    num_of_blk = ctr->keylen == 16 ? 2 : 3;
  ------------------
  |  Branch (156:18): [True: 0, False: 5]
  ------------------
  157|      5|    bltmp[(AES_BLOCK_SIZE * 1) + 3] = 1;
  ------------------
  |  |   26|      5|#define AES_BLOCK_SIZE 16
  ------------------
  158|      5|    bltmp[(AES_BLOCK_SIZE * 2) + 3] = 2;
  ------------------
  |  |   26|      5|#define AES_BLOCK_SIZE 16
  ------------------
  159|      5|    return ctr_BCC_block(ctr, ctr->KX, bltmp, num_of_blk * AES_BLOCK_SIZE);
  ------------------
  |  |   26|      5|#define AES_BLOCK_SIZE 16
  ------------------
  160|      5|}
drbg_ctr.c:ctr_BCC_block:
  117|     24|{
  118|     24|    int i, outlen = AES_BLOCK_SIZE;
  ------------------
  |  |   26|     24|#define AES_BLOCK_SIZE 16
  ------------------
  119|       |
  120|  1.17k|    for (i = 0; i < len; i++)
  ------------------
  |  Branch (120:17): [True: 1.15k, False: 24]
  ------------------
  121|  1.15k|        out[i] ^= in[i];
  122|       |
  123|     24|    if (!EVP_CipherUpdate(ctr->ctx_df, out, &outlen, out, len)
  ------------------
  |  Branch (123:9): [True: 0, False: 24]
  ------------------
  124|     24|        || outlen != len)
  ------------------
  |  Branch (124:12): [True: 0, False: 24]
  ------------------
  125|      0|        return 0;
  126|     24|    return 1;
  127|     24|}
drbg_ctr.c:ctr_BCC_update:
  167|     20|{
  168|     20|    if (in == NULL || inlen == 0)
  ------------------
  |  Branch (168:9): [True: 8, False: 12]
  |  Branch (168:23): [True: 0, False: 12]
  ------------------
  169|      8|        return 1;
  170|       |
  171|       |    /* If we have partial block handle it first */
  172|     12|    if (ctr->bltmp_pos) {
  ------------------
  |  Branch (172:9): [True: 10, False: 2]
  ------------------
  173|     10|        size_t left = 16 - ctr->bltmp_pos;
  174|       |
  175|       |        /* If we now have a complete block process it */
  176|     10|        if (inlen >= left) {
  ------------------
  |  Branch (176:13): [True: 7, False: 3]
  ------------------
  177|      7|            memcpy(ctr->bltmp + ctr->bltmp_pos, in, left);
  178|      7|            if (!ctr_BCC_blocks(ctr, ctr->bltmp))
  ------------------
  |  Branch (178:17): [True: 0, False: 7]
  ------------------
  179|      0|                return 0;
  180|      7|            ctr->bltmp_pos = 0;
  181|      7|            inlen -= left;
  182|      7|            in += left;
  183|      7|        }
  184|     10|    }
  185|       |
  186|       |    /* Process zero or more complete blocks */
  187|     19|    for (; inlen >= 16; in += 16, inlen -= 16) {
  ------------------
  |  Branch (187:12): [True: 7, False: 12]
  ------------------
  188|      7|        if (!ctr_BCC_blocks(ctr, in))
  ------------------
  |  Branch (188:13): [True: 0, False: 7]
  ------------------
  189|      0|            return 0;
  190|      7|    }
  191|       |
  192|       |    /* Copy any remaining partial block to the temporary buffer */
  193|     12|    if (inlen > 0) {
  ------------------
  |  Branch (193:9): [True: 10, False: 2]
  ------------------
  194|     10|        memcpy(ctr->bltmp + ctr->bltmp_pos, in, inlen);
  195|     10|        ctr->bltmp_pos += inlen;
  196|     10|    }
  197|     12|    return 1;
  198|     12|}
drbg_ctr.c:ctr_BCC_blocks:
  133|     19|{
  134|     19|    unsigned char in_tmp[48];
  135|     19|    unsigned char num_of_blk = 2;
  136|       |
  137|     19|    memcpy(in_tmp, in, 16);
  138|     19|    memcpy(in_tmp + 16, in, 16);
  139|     19|    if (ctr->keylen != 16) {
  ------------------
  |  Branch (139:9): [True: 19, False: 0]
  ------------------
  140|     19|        memcpy(in_tmp + 32, in, 16);
  141|     19|        num_of_blk = 3;
  142|     19|    }
  143|     19|    return ctr_BCC_block(ctr, ctr->KX, in_tmp, AES_BLOCK_SIZE * num_of_blk);
  ------------------
  |  |   26|     19|#define AES_BLOCK_SIZE 16
  ------------------
  144|     19|}
drbg_ctr.c:ctr_BCC_final:
  201|      5|{
  202|      5|    if (ctr->bltmp_pos) {
  ------------------
  |  Branch (202:9): [True: 5, False: 0]
  ------------------
  203|      5|        memset(ctr->bltmp + ctr->bltmp_pos, 0, 16 - ctr->bltmp_pos);
  204|      5|        if (!ctr_BCC_blocks(ctr, ctr->bltmp))
  ------------------
  |  Branch (204:13): [True: 0, False: 5]
  ------------------
  205|      0|            return 0;
  206|      5|    }
  207|      5|    return 1;
  208|      5|}
drbg_ctr.c:ctr_XOR:
   85|      7|{
   86|      7|    size_t i, n;
   87|       |
   88|      7|    if (in == NULL || inlen == 0)
  ------------------
  |  Branch (88:9): [True: 0, False: 7]
  |  Branch (88:23): [True: 0, False: 7]
  ------------------
   89|      0|        return;
   90|       |
   91|       |    /*
   92|       |     * Any zero padding will have no effect on the result as we
   93|       |     * are XORing. So just process however much input we have.
   94|       |     */
   95|      7|    n = inlen < ctr->keylen ? inlen : ctr->keylen;
  ------------------
  |  Branch (95:9): [True: 0, False: 7]
  ------------------
   96|      7|    if (!ossl_assert(n <= sizeof(ctr->K)))
  ------------------
  |  |   52|      7|#define ossl_assert(x) ossl_assert_int((x) != 0, "Assertion failed: " #x, \
  |  |   53|      7|    __FILE__, __LINE__)
  ------------------
  |  Branch (96:9): [True: 0, False: 7]
  ------------------
   97|      0|        return;
   98|    231|    for (i = 0; i < n; i++)
  ------------------
  |  Branch (98:17): [True: 224, False: 7]
  ------------------
   99|    224|        ctr->K[i] ^= in[i];
  100|      7|    if (inlen <= ctr->keylen)
  ------------------
  |  Branch (100:9): [True: 0, False: 7]
  ------------------
  101|      0|        return;
  102|       |
  103|      7|    n = inlen - ctr->keylen;
  104|      7|    if (n > 16) {
  ------------------
  |  Branch (104:9): [True: 0, False: 7]
  ------------------
  105|       |        /* Should never happen */
  106|      0|        n = 16;
  107|      0|    }
  108|    119|    for (i = 0; i < n; i++)
  ------------------
  |  Branch (108:17): [True: 112, False: 7]
  ------------------
  109|    112|        ctr->V[i] ^= in[i + ctr->keylen];
  110|      7|}
drbg_ctr.c:drbg_ctr_reseed:
  370|      1|{
  371|      1|    PROV_DRBG_CTR *ctr = (PROV_DRBG_CTR *)drbg->data;
  372|       |
  373|      1|    if (entropy == NULL)
  ------------------
  |  Branch (373:9): [True: 0, False: 1]
  ------------------
  374|      0|        return 0;
  375|       |
  376|      1|    inc_128(ctr);
  377|      1|    if (!ctr_update(drbg, entropy, entropylen, adin, adinlen, NULL, 0))
  ------------------
  |  Branch (377:9): [True: 0, False: 1]
  ------------------
  378|      0|        return 0;
  379|      1|    return 1;
  380|      1|}
drbg_ctr.c:drbg_ctr_generate:
  407|  6.53k|{
  408|  6.53k|    PROV_DRBG_CTR *ctr = (PROV_DRBG_CTR *)drbg->data;
  409|  6.53k|    unsigned int ctr32, blocks;
  410|  6.53k|    int outl, buflen;
  411|       |
  412|  6.53k|    if (adin != NULL && adinlen != 0) {
  ------------------
  |  Branch (412:9): [True: 2, False: 6.53k]
  |  Branch (412:25): [True: 2, False: 0]
  ------------------
  413|      2|        inc_128(ctr);
  414|       |
  415|      2|        if (!ctr_update(drbg, adin, adinlen, NULL, 0, NULL, 0))
  ------------------
  |  Branch (415:13): [True: 0, False: 2]
  ------------------
  416|      0|            return 0;
  417|       |        /* This means we reuse derived value */
  418|      2|        if (ctr->use_df) {
  ------------------
  |  Branch (418:13): [True: 2, False: 0]
  ------------------
  419|      2|            adin = NULL;
  420|      2|            adinlen = 1;
  421|      2|        }
  422|  6.53k|    } else {
  423|  6.53k|        adinlen = 0;
  424|  6.53k|    }
  425|       |
  426|  6.53k|    inc_128(ctr);
  427|       |
  428|  6.53k|    if (outlen == 0) {
  ------------------
  |  Branch (428:9): [True: 0, False: 6.53k]
  ------------------
  429|      0|        inc_128(ctr);
  430|       |
  431|      0|        if (!ctr_update(drbg, adin, adinlen, NULL, 0, NULL, 0))
  ------------------
  |  Branch (431:13): [True: 0, False: 0]
  ------------------
  432|      0|            return 0;
  433|      0|        return 1;
  434|      0|    }
  435|       |
  436|  6.53k|    memset(out, 0, outlen);
  437|       |
  438|  6.53k|    do {
  439|  6.53k|        if (!EVP_CipherInit_ex(ctr->ctx_ctr,
  ------------------
  |  Branch (439:13): [True: 0, False: 6.53k]
  ------------------
  440|  6.53k|                NULL, NULL, NULL, ctr->V, -1))
  441|      0|            return 0;
  442|       |
  443|       |        /*-
  444|       |         * outlen has type size_t while EVP_CipherUpdate takes an
  445|       |         * int argument and thus cannot be guaranteed to process more
  446|       |         * than 2^31-1 bytes at a time. We process such huge generate
  447|       |         * requests in 2^30 byte chunks, which is the greatest multiple
  448|       |         * of AES block size lower than or equal to 2^31-1.
  449|       |         */
  450|  6.53k|        buflen = outlen > (1U << 30) ? (1 << 30) : (int)outlen;
  ------------------
  |  Branch (450:18): [True: 0, False: 6.53k]
  ------------------
  451|  6.53k|        blocks = (buflen + 15) / 16;
  452|       |
  453|  6.53k|        ctr32 = GETU32(ctr->V + 12) + blocks;
  ------------------
  |  |   98|  6.53k|#define GETU32(p) ((u32)(p)[0] << 24 | (u32)(p)[1] << 16 | (u32)(p)[2] << 8 | (u32)(p)[3])
  ------------------
  454|  6.53k|        if (ctr32 < blocks) {
  ------------------
  |  Branch (454:13): [True: 0, False: 6.53k]
  ------------------
  455|       |            /* 32-bit counter overflow into V. */
  456|      0|            if (ctr32 != 0) {
  ------------------
  |  Branch (456:17): [True: 0, False: 0]
  ------------------
  457|      0|                blocks -= ctr32;
  458|      0|                buflen = blocks * 16;
  459|      0|                ctr32 = 0;
  460|      0|            }
  461|      0|            ctr96_inc(ctr->V);
  462|      0|        }
  463|  6.53k|        PUTU32(ctr->V + 12, ctr32);
  ------------------
  |  |   99|  6.53k|#define PUTU32(p, v) ((p)[0] = (u8)((v) >> 24), (p)[1] = (u8)((v) >> 16), (p)[2] = (u8)((v) >> 8), (p)[3] = (u8)(v))
  ------------------
  464|       |
  465|  6.53k|        if (!EVP_CipherUpdate(ctr->ctx_ctr, out, &outl, out, buflen)
  ------------------
  |  Branch (465:13): [True: 0, False: 6.53k]
  ------------------
  466|  6.53k|            || outl != buflen)
  ------------------
  |  Branch (466:16): [True: 0, False: 6.53k]
  ------------------
  467|      0|            return 0;
  468|       |
  469|  6.53k|        out += buflen;
  470|  6.53k|        outlen -= buflen;
  471|  6.53k|    } while (outlen);
  ------------------
  |  Branch (471:14): [True: 0, False: 6.53k]
  ------------------
  472|       |
  473|  6.53k|    if (!ctr_update(drbg, adin, adinlen, NULL, 0, NULL, 0))
  ------------------
  |  Branch (473:9): [True: 0, False: 6.53k]
  ------------------
  474|      0|        return 0;
  475|  6.53k|    return 1;
  476|  6.53k|}
drbg_ctr.c:drbg_ctr_instantiate_wrapper:
  345|      2|{
  346|      2|    PROV_DRBG *drbg = (PROV_DRBG *)vdrbg;
  347|      2|    struct drbg_set_ctx_params_st p;
  348|      2|    int ret = 0;
  349|       |
  350|      2|    if (drbg == NULL || !drbg_ctr_set_ctx_params_decoder(params, &p))
  ------------------
  |  Branch (350:9): [True: 0, False: 2]
  |  Branch (350:25): [True: 0, False: 2]
  ------------------
  351|      0|        return 0;
  352|       |
  353|      2|    if (drbg->lock != NULL && !CRYPTO_THREAD_write_lock(drbg->lock))
  ------------------
  |  Branch (353:9): [True: 0, False: 2]
  |  Branch (353:31): [True: 0, False: 0]
  ------------------
  354|      0|        return 0;
  355|       |
  356|      2|    if (!ossl_prov_is_running()
  ------------------
  |  Branch (356:9): [True: 0, False: 2]
  ------------------
  357|      2|        || !drbg_ctr_set_ctx_params_locked(drbg, &p))
  ------------------
  |  Branch (357:12): [True: 0, False: 2]
  ------------------
  358|      0|        goto err;
  359|      2|    ret = ossl_prov_drbg_instantiate(drbg, strength, prediction_resistance,
  360|      2|        pstr, pstr_len);
  361|      2|err:
  362|      2|    if (drbg->lock != NULL)
  ------------------
  |  Branch (362:9): [True: 0, False: 2]
  ------------------
  363|      0|        CRYPTO_THREAD_unlock(drbg->lock);
  364|      2|    return ret;
  365|      2|}
drbg_ctr.c:drbg_ctr_set_ctx_params_locked:
  726|      2|{
  727|      2|    PROV_DRBG_CTR *ctr = (PROV_DRBG_CTR *)ctx->data;
  728|      2|    OSSL_LIB_CTX *libctx = PROV_LIBCTX_OF(ctx->provctx);
  ------------------
  |  |   31|      2|    ossl_prov_ctx_get0_libctx((provctx))
  ------------------
  729|      2|    OSSL_PROVIDER *prov = NULL;
  730|      2|    char *ecb;
  731|      2|    const char *propquery = NULL;
  732|      2|    int i, cipher_init = 0;
  733|       |
  734|      2|    if (p->df != NULL && OSSL_PARAM_get_int(p->df, &i)) {
  ------------------
  |  Branch (734:9): [True: 2, False: 0]
  |  Branch (734:26): [True: 2, False: 0]
  ------------------
  735|       |        /* FIPS errors out in the drbg_ctr_init() call later */
  736|      2|        ctr->use_df = i != 0;
  737|      2|        cipher_init = 1;
  738|      2|    }
  739|       |
  740|      2|    if (p->propq != NULL) {
  ------------------
  |  Branch (740:9): [True: 0, False: 2]
  ------------------
  741|      0|        if (p->propq->data_type != OSSL_PARAM_UTF8_STRING)
  ------------------
  |  |  117|      0|#define OSSL_PARAM_UTF8_STRING 4
  ------------------
  |  Branch (741:13): [True: 0, False: 0]
  ------------------
  742|      0|            return 0;
  743|      0|        propquery = (const char *)p->propq->data;
  744|      0|    }
  745|       |
  746|      2|    if (p->prov != NULL) {
  ------------------
  |  Branch (746:9): [True: 2, False: 0]
  ------------------
  747|      2|        if (p->prov->data_type != OSSL_PARAM_UTF8_STRING)
  ------------------
  |  |  117|      2|#define OSSL_PARAM_UTF8_STRING 4
  ------------------
  |  Branch (747:13): [True: 0, False: 2]
  ------------------
  748|      0|            return 0;
  749|      2|        if ((prov = ossl_provider_find(libctx,
  ------------------
  |  Branch (749:13): [True: 0, False: 2]
  ------------------
  750|      2|                 (const char *)p->prov->data, 1))
  751|      2|            == NULL)
  752|      0|            return 0;
  753|      2|    }
  754|       |
  755|      2|    if (p->cipher != NULL) {
  ------------------
  |  Branch (755:9): [True: 2, False: 0]
  ------------------
  756|      2|        const char *base = (const char *)p->cipher->data;
  757|      2|        size_t ctr_str_len = sizeof("CTR") - 1;
  758|      2|        size_t ecb_str_len = sizeof("ECB") - 1;
  759|       |
  760|      2|        if (p->cipher->data_type != OSSL_PARAM_UTF8_STRING
  ------------------
  |  |  117|      4|#define OSSL_PARAM_UTF8_STRING 4
  ------------------
  |  Branch (760:13): [True: 0, False: 2]
  ------------------
  761|      2|            || p->cipher->data_size < ctr_str_len) {
  ------------------
  |  Branch (761:16): [True: 0, False: 2]
  ------------------
  762|      0|            ossl_provider_free(prov);
  763|      0|            return 0;
  764|      0|        }
  765|      2|        if (OPENSSL_strcasecmp("CTR", base + p->cipher->data_size - ctr_str_len) != 0) {
  ------------------
  |  Branch (765:13): [True: 0, False: 2]
  ------------------
  766|      0|            ERR_raise(ERR_LIB_PROV, PROV_R_REQUIRE_CTR_MODE_CIPHER);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  767|      0|            ossl_provider_free(prov);
  768|      0|            return 0;
  769|      0|        }
  770|      2|        if ((ecb = OPENSSL_strndup(base, p->cipher->data_size)) == NULL) {
  ------------------
  |  |  138|      2|    CRYPTO_strndup(str, n, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_strndup(str, n, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  |  Branch (770:13): [True: 0, False: 2]
  ------------------
  771|      0|            ossl_provider_free(prov);
  772|      0|            return 0;
  773|      0|        }
  774|      2|        strcpy(ecb + p->cipher->data_size - ecb_str_len, "ECB");
  775|      2|        EVP_CIPHER_free(ctr->cipher_ecb);
  776|      2|        EVP_CIPHER_free(ctr->cipher_ctr);
  777|       |        /*
  778|       |         * Try to fetch algorithms from our own provider code, fallback
  779|       |         * to generic fetch only if that fails
  780|       |         */
  781|      2|        (void)ERR_set_mark();
  782|      2|        ctr->cipher_ctr = evp_cipher_fetch_from_prov(prov, base, NULL);
  783|      2|        if (ctr->cipher_ctr == NULL) {
  ------------------
  |  Branch (783:13): [True: 0, False: 2]
  ------------------
  784|      0|            (void)ERR_pop_to_mark();
  785|      0|            ctr->cipher_ctr = EVP_CIPHER_fetch(libctx, base, propquery);
  786|      2|        } else {
  787|      2|            (void)ERR_clear_last_mark();
  788|      2|        }
  789|      2|        (void)ERR_set_mark();
  790|      2|        ctr->cipher_ecb = evp_cipher_fetch_from_prov(prov, ecb, NULL);
  791|      2|        if (ctr->cipher_ecb == NULL) {
  ------------------
  |  Branch (791:13): [True: 0, False: 2]
  ------------------
  792|      0|            (void)ERR_pop_to_mark();
  793|      0|            ctr->cipher_ecb = EVP_CIPHER_fetch(libctx, ecb, propquery);
  794|      2|        } else {
  795|      2|            (void)ERR_clear_last_mark();
  796|      2|        }
  797|      2|        OPENSSL_free(ecb);
  ------------------
  |  |  132|      2|    CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  798|      2|        if (ctr->cipher_ctr == NULL || ctr->cipher_ecb == NULL) {
  ------------------
  |  Branch (798:13): [True: 0, False: 2]
  |  Branch (798:40): [True: 0, False: 2]
  ------------------
  799|      0|            ERR_raise(ERR_LIB_PROV, PROV_R_UNABLE_TO_FIND_CIPHERS);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  800|      0|            ossl_provider_free(prov);
  801|      0|            return 0;
  802|      0|        }
  803|      2|        cipher_init = 1;
  804|      2|    }
  805|      2|    ossl_provider_free(prov);
  806|       |
  807|      2|    if (cipher_init && !drbg_ctr_init(ctx))
  ------------------
  |  Branch (807:9): [True: 2, False: 0]
  |  Branch (807:24): [True: 0, False: 2]
  ------------------
  808|      0|        return 0;
  809|       |
  810|      2|    return ossl_drbg_set_ctx_params(ctx, p);
  811|      2|}
drbg_ctr.c:drbg_ctr_init:
  573|      2|{
  574|      2|    PROV_DRBG_CTR *ctr = (PROV_DRBG_CTR *)drbg->data;
  575|      2|    size_t keylen;
  576|       |
  577|      2|    if (ctr->cipher_ctr == NULL) {
  ------------------
  |  Branch (577:9): [True: 0, False: 2]
  ------------------
  578|      0|        ERR_raise(ERR_LIB_PROV, PROV_R_MISSING_CIPHER);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  579|      0|        return 0;
  580|      0|    }
  581|      2|    ctr->keylen = keylen = EVP_CIPHER_get_key_length(ctr->cipher_ctr);
  582|      2|    if (ctr->ctx_ecb == NULL)
  ------------------
  |  Branch (582:9): [True: 2, False: 0]
  ------------------
  583|      2|        ctr->ctx_ecb = EVP_CIPHER_CTX_new();
  584|      2|    if (ctr->ctx_ctr == NULL)
  ------------------
  |  Branch (584:9): [True: 2, False: 0]
  ------------------
  585|      2|        ctr->ctx_ctr = EVP_CIPHER_CTX_new();
  586|      2|    if (ctr->ctx_ecb == NULL || ctr->ctx_ctr == NULL) {
  ------------------
  |  Branch (586:9): [True: 0, False: 2]
  |  Branch (586:33): [True: 0, False: 2]
  ------------------
  587|      0|        ERR_raise(ERR_LIB_PROV, ERR_R_EVP_LIB);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  588|      0|        goto err;
  589|      0|    }
  590|       |
  591|      2|    if (!EVP_CipherInit_ex(ctr->ctx_ecb,
  ------------------
  |  Branch (591:9): [True: 0, False: 2]
  ------------------
  592|      2|            ctr->cipher_ecb, NULL, NULL, NULL, 1)
  593|      2|        || !EVP_CipherInit_ex(ctr->ctx_ctr,
  ------------------
  |  Branch (593:12): [True: 0, False: 2]
  ------------------
  594|      2|            ctr->cipher_ctr, NULL, NULL, NULL, 1)) {
  595|      0|        ERR_raise(ERR_LIB_PROV, PROV_R_UNABLE_TO_INITIALISE_CIPHERS);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  596|      0|        goto err;
  597|      0|    }
  598|       |
  599|      2|    drbg->strength = (unsigned int)(keylen * 8);
  600|      2|    drbg->seedlen = keylen + 16;
  601|       |
  602|      2|    if (ctr->use_df) {
  ------------------
  |  Branch (602:9): [True: 2, False: 0]
  ------------------
  603|       |        /* df initialisation */
  604|      2|        static const unsigned char df_key[32] = {
  605|      2|            0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
  606|      2|            0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
  607|      2|            0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
  608|      2|            0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f
  609|      2|        };
  610|       |
  611|      2|        if (ctr->ctx_df == NULL)
  ------------------
  |  Branch (611:13): [True: 2, False: 0]
  ------------------
  612|      2|            ctr->ctx_df = EVP_CIPHER_CTX_new();
  613|      2|        if (ctr->ctx_df == NULL) {
  ------------------
  |  Branch (613:13): [True: 0, False: 2]
  ------------------
  614|      0|            ERR_raise(ERR_LIB_PROV, ERR_R_EVP_LIB);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  615|      0|            goto err;
  616|      0|        }
  617|       |        /* Set key schedule for df_key */
  618|      2|        if (!EVP_CipherInit_ex(ctr->ctx_df,
  ------------------
  |  Branch (618:13): [True: 0, False: 2]
  ------------------
  619|      2|                ctr->cipher_ecb, NULL, df_key, NULL, 1)) {
  620|      0|            ERR_raise(ERR_LIB_PROV, PROV_R_DERIVATION_FUNCTION_INIT_FAILED);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  621|      0|            goto err;
  622|      0|        }
  623|      2|    }
  624|      2|    return drbg_ctr_init_lengths(drbg);
  625|       |
  626|      0|err:
  627|      0|    EVP_CIPHER_CTX_free(ctr->ctx_ecb);
  628|      0|    EVP_CIPHER_CTX_free(ctr->ctx_ctr);
  629|       |    ctr->ctx_ecb = ctr->ctx_ctr = NULL;
  630|      0|    return 0;
  631|      2|}
drbg_ctr.c:drbg_ctr_generate_wrapper:
  481|  6.53k|{
  482|  6.53k|    PROV_DRBG *drbg = (PROV_DRBG *)vdrbg;
  483|       |
  484|  6.53k|    return ossl_prov_drbg_generate(drbg, out, outlen, strength,
  485|  6.53k|        prediction_resistance, adin, adin_len);
  486|  6.53k|}
drbg_ctr.c:drbg_ctr_settable_ctx_params:
  835|      2|{
  836|      2|    return drbg_ctr_set_ctx_params_list;
  837|      2|}
drbg_ctr.c:drbg_ctr_get_ctx_params:
  680|  19.6k|{
  681|  19.6k|    PROV_DRBG *drbg = (PROV_DRBG *)vdrbg;
  682|  19.6k|    PROV_DRBG_CTR *ctr;
  683|  19.6k|    struct drbg_ctr_get_ctx_params_st p;
  684|  19.6k|    int ret = 0, complete = 0;
  685|       |
  686|  19.6k|    if (drbg == NULL || !drbg_ctr_get_ctx_params_decoder(params, &p))
  ------------------
  |  Branch (686:9): [True: 0, False: 19.6k]
  |  Branch (686:25): [True: 0, False: 19.6k]
  ------------------
  687|      0|        return 0;
  688|       |
  689|  19.6k|    if (!ossl_drbg_get_ctx_params_no_lock(drbg, &p, params, &complete))
  ------------------
  |  Branch (689:9): [True: 0, False: 19.6k]
  ------------------
  690|      0|        return 0;
  691|       |
  692|  19.6k|    if (complete)
  ------------------
  |  Branch (692:9): [True: 13.0k, False: 6.53k]
  ------------------
  693|  13.0k|        return 1;
  694|       |
  695|  6.53k|    ctr = (PROV_DRBG_CTR *)drbg->data;
  696|       |
  697|  6.53k|    if (drbg->lock != NULL && !CRYPTO_THREAD_read_lock(drbg->lock))
  ------------------
  |  Branch (697:9): [True: 6.53k, False: 0]
  |  Branch (697:31): [True: 0, False: 6.53k]
  ------------------
  698|      0|        return 0;
  699|       |
  700|  6.53k|    if (p.df != NULL && !OSSL_PARAM_set_int(p.df, ctr->use_df))
  ------------------
  |  Branch (700:9): [True: 0, False: 6.53k]
  |  Branch (700:25): [True: 0, False: 0]
  ------------------
  701|      0|        goto err;
  702|       |
  703|  6.53k|    if (p.cipher != NULL) {
  ------------------
  |  Branch (703:9): [True: 0, False: 6.53k]
  ------------------
  704|      0|        if (ctr->cipher_ctr == NULL
  ------------------
  |  Branch (704:13): [True: 0, False: 0]
  ------------------
  705|      0|            || !OSSL_PARAM_set_utf8_string(p.cipher,
  ------------------
  |  Branch (705:16): [True: 0, False: 0]
  ------------------
  706|      0|                EVP_CIPHER_get0_name(ctr->cipher_ctr)))
  707|      0|            goto err;
  708|      0|    }
  709|       |
  710|  6.53k|    ret = ossl_drbg_get_ctx_params(drbg, &p);
  711|  6.53k|err:
  712|  6.53k|    if (drbg->lock != NULL)
  ------------------
  |  Branch (712:9): [True: 6.53k, False: 0]
  ------------------
  713|  6.53k|        CRYPTO_THREAD_unlock(drbg->lock);
  714|       |
  715|  6.53k|    return ret;
  716|  6.53k|}

drbg_ctr.c:drbg_ctr_set_ctx_params_decoder:
  379|      2|{
  380|      2|    const char *s;
  381|       |
  382|      2|    memset(r, 0, sizeof(*r));
  383|      2|    if (p != NULL)
  ------------------
  |  Branch (383:9): [True: 2, False: 0]
  ------------------
  384|     12|        for (; (s = p->key) != NULL; p++)
  ------------------
  |  Branch (384:16): [True: 10, False: 2]
  ------------------
  385|     10|            switch(s[0]) {
  386|      0|            default:
  ------------------
  |  Branch (386:13): [True: 0, False: 10]
  ------------------
  387|      0|                break;
  388|      2|            case 'c':
  ------------------
  |  Branch (388:13): [True: 2, False: 8]
  ------------------
  389|      2|                if (ossl_likely(strcmp("ipher", s + 1) == 0)) {
  ------------------
  |  |   22|      2|#define ossl_likely(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (22:24): [True: 2, False: 0]
  |  |  ------------------
  ------------------
  390|       |                    /* OSSL_DRBG_PARAM_CIPHER */
  391|      2|                    if (ossl_unlikely(r->cipher != NULL)) {
  ------------------
  |  |   23|      2|#define ossl_unlikely(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (23:26): [True: 0, False: 2]
  |  |  ------------------
  ------------------
  392|      0|                        ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  ------------------
  |  |  361|      0|        ERR_set_error)
  ------------------
                                      ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  101|      0|#define ERR_LIB_PROV 57
  ------------------
                                      ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  142|      0|#define PROV_R_REPEATED_PARAMETER 252
  ------------------
  393|      0|                                       "param %s is repeated", s);
  394|      0|                        return 0;
  395|      0|                    }
  396|      2|                    r->cipher = (OSSL_PARAM *)p;
  397|      2|                }
  398|      2|                break;
  399|      2|            case 'p':
  ------------------
  |  Branch (399:13): [True: 2, False: 8]
  ------------------
  400|      2|                switch(s[1]) {
  401|      0|                default:
  ------------------
  |  Branch (401:17): [True: 0, False: 2]
  ------------------
  402|      0|                    break;
  403|      2|                case 'r':
  ------------------
  |  Branch (403:17): [True: 2, False: 0]
  ------------------
  404|      2|                    switch(s[2]) {
  405|      0|                    default:
  ------------------
  |  Branch (405:21): [True: 0, False: 2]
  ------------------
  406|      0|                        break;
  407|      2|                    case 'o':
  ------------------
  |  Branch (407:21): [True: 2, False: 0]
  ------------------
  408|      2|                        switch(s[3]) {
  409|      0|                        default:
  ------------------
  |  Branch (409:25): [True: 0, False: 2]
  ------------------
  410|      0|                            break;
  411|      0|                        case 'p':
  ------------------
  |  Branch (411:25): [True: 0, False: 2]
  ------------------
  412|      0|                            if (ossl_likely(strcmp("erties", s + 4) == 0)) {
  ------------------
  |  |   22|      0|#define ossl_likely(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (22:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  413|       |                                /* OSSL_DRBG_PARAM_PROPERTIES */
  414|      0|                                if (ossl_unlikely(r->propq != NULL)) {
  ------------------
  |  |   23|      0|#define ossl_unlikely(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (23:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  415|      0|                                    ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  ------------------
  |  |  361|      0|        ERR_set_error)
  ------------------
                                                  ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  101|      0|#define ERR_LIB_PROV 57
  ------------------
                                                  ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  142|      0|#define PROV_R_REPEATED_PARAMETER 252
  ------------------
  416|      0|                                                   "param %s is repeated", s);
  417|      0|                                    return 0;
  418|      0|                                }
  419|      0|                                r->propq = (OSSL_PARAM *)p;
  420|      0|                            }
  421|      0|                            break;
  422|      2|                        case 'v':
  ------------------
  |  Branch (422:25): [True: 2, False: 0]
  ------------------
  423|      2|                            if (ossl_likely(strcmp("ider-name", s + 4) == 0)) {
  ------------------
  |  |   22|      2|#define ossl_likely(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (22:24): [True: 2, False: 0]
  |  |  ------------------
  ------------------
  424|       |                                /* OSSL_PROV_PARAM_CORE_PROV_NAME */
  425|      2|                                if (ossl_unlikely(r->prov != NULL)) {
  ------------------
  |  |   23|      2|#define ossl_unlikely(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (23:26): [True: 0, False: 2]
  |  |  ------------------
  ------------------
  426|      0|                                    ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  ------------------
  |  |  361|      0|        ERR_set_error)
  ------------------
                                                  ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  101|      0|#define ERR_LIB_PROV 57
  ------------------
                                                  ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  142|      0|#define PROV_R_REPEATED_PARAMETER 252
  ------------------
  427|      0|                                                   "param %s is repeated", s);
  428|      0|                                    return 0;
  429|      0|                                }
  430|      2|                                r->prov = (OSSL_PARAM *)p;
  431|      2|                            }
  432|      2|                        }
  433|      2|                    }
  434|      2|                }
  435|      2|                break;
  436|      4|            case 'r':
  ------------------
  |  Branch (436:13): [True: 4, False: 6]
  ------------------
  437|      4|                switch(s[1]) {
  438|      0|                default:
  ------------------
  |  Branch (438:17): [True: 0, False: 4]
  ------------------
  439|      0|                    break;
  440|      4|                case 'e':
  ------------------
  |  Branch (440:17): [True: 4, False: 0]
  ------------------
  441|      4|                    switch(s[2]) {
  442|      0|                    default:
  ------------------
  |  Branch (442:21): [True: 0, False: 4]
  ------------------
  443|      0|                        break;
  444|      4|                    case 's':
  ------------------
  |  Branch (444:21): [True: 4, False: 0]
  ------------------
  445|      4|                        switch(s[3]) {
  446|      0|                        default:
  ------------------
  |  Branch (446:25): [True: 0, False: 4]
  ------------------
  447|      0|                            break;
  448|      4|                        case 'e':
  ------------------
  |  Branch (448:25): [True: 4, False: 0]
  ------------------
  449|      4|                            switch(s[4]) {
  450|      0|                            default:
  ------------------
  |  Branch (450:29): [True: 0, False: 4]
  ------------------
  451|      0|                                break;
  452|      4|                            case 'e':
  ------------------
  |  Branch (452:29): [True: 4, False: 0]
  ------------------
  453|      4|                                switch(s[5]) {
  454|      0|                                default:
  ------------------
  |  Branch (454:33): [True: 0, False: 4]
  ------------------
  455|      0|                                    break;
  456|      4|                                case 'd':
  ------------------
  |  Branch (456:33): [True: 4, False: 0]
  ------------------
  457|      4|                                    switch(s[6]) {
  458|      0|                                    default:
  ------------------
  |  Branch (458:37): [True: 0, False: 4]
  ------------------
  459|      0|                                        break;
  460|      4|                                    case '_':
  ------------------
  |  Branch (460:37): [True: 4, False: 0]
  ------------------
  461|      4|                                        switch(s[7]) {
  462|      0|                                        default:
  ------------------
  |  Branch (462:41): [True: 0, False: 4]
  ------------------
  463|      0|                                            break;
  464|      2|                                        case 'r':
  ------------------
  |  Branch (464:41): [True: 2, False: 2]
  ------------------
  465|      2|                                            if (ossl_likely(strcmp("equests", s + 8) == 0)) {
  ------------------
  |  |   22|      2|#define ossl_likely(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (22:24): [True: 2, False: 0]
  |  |  ------------------
  ------------------
  466|       |                                                /* OSSL_DRBG_PARAM_RESEED_REQUESTS */
  467|      2|                                                if (ossl_unlikely(r->reseed_req != NULL)) {
  ------------------
  |  |   23|      2|#define ossl_unlikely(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (23:26): [True: 0, False: 2]
  |  |  ------------------
  ------------------
  468|      0|                                                    ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  ------------------
  |  |  361|      0|        ERR_set_error)
  ------------------
                                                                  ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  101|      0|#define ERR_LIB_PROV 57
  ------------------
                                                                  ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  142|      0|#define PROV_R_REPEATED_PARAMETER 252
  ------------------
  469|      0|                                                                   "param %s is repeated", s);
  470|      0|                                                    return 0;
  471|      0|                                                }
  472|      2|                                                r->reseed_req = (OSSL_PARAM *)p;
  473|      2|                                            }
  474|      2|                                            break;
  475|      2|                                        case 't':
  ------------------
  |  Branch (475:41): [True: 2, False: 2]
  ------------------
  476|      2|                                            if (ossl_likely(strcmp("ime_interval", s + 8) == 0)) {
  ------------------
  |  |   22|      2|#define ossl_likely(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (22:24): [True: 2, False: 0]
  |  |  ------------------
  ------------------
  477|       |                                                /* OSSL_DRBG_PARAM_RESEED_TIME_INTERVAL */
  478|      2|                                                if (ossl_unlikely(r->reseed_time != NULL)) {
  ------------------
  |  |   23|      2|#define ossl_unlikely(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (23:26): [True: 0, False: 2]
  |  |  ------------------
  ------------------
  479|      0|                                                    ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  ------------------
  |  |  361|      0|        ERR_set_error)
  ------------------
                                                                  ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  101|      0|#define ERR_LIB_PROV 57
  ------------------
                                                                  ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  142|      0|#define PROV_R_REPEATED_PARAMETER 252
  ------------------
  480|      0|                                                                   "param %s is repeated", s);
  481|      0|                                                    return 0;
  482|      0|                                                }
  483|      2|                                                r->reseed_time = (OSSL_PARAM *)p;
  484|      2|                                            }
  485|      4|                                        }
  486|      4|                                    }
  487|      4|                                }
  488|      4|                            }
  489|      4|                        }
  490|      4|                    }
  491|      4|                }
  492|      4|                break;
  493|      4|            case 'u':
  ------------------
  |  Branch (493:13): [True: 2, False: 8]
  ------------------
  494|      2|                if (ossl_likely(strcmp("se_derivation_function", s + 1) == 0)) {
  ------------------
  |  |   22|      2|#define ossl_likely(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (22:24): [True: 2, False: 0]
  |  |  ------------------
  ------------------
  495|       |                    /* OSSL_DRBG_PARAM_USE_DF */
  496|      2|                    if (ossl_unlikely(r->df != NULL)) {
  ------------------
  |  |   23|      2|#define ossl_unlikely(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (23:26): [True: 0, False: 2]
  |  |  ------------------
  ------------------
  497|      0|                        ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  ------------------
  |  |  361|      0|        ERR_set_error)
  ------------------
                                      ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  101|      0|#define ERR_LIB_PROV 57
  ------------------
                                      ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  142|      0|#define PROV_R_REPEATED_PARAMETER 252
  ------------------
  498|      0|                                       "param %s is repeated", s);
  499|      0|                        return 0;
  500|      0|                    }
  501|      2|                    r->df = (OSSL_PARAM *)p;
  502|      2|                }
  503|     10|            }
  504|      2|    return 1;
  505|      2|}
drbg_ctr.c:drbg_ctr_get_ctx_params_decoder:
   63|  19.6k|{
   64|  19.6k|    const char *s;
   65|       |
   66|  19.6k|    memset(r, 0, sizeof(*r));
   67|  19.6k|    if (p != NULL)
  ------------------
  |  Branch (67:9): [True: 19.6k, False: 0]
  ------------------
   68|  39.2k|        for (; (s = p->key) != NULL; p++)
  ------------------
  |  Branch (68:16): [True: 19.6k, False: 19.6k]
  ------------------
   69|  19.6k|            switch(s[0]) {
   70|      0|            default:
  ------------------
  |  Branch (70:13): [True: 0, False: 19.6k]
  ------------------
   71|      0|                break;
   72|      0|            case 'c':
  ------------------
  |  Branch (72:13): [True: 0, False: 19.6k]
  ------------------
   73|      0|                if (ossl_likely(strcmp("ipher", s + 1) == 0)) {
  ------------------
  |  |   22|      0|#define ossl_likely(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (22:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   74|       |                    /* OSSL_DRBG_PARAM_CIPHER */
   75|      0|                    if (ossl_unlikely(r->cipher != NULL)) {
  ------------------
  |  |   23|      0|#define ossl_unlikely(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (23:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   76|      0|                        ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  ------------------
  |  |  361|      0|        ERR_set_error)
  ------------------
                                      ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  101|      0|#define ERR_LIB_PROV 57
  ------------------
                                      ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  142|      0|#define PROV_R_REPEATED_PARAMETER 252
  ------------------
   77|      0|                                       "param %s is repeated", s);
   78|      0|                        return 0;
   79|      0|                    }
   80|      0|                    r->cipher = (OSSL_PARAM *)p;
   81|      0|                }
   82|      0|                break;
   83|      0|            case 'f':
  ------------------
  |  Branch (83:13): [True: 0, False: 19.6k]
  ------------------
   84|       |# if defined(FIPS_MODULE)
   85|       |                if (ossl_likely(strcmp("ips-indicator", s + 1) == 0)) {
   86|       |                    /* OSSL_KDF_PARAM_FIPS_APPROVED_INDICATOR */
   87|       |                    if (ossl_unlikely(r->ind != NULL)) {
   88|       |                        ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
   89|       |                                       "param %s is repeated", s);
   90|       |                        return 0;
   91|       |                    }
   92|       |                    r->ind = (OSSL_PARAM *)p;
   93|       |                }
   94|       |# endif
   95|      0|                break;
   96|  6.53k|            case 'm':
  ------------------
  |  Branch (96:13): [True: 6.53k, False: 13.0k]
  ------------------
   97|  6.53k|                switch(s[1]) {
   98|      0|                default:
  ------------------
  |  Branch (98:17): [True: 0, False: 6.53k]
  ------------------
   99|      0|                    break;
  100|  6.53k|                case 'a':
  ------------------
  |  Branch (100:17): [True: 6.53k, False: 0]
  ------------------
  101|  6.53k|                    switch(s[2]) {
  102|      0|                    default:
  ------------------
  |  Branch (102:21): [True: 0, False: 6.53k]
  ------------------
  103|      0|                        break;
  104|  6.53k|                    case 'x':
  ------------------
  |  Branch (104:21): [True: 6.53k, False: 0]
  ------------------
  105|  6.53k|                        switch(s[3]) {
  106|      0|                        default:
  ------------------
  |  Branch (106:25): [True: 0, False: 6.53k]
  ------------------
  107|      0|                            break;
  108|  6.53k|                        case '_':
  ------------------
  |  Branch (108:25): [True: 6.53k, False: 0]
  ------------------
  109|  6.53k|                            switch(s[4]) {
  110|      0|                            default:
  ------------------
  |  Branch (110:29): [True: 0, False: 6.53k]
  ------------------
  111|      0|                                break;
  112|      0|                            case 'a':
  ------------------
  |  Branch (112:29): [True: 0, False: 6.53k]
  ------------------
  113|      0|                                if (ossl_likely(strcmp("dinlen", s + 5) == 0)) {
  ------------------
  |  |   22|      0|#define ossl_likely(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (22:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  114|       |                                    /* OSSL_DRBG_PARAM_MAX_ADINLEN */
  115|      0|                                    if (ossl_unlikely(r->maxadlen != NULL)) {
  ------------------
  |  |   23|      0|#define ossl_unlikely(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (23:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  116|      0|                                        ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  ------------------
  |  |  361|      0|        ERR_set_error)
  ------------------
                                                      ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  101|      0|#define ERR_LIB_PROV 57
  ------------------
                                                      ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  142|      0|#define PROV_R_REPEATED_PARAMETER 252
  ------------------
  117|      0|                                                       "param %s is repeated", s);
  118|      0|                                        return 0;
  119|      0|                                    }
  120|      0|                                    r->maxadlen = (OSSL_PARAM *)p;
  121|      0|                                }
  122|      0|                                break;
  123|      0|                            case 'e':
  ------------------
  |  Branch (123:29): [True: 0, False: 6.53k]
  ------------------
  124|      0|                                if (ossl_likely(strcmp("ntropylen", s + 5) == 0)) {
  ------------------
  |  |   22|      0|#define ossl_likely(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (22:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  125|       |                                    /* OSSL_DRBG_PARAM_MAX_ENTROPYLEN */
  126|      0|                                    if (ossl_unlikely(r->maxentlen != NULL)) {
  ------------------
  |  |   23|      0|#define ossl_unlikely(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (23:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  127|      0|                                        ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  ------------------
  |  |  361|      0|        ERR_set_error)
  ------------------
                                                      ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  101|      0|#define ERR_LIB_PROV 57
  ------------------
                                                      ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  142|      0|#define PROV_R_REPEATED_PARAMETER 252
  ------------------
  128|      0|                                                       "param %s is repeated", s);
  129|      0|                                        return 0;
  130|      0|                                    }
  131|      0|                                    r->maxentlen = (OSSL_PARAM *)p;
  132|      0|                                }
  133|      0|                                break;
  134|      0|                            case 'n':
  ------------------
  |  Branch (134:29): [True: 0, False: 6.53k]
  ------------------
  135|      0|                                if (ossl_likely(strcmp("oncelen", s + 5) == 0)) {
  ------------------
  |  |   22|      0|#define ossl_likely(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (22:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  136|       |                                    /* OSSL_DRBG_PARAM_MAX_NONCELEN */
  137|      0|                                    if (ossl_unlikely(r->maxnonlen != NULL)) {
  ------------------
  |  |   23|      0|#define ossl_unlikely(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (23:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  138|      0|                                        ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  ------------------
  |  |  361|      0|        ERR_set_error)
  ------------------
                                                      ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  101|      0|#define ERR_LIB_PROV 57
  ------------------
                                                      ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  142|      0|#define PROV_R_REPEATED_PARAMETER 252
  ------------------
  139|      0|                                                       "param %s is repeated", s);
  140|      0|                                        return 0;
  141|      0|                                    }
  142|      0|                                    r->maxnonlen = (OSSL_PARAM *)p;
  143|      0|                                }
  144|      0|                                break;
  145|      0|                            case 'p':
  ------------------
  |  Branch (145:29): [True: 0, False: 6.53k]
  ------------------
  146|      0|                                if (ossl_likely(strcmp("erslen", s + 5) == 0)) {
  ------------------
  |  |   22|      0|#define ossl_likely(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (22:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  147|       |                                    /* OSSL_DRBG_PARAM_MAX_PERSLEN */
  148|      0|                                    if (ossl_unlikely(r->maxperlen != NULL)) {
  ------------------
  |  |   23|      0|#define ossl_unlikely(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (23:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  149|      0|                                        ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  ------------------
  |  |  361|      0|        ERR_set_error)
  ------------------
                                                      ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  101|      0|#define ERR_LIB_PROV 57
  ------------------
                                                      ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  142|      0|#define PROV_R_REPEATED_PARAMETER 252
  ------------------
  150|      0|                                                       "param %s is repeated", s);
  151|      0|                                        return 0;
  152|      0|                                    }
  153|      0|                                    r->maxperlen = (OSSL_PARAM *)p;
  154|      0|                                }
  155|      0|                                break;
  156|  6.53k|                            case 'r':
  ------------------
  |  Branch (156:29): [True: 6.53k, False: 0]
  ------------------
  157|  6.53k|                                if (ossl_likely(strcmp("equest", s + 5) == 0)) {
  ------------------
  |  |   22|  6.53k|#define ossl_likely(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (22:24): [True: 6.53k, False: 0]
  |  |  ------------------
  ------------------
  158|       |                                    /* OSSL_RAND_PARAM_MAX_REQUEST */
  159|  6.53k|                                    if (ossl_unlikely(r->maxreq != NULL)) {
  ------------------
  |  |   23|  6.53k|#define ossl_unlikely(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (23:26): [True: 0, False: 6.53k]
  |  |  ------------------
  ------------------
  160|      0|                                        ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  ------------------
  |  |  361|      0|        ERR_set_error)
  ------------------
                                                      ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  101|      0|#define ERR_LIB_PROV 57
  ------------------
                                                      ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  142|      0|#define PROV_R_REPEATED_PARAMETER 252
  ------------------
  161|      0|                                                       "param %s is repeated", s);
  162|      0|                                        return 0;
  163|      0|                                    }
  164|  6.53k|                                    r->maxreq = (OSSL_PARAM *)p;
  165|  6.53k|                                }
  166|  6.53k|                            }
  167|  6.53k|                        }
  168|  6.53k|                    }
  169|  6.53k|                    break;
  170|  6.53k|                case 'i':
  ------------------
  |  Branch (170:17): [True: 0, False: 6.53k]
  ------------------
  171|      0|                    switch(s[2]) {
  172|      0|                    default:
  ------------------
  |  Branch (172:21): [True: 0, False: 0]
  ------------------
  173|      0|                        break;
  174|      0|                    case 'n':
  ------------------
  |  Branch (174:21): [True: 0, False: 0]
  ------------------
  175|      0|                        switch(s[3]) {
  176|      0|                        default:
  ------------------
  |  Branch (176:25): [True: 0, False: 0]
  ------------------
  177|      0|                            break;
  178|      0|                        case '_':
  ------------------
  |  Branch (178:25): [True: 0, False: 0]
  ------------------
  179|      0|                            switch(s[4]) {
  180|      0|                            default:
  ------------------
  |  Branch (180:29): [True: 0, False: 0]
  ------------------
  181|      0|                                break;
  182|      0|                            case 'e':
  ------------------
  |  Branch (182:29): [True: 0, False: 0]
  ------------------
  183|      0|                                if (ossl_likely(strcmp("ntropylen", s + 5) == 0)) {
  ------------------
  |  |   22|      0|#define ossl_likely(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (22:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  184|       |                                    /* OSSL_DRBG_PARAM_MIN_ENTROPYLEN */
  185|      0|                                    if (ossl_unlikely(r->minentlen != NULL)) {
  ------------------
  |  |   23|      0|#define ossl_unlikely(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (23:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  186|      0|                                        ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  ------------------
  |  |  361|      0|        ERR_set_error)
  ------------------
                                                      ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  101|      0|#define ERR_LIB_PROV 57
  ------------------
                                                      ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  142|      0|#define PROV_R_REPEATED_PARAMETER 252
  ------------------
  187|      0|                                                       "param %s is repeated", s);
  188|      0|                                        return 0;
  189|      0|                                    }
  190|      0|                                    r->minentlen = (OSSL_PARAM *)p;
  191|      0|                                }
  192|      0|                                break;
  193|      0|                            case 'n':
  ------------------
  |  Branch (193:29): [True: 0, False: 0]
  ------------------
  194|      0|                                if (ossl_likely(strcmp("oncelen", s + 5) == 0)) {
  ------------------
  |  |   22|      0|#define ossl_likely(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (22:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  195|       |                                    /* OSSL_DRBG_PARAM_MIN_NONCELEN */
  196|      0|                                    if (ossl_unlikely(r->minnonlen != NULL)) {
  ------------------
  |  |   23|      0|#define ossl_unlikely(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (23:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  197|      0|                                        ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  ------------------
  |  |  361|      0|        ERR_set_error)
  ------------------
                                                      ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  101|      0|#define ERR_LIB_PROV 57
  ------------------
                                                      ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  142|      0|#define PROV_R_REPEATED_PARAMETER 252
  ------------------
  198|      0|                                                       "param %s is repeated", s);
  199|      0|                                        return 0;
  200|      0|                                    }
  201|      0|                                    r->minnonlen = (OSSL_PARAM *)p;
  202|      0|                                }
  203|      0|                            }
  204|      0|                        }
  205|      0|                    }
  206|  6.53k|                }
  207|  6.53k|                break;
  208|  6.53k|            case 'r':
  ------------------
  |  Branch (208:13): [True: 6.53k, False: 13.0k]
  ------------------
  209|  6.53k|                switch(s[1]) {
  210|      0|                default:
  ------------------
  |  Branch (210:17): [True: 0, False: 6.53k]
  ------------------
  211|      0|                    break;
  212|  6.53k|                case 'e':
  ------------------
  |  Branch (212:17): [True: 6.53k, False: 0]
  ------------------
  213|  6.53k|                    switch(s[2]) {
  214|      0|                    default:
  ------------------
  |  Branch (214:21): [True: 0, False: 6.53k]
  ------------------
  215|      0|                        break;
  216|  6.53k|                    case 's':
  ------------------
  |  Branch (216:21): [True: 6.53k, False: 0]
  ------------------
  217|  6.53k|                        switch(s[3]) {
  218|      0|                        default:
  ------------------
  |  Branch (218:25): [True: 0, False: 6.53k]
  ------------------
  219|      0|                            break;
  220|  6.53k|                        case 'e':
  ------------------
  |  Branch (220:25): [True: 6.53k, False: 0]
  ------------------
  221|  6.53k|                            switch(s[4]) {
  222|      0|                            default:
  ------------------
  |  Branch (222:29): [True: 0, False: 6.53k]
  ------------------
  223|      0|                                break;
  224|  6.53k|                            case 'e':
  ------------------
  |  Branch (224:29): [True: 6.53k, False: 0]
  ------------------
  225|  6.53k|                                switch(s[5]) {
  226|      0|                                default:
  ------------------
  |  Branch (226:33): [True: 0, False: 6.53k]
  ------------------
  227|      0|                                    break;
  228|  6.53k|                                case 'd':
  ------------------
  |  Branch (228:33): [True: 6.53k, False: 0]
  ------------------
  229|  6.53k|                                    switch(s[6]) {
  230|      0|                                    default:
  ------------------
  |  Branch (230:37): [True: 0, False: 6.53k]
  ------------------
  231|      0|                                        break;
  232|  6.53k|                                    case '_':
  ------------------
  |  Branch (232:37): [True: 6.53k, False: 0]
  ------------------
  233|  6.53k|                                        switch(s[7]) {
  234|      0|                                        default:
  ------------------
  |  Branch (234:41): [True: 0, False: 6.53k]
  ------------------
  235|      0|                                            break;
  236|  6.53k|                                        case 'c':
  ------------------
  |  Branch (236:41): [True: 6.53k, False: 0]
  ------------------
  237|  6.53k|                                            if (ossl_likely(strcmp("ounter", s + 8) == 0)) {
  ------------------
  |  |   22|  6.53k|#define ossl_likely(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (22:24): [True: 6.53k, False: 0]
  |  |  ------------------
  ------------------
  238|       |                                                /* OSSL_DRBG_PARAM_RESEED_COUNTER */
  239|  6.53k|                                                if (ossl_unlikely(r->reseed_cnt != NULL)) {
  ------------------
  |  |   23|  6.53k|#define ossl_unlikely(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (23:26): [True: 0, False: 6.53k]
  |  |  ------------------
  ------------------
  240|      0|                                                    ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  ------------------
  |  |  361|      0|        ERR_set_error)
  ------------------
                                                                  ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  101|      0|#define ERR_LIB_PROV 57
  ------------------
                                                                  ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  142|      0|#define PROV_R_REPEATED_PARAMETER 252
  ------------------
  241|      0|                                                                   "param %s is repeated", s);
  242|      0|                                                    return 0;
  243|      0|                                                }
  244|  6.53k|                                                r->reseed_cnt = (OSSL_PARAM *)p;
  245|  6.53k|                                            }
  246|  6.53k|                                            break;
  247|  6.53k|                                        case 'r':
  ------------------
  |  Branch (247:41): [True: 0, False: 6.53k]
  ------------------
  248|      0|                                            if (ossl_likely(strcmp("equests", s + 8) == 0)) {
  ------------------
  |  |   22|      0|#define ossl_likely(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (22:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  249|       |                                                /* OSSL_DRBG_PARAM_RESEED_REQUESTS */
  250|      0|                                                if (ossl_unlikely(r->reseed_req != NULL)) {
  ------------------
  |  |   23|      0|#define ossl_unlikely(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (23:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  251|      0|                                                    ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  ------------------
  |  |  361|      0|        ERR_set_error)
  ------------------
                                                                  ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  101|      0|#define ERR_LIB_PROV 57
  ------------------
                                                                  ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  142|      0|#define PROV_R_REPEATED_PARAMETER 252
  ------------------
  252|      0|                                                                   "param %s is repeated", s);
  253|      0|                                                    return 0;
  254|      0|                                                }
  255|      0|                                                r->reseed_req = (OSSL_PARAM *)p;
  256|      0|                                            }
  257|      0|                                            break;
  258|      0|                                        case 't':
  ------------------
  |  Branch (258:41): [True: 0, False: 6.53k]
  ------------------
  259|      0|                                            switch(s[8]) {
  260|      0|                                            default:
  ------------------
  |  Branch (260:45): [True: 0, False: 0]
  ------------------
  261|      0|                                                break;
  262|      0|                                            case 'i':
  ------------------
  |  Branch (262:45): [True: 0, False: 0]
  ------------------
  263|      0|                                                switch(s[9]) {
  264|      0|                                                default:
  ------------------
  |  Branch (264:49): [True: 0, False: 0]
  ------------------
  265|      0|                                                    break;
  266|      0|                                                case 'm':
  ------------------
  |  Branch (266:49): [True: 0, False: 0]
  ------------------
  267|      0|                                                    switch(s[10]) {
  268|      0|                                                    default:
  ------------------
  |  Branch (268:53): [True: 0, False: 0]
  ------------------
  269|      0|                                                        break;
  270|      0|                                                    case 'e':
  ------------------
  |  Branch (270:53): [True: 0, False: 0]
  ------------------
  271|      0|                                                        switch(s[11]) {
  272|      0|                                                        default:
  ------------------
  |  Branch (272:57): [True: 0, False: 0]
  ------------------
  273|      0|                                                            break;
  274|      0|                                                        case '_':
  ------------------
  |  Branch (274:57): [True: 0, False: 0]
  ------------------
  275|      0|                                                            if (ossl_likely(strcmp("interval", s + 12) == 0)) {
  ------------------
  |  |   22|      0|#define ossl_likely(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (22:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  276|       |                                                                /* OSSL_DRBG_PARAM_RESEED_TIME_INTERVAL */
  277|      0|                                                                if (ossl_unlikely(r->reseed_int != NULL)) {
  ------------------
  |  |   23|      0|#define ossl_unlikely(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (23:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  278|      0|                                                                    ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  ------------------
  |  |  361|      0|        ERR_set_error)
  ------------------
                                                                                  ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  101|      0|#define ERR_LIB_PROV 57
  ------------------
                                                                                  ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  142|      0|#define PROV_R_REPEATED_PARAMETER 252
  ------------------
  279|      0|                                                                                   "param %s is repeated", s);
  280|      0|                                                                    return 0;
  281|      0|                                                                }
  282|      0|                                                                r->reseed_int = (OSSL_PARAM *)p;
  283|      0|                                                            }
  284|      0|                                                            break;
  285|      0|                                                        case '\0':
  ------------------
  |  Branch (285:57): [True: 0, False: 0]
  ------------------
  286|      0|                                                            if (ossl_unlikely(r->reseed_time != NULL)) {
  ------------------
  |  |   23|      0|#define ossl_unlikely(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (23:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  287|      0|                                                                ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  ------------------
  |  |  361|      0|        ERR_set_error)
  ------------------
                                                                              ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  101|      0|#define ERR_LIB_PROV 57
  ------------------
                                                                              ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  142|      0|#define PROV_R_REPEATED_PARAMETER 252
  ------------------
  288|      0|                                                                               "param %s is repeated", s);
  289|      0|                                                                return 0;
  290|      0|                                                            }
  291|      0|                                                            r->reseed_time = (OSSL_PARAM *)p;
  292|      0|                                                        }
  293|      0|                                                    }
  294|      0|                                                }
  295|      0|                                            }
  296|  6.53k|                                        }
  297|  6.53k|                                    }
  298|  6.53k|                                }
  299|  6.53k|                            }
  300|  6.53k|                        }
  301|  6.53k|                    }
  302|  6.53k|                }
  303|  6.53k|                break;
  304|  6.53k|            case 's':
  ------------------
  |  Branch (304:13): [True: 6.53k, False: 13.0k]
  ------------------
  305|  6.53k|                switch(s[1]) {
  306|      0|                default:
  ------------------
  |  Branch (306:17): [True: 0, False: 6.53k]
  ------------------
  307|      0|                    break;
  308|  6.53k|                case 't':
  ------------------
  |  Branch (308:17): [True: 6.53k, False: 0]
  ------------------
  309|  6.53k|                    switch(s[2]) {
  310|      0|                    default:
  ------------------
  |  Branch (310:21): [True: 0, False: 6.53k]
  ------------------
  311|      0|                        break;
  312|  6.53k|                    case 'a':
  ------------------
  |  Branch (312:21): [True: 6.53k, False: 3]
  ------------------
  313|  6.53k|                        if (ossl_likely(strcmp("te", s + 3) == 0)) {
  ------------------
  |  |   22|  6.53k|#define ossl_likely(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (22:24): [True: 6.53k, False: 0]
  |  |  ------------------
  ------------------
  314|       |                            /* OSSL_RAND_PARAM_STATE */
  315|  6.53k|                            if (ossl_unlikely(r->state != NULL)) {
  ------------------
  |  |   23|  6.53k|#define ossl_unlikely(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (23:26): [True: 0, False: 6.53k]
  |  |  ------------------
  ------------------
  316|      0|                                ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  ------------------
  |  |  361|      0|        ERR_set_error)
  ------------------
                                              ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  101|      0|#define ERR_LIB_PROV 57
  ------------------
                                              ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  142|      0|#define PROV_R_REPEATED_PARAMETER 252
  ------------------
  317|      0|                                               "param %s is repeated", s);
  318|      0|                                return 0;
  319|      0|                            }
  320|  6.53k|                            r->state = (OSSL_PARAM *)p;
  321|  6.53k|                        }
  322|  6.53k|                        break;
  323|  6.53k|                    case 'r':
  ------------------
  |  Branch (323:21): [True: 3, False: 6.53k]
  ------------------
  324|      3|                        if (ossl_likely(strcmp("ength", s + 3) == 0)) {
  ------------------
  |  |   22|      3|#define ossl_likely(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (22:24): [True: 3, False: 0]
  |  |  ------------------
  ------------------
  325|       |                            /* OSSL_RAND_PARAM_STRENGTH */
  326|      3|                            if (ossl_unlikely(r->str != NULL)) {
  ------------------
  |  |   23|      3|#define ossl_unlikely(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (23:26): [True: 0, False: 3]
  |  |  ------------------
  ------------------
  327|      0|                                ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  ------------------
  |  |  361|      0|        ERR_set_error)
  ------------------
                                              ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  101|      0|#define ERR_LIB_PROV 57
  ------------------
                                              ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  142|      0|#define PROV_R_REPEATED_PARAMETER 252
  ------------------
  328|      0|                                               "param %s is repeated", s);
  329|      0|                                return 0;
  330|      0|                            }
  331|      3|                            r->str = (OSSL_PARAM *)p;
  332|      3|                        }
  333|  6.53k|                    }
  334|  6.53k|                }
  335|  6.53k|                break;
  336|  6.53k|            case 'u':
  ------------------
  |  Branch (336:13): [True: 0, False: 19.6k]
  ------------------
  337|      0|                if (ossl_likely(strcmp("se_derivation_function", s + 1) == 0)) {
  ------------------
  |  |   22|      0|#define ossl_likely(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (22:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  338|       |                    /* OSSL_DRBG_PARAM_USE_DF */
  339|      0|                    if (ossl_unlikely(r->df != NULL)) {
  ------------------
  |  |   23|      0|#define ossl_unlikely(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (23:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  340|      0|                        ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  ------------------
  |  |  361|      0|        ERR_set_error)
  ------------------
                                      ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  101|      0|#define ERR_LIB_PROV 57
  ------------------
                                      ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  142|      0|#define PROV_R_REPEATED_PARAMETER 252
  ------------------
  341|      0|                                       "param %s is repeated", s);
  342|      0|                        return 0;
  343|      0|                    }
  344|      0|                    r->df = (OSSL_PARAM *)p;
  345|      0|                }
  346|  19.6k|            }
  347|  19.6k|    return 1;
  348|  19.6k|}

seed_src.c:seed_src_new:
   49|      1|{
   50|      1|    PROV_SEED_SRC *s;
   51|       |
   52|      1|    if (parent != NULL) {
  ------------------
  |  Branch (52:9): [True: 0, False: 1]
  ------------------
   53|      0|        ERR_raise(ERR_LIB_PROV, PROV_R_SEED_SOURCES_MUST_NOT_HAVE_A_PARENT);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
   54|      0|        return NULL;
   55|      0|    }
   56|       |
   57|      1|    s = OPENSSL_zalloc(sizeof(*s));
  ------------------
  |  |  109|      1|    CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
   58|      1|    if (s == NULL)
  ------------------
  |  Branch (58:9): [True: 0, False: 1]
  ------------------
   59|      0|        return NULL;
   60|       |
   61|      1|    s->provctx = provctx;
   62|      1|    s->state = EVP_RAND_STATE_UNINITIALISED;
  ------------------
  |  | 1249|      1|#define EVP_RAND_STATE_UNINITIALISED 0
  ------------------
   63|      1|    return s;
   64|      1|}
seed_src.c:seed_src_instantiate:
   75|      1|{
   76|      1|    PROV_SEED_SRC *s = (PROV_SEED_SRC *)vseed;
   77|       |
   78|      1|    s->state = EVP_RAND_STATE_READY;
  ------------------
  |  | 1250|      1|#define EVP_RAND_STATE_READY 1
  ------------------
   79|      1|    return 1;
   80|      1|}
seed_src.c:seed_src_enable_locking:
  212|      1|{
  213|      1|    return 1;
  214|      1|}
seed_src.c:seed_src_lock:
  217|      7|{
  218|      7|    return 1;
  219|      7|}
seed_src.c:seed_src_unlock:
  222|      7|{
  223|      7|}
seed_src.c:seed_src_get_ctx_params:
  147|      4|{
  148|      4|    PROV_SEED_SRC *s = (PROV_SEED_SRC *)vseed;
  149|      4|    struct seed_src_get_ctx_params_st p;
  150|       |
  151|      4|    if (s == NULL || !seed_src_get_ctx_params_decoder(params, &p))
  ------------------
  |  Branch (151:9): [True: 0, False: 4]
  |  Branch (151:22): [True: 0, False: 4]
  ------------------
  152|      0|        return 0;
  153|       |
  154|      4|    if (p.state != NULL && !OSSL_PARAM_set_int(p.state, s->state))
  ------------------
  |  Branch (154:9): [True: 0, False: 4]
  |  Branch (154:28): [True: 0, False: 0]
  ------------------
  155|      0|        return 0;
  156|       |
  157|      4|    if (p.str != NULL && !OSSL_PARAM_set_uint(p.str, 1024))
  ------------------
  |  Branch (157:9): [True: 2, False: 2]
  |  Branch (157:26): [True: 0, False: 2]
  ------------------
  158|      0|        return 0;
  159|       |
  160|      4|    if (p.maxreq != NULL && !OSSL_PARAM_set_size_t(p.maxreq, 128))
  ------------------
  |  Branch (160:9): [True: 0, False: 4]
  |  Branch (160:29): [True: 0, False: 0]
  ------------------
  161|      0|        return 0;
  162|      4|    return 1;
  163|      4|}
seed_src.c:seed_get_seed:
  180|      1|{
  181|      1|    size_t ret = 0;
  182|      1|    size_t entropy_available = 0;
  183|      1|    RAND_POOL *pool;
  184|       |
  185|      1|    pool = ossl_rand_pool_new(entropy, 1, min_len, max_len);
  186|      1|    if (pool == NULL) {
  ------------------
  |  Branch (186:9): [True: 0, False: 1]
  ------------------
  187|      0|        ERR_raise(ERR_LIB_PROV, ERR_R_RAND_LIB);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  188|      0|        return 0;
  189|      0|    }
  190|       |
  191|       |    /* Get entropy by polling system entropy sources. */
  192|      1|    entropy_available = ossl_pool_acquire_entropy(pool);
  193|       |
  194|      1|    if (entropy_available > 0
  ------------------
  |  Branch (194:9): [True: 1, False: 0]
  ------------------
  195|      1|        && ossl_rand_pool_adin_mix_in(pool, adin, adin_len)) {
  ------------------
  |  Branch (195:12): [True: 1, False: 0]
  ------------------
  196|      1|        ret = ossl_rand_pool_length(pool);
  197|      1|        *pout = ossl_rand_pool_detach(pool);
  198|      1|    } else {
  199|       |        ERR_raise(ERR_LIB_PROV, PROV_R_ENTROPY_SOURCE_STRENGTH_TOO_WEAK);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
  200|      0|    }
  201|      1|    ossl_rand_pool_free(pool);
  202|      1|    return ret;
  203|      1|}
seed_src.c:seed_clear_seed:
  207|      1|{
  208|      1|    OPENSSL_secure_clear_free(out, outlen);
  ------------------
  |  |  150|      1|    CRYPTO_secure_clear_free(addr, num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                   CRYPTO_secure_clear_free(addr, num, OPENSSL_FILE, OPENSSL_LINE)
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  ------------------
  209|      1|}

seed_src.c:seed_src_get_ctx_params_decoder:
   33|      4|{
   34|      4|    const char *s;
   35|       |
   36|      4|    memset(r, 0, sizeof(*r));
   37|      4|    if (p != NULL)
  ------------------
  |  Branch (37:9): [True: 4, False: 0]
  ------------------
   38|      8|        for (; (s = p->key) != NULL; p++)
  ------------------
  |  Branch (38:16): [True: 4, False: 4]
  ------------------
   39|      4|            switch(s[0]) {
   40|      2|            default:
  ------------------
  |  Branch (40:13): [True: 2, False: 2]
  ------------------
   41|      2|                break;
   42|      2|            case 'm':
  ------------------
  |  Branch (42:13): [True: 0, False: 4]
  ------------------
   43|      0|                if (ossl_likely(strcmp("ax_request", s + 1) == 0)) {
  ------------------
  |  |   22|      0|#define ossl_likely(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (22:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   44|       |                    /* OSSL_RAND_PARAM_MAX_REQUEST */
   45|      0|                    if (ossl_unlikely(r->maxreq != NULL)) {
  ------------------
  |  |   23|      0|#define ossl_unlikely(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (23:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   46|      0|                        ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  ------------------
  |  |  361|      0|        ERR_set_error)
  ------------------
                                      ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  101|      0|#define ERR_LIB_PROV 57
  ------------------
                                      ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  142|      0|#define PROV_R_REPEATED_PARAMETER 252
  ------------------
   47|      0|                                       "param %s is repeated", s);
   48|      0|                        return 0;
   49|      0|                    }
   50|      0|                    r->maxreq = (OSSL_PARAM *)p;
   51|      0|                }
   52|      0|                break;
   53|      2|            case 's':
  ------------------
  |  Branch (53:13): [True: 2, False: 2]
  ------------------
   54|      2|                switch(s[1]) {
   55|      0|                default:
  ------------------
  |  Branch (55:17): [True: 0, False: 2]
  ------------------
   56|      0|                    break;
   57|      2|                case 't':
  ------------------
  |  Branch (57:17): [True: 2, False: 0]
  ------------------
   58|      2|                    switch(s[2]) {
   59|      0|                    default:
  ------------------
  |  Branch (59:21): [True: 0, False: 2]
  ------------------
   60|      0|                        break;
   61|      0|                    case 'a':
  ------------------
  |  Branch (61:21): [True: 0, False: 2]
  ------------------
   62|      0|                        if (ossl_likely(strcmp("te", s + 3) == 0)) {
  ------------------
  |  |   22|      0|#define ossl_likely(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (22:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   63|       |                            /* OSSL_RAND_PARAM_STATE */
   64|      0|                            if (ossl_unlikely(r->state != NULL)) {
  ------------------
  |  |   23|      0|#define ossl_unlikely(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (23:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   65|      0|                                ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  ------------------
  |  |  361|      0|        ERR_set_error)
  ------------------
                                              ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  101|      0|#define ERR_LIB_PROV 57
  ------------------
                                              ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  142|      0|#define PROV_R_REPEATED_PARAMETER 252
  ------------------
   66|      0|                                               "param %s is repeated", s);
   67|      0|                                return 0;
   68|      0|                            }
   69|      0|                            r->state = (OSSL_PARAM *)p;
   70|      0|                        }
   71|      0|                        break;
   72|      2|                    case 'r':
  ------------------
  |  Branch (72:21): [True: 2, False: 0]
  ------------------
   73|      2|                        if (ossl_likely(strcmp("ength", s + 3) == 0)) {
  ------------------
  |  |   22|      2|#define ossl_likely(x) __builtin_expect(!!(x), 1)
  |  |  ------------------
  |  |  |  Branch (22:24): [True: 2, False: 0]
  |  |  ------------------
  ------------------
   74|       |                            /* OSSL_RAND_PARAM_STRENGTH */
   75|      2|                            if (ossl_unlikely(r->str != NULL)) {
  ------------------
  |  |   23|      2|#define ossl_unlikely(x) __builtin_expect(!!(x), 0)
  |  |  ------------------
  |  |  |  Branch (23:26): [True: 0, False: 2]
  |  |  ------------------
  ------------------
   76|      0|                                ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  ------------------
  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  ------------------
  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  ------------------
  |  |  361|      0|        ERR_set_error)
  ------------------
                                              ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  101|      0|#define ERR_LIB_PROV 57
  ------------------
                                              ERR_raise_data(ERR_LIB_PROV, PROV_R_REPEATED_PARAMETER,
  ------------------
  |  |  142|      0|#define PROV_R_REPEATED_PARAMETER 252
  ------------------
   77|      0|                                               "param %s is repeated", s);
   78|      0|                                return 0;
   79|      0|                            }
   80|      2|                            r->str = (OSSL_PARAM *)p;
   81|      2|                        }
   82|      2|                    }
   83|      2|                }
   84|      4|            }
   85|      4|    return 1;
   86|      4|}

ossl_rand_pool_init:
  566|      1|{
  567|      1|    size_t i;
  568|       |
  569|      5|    for (i = 0; i < OSSL_NELEM(random_devices); i++)
  ------------------
  |  |   14|      5|#define OSSL_NELEM(x) (sizeof(x) / sizeof((x)[0]))
  ------------------
  |  Branch (569:17): [True: 4, False: 1]
  ------------------
  570|      4|        random_devices[i].fd = -1;
  571|       |
  572|      1|    return 1;
  573|      1|}
ossl_pool_acquire_entropy:
  634|      1|{
  635|       |#if defined(OPENSSL_RAND_SEED_NONE)
  636|       |    return ossl_rand_pool_entropy_available(pool);
  637|       |#else
  638|      1|    size_t entropy_available = 0;
  639|       |
  640|      1|    (void)entropy_available; /* avoid compiler warning */
  641|       |
  642|      1|#if defined(OPENSSL_RAND_SEED_GETRANDOM)
  643|      1|    {
  644|      1|        size_t bytes_needed;
  645|      1|        unsigned char *buffer;
  646|      1|        ssize_t bytes;
  647|       |        /* Maximum allowed number of consecutive unsuccessful attempts */
  648|      1|        int attempts = 3;
  649|       |
  650|      1|        bytes_needed = ossl_rand_pool_bytes_needed(pool, 1 /*entropy_factor*/);
  651|      2|        while (bytes_needed != 0 && attempts-- > 0) {
  ------------------
  |  Branch (651:16): [True: 1, False: 1]
  |  Branch (651:37): [True: 1, False: 0]
  ------------------
  652|      1|            buffer = ossl_rand_pool_add_begin(pool, bytes_needed);
  653|      1|            bytes = syscall_random(buffer, bytes_needed);
  654|      1|            if (bytes > 0) {
  ------------------
  |  Branch (654:17): [True: 1, False: 0]
  ------------------
  655|      1|                ossl_rand_pool_add_end(pool, bytes, 8 * bytes);
  656|      1|                bytes_needed -= bytes;
  657|      1|                attempts = 3; /* reset counter after successful attempt */
  658|      1|            } else if (bytes < 0 && errno != EINTR) {
  ------------------
  |  Branch (658:24): [True: 0, False: 0]
  |  Branch (658:37): [True: 0, False: 0]
  ------------------
  659|      0|                break;
  660|      0|            }
  661|      1|        }
  662|      1|    }
  663|      1|    entropy_available = ossl_rand_pool_entropy_available(pool);
  664|      1|    if (entropy_available > 0)
  ------------------
  |  Branch (664:9): [True: 1, False: 0]
  ------------------
  665|      1|        return entropy_available;
  666|      0|#endif
  667|       |
  668|      0|#if defined(OPENSSL_RAND_SEED_DEVRANDOM)
  669|      0|    if (wait_random_seeded()) {
  ------------------
  |  Branch (669:9): [True: 0, False: 0]
  ------------------
  670|      0|        size_t bytes_needed;
  671|      0|        unsigned char *buffer;
  672|      0|        size_t i;
  673|       |
  674|      0|        bytes_needed = ossl_rand_pool_bytes_needed(pool, 1 /*entropy_factor*/);
  675|      0|        for (i = 0; bytes_needed > 0 && i < OSSL_NELEM(random_device_paths);
  ------------------
  |  |   14|      0|#define OSSL_NELEM(x) (sizeof(x) / sizeof((x)[0]))
  ------------------
  |  Branch (675:21): [True: 0, False: 0]
  |  Branch (675:41): [True: 0, False: 0]
  ------------------
  676|      0|            i++) {
  677|      0|            ssize_t bytes = 0;
  678|       |            /* Maximum number of consecutive unsuccessful attempts */
  679|      0|            int attempts = 3;
  680|      0|            const int fd = get_random_device(i);
  681|       |
  682|      0|            if (fd == -1)
  ------------------
  |  Branch (682:17): [True: 0, False: 0]
  ------------------
  683|      0|                continue;
  684|       |
  685|      0|            while (bytes_needed != 0 && attempts-- > 0) {
  ------------------
  |  Branch (685:20): [True: 0, False: 0]
  |  Branch (685:41): [True: 0, False: 0]
  ------------------
  686|      0|                buffer = ossl_rand_pool_add_begin(pool, bytes_needed);
  687|      0|                bytes = read(fd, buffer, bytes_needed);
  688|       |
  689|      0|                if (bytes > 0) {
  ------------------
  |  Branch (689:21): [True: 0, False: 0]
  ------------------
  690|      0|                    ossl_rand_pool_add_end(pool, bytes, 8 * bytes);
  691|      0|                    bytes_needed -= bytes;
  692|      0|                    attempts = 3; /* reset counter on successful attempt */
  693|      0|                } else if (bytes < 0 && errno != EINTR) {
  ------------------
  |  Branch (693:28): [True: 0, False: 0]
  |  Branch (693:41): [True: 0, False: 0]
  ------------------
  694|      0|                    break;
  695|      0|                }
  696|      0|            }
  697|      0|            if (bytes < 0 || !keep_random_devices_open)
  ------------------
  |  Branch (697:17): [True: 0, False: 0]
  |  Branch (697:30): [True: 0, False: 0]
  ------------------
  698|      0|                close_random_device(i);
  699|       |
  700|      0|            bytes_needed = ossl_rand_pool_bytes_needed(pool, 1);
  701|      0|        }
  702|      0|        entropy_available = ossl_rand_pool_entropy_available(pool);
  703|      0|        if (entropy_available > 0)
  ------------------
  |  Branch (703:13): [True: 0, False: 0]
  ------------------
  704|      0|            return entropy_available;
  705|      0|    }
  706|      0|#endif
  707|       |
  708|       |#if defined(OPENSSL_RAND_SEED_RDTSC)
  709|       |    entropy_available = ossl_prov_acquire_entropy_from_tsc(pool);
  710|       |    if (entropy_available > 0)
  711|       |        return entropy_available;
  712|       |#endif
  713|       |
  714|       |#if defined(OPENSSL_RAND_SEED_RDCPU)
  715|       |    entropy_available = ossl_prov_acquire_entropy_from_cpu(pool);
  716|       |    if (entropy_available > 0)
  717|       |        return entropy_available;
  718|       |#endif
  719|       |
  720|       |#if defined(OPENSSL_RAND_SEED_EGD)
  721|       |    {
  722|       |        static const char *paths[] = { DEVRANDOM_EGD, NULL };
  723|       |        size_t bytes_needed;
  724|       |        unsigned char *buffer;
  725|       |        int i;
  726|       |
  727|       |        bytes_needed = ossl_rand_pool_bytes_needed(pool, 1 /*entropy_factor*/);
  728|       |        for (i = 0; bytes_needed > 0 && paths[i] != NULL; i++) {
  729|       |            size_t bytes = 0;
  730|       |            int num;
  731|       |
  732|       |            buffer = ossl_rand_pool_add_begin(pool, bytes_needed);
  733|       |            num = RAND_query_egd_bytes(paths[i],
  734|       |                buffer, (int)bytes_needed);
  735|       |            if (num == (int)bytes_needed)
  736|       |                bytes = bytes_needed;
  737|       |
  738|       |            ossl_rand_pool_add_end(pool, bytes, 8 * bytes);
  739|       |            bytes_needed = ossl_rand_pool_bytes_needed(pool, 1);
  740|       |        }
  741|       |        entropy_available = ossl_rand_pool_entropy_available(pool);
  742|       |        if (entropy_available > 0)
  743|       |            return entropy_available;
  744|       |    }
  745|       |#endif
  746|       |
  747|      0|    return ossl_rand_pool_entropy_available(pool);
  748|      0|#endif
  749|      0|}
rand_unix.c:syscall_random:
  333|      1|{
  334|       |    /*
  335|       |     * Note: 'buflen' equals the size of the buffer which is used by the
  336|       |     * get_entropy() callback of the RAND_DRBG. It is roughly bounded by
  337|       |     *
  338|       |     *   2 * RAND_POOL_FACTOR * (RAND_DRBG_STRENGTH / 8) = 2^14
  339|       |     *
  340|       |     * which is way below the OSSL_SSIZE_MAX limit. Therefore sign conversion
  341|       |     * between size_t and ssize_t is safe even without a range check.
  342|       |     */
  343|       |
  344|       |    /*
  345|       |     * Do runtime detection to find getentropy().
  346|       |     *
  347|       |     * Known OSs that should support this:
  348|       |     * - Darwin since 16 (OSX 10.12, IOS 10.0).
  349|       |     * - Solaris since 11.3
  350|       |     * - OpenBSD since 5.6
  351|       |     * - Linux since 3.17 with glibc 2.25
  352|       |     *
  353|       |     * Note: Sometimes getentropy() can be provided but not implemented
  354|       |     * internally. So we need to check errno for ENOSYS
  355|       |     */
  356|      1|#if !defined(__DragonFly__) && !defined(__NetBSD__) && !defined(__FreeBSD__)
  357|      1|#if defined(__GNUC__) && __GNUC__ >= 2 && defined(__ELF__) && !defined(__hpux)
  358|      1|    extern int getentropy(void *buffer, size_t length) __attribute__((weak));
  359|       |
  360|      1|    if (getentropy != NULL) {
  ------------------
  |  Branch (360:9): [True: 1, False: 0]
  ------------------
  361|      1|        if (getentropy(buf, buflen) == 0)
  ------------------
  |  Branch (361:13): [True: 1, False: 0]
  ------------------
  362|      1|            return (ssize_t)buflen;
  363|      0|        if (errno != ENOSYS)
  ------------------
  |  Branch (363:13): [True: 0, False: 0]
  ------------------
  364|      0|            return -1;
  365|      0|    }
  366|       |#elif defined(OPENSSL_APPLE_CRYPTO_RANDOM)
  367|       |
  368|       |    if (CCRandomGenerateBytes(buf, buflen) == kCCSuccess)
  369|       |        return (ssize_t)buflen;
  370|       |
  371|       |    return -1;
  372|       |#else
  373|       |    union {
  374|       |        void *p;
  375|       |        int (*f)(void *buffer, size_t length);
  376|       |    } p_getentropy;
  377|       |
  378|       |    /*
  379|       |     * We could cache the result of the lookup, but we normally don't
  380|       |     * call this function often.
  381|       |     */
  382|       |    ERR_set_mark();
  383|       |    p_getentropy.p = DSO_global_lookup("getentropy");
  384|       |    ERR_pop_to_mark();
  385|       |    if (p_getentropy.p != NULL)
  386|       |        return p_getentropy.f(buf, buflen) == 0 ? (ssize_t)buflen : -1;
  387|       |#endif
  388|      0|#endif /* !__DragonFly__ && !__NetBSD__ && !__FreeBSD__ */
  389|       |
  390|       |    /* Linux supports this since version 3.17 */
  391|      0|#if defined(__linux) && defined(__NR_getrandom)
  392|      0|    return syscall(__NR_getrandom, buf, buflen, 0);
  393|       |#elif (defined(__DragonFly__) && __DragonFly_version >= 500700) \
  394|       |    || (defined(__NetBSD__) && __NetBSD_Version >= 1000000000)  \
  395|       |    || (defined(__FreeBSD__) && __FreeBSD_version >= 1200061)
  396|       |    return getrandom(buf, buflen, 0);
  397|       |#elif (defined(__FreeBSD__) || defined(__NetBSD__)) && defined(KERN_ARND)
  398|       |    return sysctl_random(buf, buflen);
  399|       |#elif defined(__wasi__)
  400|       |    if (getentropy(buf, buflen) == 0)
  401|       |        return (ssize_t)buflen;
  402|       |    return -1;
  403|       |#else
  404|       |    errno = ENOSYS;
  405|       |    return -1;
  406|       |#endif
  407|      1|}

ossl_null_provider_init:
   74|      1|{
   75|      1|    *out = null_dispatch_table;
   76|       |
   77|       |    /* Could be anything - we don't use it */
   78|      1|    *provctx = (void *)handle;
   79|      1|    return 1;
   80|      1|}

ossl_prov_is_running:
   20|  26.1k|{
   21|  26.1k|    return 1;
   22|  26.1k|}

ssl_sort_cipher_list:
 3766|      1|{
 3767|      1|    qsort(tls13_ciphers, TLS13_NUM_CIPHERS, sizeof(tls13_ciphers[0]),
  ------------------
  |  |   27|      1|#define TLS13_NUM_CIPHERS OSSL_NELEM(tls13_ciphers)
  |  |  ------------------
  |  |  |  |   14|      1|#define OSSL_NELEM(x) (sizeof(x) / sizeof((x)[0]))
  |  |  ------------------
  ------------------
 3768|      1|        cipher_compare);
 3769|      1|    qsort(ssl3_ciphers, SSL3_NUM_CIPHERS, sizeof(ssl3_ciphers[0]),
  ------------------
  |  |   28|      1|#define SSL3_NUM_CIPHERS OSSL_NELEM(ssl3_ciphers)
  |  |  ------------------
  |  |  |  |   14|      1|#define OSSL_NELEM(x) (sizeof(x) / sizeof((x)[0]))
  |  |  ------------------
  ------------------
 3770|      1|        cipher_compare);
 3771|      1|    qsort(ssl3_scsvs, SSL3_NUM_SCSVS, sizeof(ssl3_scsvs[0]), cipher_compare);
  ------------------
  |  |   29|      1|#define SSL3_NUM_SCSVS OSSL_NELEM(ssl3_scsvs)
  |  |  ------------------
  |  |  |  |   14|      1|#define OSSL_NELEM(x) (sizeof(x) / sizeof((x)[0]))
  |  |  ------------------
  ------------------
 3772|      1|}
s3_lib.c:cipher_compare:
 3756|    982|{
 3757|    982|    const SSL_CIPHER *ap = (const SSL_CIPHER *)a;
 3758|    982|    const SSL_CIPHER *bp = (const SSL_CIPHER *)b;
 3759|       |
 3760|    982|    if (ap->id == bp->id)
  ------------------
  |  Branch (3760:9): [True: 0, False: 982]
  ------------------
 3761|      0|        return 0;
 3762|    982|    return ap->id < bp->id ? -1 : 1;
  ------------------
  |  Branch (3762:12): [True: 629, False: 353]
  ------------------
 3763|    982|}

SSL_COMP_get_compression_methods:
 1951|      1|{
 1952|      1|    STACK_OF(SSL_COMP) **rv;
  ------------------
  |  |   33|      1|#define STACK_OF(type) struct stack_st_##type
  ------------------
 1953|       |
 1954|      1|    rv = (STACK_OF(SSL_COMP) **)OSSL_LIB_CTX_get_data(NULL,
 1955|      1|        OSSL_LIB_CTX_COMP_METHODS);
  ------------------
  |  |  118|      1|#define OSSL_LIB_CTX_COMP_METHODS 21
  ------------------
 1956|      1|    if (rv != NULL)
  ------------------
  |  Branch (1956:9): [True: 1, False: 0]
  ------------------
 1957|      1|        return *rv;
 1958|      0|    else
 1959|      0|        return NULL;
 1960|      1|}

OPENSSL_init_ssl:
   47|      1|{
   48|      1|    static int stoperrset = 0;
   49|       |
   50|      1|    if (stopped) {
  ------------------
  |  Branch (50:9): [True: 0, False: 1]
  ------------------
   51|      0|        if (!stoperrset) {
  ------------------
  |  Branch (51:13): [True: 0, False: 0]
  ------------------
   52|       |            /*
   53|       |             * We only ever set this once to avoid getting into an infinite
   54|       |             * loop where the error system keeps trying to init and fails so
   55|       |             * sets an error etc
   56|       |             */
   57|      0|            stoperrset = 1;
   58|      0|            ERR_raise(ERR_LIB_SSL, ERR_R_INIT_FAIL);
  ------------------
  |  |  357|      0|#define ERR_raise(lib, reason) ERR_raise_data((lib), (reason), NULL)
  |  |  ------------------
  |  |  |  |  359|      0|    (ERR_new(),                                                  \
  |  |  |  |  360|      0|        ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  345|       |#define OPENSSL_FILE __FILE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  346|       |#define OPENSSL_LINE __LINE__
  |  |  |  |  ------------------
  |  |  |  |                       ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  366|      0|#define OPENSSL_FUNC __func__
  |  |  |  |  ------------------
  |  |  |  |  361|      0|        ERR_set_error)
  |  |  ------------------
  ------------------
   59|      0|        }
   60|      0|        return 0;
   61|      0|    }
   62|       |
   63|      1|    opts |= OPENSSL_INIT_ADD_ALL_CIPHERS
  ------------------
  |  |  507|      1|#define OPENSSL_INIT_ADD_ALL_CIPHERS 0x00000004L
  ------------------
   64|      1|        | OPENSSL_INIT_ADD_ALL_DIGESTS;
  ------------------
  |  |  508|      1|#define OPENSSL_INIT_ADD_ALL_DIGESTS 0x00000008L
  ------------------
   65|      1|#ifndef OPENSSL_NO_AUTOLOAD_CONFIG
   66|      1|    if ((opts & OPENSSL_INIT_NO_LOAD_CONFIG) == 0)
  ------------------
  |  |  512|      1|#define OPENSSL_INIT_NO_LOAD_CONFIG 0x00000080L
  ------------------
  |  Branch (66:9): [True: 1, False: 0]
  ------------------
   67|      1|        opts |= OPENSSL_INIT_LOAD_CONFIG;
  ------------------
  |  |  511|      1|#define OPENSSL_INIT_LOAD_CONFIG 0x00000040L
  ------------------
   68|      1|#endif
   69|       |
   70|      1|    if (!OPENSSL_init_crypto(opts, settings))
  ------------------
  |  Branch (70:9): [True: 0, False: 1]
  ------------------
   71|      0|        return 0;
   72|       |
   73|      1|    if (!RUN_ONCE(&ssl_base, ossl_init_ssl_base))
  ------------------
  |  |  130|      1|    (CRYPTO_THREAD_run_once(once, init##_ossl_) ? init##_ossl_ret_ : 0)
  |  |  ------------------
  |  |  |  Branch (130:6): [True: 1, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (73:9): [True: 0, False: 1]
  ------------------
   74|      0|        return 0;
   75|       |
   76|      1|    return 1;
   77|      1|}
ssl_init.c:ossl_init_ssl_base:
   25|      1|{
   26|      1|#ifndef OPENSSL_NO_COMP
   27|      1|    OSSL_TRACE(INIT, "ossl_init_ssl_base: "
  ------------------
  |  |  288|      1|    OSSL_TRACEV(category, (trc_out, "%s", text))
  |  |  ------------------
  |  |  |  |  283|      1|#define OSSL_TRACEV(category, args) ((void)0)
  |  |  ------------------
  ------------------
   28|      1|                     "SSL_COMP_get_compression_methods()\n");
   29|       |    /*
   30|       |     * This will initialise the built-in compression algorithms. The value
   31|       |     * returned is a STACK_OF(SSL_COMP), but that can be discarded safely
   32|       |     */
   33|      1|    SSL_COMP_get_compression_methods();
   34|      1|#endif
   35|      1|    ssl_sort_cipher_list();
   36|      1|    OSSL_TRACE(INIT, "ossl_init_ssl_base: SSL_add_ssl_module()\n");
  ------------------
  |  |  288|      1|    OSSL_TRACEV(category, (trc_out, "%s", text))
  |  |  ------------------
  |  |  |  |  283|      1|#define OSSL_TRACEV(category, args) ((void)0)
  |  |  ------------------
  ------------------
   37|      1|    ssl_base_inited = 1;
   38|      1|    return 1;
   39|      1|}

LLVMFuzzerTestOneInput:
   35|  6.82k|{
   36|  6.82k|  int rc = 0;
   37|  6.82k|  int tlv_rc;
   38|  6.82k|  FUZZ_DATA fuzz;
   39|  6.82k|  TLV tlv;
   40|       |
   41|       |  /* Ignore SIGPIPE errors. We'll handle the errors ourselves. */
   42|  6.82k|  signal(SIGPIPE, SIG_IGN);
   43|       |
   44|       |  /* Have to set all fields to zero before getting to the terminate function */
   45|  6.82k|  memset(&fuzz, 0, sizeof(FUZZ_DATA));
   46|       |
   47|  6.82k|  if(size < sizeof(TLV_RAW)) {
  ------------------
  |  Branch (47:6): [True: 4, False: 6.82k]
  ------------------
   48|       |    /* Not enough data for a single TLV - don't continue */
   49|      4|    goto EXIT_LABEL;
   50|      4|  }
   51|       |
   52|       |  /* Try to initialize the fuzz data */
   53|  6.82k|  FTRY(fuzz_initialize_fuzz_data(&fuzz, data, size));
  ------------------
  |  |  480|  6.82k|        {                                                                     \
  |  |  481|  6.82k|          int _func_rc = (FUNC);                                              \
  |  |  482|  6.82k|          if (_func_rc)                                                       \
  |  |  ------------------
  |  |  |  Branch (482:15): [True: 0, False: 6.82k]
  |  |  ------------------
  |  |  483|  6.82k|          {                                                                   \
  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  486|      0|          }                                                                   \
  |  |  487|  6.82k|        }
  ------------------
   54|       |
   55|  6.82k|  for(tlv_rc = fuzz_get_first_tlv(&fuzz, &tlv);
   56|  20.4k|      tlv_rc == 0;
  ------------------
  |  Branch (56:7): [True: 15.5k, False: 4.88k]
  ------------------
   57|  15.5k|      tlv_rc = fuzz_get_next_tlv(&fuzz, &tlv)) {
   58|       |
   59|       |    /* Have the TLV in hand. Parse the TLV. */
   60|  15.5k|    rc = fuzz_parse_tlv(&fuzz, &tlv);
   61|       |
   62|  15.5k|    if(rc != 0) {
  ------------------
  |  Branch (62:8): [True: 1.93k, False: 13.6k]
  ------------------
   63|       |      /* Failed to parse the TLV. Can't continue. */
   64|  1.93k|      goto EXIT_LABEL;
   65|  1.93k|    }
   66|  15.5k|  }
   67|       |
   68|  4.88k|  if(tlv_rc != TLV_RC_NO_MORE_TLVS) {
  ------------------
  |  |  267|  4.88k|#define TLV_RC_NO_MORE_TLVS             1
  ------------------
  |  Branch (68:6): [True: 154, False: 4.73k]
  ------------------
   69|       |    /* A TLV call failed. Can't continue. */
   70|    154|    goto EXIT_LABEL;
   71|    154|  }
   72|       |
   73|       |  /* Set up the standard easy options. */
   74|  4.73k|  FTRY(fuzz_set_easy_options(&fuzz));
  ------------------
  |  |  480|  4.73k|        {                                                                     \
  |  |  481|  4.73k|          int _func_rc = (FUNC);                                              \
  |  |  482|  4.73k|          if (_func_rc)                                                       \
  |  |  ------------------
  |  |  |  Branch (482:15): [True: 4.73k, False: 0]
  |  |  ------------------
  |  |  483|  4.73k|          {                                                                   \
  |  |  484|  4.73k|            rc = _func_rc;                                                    \
  |  |  485|  4.73k|            goto EXIT_LABEL;                                                  \
  |  |  486|  4.73k|          }                                                                   \
  |  |  487|  4.73k|        }
  ------------------
   75|       |
   76|       |  /**
   77|       |   * Add in more curl options that have been accumulated over possibly
   78|       |   * multiple TLVs.
   79|       |   */
   80|      0|  if(fuzz.header_list != NULL) {
  ------------------
  |  Branch (80:6): [True: 0, False: 0]
  ------------------
   81|      0|    curl_easy_setopt(fuzz.easy, CURLOPT_HTTPHEADER, fuzz.header_list);
  ------------------
  |  | 3343|      0|  curl_easy_setopt curl_exactly_three_arguments(handle, opt, param)
  |  |  ------------------
  |  |  |  | 3341|      0|#define curl_exactly_three_arguments(a, b, c) (a, b, c)
  |  |  ------------------
  ------------------
   82|      0|  }
   83|       |
   84|      0|  if(fuzz.mail_recipients_list != NULL) {
  ------------------
  |  Branch (84:6): [True: 0, False: 0]
  ------------------
   85|      0|    curl_easy_setopt(fuzz.easy, CURLOPT_MAIL_RCPT, fuzz.mail_recipients_list);
  ------------------
  |  | 3343|      0|  curl_easy_setopt curl_exactly_three_arguments(handle, opt, param)
  |  |  ------------------
  |  |  |  | 3341|      0|#define curl_exactly_three_arguments(a, b, c) (a, b, c)
  |  |  ------------------
  ------------------
   86|      0|  }
   87|       |
   88|      0|  if(fuzz.mime != NULL) {
  ------------------
  |  Branch (88:6): [True: 0, False: 0]
  ------------------
   89|      0|    curl_easy_setopt(fuzz.easy, CURLOPT_MIMEPOST, fuzz.mime);
  ------------------
  |  | 3343|      0|  curl_easy_setopt curl_exactly_three_arguments(handle, opt, param)
  |  |  ------------------
  |  |  |  | 3341|      0|#define curl_exactly_three_arguments(a, b, c) (a, b, c)
  |  |  ------------------
  ------------------
   90|      0|  }
   91|       |
   92|      0|  if (fuzz.httppost != NULL) {
  ------------------
  |  Branch (92:7): [True: 0, False: 0]
  ------------------
   93|      0|    curl_easy_setopt(fuzz.easy, CURLOPT_HTTPPOST, fuzz.httppost);
  ------------------
  |  | 3343|      0|  curl_easy_setopt curl_exactly_three_arguments(handle, opt, param)
  |  |  ------------------
  |  |  |  | 3341|      0|#define curl_exactly_three_arguments(a, b, c) (a, b, c)
  |  |  ------------------
  ------------------
   94|      0|  }
   95|       |
   96|       |  /* Run the transfer. */
   97|      0|  fuzz_handle_transfer(&fuzz);
   98|       |
   99|  6.82k|EXIT_LABEL:
  100|       |
  101|  6.82k|  fuzz_terminate_fuzz_data(&fuzz);
  102|       |
  103|       |  /* This function must always return 0. Non-zero codes are reserved. */
  104|  6.82k|  return 0;
  105|      0|}
_Z6to_u32PKh:
  111|  19.8k|{
  112|  19.8k|  uint32_t u;
  113|  19.8k|  u = (b[0] << 24) + (b[1] << 16) + (b[2] << 8) + b[3];
  114|  19.8k|  return u;
  115|  19.8k|}
_Z6to_u16PKh:
  121|  17.1k|{
  122|  17.1k|  uint16_t u;
  123|  17.1k|  u = (b[0] << 8) + b[1];
  124|  17.1k|  return u;
  125|  17.1k|}
_Z25fuzz_initialize_fuzz_dataP9fuzz_dataPKhm:
  133|  6.82k|{
  134|  6.82k|  int rc = 0;
  135|  6.82k|  int ii;
  136|       |
  137|       |  /* Initialize the fuzz data. */
  138|  6.82k|  memset(fuzz, 0, sizeof(FUZZ_DATA));
  139|       |
  140|       |  /* Create an easy handle. This will have all of the settings configured on
  141|       |     it. */
  142|  6.82k|  fuzz->easy = curl_easy_init();
  143|  6.82k|  FCHECK(fuzz->easy != NULL);
  ------------------
  |  |  490|  6.82k|        {                                                                     \
  |  |  491|  6.82k|          if (!(COND))                                                        \
  |  |  ------------------
  |  |  |  Branch (491:15): [True: 0, False: 6.82k]
  |  |  ------------------
  |  |  492|  6.82k|          {                                                                   \
  |  |  493|      0|            rc = 255;                                                         \
  |  |  494|      0|            goto EXIT_LABEL;                                                  \
  |  |  495|      0|          }                                                                   \
  |  |  496|  6.82k|        }
  ------------------
  144|       |
  145|       |  /* Set up the state parser */
  146|  6.82k|  fuzz->state.data = data;
  147|  6.82k|  fuzz->state.data_len = data_len;
  148|       |
  149|       |  /* Set up the state of the server sockets. */
  150|  20.4k|  for(ii = 0; ii < FUZZ_NUM_CONNECTIONS; ii++) {
  ------------------
  |  |  307|  20.4k|#define FUZZ_NUM_CONNECTIONS            2
  ------------------
  |  Branch (150:15): [True: 13.6k, False: 6.82k]
  ------------------
  151|  13.6k|    fuzz->sockman[ii].index = ii;
  152|  13.6k|    fuzz->sockman[ii].fd_state = FUZZ_SOCK_CLOSED;
  153|  13.6k|  }
  154|       |
  155|       |  /* Check for verbose mode. */
  156|  6.82k|  fuzz->verbose = (getenv("FUZZ_VERBOSE") != NULL);
  157|       |
  158|  6.82k|  FCHECK(setenv("CURL_HSTS_HTTP", "1", 0) == 0);
  ------------------
  |  |  490|  6.82k|        {                                                                     \
  |  |  491|  6.82k|          if (!(COND))                                                        \
  |  |  ------------------
  |  |  |  Branch (491:15): [True: 0, False: 6.82k]
  |  |  ------------------
  |  |  492|  6.82k|          {                                                                   \
  |  |  493|      0|            rc = 255;                                                         \
  |  |  494|      0|            goto EXIT_LABEL;                                                  \
  |  |  495|      0|          }                                                                   \
  |  |  496|  6.82k|        }
  ------------------
  159|  6.82k|  FCHECK(setenv("CURL_ALTSVC_HTTP", "1", 0) == 0);
  ------------------
  |  |  490|  6.82k|        {                                                                     \
  |  |  491|  6.82k|          if (!(COND))                                                        \
  |  |  ------------------
  |  |  |  Branch (491:15): [True: 0, False: 6.82k]
  |  |  ------------------
  |  |  492|  6.82k|          {                                                                   \
  |  |  493|      0|            rc = 255;                                                         \
  |  |  494|      0|            goto EXIT_LABEL;                                                  \
  |  |  495|      0|          }                                                                   \
  |  |  496|  6.82k|        }
  ------------------
  160|       |
  161|  6.82k|EXIT_LABEL:
  162|       |
  163|  6.82k|  return rc;
  164|  6.82k|}
_Z21fuzz_set_easy_optionsP9fuzz_data:
  170|  4.73k|{
  171|  4.73k|  int rc = 0;
  172|       |
  173|       |  /* Set some standard options on the CURL easy handle. We need to override the
  174|       |     socket function so that we create our own sockets to present to CURL. */
  175|  4.73k|  FTRY(curl_easy_setopt(fuzz->easy,
  ------------------
  |  |  480|  4.73k|        {                                                                     \
  |  |  481|  4.73k|          int _func_rc = (FUNC);                                              \
  |  |  482|  4.73k|          if (_func_rc)                                                       \
  |  |  ------------------
  |  |  |  Branch (482:15): [True: 0, False: 4.73k]
  |  |  ------------------
  |  |  483|  4.73k|          {                                                                   \
  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  486|      0|          }                                                                   \
  |  |  487|  4.73k|        }
  ------------------
  176|  4.73k|                        CURLOPT_OPENSOCKETFUNCTION,
  177|  4.73k|                        fuzz_open_socket));
  178|  4.73k|  FTRY(curl_easy_setopt(fuzz->easy, CURLOPT_OPENSOCKETDATA, fuzz));
  ------------------
  |  |  480|  4.73k|        {                                                                     \
  |  |  481|  4.73k|          int _func_rc = (FUNC);                                              \
  |  |  482|  4.73k|          if (_func_rc)                                                       \
  |  |  ------------------
  |  |  |  Branch (482:15): [True: 0, False: 4.73k]
  |  |  ------------------
  |  |  483|  4.73k|          {                                                                   \
  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  486|      0|          }                                                                   \
  |  |  487|  4.73k|        }
  ------------------
  179|       |
  180|       |  /* In case something tries to set a socket option, intercept this. */
  181|  4.73k|  FTRY(curl_easy_setopt(fuzz->easy,
  ------------------
  |  |  480|  4.73k|        {                                                                     \
  |  |  481|  4.73k|          int _func_rc = (FUNC);                                              \
  |  |  482|  4.73k|          if (_func_rc)                                                       \
  |  |  ------------------
  |  |  |  Branch (482:15): [True: 0, False: 4.73k]
  |  |  ------------------
  |  |  483|  4.73k|          {                                                                   \
  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  486|      0|          }                                                                   \
  |  |  487|  4.73k|        }
  ------------------
  182|  4.73k|                        CURLOPT_SOCKOPTFUNCTION,
  183|  4.73k|                        fuzz_sockopt_callback));
  184|       |
  185|       |  /* Set the standard read function callback. */
  186|  4.73k|  FTRY(curl_easy_setopt(fuzz->easy,
  ------------------
  |  |  480|  4.73k|        {                                                                     \
  |  |  481|  4.73k|          int _func_rc = (FUNC);                                              \
  |  |  482|  4.73k|          if (_func_rc)                                                       \
  |  |  ------------------
  |  |  |  Branch (482:15): [True: 0, False: 4.73k]
  |  |  ------------------
  |  |  483|  4.73k|          {                                                                   \
  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  486|      0|          }                                                                   \
  |  |  487|  4.73k|        }
  ------------------
  187|  4.73k|                        CURLOPT_READFUNCTION,
  188|  4.73k|                        fuzz_read_callback));
  189|  4.73k|  FTRY(curl_easy_setopt(fuzz->easy, CURLOPT_READDATA, fuzz));
  ------------------
  |  |  480|  4.73k|        {                                                                     \
  |  |  481|  4.73k|          int _func_rc = (FUNC);                                              \
  |  |  482|  4.73k|          if (_func_rc)                                                       \
  |  |  ------------------
  |  |  |  Branch (482:15): [True: 0, False: 4.73k]
  |  |  ------------------
  |  |  483|  4.73k|          {                                                                   \
  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  486|      0|          }                                                                   \
  |  |  487|  4.73k|        }
  ------------------
  190|       |
  191|       |  /* Set the standard write function callback. */
  192|  4.73k|  FTRY(curl_easy_setopt(fuzz->easy,
  ------------------
  |  |  480|  4.73k|        {                                                                     \
  |  |  481|  4.73k|          int _func_rc = (FUNC);                                              \
  |  |  482|  4.73k|          if (_func_rc)                                                       \
  |  |  ------------------
  |  |  |  Branch (482:15): [True: 0, False: 4.73k]
  |  |  ------------------
  |  |  483|  4.73k|          {                                                                   \
  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  486|      0|          }                                                                   \
  |  |  487|  4.73k|        }
  ------------------
  193|  4.73k|                        CURLOPT_WRITEFUNCTION,
  194|  4.73k|                        fuzz_write_callback));
  195|  4.73k|  FTRY(curl_easy_setopt(fuzz->easy, CURLOPT_WRITEDATA, fuzz));
  ------------------
  |  |  480|  4.73k|        {                                                                     \
  |  |  481|  4.73k|          int _func_rc = (FUNC);                                              \
  |  |  482|  4.73k|          if (_func_rc)                                                       \
  |  |  ------------------
  |  |  |  Branch (482:15): [True: 0, False: 4.73k]
  |  |  ------------------
  |  |  483|  4.73k|          {                                                                   \
  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  486|      0|          }                                                                   \
  |  |  487|  4.73k|        }
  ------------------
  196|       |
  197|       |  /* Set the writable cookie jar path so cookies are tested. */
  198|  4.73k|  FTRY(curl_easy_setopt(fuzz->easy, CURLOPT_COOKIEJAR, FUZZ_COOKIE_JAR_PATH));
  ------------------
  |  |  480|  4.73k|        {                                                                     \
  |  |  481|  4.73k|          int _func_rc = (FUNC);                                              \
  |  |  482|  4.73k|          if (_func_rc)                                                       \
  |  |  ------------------
  |  |  |  Branch (482:15): [True: 0, False: 4.73k]
  |  |  ------------------
  |  |  483|  4.73k|          {                                                                   \
  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  486|      0|          }                                                                   \
  |  |  487|  4.73k|        }
  ------------------
  199|       |
  200|       |  /* Set the RO cookie file path so cookies are tested. */
  201|  4.73k|  FTRY(curl_easy_setopt(fuzz->easy, CURLOPT_COOKIEFILE, FUZZ_RO_COOKIE_FILE_PATH));
  ------------------
  |  |  480|  4.73k|        {                                                                     \
  |  |  481|  4.73k|          int _func_rc = (FUNC);                                              \
  |  |  482|  4.73k|          if (_func_rc)                                                       \
  |  |  ------------------
  |  |  |  Branch (482:15): [True: 0, False: 4.73k]
  |  |  ------------------
  |  |  483|  4.73k|          {                                                                   \
  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  486|      0|          }                                                                   \
  |  |  487|  4.73k|        }
  ------------------
  202|       |
  203|       |  /* Set altsvc header cache filepath so that it can be fuzzed. */
  204|  4.73k|  FTRY(curl_easy_setopt(fuzz->easy, CURLOPT_ALTSVC, FUZZ_ALT_SVC_HEADER_CACHE_PATH));
  ------------------
  |  |  480|  4.73k|        {                                                                     \
  |  |  481|  4.73k|          int _func_rc = (FUNC);                                              \
  |  |  482|  4.73k|          if (_func_rc)                                                       \
  |  |  ------------------
  |  |  |  Branch (482:15): [True: 0, False: 4.73k]
  |  |  ------------------
  |  |  483|  4.73k|          {                                                                   \
  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  486|      0|          }                                                                   \
  |  |  487|  4.73k|        }
  ------------------
  205|       |
  206|       |  /* Set the hsts header cache filepath so that it can be fuzzed. */
  207|  4.73k|  FTRY(curl_easy_setopt(fuzz->easy, CURLOPT_HSTS, FUZZ_HSTS_HEADER_CACHE_PATH));
  ------------------
  |  |  480|  4.73k|        {                                                                     \
  |  |  481|  4.73k|          int _func_rc = (FUNC);                                              \
  |  |  482|  4.73k|          if (_func_rc)                                                       \
  |  |  ------------------
  |  |  |  Branch (482:15): [True: 0, False: 4.73k]
  |  |  ------------------
  |  |  483|  4.73k|          {                                                                   \
  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  486|      0|          }                                                                   \
  |  |  487|  4.73k|        }
  ------------------
  208|       |
  209|       |  /* Set the Certificate Revocation List file path so it can be fuzzed */
  210|  4.73k|  FTRY(curl_easy_setopt(fuzz->easy, CURLOPT_CRLFILE, FUZZ_CRL_FILE_PATH));
  ------------------
  |  |  480|  4.73k|        {                                                                     \
  |  |  481|  4.73k|          int _func_rc = (FUNC);                                              \
  |  |  482|  4.73k|          if (_func_rc)                                                       \
  |  |  ------------------
  |  |  |  Branch (482:15): [True: 0, False: 4.73k]
  |  |  ------------------
  |  |  483|  4.73k|          {                                                                   \
  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  486|      0|          }                                                                   \
  |  |  487|  4.73k|        }
  ------------------
  211|       |
  212|       |  /* Set the .netrc file path so it can be fuzzed */
  213|  4.73k|  FTRY(curl_easy_setopt(fuzz->easy, CURLOPT_NETRC_FILE, FUZZ_NETRC_FILE_PATH));
  ------------------
  |  |  480|  4.73k|        {                                                                     \
  |  |  481|  4.73k|          int _func_rc = (FUNC);                                              \
  |  |  482|  4.73k|          if (_func_rc)                                                       \
  |  |  ------------------
  |  |  |  Branch (482:15): [True: 0, False: 4.73k]
  |  |  ------------------
  |  |  483|  4.73k|          {                                                                   \
  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  486|      0|          }                                                                   \
  |  |  487|  4.73k|        }
  ------------------
  214|       |
  215|       |  /* Time out requests quickly. */
  216|  4.73k|  FTRY(curl_easy_setopt(fuzz->easy, CURLOPT_TIMEOUT_MS, 200L));
  ------------------
  |  |  480|  4.73k|        {                                                                     \
  |  |  481|  4.73k|          int _func_rc = (FUNC);                                              \
  |  |  482|  4.73k|          if (_func_rc)                                                       \
  |  |  ------------------
  |  |  |  Branch (482:15): [True: 0, False: 4.73k]
  |  |  ------------------
  |  |  483|  4.73k|          {                                                                   \
  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  486|      0|          }                                                                   \
  |  |  487|  4.73k|        }
  ------------------
  217|  4.73k|  FTRY(curl_easy_setopt(fuzz->easy, CURLOPT_SERVER_RESPONSE_TIMEOUT, 1L));
  ------------------
  |  |  480|  4.73k|        {                                                                     \
  |  |  481|  4.73k|          int _func_rc = (FUNC);                                              \
  |  |  482|  4.73k|          if (_func_rc)                                                       \
  |  |  ------------------
  |  |  |  Branch (482:15): [True: 0, False: 4.73k]
  |  |  ------------------
  |  |  483|  4.73k|          {                                                                   \
  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  486|      0|          }                                                                   \
  |  |  487|  4.73k|        }
  ------------------
  218|       |
  219|       |  /* Can enable verbose mode by having the environment variable FUZZ_VERBOSE. */
  220|  4.73k|  if(fuzz->verbose) {
  ------------------
  |  Branch (220:6): [True: 0, False: 4.73k]
  ------------------
  221|      0|    FTRY(curl_easy_setopt(fuzz->easy, CURLOPT_VERBOSE, 1L));
  ------------------
  |  |  480|      0|        {                                                                     \
  |  |  481|      0|          int _func_rc = (FUNC);                                              \
  |  |  482|      0|          if (_func_rc)                                                       \
  |  |  ------------------
  |  |  |  Branch (482:15): [True: 0, False: 0]
  |  |  ------------------
  |  |  483|      0|          {                                                                   \
  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  486|      0|          }                                                                   \
  |  |  487|      0|        }
  ------------------
  222|      0|  }
  223|       |
  224|       |  /* Force resolution of all addresses to a specific IP address. */
  225|  4.73k|  fuzz->connect_to_list = curl_slist_append(NULL, "::127.0.1.127:");
  226|  4.73k|  FTRY(curl_easy_setopt(fuzz->easy, CURLOPT_CONNECT_TO, fuzz->connect_to_list));
  ------------------
  |  |  480|  4.73k|        {                                                                     \
  |  |  481|  4.73k|          int _func_rc = (FUNC);                                              \
  |  |  482|  4.73k|          if (_func_rc)                                                       \
  |  |  ------------------
  |  |  |  Branch (482:15): [True: 0, False: 4.73k]
  |  |  ------------------
  |  |  483|  4.73k|          {                                                                   \
  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  486|      0|          }                                                                   \
  |  |  487|  4.73k|        }
  ------------------
  227|       |
  228|       |  /* Limit the protocols in use by this fuzzer. */
  229|  4.73k|  FTRY(fuzz_set_allowed_protocols(fuzz));
  ------------------
  |  |  480|  4.73k|        {                                                                     \
  |  |  481|  4.73k|          int _func_rc = (FUNC);                                              \
  |  |  482|  4.73k|          if (_func_rc)                                                       \
  |  |  ------------------
  |  |  |  Branch (482:15): [True: 4.73k, False: 0]
  |  |  ------------------
  |  |  483|  4.73k|          {                                                                   \
  |  |  484|  4.73k|            rc = _func_rc;                                                    \
  |  |  485|  4.73k|            goto EXIT_LABEL;                                                  \
  |  |  486|  4.73k|          }                                                                   \
  |  |  487|  4.73k|        }
  ------------------
  230|       |
  231|  4.73k|EXIT_LABEL:
  232|       |
  233|  4.73k|  return rc;
  234|      0|}
_Z24fuzz_terminate_fuzz_dataP9fuzz_data:
  240|  6.82k|{
  241|  6.82k|  int ii;
  242|       |
  243|  6.82k|  fuzz_free((void **)&fuzz->postfields);
  244|       |
  245|  20.4k|  for(ii = 0; ii < FUZZ_NUM_CONNECTIONS; ii++) {
  ------------------
  |  |  307|  20.4k|#define FUZZ_NUM_CONNECTIONS            2
  ------------------
  |  Branch (245:15): [True: 13.6k, False: 6.82k]
  ------------------
  246|  13.6k|    if(fuzz->sockman[ii].fd_state != FUZZ_SOCK_CLOSED) {
  ------------------
  |  Branch (246:8): [True: 0, False: 13.6k]
  ------------------
  247|      0|      close(fuzz->sockman[ii].fd);
  248|      0|      fuzz->sockman[ii].fd_state = FUZZ_SOCK_CLOSED;
  249|      0|    }
  250|  13.6k|  }
  251|       |
  252|  6.82k|  if(fuzz->connect_to_list != NULL) {
  ------------------
  |  Branch (252:6): [True: 4.73k, False: 2.09k]
  ------------------
  253|  4.73k|    curl_slist_free_all(fuzz->connect_to_list);
  254|  4.73k|    fuzz->connect_to_list = NULL;
  255|  4.73k|  }
  256|       |
  257|  6.82k|  if(fuzz->header_list != NULL) {
  ------------------
  |  Branch (257:6): [True: 28, False: 6.79k]
  ------------------
  258|     28|    curl_slist_free_all(fuzz->header_list);
  259|     28|    fuzz->header_list = NULL;
  260|     28|  }
  261|       |
  262|  6.82k|  if(fuzz->mail_recipients_list != NULL) {
  ------------------
  |  Branch (262:6): [True: 23, False: 6.80k]
  ------------------
  263|     23|    curl_slist_free_all(fuzz->mail_recipients_list);
  264|     23|    fuzz->mail_recipients_list = NULL;
  265|     23|  }
  266|       |
  267|  6.82k|  if(fuzz->mime != NULL) {
  ------------------
  |  Branch (267:6): [True: 297, False: 6.52k]
  ------------------
  268|    297|    curl_mime_free(fuzz->mime);
  269|    297|    fuzz->mime = NULL;
  270|    297|  }
  271|       |
  272|  6.82k|  if(fuzz->easy != NULL) {
  ------------------
  |  Branch (272:6): [True: 6.82k, False: 4]
  ------------------
  273|  6.82k|    curl_easy_cleanup(fuzz->easy);
  274|  6.82k|    fuzz->easy = NULL;
  275|  6.82k|  }
  276|       |
  277|       |  /* When you have passed the struct curl_httppost pointer to curl_easy_setopt
  278|       |   * (using the CURLOPT_HTTPPOST option), you must not free the list until after
  279|       |   *  you have called curl_easy_cleanup for the curl handle.
  280|       |   *  https://curl.se/libcurl/c/curl_formadd.html */
  281|  6.82k|  if (fuzz->httppost != NULL) {
  ------------------
  |  Branch (281:7): [True: 12, False: 6.81k]
  ------------------
  282|     12|    curl_formfree(fuzz->httppost);
  283|     12|    fuzz->httppost = NULL;
  284|     12|  }
  285|       |
  286|       |  // free after httppost and last_post_part.
  287|  6.82k|  if (fuzz->post_body != NULL) {
  ------------------
  |  Branch (287:7): [True: 12, False: 6.81k]
  ------------------
  288|     12|    fuzz_free((void **)&fuzz->post_body);
  289|     12|  }
  290|  6.82k|}
_Z9fuzz_freePPv:
  296|  22.5k|{
  297|  22.5k|  if(*ptr != NULL) {
  ------------------
  |  Branch (297:6): [True: 6.99k, False: 15.5k]
  ------------------
  298|  6.99k|    free(*ptr);
  299|       |    *ptr = NULL;
  300|  6.99k|  }
  301|  22.5k|}
_Z26fuzz_set_allowed_protocolsP9fuzz_data:
  502|  4.73k|{
  503|  4.73k|  int rc = 0;
  504|  4.73k|  const char *allowed_protocols = "";
  505|       |
  506|  4.73k|#ifdef FUZZ_PROTOCOLS_ALL
  507|       |  /* Do not allow telnet currently as it accepts input from stdin. */
  508|  4.73k|  allowed_protocols =
  509|  4.73k|    "dict,file,ftp,ftps,gopher,gophers,http,https,imap,imaps,"
  510|  4.73k|    "mqtt,pop3,pop3s,"
  511|  4.73k|    "ldap,ldaps,"
  512|  4.73k|    "rtmp,rtmpe,rtmps,rtmpt,rtmpte,rtmpts,"
  513|  4.73k|    "scp,"
  514|  4.73k|    "sftp,"
  515|  4.73k|    "rtsp,smb,smbs,smtp,smtps,tftp,"
  516|  4.73k|    "ws,wss";
  517|  4.73k|#endif
  518|       |#ifdef FUZZ_PROTOCOLS_DICT
  519|       |  allowed_protocols = "dict";
  520|       |#endif
  521|       |#ifdef FUZZ_PROTOCOLS_FILE
  522|       |  allowed_protocols = "file";
  523|       |#endif
  524|       |#ifdef FUZZ_PROTOCOLS_FTP
  525|       |  allowed_protocols = "ftp,ftps";
  526|       |#endif
  527|       |#ifdef FUZZ_PROTOCOLS_GOPHER
  528|       |  allowed_protocols = "gopher,gophers";
  529|       |#endif
  530|       |#ifdef FUZZ_PROTOCOLS_HTTP
  531|       |  allowed_protocols = "http";
  532|       |#endif
  533|       |#ifdef FUZZ_PROTOCOLS_HTTPS
  534|       |  allowed_protocols = "https";
  535|       |#endif
  536|       |#ifdef FUZZ_PROTOCOLS_IMAP
  537|       |  allowed_protocols = "imap,imaps";
  538|       |#endif
  539|       |#ifdef FUZZ_PROTOCOLS_LDAP
  540|       |  allowed_protocols = "ldap,ldaps";
  541|       |#endif
  542|       |#ifdef FUZZ_PROTOCOLS_MQTT
  543|       |  allowed_protocols = "mqtt";
  544|       |#endif
  545|       |#ifdef FUZZ_PROTOCOLS_POP3
  546|       |  allowed_protocols = "pop3,pop3s";
  547|       |#endif
  548|       |#ifdef FUZZ_PROTOCOLS_RTMP
  549|       |  allowed_protocols = "rtmp,rtmpe,rtmps,rtmpt,rtmpte,rtmpts";
  550|       |#endif
  551|       |#ifdef FUZZ_PROTOCOLS_RTSP
  552|       |  allowed_protocols = "rtsp";
  553|       |#endif
  554|       |#ifdef FUZZ_PROTOCOLS_SCP
  555|       |  allowed_protocols = "scp";
  556|       |#endif
  557|       |#ifdef FUZZ_PROTOCOLS_SFTP
  558|       |  allowed_protocols = "sftp";
  559|       |#endif
  560|       |#ifdef FUZZ_PROTOCOLS_SMB
  561|       |  allowed_protocols = "smb,smbs";
  562|       |#endif
  563|       |#ifdef FUZZ_PROTOCOLS_SMTP
  564|       |  allowed_protocols = "smtp,smtps";
  565|       |#endif
  566|       |#ifdef FUZZ_PROTOCOLS_TFTP
  567|       |  allowed_protocols = "tftp";
  568|       |#endif
  569|       |#ifdef FUZZ_PROTOCOLS_WS
  570|       |  // http is required by websockets
  571|       |  allowed_protocols = "http,ws,wss";
  572|       |  FTRY(curl_easy_setopt(fuzz->easy, CURLOPT_CONNECT_ONLY, 2L));
  573|       |#endif
  574|       |
  575|  4.73k|  FTRY(curl_easy_setopt(fuzz->easy, CURLOPT_PROTOCOLS_STR, allowed_protocols));
  ------------------
  |  |  480|  4.73k|        {                                                                     \
  |  |  481|  4.73k|          int _func_rc = (FUNC);                                              \
  |  |  482|  4.73k|          if (_func_rc)                                                       \
  |  |  ------------------
  |  |  |  Branch (482:15): [True: 4.73k, False: 0]
  |  |  ------------------
  |  |  483|  4.73k|          {                                                                   \
  |  |  484|  4.73k|            rc = _func_rc;                                                    \
  |  |  485|  4.73k|            goto EXIT_LABEL;                                                  \
  |  |  486|  4.73k|          }                                                                   \
  |  |  487|  4.73k|        }
  ------------------
  576|       |
  577|  4.73k|EXIT_LABEL:
  578|       |
  579|  4.73k|  return rc;
  580|      0|}

_Z18fuzz_get_first_tlvP9fuzz_dataP3tlv:
   32|  7.66k|{
   33|       |  /* Reset the cursor. */
   34|  7.66k|  fuzz->state.data_pos = 0;
   35|  7.66k|  return fuzz_get_tlv_comn(fuzz, tlv);
   36|  7.66k|}
_Z17fuzz_get_next_tlvP9fuzz_dataP3tlv:
   43|  14.5k|{
   44|       |  /* Advance the cursor by the full length of the previous TLV. */
   45|  14.5k|  fuzz->state.data_pos += sizeof(TLV_RAW) + tlv->length;
   46|       |
   47|       |  /* Work out if there's a TLV's worth of data to read */
   48|  14.5k|  if(fuzz->state.data_pos + sizeof(TLV_RAW) > fuzz->state.data_len) {
  ------------------
  |  Branch (48:6): [True: 5.10k, False: 9.49k]
  ------------------
   49|       |    /* No more TLVs to parse */
   50|  5.10k|    return TLV_RC_NO_MORE_TLVS;
  ------------------
  |  |  267|  5.10k|#define TLV_RC_NO_MORE_TLVS             1
  ------------------
   51|  5.10k|  }
   52|       |
   53|  9.49k|  return fuzz_get_tlv_comn(fuzz, tlv);
   54|  14.5k|}
_Z17fuzz_get_tlv_comnP9fuzz_dataP3tlv:
   61|  17.1k|{
   62|  17.1k|  int rc = 0;
   63|  17.1k|  size_t data_offset;
   64|  17.1k|  TLV_RAW *raw;
   65|       |
   66|       |  /* Start by casting the data stream to a TLV. */
   67|  17.1k|  raw = (TLV_RAW *)&fuzz->state.data[fuzz->state.data_pos];
   68|  17.1k|  data_offset = fuzz->state.data_pos + sizeof(TLV_RAW);
   69|       |
   70|       |  /* Set the TLV values. */
   71|  17.1k|  tlv->type = to_u16(raw->raw_type);
   72|  17.1k|  tlv->length = to_u32(raw->raw_length);
   73|  17.1k|  tlv->value = &fuzz->state.data[data_offset];
   74|       |
   75|  17.1k|  FV_PRINTF(fuzz, "TLV: type %x length %u\n", tlv->type, tlv->length);
  ------------------
  |  |  530|  17.1k|        if((FUZZP)->verbose) {                                                \
  |  |  ------------------
  |  |  |  Branch (530:12): [True: 0, False: 17.1k]
  |  |  ------------------
  |  |  531|      0|          printf(__VA_ARGS__);                                                \
  |  |  532|      0|        }
  ------------------
   76|       |
   77|       |  /* Use uint64s to verify lengths of TLVs so that overflow problems don't
   78|       |     matter. */
   79|  17.1k|  uint64_t check_length = data_offset;
   80|  17.1k|  check_length += tlv->length;
   81|       |
   82|  17.1k|  uint64_t remaining_len = fuzz->state.data_len;
   83|  17.1k|  FV_PRINTF(fuzz, "Check length of data: %" PRIu64 " \n", check_length);
  ------------------
  |  |  530|  17.1k|        if((FUZZP)->verbose) {                                                \
  |  |  ------------------
  |  |  |  Branch (530:12): [True: 0, False: 17.1k]
  |  |  ------------------
  |  |  531|      0|          printf(__VA_ARGS__);                                                \
  |  |  532|      0|        }
  ------------------
   84|  17.1k|  FV_PRINTF(fuzz, "Remaining length of data: %" PRIu64 " \n", remaining_len);
  ------------------
  |  |  530|  17.1k|        if((FUZZP)->verbose) {                                                \
  |  |  ------------------
  |  |  |  Branch (530:12): [True: 0, False: 17.1k]
  |  |  ------------------
  |  |  531|      0|          printf(__VA_ARGS__);                                                \
  |  |  532|      0|        }
  ------------------
   85|       |
   86|       |  /* Sanity check that the TLV length is ok. */
   87|  17.1k|  if(check_length > remaining_len) {
  ------------------
  |  Branch (87:6): [True: 423, False: 16.7k]
  ------------------
   88|    423|    FV_PRINTF(fuzz, "Returning TLV_RC_SIZE_ERROR\n");
  ------------------
  |  |  530|    423|        if((FUZZP)->verbose) {                                                \
  |  |  ------------------
  |  |  |  Branch (530:12): [True: 0, False: 423]
  |  |  ------------------
  |  |  531|      0|          printf(__VA_ARGS__);                                                \
  |  |  532|      0|        }
  ------------------
   89|    423|    rc = TLV_RC_SIZE_ERROR;
  ------------------
  |  |  268|    423|#define TLV_RC_SIZE_ERROR               2
  ------------------
   90|    423|  }
   91|       |
   92|  17.1k|  return rc;
   93|  17.1k|}
_Z14fuzz_parse_tlvP9fuzz_dataP3tlv:
   99|  15.5k|{
  100|  15.5k|  int rc;
  101|  15.5k|  char *tmp = NULL;
  102|  15.5k|  uint32_t tmp_u32;
  103|  15.5k|  curl_slist *new_list;
  104|       |
  105|  15.5k|  switch(tlv->type) {
  106|       |    /* The pointers in response TLVs will always be valid as long as the fuzz
  107|       |       data is in scope, which is the entirety of this file. */
  108|    201|    FRESPONSETLV(&fuzz->sockman[0], TLV_TYPE_RESPONSE0, 0);
  ------------------
  |  |  513|    201|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (513:9): [True: 201, False: 15.3k]
  |  |  ------------------
  |  |  514|    201|          (SMAN)->responses[(INDEX)].data = tlv->value;                       \
  |  |  515|    201|          (SMAN)->responses[(INDEX)].data_len = tlv->length;                  \
  |  |  516|    201|          break
  ------------------
  109|    200|    FRESPONSETLV(&fuzz->sockman[0], TLV_TYPE_RESPONSE1, 1);
  ------------------
  |  |  513|    200|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (513:9): [True: 200, False: 15.3k]
  |  |  ------------------
  |  |  514|    200|          (SMAN)->responses[(INDEX)].data = tlv->value;                       \
  |  |  515|    200|          (SMAN)->responses[(INDEX)].data_len = tlv->length;                  \
  |  |  516|    200|          break
  ------------------
  110|     68|    FRESPONSETLV(&fuzz->sockman[0], TLV_TYPE_RESPONSE2, 2);
  ------------------
  |  |  513|     68|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (513:9): [True: 68, False: 15.4k]
  |  |  ------------------
  |  |  514|     68|          (SMAN)->responses[(INDEX)].data = tlv->value;                       \
  |  |  515|     68|          (SMAN)->responses[(INDEX)].data_len = tlv->length;                  \
  |  |  516|     68|          break
  ------------------
  111|     79|    FRESPONSETLV(&fuzz->sockman[0], TLV_TYPE_RESPONSE3, 3);
  ------------------
  |  |  513|     79|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (513:9): [True: 79, False: 15.4k]
  |  |  ------------------
  |  |  514|     79|          (SMAN)->responses[(INDEX)].data = tlv->value;                       \
  |  |  515|     79|          (SMAN)->responses[(INDEX)].data_len = tlv->length;                  \
  |  |  516|     79|          break
  ------------------
  112|    210|    FRESPONSETLV(&fuzz->sockman[0], TLV_TYPE_RESPONSE4, 4);
  ------------------
  |  |  513|    210|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (513:9): [True: 210, False: 15.3k]
  |  |  ------------------
  |  |  514|    210|          (SMAN)->responses[(INDEX)].data = tlv->value;                       \
  |  |  515|    210|          (SMAN)->responses[(INDEX)].data_len = tlv->length;                  \
  |  |  516|    210|          break
  ------------------
  113|    197|    FRESPONSETLV(&fuzz->sockman[0], TLV_TYPE_RESPONSE5, 5);
  ------------------
  |  |  513|    197|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (513:9): [True: 197, False: 15.3k]
  |  |  ------------------
  |  |  514|    197|          (SMAN)->responses[(INDEX)].data = tlv->value;                       \
  |  |  515|    197|          (SMAN)->responses[(INDEX)].data_len = tlv->length;                  \
  |  |  516|    197|          break
  ------------------
  114|    195|    FRESPONSETLV(&fuzz->sockman[0], TLV_TYPE_RESPONSE6, 6);
  ------------------
  |  |  513|    195|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (513:9): [True: 195, False: 15.3k]
  |  |  ------------------
  |  |  514|    195|          (SMAN)->responses[(INDEX)].data = tlv->value;                       \
  |  |  515|    195|          (SMAN)->responses[(INDEX)].data_len = tlv->length;                  \
  |  |  516|    195|          break
  ------------------
  115|    200|    FRESPONSETLV(&fuzz->sockman[0], TLV_TYPE_RESPONSE7, 7);
  ------------------
  |  |  513|    200|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (513:9): [True: 200, False: 15.3k]
  |  |  ------------------
  |  |  514|    200|          (SMAN)->responses[(INDEX)].data = tlv->value;                       \
  |  |  515|    200|          (SMAN)->responses[(INDEX)].data_len = tlv->length;                  \
  |  |  516|    200|          break
  ------------------
  116|    233|    FRESPONSETLV(&fuzz->sockman[0], TLV_TYPE_RESPONSE8, 8);
  ------------------
  |  |  513|    233|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (513:9): [True: 233, False: 15.3k]
  |  |  ------------------
  |  |  514|    233|          (SMAN)->responses[(INDEX)].data = tlv->value;                       \
  |  |  515|    233|          (SMAN)->responses[(INDEX)].data_len = tlv->length;                  \
  |  |  516|    233|          break
  ------------------
  117|    199|    FRESPONSETLV(&fuzz->sockman[0], TLV_TYPE_RESPONSE9, 9);
  ------------------
  |  |  513|    199|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (513:9): [True: 199, False: 15.3k]
  |  |  ------------------
  |  |  514|    199|          (SMAN)->responses[(INDEX)].data = tlv->value;                       \
  |  |  515|    199|          (SMAN)->responses[(INDEX)].data_len = tlv->length;                  \
  |  |  516|    199|          break
  ------------------
  118|    200|    FRESPONSETLV(&fuzz->sockman[0], TLV_TYPE_RESPONSE10, 10);
  ------------------
  |  |  513|    200|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (513:9): [True: 200, False: 15.3k]
  |  |  ------------------
  |  |  514|    200|          (SMAN)->responses[(INDEX)].data = tlv->value;                       \
  |  |  515|    200|          (SMAN)->responses[(INDEX)].data_len = tlv->length;                  \
  |  |  516|    200|          break
  ------------------
  119|       |
  120|     68|    FRESPONSETLV(&fuzz->sockman[1], TLV_TYPE_SECOND_RESPONSE0, 0);
  ------------------
  |  |  513|     68|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (513:9): [True: 68, False: 15.4k]
  |  |  ------------------
  |  |  514|     68|          (SMAN)->responses[(INDEX)].data = tlv->value;                       \
  |  |  515|     68|          (SMAN)->responses[(INDEX)].data_len = tlv->length;                  \
  |  |  516|     68|          break
  ------------------
  121|    211|    FRESPONSETLV(&fuzz->sockman[1], TLV_TYPE_SECOND_RESPONSE1, 1);
  ------------------
  |  |  513|    211|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (513:9): [True: 211, False: 15.3k]
  |  |  ------------------
  |  |  514|    211|          (SMAN)->responses[(INDEX)].data = tlv->value;                       \
  |  |  515|    211|          (SMAN)->responses[(INDEX)].data_len = tlv->length;                  \
  |  |  516|    211|          break
  ------------------
  122|       |
  123|     27|    case TLV_TYPE_UPLOAD1:
  ------------------
  |  |   36|     27|#define TLV_TYPE_UPLOAD1                        8
  ------------------
  |  Branch (123:5): [True: 27, False: 15.5k]
  ------------------
  124|       |      /* The pointers in the TLV will always be valid as long as the fuzz data
  125|       |         is in scope, which is the entirety of this file. */
  126|       |
  127|     27|      FCHECK_OPTION_UNSET(fuzz, CURLOPT_UPLOAD);
  ------------------
  |  |  503|     27|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  ------------------
  |  |  |  |  490|     27|        {                                                                     \
  |  |  |  |  491|     27|          if (!(COND))                                                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (491:15): [True: 1, False: 26]
  |  |  |  |  ------------------
  |  |  |  |  492|     27|          {                                                                   \
  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  496|     27|        }
  |  |  ------------------
  ------------------
  128|       |
  129|     26|      fuzz->upload1_data = tlv->value;
  130|     26|      fuzz->upload1_data_len = tlv->length;
  131|       |
  132|     26|      FSET_OPTION(fuzz, CURLOPT_UPLOAD, 1L);
  ------------------
  |  |  499|     26|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  ------------------
  |  |  |  |  480|     26|        {                                                                     \
  |  |  |  |  481|     26|          int _func_rc = (FUNC);                                              \
  |  |  |  |  482|     26|          if (_func_rc)                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (482:15): [True: 0, False: 26]
  |  |  |  |  ------------------
  |  |  |  |  483|     26|          {                                                                   \
  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  487|     26|        }
  |  |  ------------------
  |  |  500|     26|        (FUZZP)->options[OPTNAME % 1000] = 1
  ------------------
  133|     26|      FSET_OPTION(fuzz,
  ------------------
  |  |  499|     26|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  ------------------
  |  |  |  |  480|     26|        {                                                                     \
  |  |  |  |  481|     26|          int _func_rc = (FUNC);                                              \
  |  |  |  |  482|     26|          if (_func_rc)                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (482:15): [True: 0, False: 26]
  |  |  |  |  ------------------
  |  |  |  |  483|     26|          {                                                                   \
  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  487|     26|        }
  |  |  ------------------
  |  |  500|     26|        (FUZZP)->options[OPTNAME % 1000] = 1
  ------------------
  134|     26|                  CURLOPT_INFILESIZE_LARGE,
  135|     26|                  (curl_off_t)fuzz->upload1_data_len);
  136|     26|      break;
  137|       |
  138|    792|    case TLV_TYPE_HEADER:
  ------------------
  |  |   34|    792|#define TLV_TYPE_HEADER                         6
  ------------------
  |  Branch (138:5): [True: 792, False: 14.7k]
  ------------------
  139|       |      /* Limit the number of headers that can be added to a message to prevent
  140|       |         timeouts. */
  141|    792|      if(fuzz->header_list_count >= TLV_MAX_NUM_CURLOPT_HEADER) {
  ------------------
  |  |  301|    792|#define TLV_MAX_NUM_CURLOPT_HEADER      2000
  ------------------
  |  Branch (141:10): [True: 0, False: 792]
  ------------------
  142|      0|        rc = 255;
  143|      0|        goto EXIT_LABEL;
  144|      0|      }
  145|       |
  146|    792|      tmp = fuzz_tlv_to_string(tlv);
  147|    792|      if (tmp == NULL) {
  ------------------
  |  Branch (147:11): [True: 0, False: 792]
  ------------------
  148|       |        // keep on despite allocation failure
  149|      0|        break;
  150|      0|      }
  151|    792|      new_list = curl_slist_append(fuzz->header_list, tmp);
  152|    792|      if (new_list == NULL) {
  ------------------
  |  Branch (152:11): [True: 0, False: 792]
  ------------------
  153|      0|        break;
  154|      0|      }
  155|    792|      fuzz->header_list = new_list;
  156|    792|      fuzz->header_list_count++;
  157|    792|      break;
  158|       |
  159|  2.85k|    case TLV_TYPE_MAIL_RECIPIENT:
  ------------------
  |  |   39|  2.85k|#define TLV_TYPE_MAIL_RECIPIENT                 11
  ------------------
  |  Branch (159:5): [True: 2.85k, False: 12.6k]
  ------------------
  160|       |      /* Limit the number of headers that can be added to a message to prevent
  161|       |         timeouts. */
  162|  2.85k|      if(fuzz->header_list_count >= TLV_MAX_NUM_CURLOPT_HEADER) {
  ------------------
  |  |  301|  2.85k|#define TLV_MAX_NUM_CURLOPT_HEADER      2000
  ------------------
  |  Branch (162:10): [True: 0, False: 2.85k]
  ------------------
  163|      0|        rc = 255;
  164|      0|        goto EXIT_LABEL;
  165|      0|      }
  166|  2.85k|      tmp = fuzz_tlv_to_string(tlv);
  167|  2.85k|      if (tmp == NULL) {
  ------------------
  |  Branch (167:11): [True: 0, False: 2.85k]
  ------------------
  168|       |        // keep on despite allocation failure
  169|      0|        break;
  170|      0|      }
  171|  2.85k|      new_list = curl_slist_append(fuzz->mail_recipients_list, tmp);
  172|  2.85k|      if (new_list != NULL) {
  ------------------
  |  Branch (172:11): [True: 2.85k, False: 0]
  ------------------
  173|  2.85k|        fuzz->mail_recipients_list = new_list;
  174|  2.85k|        fuzz->header_list_count++;
  175|  2.85k|      }
  176|  2.85k|      break;
  177|       |
  178|  2.69k|    case TLV_TYPE_MIME_PART:
  ------------------
  |  |   41|  2.69k|#define TLV_TYPE_MIME_PART                      13
  ------------------
  |  Branch (178:5): [True: 2.69k, False: 12.8k]
  ------------------
  179|  2.69k|      if(fuzz->mime == NULL) {
  ------------------
  |  Branch (179:10): [True: 297, False: 2.39k]
  ------------------
  180|    297|        fuzz->mime = curl_mime_init(fuzz->easy);
  181|    297|      }
  182|       |
  183|  2.69k|      fuzz->part = curl_mime_addpart(fuzz->mime);
  184|       |
  185|       |      /* This TLV may have sub TLVs. */
  186|  2.69k|      fuzz_add_mime_part(tlv, fuzz->part);
  187|       |
  188|  2.69k|      break;
  189|       |
  190|      5|    case TLV_TYPE_POSTFIELDS:
  ------------------
  |  |   33|      5|#define TLV_TYPE_POSTFIELDS                     5
  ------------------
  |  Branch (190:5): [True: 5, False: 15.5k]
  ------------------
  191|      5|      FCHECK_OPTION_UNSET(fuzz, CURLOPT_POSTFIELDS);
  ------------------
  |  |  503|      5|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  ------------------
  |  |  |  |  490|      5|        {                                                                     \
  |  |  |  |  491|      5|          if (!(COND))                                                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (491:15): [True: 1, False: 4]
  |  |  |  |  ------------------
  |  |  |  |  492|      5|          {                                                                   \
  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  496|      5|        }
  |  |  ------------------
  ------------------
  192|      4|      fuzz->postfields = fuzz_tlv_to_string(tlv);
  193|      4|      FSET_OPTION(fuzz, CURLOPT_POSTFIELDS, fuzz->postfields);
  ------------------
  |  |  499|      4|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  ------------------
  |  |  |  |  480|      4|        {                                                                     \
  |  |  |  |  481|      4|          int _func_rc = (FUNC);                                              \
  |  |  |  |  482|      4|          if (_func_rc)                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (482:15): [True: 0, False: 4]
  |  |  |  |  ------------------
  |  |  |  |  483|      4|          {                                                                   \
  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  487|      4|        }
  |  |  ------------------
  |  |  500|      4|        (FUZZP)->options[OPTNAME % 1000] = 1
  ------------------
  194|      4|      break;
  195|       |
  196|     13|    case TLV_TYPE_HTTPPOSTBODY:
  ------------------
  |  |   80|     13|#define TLV_TYPE_HTTPPOSTBODY                   52
  ------------------
  |  Branch (196:5): [True: 13, False: 15.5k]
  ------------------
  197|     13|      FCHECK_OPTION_UNSET(fuzz, CURLOPT_HTTPPOST);
  ------------------
  |  |  503|     13|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  ------------------
  |  |  |  |  490|     13|        {                                                                     \
  |  |  |  |  491|     13|          if (!(COND))                                                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (491:15): [True: 1, False: 12]
  |  |  |  |  ------------------
  |  |  |  |  492|     13|          {                                                                   \
  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  496|     13|        }
  |  |  ------------------
  ------------------
  198|     12|      fuzz_setup_http_post(fuzz, tlv);
  199|     12|      FSET_OPTION(fuzz, CURLOPT_HTTPPOST, fuzz->httppost);
  ------------------
  |  |  499|     12|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  ------------------
  |  |  |  |  480|     12|        {                                                                     \
  |  |  |  |  481|     12|          int _func_rc = (FUNC);                                              \
  |  |  |  |  482|     12|          if (_func_rc)                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (482:15): [True: 0, False: 12]
  |  |  |  |  ------------------
  |  |  |  |  483|     12|          {                                                                   \
  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  487|     12|        }
  |  |  ------------------
  |  |  500|     12|        (FUZZP)->options[OPTNAME % 1000] = 1
  ------------------
  200|     12|      break;
  201|       |
  202|       |    /* Define a set of u32 options. */
  203|    119|    FU32TLV(fuzz, TLV_TYPE_HTTPAUTH, CURLOPT_HTTPAUTH);
  ------------------
  |  |  519|     48|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 48, False: 15.4k]
  |  |  ------------------
  |  |  520|     48|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 12, False: 36]
  |  |  ------------------
  |  |  521|     12|            rc = 255;                                                         \
  |  |  522|     12|            goto EXIT_LABEL;                                                  \
  |  |  523|     12|          }                                                                   \
  |  |  524|     48|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     36|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     36|        {                                                                     \
  |  |  |  |  |  |  491|     36|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 35]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     36|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     36|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|     35|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|     35|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|     35|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     35|        {                                                                     \
  |  |  |  |  |  |  481|     35|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     35|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 1, False: 34]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     35|          {                                                                   \
  |  |  |  |  |  |  484|      1|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      1|          }                                                                   \
  |  |  |  |  |  |  487|     35|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     34|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|     34|          break
  ------------------
  204|     54|    FU32TLV(fuzz, TLV_TYPE_OPTHEADER, CURLOPT_HEADER);
  ------------------
  |  |  519|     23|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 23, False: 15.5k]
  |  |  ------------------
  |  |  520|     23|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 7, False: 16]
  |  |  ------------------
  |  |  521|      7|            rc = 255;                                                         \
  |  |  522|      7|            goto EXIT_LABEL;                                                  \
  |  |  523|      7|          }                                                                   \
  |  |  524|     23|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     16|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     16|        {                                                                     \
  |  |  |  |  |  |  491|     16|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 15]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     16|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     16|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|     15|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|     15|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|     15|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     15|        {                                                                     \
  |  |  |  |  |  |  481|     15|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     15|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 15]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     15|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     15|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     15|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|     15|          break
  ------------------
  205|     15|    FU32TLV(fuzz, TLV_TYPE_NOBODY, CURLOPT_NOBODY);
  ------------------
  |  |  519|      6|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 6, False: 15.5k]
  |  |  ------------------
  |  |  520|      6|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 1, False: 5]
  |  |  ------------------
  |  |  521|      1|            rc = 255;                                                         \
  |  |  522|      1|            goto EXIT_LABEL;                                                  \
  |  |  523|      1|          }                                                                   \
  |  |  524|      6|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      5|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      5|        {                                                                     \
  |  |  |  |  |  |  491|      5|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      5|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|      5|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|      4|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|      4|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|      4|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      4|        {                                                                     \
  |  |  |  |  |  |  481|      4|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      4|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      4|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      4|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      4|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      4|          break
  ------------------
  206|    105|    FU32TLV(fuzz, TLV_TYPE_FOLLOWLOCATION, CURLOPT_FOLLOWLOCATION);
  ------------------
  |  |  519|     42|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 42, False: 15.4k]
  |  |  ------------------
  |  |  520|     42|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 10, False: 32]
  |  |  ------------------
  |  |  521|     10|            rc = 255;                                                         \
  |  |  522|     10|            goto EXIT_LABEL;                                                  \
  |  |  523|     10|          }                                                                   \
  |  |  524|     42|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     32|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     32|        {                                                                     \
  |  |  |  |  |  |  491|     32|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 31]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     32|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     32|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|     31|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|     31|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|     31|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     31|        {                                                                     \
  |  |  |  |  |  |  481|     31|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     31|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 29, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     31|          {                                                                   \
  |  |  |  |  |  |  484|     29|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|     29|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|     29|          }                                                                   \
  |  |  |  |  |  |  487|     31|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      2|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      2|          break
  ------------------
  207|     17|    FU32TLV(fuzz, TLV_TYPE_WILDCARDMATCH, CURLOPT_WILDCARDMATCH);
  ------------------
  |  |  519|     10|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 10, False: 15.5k]
  |  |  ------------------
  |  |  520|     10|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 6, False: 4]
  |  |  ------------------
  |  |  521|      6|            rc = 255;                                                         \
  |  |  522|      6|            goto EXIT_LABEL;                                                  \
  |  |  523|      6|          }                                                                   \
  |  |  524|     10|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      4|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      4|        {                                                                     \
  |  |  |  |  |  |  491|      4|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 3]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      4|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|      4|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|      3|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|      3|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|      3|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      3|        {                                                                     \
  |  |  |  |  |  |  481|      3|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      3|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 3]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      3|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      3|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      3|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      3|          break
  ------------------
  208|    113|    FU32TLV(fuzz, TLV_TYPE_RTSP_REQUEST, CURLOPT_RTSP_REQUEST);
  ------------------
  |  |  519|     40|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 40, False: 15.4k]
  |  |  ------------------
  |  |  520|     40|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 3, False: 37]
  |  |  ------------------
  |  |  521|      3|            rc = 255;                                                         \
  |  |  522|      3|            goto EXIT_LABEL;                                                  \
  |  |  523|      3|          }                                                                   \
  |  |  524|     40|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     37|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     37|        {                                                                     \
  |  |  |  |  |  |  491|     37|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 36]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     37|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     37|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|     36|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|     36|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|     36|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     36|        {                                                                     \
  |  |  |  |  |  |  481|     36|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     36|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 30, False: 6]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     36|          {                                                                   \
  |  |  |  |  |  |  484|     30|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|     30|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|     30|          }                                                                   \
  |  |  |  |  |  |  487|     36|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      6|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      6|          break
  ------------------
  209|    189|    FU32TLV(fuzz, TLV_TYPE_RTSP_CLIENT_CSEQ, CURLOPT_RTSP_CLIENT_CSEQ);
  ------------------
  |  |  519|     66|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 66, False: 15.4k]
  |  |  ------------------
  |  |  520|     66|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 4, False: 62]
  |  |  ------------------
  |  |  521|      4|            rc = 255;                                                         \
  |  |  522|      4|            goto EXIT_LABEL;                                                  \
  |  |  523|      4|          }                                                                   \
  |  |  524|     66|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     62|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     62|        {                                                                     \
  |  |  |  |  |  |  491|     62|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 61]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     62|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     62|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|     61|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|     61|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|     61|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     61|        {                                                                     \
  |  |  |  |  |  |  481|     61|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     61|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 61]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     61|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     61|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     61|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|     61|          break
  ------------------
  210|     76|    FU32TLV(fuzz, TLV_TYPE_HTTP_VERSION, CURLOPT_HTTP_VERSION);
  ------------------
  |  |  519|     27|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 27, False: 15.5k]
  |  |  ------------------
  |  |  520|     27|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 2, False: 25]
  |  |  ------------------
  |  |  521|      2|            rc = 255;                                                         \
  |  |  522|      2|            goto EXIT_LABEL;                                                  \
  |  |  523|      2|          }                                                                   \
  |  |  524|     27|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     25|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     25|        {                                                                     \
  |  |  |  |  |  |  491|     25|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 24]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     25|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     25|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|     24|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|     24|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|     24|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     24|        {                                                                     \
  |  |  |  |  |  |  481|     24|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     24|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 21, False: 3]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     24|          {                                                                   \
  |  |  |  |  |  |  484|     21|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|     21|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|     21|          }                                                                   \
  |  |  |  |  |  |  487|     24|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      3|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      3|          break
  ------------------
  211|    125|    FU32TLV(fuzz, TLV_TYPE_NETRC, CURLOPT_NETRC);
  ------------------
  |  |  519|     48|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 48, False: 15.4k]
  |  |  ------------------
  |  |  520|     48|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 9, False: 39]
  |  |  ------------------
  |  |  521|      9|            rc = 255;                                                         \
  |  |  522|      9|            goto EXIT_LABEL;                                                  \
  |  |  523|      9|          }                                                                   \
  |  |  524|     48|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     39|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     39|        {                                                                     \
  |  |  |  |  |  |  491|     39|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 38]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     39|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     39|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|     38|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|     38|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|     38|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     38|        {                                                                     \
  |  |  |  |  |  |  481|     38|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     38|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 34, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     38|          {                                                                   \
  |  |  |  |  |  |  484|     34|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|     34|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|     34|          }                                                                   \
  |  |  |  |  |  |  487|     38|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      4|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      4|          break
  ------------------
  212|     14|    FU32TLV(fuzz, TLV_TYPE_WS_OPTIONS, CURLOPT_WS_OPTIONS);
  ------------------
  |  |  519|      7|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 7, False: 15.5k]
  |  |  ------------------
  |  |  520|      7|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 3, False: 4]
  |  |  ------------------
  |  |  521|      3|            rc = 255;                                                         \
  |  |  522|      3|            goto EXIT_LABEL;                                                  \
  |  |  523|      3|          }                                                                   \
  |  |  524|      7|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      4|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      4|        {                                                                     \
  |  |  |  |  |  |  491|      4|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 3]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      4|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|      4|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|      3|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|      3|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|      3|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      3|        {                                                                     \
  |  |  |  |  |  |  481|      3|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      3|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 3]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      3|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      3|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      3|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      3|          break
  ------------------
  213|    132|    FU32TLV(fuzz, TLV_TYPE_CONNECT_ONLY, CURLOPT_CONNECT_ONLY);
  ------------------
  |  |  519|     49|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 49, False: 15.4k]
  |  |  ------------------
  |  |  520|     49|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 7, False: 42]
  |  |  ------------------
  |  |  521|      7|            rc = 255;                                                         \
  |  |  522|      7|            goto EXIT_LABEL;                                                  \
  |  |  523|      7|          }                                                                   \
  |  |  524|     49|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     42|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     42|        {                                                                     \
  |  |  |  |  |  |  491|     42|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 41]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     42|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     42|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|     41|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|     41|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|     41|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     41|        {                                                                     \
  |  |  |  |  |  |  481|     41|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     41|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 37, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     41|          {                                                                   \
  |  |  |  |  |  |  484|     37|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|     37|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|     37|          }                                                                   \
  |  |  |  |  |  |  487|     41|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      4|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      4|          break
  ------------------
  214|     40|    FU32TLV(fuzz, TLV_TYPE_POST, CURLOPT_POST);
  ------------------
  |  |  519|     22|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 22, False: 15.5k]
  |  |  ------------------
  |  |  520|     22|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 12, False: 10]
  |  |  ------------------
  |  |  521|     12|            rc = 255;                                                         \
  |  |  522|     12|            goto EXIT_LABEL;                                                  \
  |  |  523|     12|          }                                                                   \
  |  |  524|     22|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     10|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     10|        {                                                                     \
  |  |  |  |  |  |  491|     10|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 2, False: 8]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     10|          {                                                                   \
  |  |  |  |  |  |  493|      2|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      2|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      2|          }                                                                   \
  |  |  |  |  |  |  496|     10|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|      8|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|      8|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|      8|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      8|        {                                                                     \
  |  |  |  |  |  |  481|      8|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      8|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 8]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      8|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      8|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      8|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      8|          break
  ------------------
  215|    136|    FU32TLV(fuzz, TLV_TYPE_PROXYTYPE, CURLOPT_PROXYTYPE);
  ------------------
  |  |  519|     49|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 49, False: 15.4k]
  |  |  ------------------
  |  |  520|     49|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 5, False: 44]
  |  |  ------------------
  |  |  521|      5|            rc = 255;                                                         \
  |  |  522|      5|            goto EXIT_LABEL;                                                  \
  |  |  523|      5|          }                                                                   \
  |  |  524|     49|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     44|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     44|        {                                                                     \
  |  |  |  |  |  |  491|     44|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 43]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     44|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     44|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|     43|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|     43|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|     43|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     43|        {                                                                     \
  |  |  |  |  |  |  481|     43|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     43|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 38, False: 5]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     43|          {                                                                   \
  |  |  |  |  |  |  484|     38|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|     38|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|     38|          }                                                                   \
  |  |  |  |  |  |  487|     43|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      5|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      5|          break
  ------------------
  216|    150|    FU32TLV(fuzz, TLV_TYPE_PORT, CURLOPT_PORT);
  ------------------
  |  |  519|     59|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 59, False: 15.4k]
  |  |  ------------------
  |  |  520|     59|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 13, False: 46]
  |  |  ------------------
  |  |  521|     13|            rc = 255;                                                         \
  |  |  522|     13|            goto EXIT_LABEL;                                                  \
  |  |  523|     13|          }                                                                   \
  |  |  524|     59|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     46|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     46|        {                                                                     \
  |  |  |  |  |  |  491|     46|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 45]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     46|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     46|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|     45|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|     45|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|     45|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     45|        {                                                                     \
  |  |  |  |  |  |  481|     45|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     45|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 35, False: 10]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     45|          {                                                                   \
  |  |  |  |  |  |  484|     35|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|     35|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|     35|          }                                                                   \
  |  |  |  |  |  |  487|     45|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     10|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|     10|          break
  ------------------
  217|    106|    FU32TLV(fuzz, TLV_TYPE_LOW_SPEED_LIMIT, CURLOPT_LOW_SPEED_LIMIT);
  ------------------
  |  |  519|     41|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 41, False: 15.4k]
  |  |  ------------------
  |  |  520|     41|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 8, False: 33]
  |  |  ------------------
  |  |  521|      8|            rc = 255;                                                         \
  |  |  522|      8|            goto EXIT_LABEL;                                                  \
  |  |  523|      8|          }                                                                   \
  |  |  524|     41|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     33|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     33|        {                                                                     \
  |  |  |  |  |  |  491|     33|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 32]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     33|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     33|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|     32|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|     32|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|     32|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     32|        {                                                                     \
  |  |  |  |  |  |  481|     32|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     32|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 32]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     32|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     32|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     32|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|     32|          break
  ------------------
  218|    154|    FU32TLV(fuzz, TLV_TYPE_LOW_SPEED_TIME, CURLOPT_LOW_SPEED_TIME);
  ------------------
  |  |  519|     53|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 53, False: 15.4k]
  |  |  ------------------
  |  |  520|     53|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 2, False: 51]
  |  |  ------------------
  |  |  521|      2|            rc = 255;                                                         \
  |  |  522|      2|            goto EXIT_LABEL;                                                  \
  |  |  523|      2|          }                                                                   \
  |  |  524|     53|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     51|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     51|        {                                                                     \
  |  |  |  |  |  |  491|     51|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 50]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     51|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     51|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|     50|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|     50|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|     50|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     50|        {                                                                     \
  |  |  |  |  |  |  481|     50|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     50|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 50]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     50|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     50|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     50|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|     50|          break
  ------------------
  219|    119|    FU32TLV(fuzz, TLV_TYPE_RESUME_FROM, CURLOPT_RESUME_FROM);
  ------------------
  |  |  519|     44|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 44, False: 15.4k]
  |  |  ------------------
  |  |  520|     44|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 6, False: 38]
  |  |  ------------------
  |  |  521|      6|            rc = 255;                                                         \
  |  |  522|      6|            goto EXIT_LABEL;                                                  \
  |  |  523|      6|          }                                                                   \
  |  |  524|     44|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     38|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     38|        {                                                                     \
  |  |  |  |  |  |  491|     38|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 37]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     38|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     38|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|     37|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|     37|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|     37|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     37|        {                                                                     \
  |  |  |  |  |  |  481|     37|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     37|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 37]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     37|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     37|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     37|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|     37|          break
  ------------------
  220|     26|    FU32TLV(fuzz, TLV_TYPE_TIMEVALUE, CURLOPT_TIMEVALUE);
  ------------------
  |  |  519|     13|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 13, False: 15.5k]
  |  |  ------------------
  |  |  520|     13|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 6, False: 7]
  |  |  ------------------
  |  |  521|      6|            rc = 255;                                                         \
  |  |  522|      6|            goto EXIT_LABEL;                                                  \
  |  |  523|      6|          }                                                                   \
  |  |  524|     13|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      7|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      7|        {                                                                     \
  |  |  |  |  |  |  491|      7|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 6]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      7|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|      7|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|      6|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|      6|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|      6|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      6|        {                                                                     \
  |  |  |  |  |  |  481|      6|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      6|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 6]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      6|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      6|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      6|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      6|          break
  ------------------
  221|     16|    FU32TLV(fuzz, TLV_TYPE_NOPROGRESS, CURLOPT_NOPROGRESS);
  ------------------
  |  |  519|     11|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 11, False: 15.5k]
  |  |  ------------------
  |  |  520|     11|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 8, False: 3]
  |  |  ------------------
  |  |  521|      8|            rc = 255;                                                         \
  |  |  522|      8|            goto EXIT_LABEL;                                                  \
  |  |  523|      8|          }                                                                   \
  |  |  524|     11|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      3|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      3|        {                                                                     \
  |  |  |  |  |  |  491|      3|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      3|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|      3|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|      2|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|      2|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|      2|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      2|        {                                                                     \
  |  |  |  |  |  |  481|      2|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      2|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      2|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      2|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      2|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      2|          break
  ------------------
  222|     25|    FU32TLV(fuzz, TLV_TYPE_FAILONERROR, CURLOPT_FAILONERROR);
  ------------------
  |  |  519|     10|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 10, False: 15.5k]
  |  |  ------------------
  |  |  520|     10|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 2, False: 8]
  |  |  ------------------
  |  |  521|      2|            rc = 255;                                                         \
  |  |  522|      2|            goto EXIT_LABEL;                                                  \
  |  |  523|      2|          }                                                                   \
  |  |  524|     10|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      8|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      8|        {                                                                     \
  |  |  |  |  |  |  491|      8|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 7]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      8|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|      8|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|      7|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|      7|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|      7|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      7|        {                                                                     \
  |  |  |  |  |  |  481|      7|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      7|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 7]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      7|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      7|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      7|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      7|          break
  ------------------
  223|     28|    FU32TLV(fuzz, TLV_TYPE_DIRLISTONLY, CURLOPT_DIRLISTONLY);
  ------------------
  |  |  519|     15|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 15, False: 15.5k]
  |  |  ------------------
  |  |  520|     15|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 8, False: 7]
  |  |  ------------------
  |  |  521|      8|            rc = 255;                                                         \
  |  |  522|      8|            goto EXIT_LABEL;                                                  \
  |  |  523|      8|          }                                                                   \
  |  |  524|     15|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      7|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      7|        {                                                                     \
  |  |  |  |  |  |  491|      7|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 6]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      7|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|      7|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|      6|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|      6|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|      6|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      6|        {                                                                     \
  |  |  |  |  |  |  481|      6|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      6|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 6]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      6|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      6|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      6|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      6|          break
  ------------------
  224|     32|    FU32TLV(fuzz, TLV_TYPE_APPEND, CURLOPT_APPEND);
  ------------------
  |  |  519|     19|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 19, False: 15.5k]
  |  |  ------------------
  |  |  520|     19|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 12, False: 7]
  |  |  ------------------
  |  |  521|     12|            rc = 255;                                                         \
  |  |  522|     12|            goto EXIT_LABEL;                                                  \
  |  |  523|     12|          }                                                                   \
  |  |  524|     19|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      7|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      7|        {                                                                     \
  |  |  |  |  |  |  491|      7|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 6]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      7|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|      7|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|      6|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|      6|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|      6|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      6|        {                                                                     \
  |  |  |  |  |  |  481|      6|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      6|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 6]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      6|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      6|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      6|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      6|          break
  ------------------
  225|     17|    FU32TLV(fuzz, TLV_TYPE_TRANSFERTEXT, CURLOPT_TRANSFERTEXT);
  ------------------
  |  |  519|     10|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 10, False: 15.5k]
  |  |  ------------------
  |  |  520|     10|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 6, False: 4]
  |  |  ------------------
  |  |  521|      6|            rc = 255;                                                         \
  |  |  522|      6|            goto EXIT_LABEL;                                                  \
  |  |  523|      6|          }                                                                   \
  |  |  524|     10|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      4|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      4|        {                                                                     \
  |  |  |  |  |  |  491|      4|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 3]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      4|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|      4|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|      3|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|      3|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|      3|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      3|        {                                                                     \
  |  |  |  |  |  |  481|      3|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      3|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 3]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      3|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      3|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      3|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      3|          break
  ------------------
  226|     19|    FU32TLV(fuzz, TLV_TYPE_AUTOREFERER, CURLOPT_AUTOREFERER);
  ------------------
  |  |  519|     14|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 14, False: 15.5k]
  |  |  ------------------
  |  |  520|     14|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 11, False: 3]
  |  |  ------------------
  |  |  521|     11|            rc = 255;                                                         \
  |  |  522|     11|            goto EXIT_LABEL;                                                  \
  |  |  523|     11|          }                                                                   \
  |  |  524|     14|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      3|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      3|        {                                                                     \
  |  |  |  |  |  |  491|      3|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      3|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|      3|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|      2|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|      2|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|      2|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      2|        {                                                                     \
  |  |  |  |  |  |  481|      2|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      2|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      2|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      2|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      2|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      2|          break
  ------------------
  227|    209|    FU32TLV(fuzz, TLV_TYPE_PROXYPORT, CURLOPT_PROXYPORT);
  ------------------
  |  |  519|     76|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 76, False: 15.4k]
  |  |  ------------------
  |  |  520|     76|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 9, False: 67]
  |  |  ------------------
  |  |  521|      9|            rc = 255;                                                         \
  |  |  522|      9|            goto EXIT_LABEL;                                                  \
  |  |  523|      9|          }                                                                   \
  |  |  524|     76|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     67|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     67|        {                                                                     \
  |  |  |  |  |  |  491|     67|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 66]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     67|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     67|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|     66|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|     66|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|     66|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     66|        {                                                                     \
  |  |  |  |  |  |  481|     66|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     66|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 32, False: 34]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     66|          {                                                                   \
  |  |  |  |  |  |  484|     32|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|     32|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|     32|          }                                                                   \
  |  |  |  |  |  |  487|     66|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     34|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|     34|          break
  ------------------
  228|       |    // too easy for API misuse FU32TLV(fuzz, TLV_TYPE_POSTFIELDSIZE, CURLOPT_POSTFIELDSIZE);
  229|     28|    FU32TLV(fuzz, TLV_TYPE_HTTPPROXYTUNNEL, CURLOPT_HTTPPROXYTUNNEL);
  ------------------
  |  |  519|     17|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 17, False: 15.5k]
  |  |  ------------------
  |  |  520|     17|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 11, False: 6]
  |  |  ------------------
  |  |  521|     11|            rc = 255;                                                         \
  |  |  522|     11|            goto EXIT_LABEL;                                                  \
  |  |  523|     11|          }                                                                   \
  |  |  524|     17|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      6|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      6|        {                                                                     \
  |  |  |  |  |  |  491|      6|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 5]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      6|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|      6|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|      5|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|      5|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|      5|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      5|        {                                                                     \
  |  |  |  |  |  |  481|      5|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      5|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 5]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      5|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      5|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      5|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      5|          break
  ------------------
  230|     38|    FU32TLV(fuzz, TLV_TYPE_SSL_VERIFYPEER, CURLOPT_SSL_VERIFYPEER);
  ------------------
  |  |  519|     19|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 19, False: 15.5k]
  |  |  ------------------
  |  |  520|     19|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 9, False: 10]
  |  |  ------------------
  |  |  521|      9|            rc = 255;                                                         \
  |  |  522|      9|            goto EXIT_LABEL;                                                  \
  |  |  523|      9|          }                                                                   \
  |  |  524|     19|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     10|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     10|        {                                                                     \
  |  |  |  |  |  |  491|     10|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 9]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     10|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     10|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|      9|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|      9|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|      9|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      9|        {                                                                     \
  |  |  |  |  |  |  481|      9|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      9|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 9]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      9|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      9|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      9|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      9|          break
  ------------------
  231|    170|    FU32TLV(fuzz, TLV_TYPE_MAXREDIRS, CURLOPT_MAXREDIRS);
  ------------------
  |  |  519|     61|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 61, False: 15.4k]
  |  |  ------------------
  |  |  520|     61|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 6, False: 55]
  |  |  ------------------
  |  |  521|      6|            rc = 255;                                                         \
  |  |  522|      6|            goto EXIT_LABEL;                                                  \
  |  |  523|      6|          }                                                                   \
  |  |  524|     61|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     55|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     55|        {                                                                     \
  |  |  |  |  |  |  491|     55|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 54]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     55|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     55|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|     54|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|     54|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|     54|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     54|        {                                                                     \
  |  |  |  |  |  |  481|     54|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     54|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 54]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     54|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     54|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     54|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|     54|          break
  ------------------
  232|     24|    FU32TLV(fuzz, TLV_TYPE_FILETIME, CURLOPT_FILETIME);
  ------------------
  |  |  519|     17|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 17, False: 15.5k]
  |  |  ------------------
  |  |  520|     17|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 13, False: 4]
  |  |  ------------------
  |  |  521|     13|            rc = 255;                                                         \
  |  |  522|     13|            goto EXIT_LABEL;                                                  \
  |  |  523|     13|          }                                                                   \
  |  |  524|     17|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      4|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      4|        {                                                                     \
  |  |  |  |  |  |  491|      4|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 3]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      4|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|      4|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|      3|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|      3|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|      3|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      3|        {                                                                     \
  |  |  |  |  |  |  481|      3|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      3|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 3]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      3|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      3|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      3|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      3|          break
  ------------------
  233|    213|    FU32TLV(fuzz, TLV_TYPE_MAXCONNECTS, CURLOPT_MAXCONNECTS);
  ------------------
  |  |  519|     74|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 74, False: 15.4k]
  |  |  ------------------
  |  |  520|     74|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 4, False: 70]
  |  |  ------------------
  |  |  521|      4|            rc = 255;                                                         \
  |  |  522|      4|            goto EXIT_LABEL;                                                  \
  |  |  523|      4|          }                                                                   \
  |  |  524|     74|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     70|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     70|        {                                                                     \
  |  |  |  |  |  |  491|     70|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 69]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     70|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     70|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|     69|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|     69|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|     69|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     69|        {                                                                     \
  |  |  |  |  |  |  481|     69|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     69|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 69]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     69|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     69|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     69|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|     69|          break
  ------------------
  234|     15|    FU32TLV(fuzz, TLV_TYPE_FRESH_CONNECT, CURLOPT_FRESH_CONNECT);
  ------------------
  |  |  519|      8|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 8, False: 15.5k]
  |  |  ------------------
  |  |  520|      8|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 4, False: 4]
  |  |  ------------------
  |  |  521|      4|            rc = 255;                                                         \
  |  |  522|      4|            goto EXIT_LABEL;                                                  \
  |  |  523|      4|          }                                                                   \
  |  |  524|      8|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      4|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      4|        {                                                                     \
  |  |  |  |  |  |  491|      4|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 3]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      4|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|      4|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|      3|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|      3|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|      3|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      3|        {                                                                     \
  |  |  |  |  |  |  481|      3|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      3|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 3]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      3|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      3|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      3|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      3|          break
  ------------------
  235|     11|    FU32TLV(fuzz, TLV_TYPE_FORBID_REUSE, CURLOPT_FORBID_REUSE);
  ------------------
  |  |  519|      6|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 6, False: 15.5k]
  |  |  ------------------
  |  |  520|      6|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 3, False: 3]
  |  |  ------------------
  |  |  521|      3|            rc = 255;                                                         \
  |  |  522|      3|            goto EXIT_LABEL;                                                  \
  |  |  523|      3|          }                                                                   \
  |  |  524|      6|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      3|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      3|        {                                                                     \
  |  |  |  |  |  |  491|      3|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      3|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|      3|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|      2|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|      2|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|      2|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      2|        {                                                                     \
  |  |  |  |  |  |  481|      2|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      2|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      2|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      2|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      2|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      2|          break
  ------------------
  236|    170|    FU32TLV(fuzz, TLV_TYPE_CONNECTTIMEOUT, CURLOPT_CONNECTTIMEOUT);
  ------------------
  |  |  519|     63|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 63, False: 15.4k]
  |  |  ------------------
  |  |  520|     63|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 9, False: 54]
  |  |  ------------------
  |  |  521|      9|            rc = 255;                                                         \
  |  |  522|      9|            goto EXIT_LABEL;                                                  \
  |  |  523|      9|          }                                                                   \
  |  |  524|     63|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     54|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     54|        {                                                                     \
  |  |  |  |  |  |  491|     54|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 53]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     54|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     54|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|     53|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|     53|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|     53|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     53|        {                                                                     \
  |  |  |  |  |  |  481|     53|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     53|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 53]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     53|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     53|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     53|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|     53|          break
  ------------------
  237|     20|    FU32TLV(fuzz, TLV_TYPE_HTTPGET, CURLOPT_HTTPGET);
  ------------------
  |  |  519|     11|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 11, False: 15.5k]
  |  |  ------------------
  |  |  520|     11|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 6, False: 5]
  |  |  ------------------
  |  |  521|      6|            rc = 255;                                                         \
  |  |  522|      6|            goto EXIT_LABEL;                                                  \
  |  |  523|      6|          }                                                                   \
  |  |  524|     11|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      5|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      5|        {                                                                     \
  |  |  |  |  |  |  491|      5|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      5|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|      5|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|      4|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|      4|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|      4|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      4|        {                                                                     \
  |  |  |  |  |  |  481|      4|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      4|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      4|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      4|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      4|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      4|          break
  ------------------
  238|     27|    FU32TLV(fuzz, TLV_TYPE_SSL_VERIFYHOST, CURLOPT_SSL_VERIFYHOST);
  ------------------
  |  |  519|     12|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 12, False: 15.5k]
  |  |  ------------------
  |  |  520|     12|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 4, False: 8]
  |  |  ------------------
  |  |  521|      4|            rc = 255;                                                         \
  |  |  522|      4|            goto EXIT_LABEL;                                                  \
  |  |  523|      4|          }                                                                   \
  |  |  524|     12|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      8|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      8|        {                                                                     \
  |  |  |  |  |  |  491|      8|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 7]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      8|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|      8|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|      7|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|      7|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|      7|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      7|        {                                                                     \
  |  |  |  |  |  |  481|      7|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      7|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 7]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      7|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      7|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      7|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      7|          break
  ------------------
  239|     29|    FU32TLV(fuzz, TLV_TYPE_FTP_USE_EPSV, CURLOPT_FTP_USE_EPSV);
  ------------------
  |  |  519|     12|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 12, False: 15.5k]
  |  |  ------------------
  |  |  520|     12|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 3, False: 9]
  |  |  ------------------
  |  |  521|      3|            rc = 255;                                                         \
  |  |  522|      3|            goto EXIT_LABEL;                                                  \
  |  |  523|      3|          }                                                                   \
  |  |  524|     12|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      9|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      9|        {                                                                     \
  |  |  |  |  |  |  491|      9|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 8]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      9|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|      9|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|      8|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|      8|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|      8|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      8|        {                                                                     \
  |  |  |  |  |  |  481|      8|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      8|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 8]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      8|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      8|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      8|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      8|          break
  ------------------
  240|     18|    FU32TLV(fuzz, TLV_TYPE_SSLENGINE_DEFAULT, CURLOPT_SSLENGINE_DEFAULT);
  ------------------
  |  |  519|     13|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 13, False: 15.5k]
  |  |  ------------------
  |  |  520|     13|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 10, False: 3]
  |  |  ------------------
  |  |  521|     10|            rc = 255;                                                         \
  |  |  522|     10|            goto EXIT_LABEL;                                                  \
  |  |  523|     10|          }                                                                   \
  |  |  524|     13|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      3|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      3|        {                                                                     \
  |  |  |  |  |  |  491|      3|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      3|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|      3|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|      2|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|      2|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|      2|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      2|        {                                                                     \
  |  |  |  |  |  |  481|      2|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      2|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      2|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      2|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      2|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      2|          break
  ------------------
  241|    175|    FU32TLV(fuzz, TLV_TYPE_DNS_CACHE_TIMEOUT, CURLOPT_DNS_CACHE_TIMEOUT);
  ------------------
  |  |  519|     60|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 60, False: 15.4k]
  |  |  ------------------
  |  |  520|     60|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 2, False: 58]
  |  |  ------------------
  |  |  521|      2|            rc = 255;                                                         \
  |  |  522|      2|            goto EXIT_LABEL;                                                  \
  |  |  523|      2|          }                                                                   \
  |  |  524|     60|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     58|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     58|        {                                                                     \
  |  |  |  |  |  |  491|     58|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 57]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     58|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     58|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|     57|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|     57|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|     57|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     57|        {                                                                     \
  |  |  |  |  |  |  481|     57|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     57|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 57]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     57|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     57|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     57|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|     57|          break
  ------------------
  242|     22|    FU32TLV(fuzz, TLV_TYPE_COOKIESESSION, CURLOPT_COOKIESESSION);
  ------------------
  |  |  519|      9|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 9, False: 15.5k]
  |  |  ------------------
  |  |  520|      9|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 2, False: 7]
  |  |  ------------------
  |  |  521|      2|            rc = 255;                                                         \
  |  |  522|      2|            goto EXIT_LABEL;                                                  \
  |  |  523|      2|          }                                                                   \
  |  |  524|      9|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      7|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      7|        {                                                                     \
  |  |  |  |  |  |  491|      7|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 6]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      7|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|      7|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|      6|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|      6|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|      6|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      6|        {                                                                     \
  |  |  |  |  |  |  481|      6|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      6|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 6]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      6|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      6|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      6|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      6|          break
  ------------------
  243|    204|    FU32TLV(fuzz, TLV_TYPE_BUFFERSIZE, CURLOPT_BUFFERSIZE);
  ------------------
  |  |  519|     71|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 71, False: 15.4k]
  |  |  ------------------
  |  |  520|     71|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 4, False: 67]
  |  |  ------------------
  |  |  521|      4|            rc = 255;                                                         \
  |  |  522|      4|            goto EXIT_LABEL;                                                  \
  |  |  523|      4|          }                                                                   \
  |  |  524|     71|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     67|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     67|        {                                                                     \
  |  |  |  |  |  |  491|     67|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 66]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     67|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     67|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|     66|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|     66|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|     66|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     66|        {                                                                     \
  |  |  |  |  |  |  481|     66|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     66|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 66]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     66|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     66|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     66|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|     66|          break
  ------------------
  244|     12|    FU32TLV(fuzz, TLV_TYPE_NOSIGNAL, CURLOPT_NOSIGNAL);
  ------------------
  |  |  519|      5|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 5, False: 15.5k]
  |  |  ------------------
  |  |  520|      5|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 1, False: 4]
  |  |  ------------------
  |  |  521|      1|            rc = 255;                                                         \
  |  |  522|      1|            goto EXIT_LABEL;                                                  \
  |  |  523|      1|          }                                                                   \
  |  |  524|      5|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      4|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      4|        {                                                                     \
  |  |  |  |  |  |  491|      4|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 3]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      4|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|      4|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|      3|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|      3|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|      3|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      3|        {                                                                     \
  |  |  |  |  |  |  481|      3|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      3|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 3]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      3|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      3|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      3|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      3|          break
  ------------------
  245|     23|    FU32TLV(fuzz, TLV_TYPE_UNRESTRICTED_AUTH, CURLOPT_UNRESTRICTED_AUTH);
  ------------------
  |  |  519|     10|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 10, False: 15.5k]
  |  |  ------------------
  |  |  520|     10|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 3, False: 7]
  |  |  ------------------
  |  |  521|      3|            rc = 255;                                                         \
  |  |  522|      3|            goto EXIT_LABEL;                                                  \
  |  |  523|      3|          }                                                                   \
  |  |  524|     10|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      7|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      7|        {                                                                     \
  |  |  |  |  |  |  491|      7|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 6]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      7|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|      7|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|      6|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|      6|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|      6|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      6|        {                                                                     \
  |  |  |  |  |  |  481|      6|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      6|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 6]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      6|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      6|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      6|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      6|          break
  ------------------
  246|     28|    FU32TLV(fuzz, TLV_TYPE_FTP_USE_EPRT, CURLOPT_FTP_USE_EPRT);
  ------------------
  |  |  519|     13|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 13, False: 15.5k]
  |  |  ------------------
  |  |  520|     13|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 5, False: 8]
  |  |  ------------------
  |  |  521|      5|            rc = 255;                                                         \
  |  |  522|      5|            goto EXIT_LABEL;                                                  \
  |  |  523|      5|          }                                                                   \
  |  |  524|     13|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      8|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      8|        {                                                                     \
  |  |  |  |  |  |  491|      8|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 7]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      8|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|      8|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|      7|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|      7|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|      7|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      7|        {                                                                     \
  |  |  |  |  |  |  481|      7|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      7|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 7]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      7|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      7|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      7|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      7|          break
  ------------------
  247|    100|    FU32TLV(fuzz, TLV_TYPE_FTP_CREATE_MISSING_DIRS, CURLOPT_FTP_CREATE_MISSING_DIRS);
  ------------------
  |  |  519|     41|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 41, False: 15.4k]
  |  |  ------------------
  |  |  520|     41|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 11, False: 30]
  |  |  ------------------
  |  |  521|     11|            rc = 255;                                                         \
  |  |  522|     11|            goto EXIT_LABEL;                                                  \
  |  |  523|     11|          }                                                                   \
  |  |  524|     41|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     30|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     30|        {                                                                     \
  |  |  |  |  |  |  491|     30|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 29]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     30|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     30|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|     29|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|     29|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|     29|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     29|        {                                                                     \
  |  |  |  |  |  |  481|     29|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     29|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 27, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     29|          {                                                                   \
  |  |  |  |  |  |  484|     27|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|     27|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|     27|          }                                                                   \
  |  |  |  |  |  |  487|     29|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      2|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      2|          break
  ------------------
  248|     85|    FU32TLV(fuzz, TLV_TYPE_MAXFILESIZE, CURLOPT_MAXFILESIZE);
  ------------------
  |  |  519|     30|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 30, False: 15.5k]
  |  |  ------------------
  |  |  520|     30|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 2, False: 28]
  |  |  ------------------
  |  |  521|      2|            rc = 255;                                                         \
  |  |  522|      2|            goto EXIT_LABEL;                                                  \
  |  |  523|      2|          }                                                                   \
  |  |  524|     30|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     28|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     28|        {                                                                     \
  |  |  |  |  |  |  491|     28|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 27]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     28|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     28|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|     27|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|     27|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|     27|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     27|        {                                                                     \
  |  |  |  |  |  |  481|     27|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     27|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 27]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     27|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     27|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     27|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|     27|          break
  ------------------
  249|     14|    FU32TLV(fuzz, TLV_TYPE_TCP_NODELAY, CURLOPT_TCP_NODELAY);
  ------------------
  |  |  519|      9|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 9, False: 15.5k]
  |  |  ------------------
  |  |  520|      9|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 6, False: 3]
  |  |  ------------------
  |  |  521|      6|            rc = 255;                                                         \
  |  |  522|      6|            goto EXIT_LABEL;                                                  \
  |  |  523|      6|          }                                                                   \
  |  |  524|      9|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      3|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      3|        {                                                                     \
  |  |  |  |  |  |  491|      3|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      3|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|      3|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|      2|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|      2|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|      2|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      2|        {                                                                     \
  |  |  |  |  |  |  481|      2|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      2|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      2|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      2|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      2|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      2|          break
  ------------------
  250|     17|    FU32TLV(fuzz, TLV_TYPE_IGNORE_CONTENT_LENGTH, CURLOPT_IGNORE_CONTENT_LENGTH);
  ------------------
  |  |  519|     12|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 12, False: 15.5k]
  |  |  ------------------
  |  |  520|     12|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 9, False: 3]
  |  |  ------------------
  |  |  521|      9|            rc = 255;                                                         \
  |  |  522|      9|            goto EXIT_LABEL;                                                  \
  |  |  523|      9|          }                                                                   \
  |  |  524|     12|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      3|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      3|        {                                                                     \
  |  |  |  |  |  |  491|      3|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      3|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|      3|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|      2|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|      2|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|      2|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      2|        {                                                                     \
  |  |  |  |  |  |  481|      2|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      2|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      2|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      2|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      2|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      2|          break
  ------------------
  251|     25|    FU32TLV(fuzz, TLV_TYPE_FTP_SKIP_PASV_IP, CURLOPT_FTP_SKIP_PASV_IP);
  ------------------
  |  |  519|     16|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 16, False: 15.5k]
  |  |  ------------------
  |  |  520|     16|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 11, False: 5]
  |  |  ------------------
  |  |  521|     11|            rc = 255;                                                         \
  |  |  522|     11|            goto EXIT_LABEL;                                                  \
  |  |  523|     11|          }                                                                   \
  |  |  524|     16|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      5|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      5|        {                                                                     \
  |  |  |  |  |  |  491|      5|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      5|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|      5|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|      4|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|      4|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|      4|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      4|        {                                                                     \
  |  |  |  |  |  |  481|      4|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      4|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      4|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      4|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      4|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      4|          break
  ------------------
  252|    112|    FU32TLV(fuzz, TLV_TYPE_LOCALPORT, CURLOPT_LOCALPORT);
  ------------------
  |  |  519|     39|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 39, False: 15.4k]
  |  |  ------------------
  |  |  520|     39|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 2, False: 37]
  |  |  ------------------
  |  |  521|      2|            rc = 255;                                                         \
  |  |  522|      2|            goto EXIT_LABEL;                                                  \
  |  |  523|      2|          }                                                                   \
  |  |  524|     39|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     37|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     37|        {                                                                     \
  |  |  |  |  |  |  491|     37|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 36]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     37|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     37|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|     36|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|     36|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|     36|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     36|        {                                                                     \
  |  |  |  |  |  |  481|     36|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     36|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 14, False: 22]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     36|          {                                                                   \
  |  |  |  |  |  |  484|     14|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|     14|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|     14|          }                                                                   \
  |  |  |  |  |  |  487|     36|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     22|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|     22|          break
  ------------------
  253|    178|    FU32TLV(fuzz, TLV_TYPE_LOCALPORTRANGE, CURLOPT_LOCALPORTRANGE);
  ------------------
  |  |  519|     63|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 63, False: 15.4k]
  |  |  ------------------
  |  |  520|     63|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 5, False: 58]
  |  |  ------------------
  |  |  521|      5|            rc = 255;                                                         \
  |  |  522|      5|            goto EXIT_LABEL;                                                  \
  |  |  523|      5|          }                                                                   \
  |  |  524|     63|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     58|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     58|        {                                                                     \
  |  |  |  |  |  |  491|     58|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 57]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     58|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     58|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|     57|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|     57|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|     57|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     57|        {                                                                     \
  |  |  |  |  |  |  481|     57|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     57|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 33, False: 24]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     57|          {                                                                   \
  |  |  |  |  |  |  484|     33|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|     33|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|     33|          }                                                                   \
  |  |  |  |  |  |  487|     57|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     24|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|     24|          break
  ------------------
  254|     17|    FU32TLV(fuzz, TLV_TYPE_SSL_SESSIONID_CACHE, CURLOPT_SSL_SESSIONID_CACHE);
  ------------------
  |  |  519|     12|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 12, False: 15.5k]
  |  |  ------------------
  |  |  520|     12|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 9, False: 3]
  |  |  ------------------
  |  |  521|      9|            rc = 255;                                                         \
  |  |  522|      9|            goto EXIT_LABEL;                                                  \
  |  |  523|      9|          }                                                                   \
  |  |  524|     12|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      3|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      3|        {                                                                     \
  |  |  |  |  |  |  491|      3|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      3|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|      3|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|      2|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|      2|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|      2|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      2|        {                                                                     \
  |  |  |  |  |  |  481|      2|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      2|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      2|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      2|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      2|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      2|          break
  ------------------
  255|    153|    FU32TLV(fuzz, TLV_TYPE_FTP_SSL_CCC, CURLOPT_FTP_SSL_CCC);
  ------------------
  |  |  519|     60|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 60, False: 15.4k]
  |  |  ------------------
  |  |  520|     60|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 13, False: 47]
  |  |  ------------------
  |  |  521|     13|            rc = 255;                                                         \
  |  |  522|     13|            goto EXIT_LABEL;                                                  \
  |  |  523|     13|          }                                                                   \
  |  |  524|     60|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     47|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     47|        {                                                                     \
  |  |  |  |  |  |  491|     47|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 46]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     47|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     47|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|     46|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|     46|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|     46|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     46|        {                                                                     \
  |  |  |  |  |  |  481|     46|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     46|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 42, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     46|          {                                                                   \
  |  |  |  |  |  |  484|     42|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|     42|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|     42|          }                                                                   \
  |  |  |  |  |  |  487|     46|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      4|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      4|          break
  ------------------
  256|     98|    FU32TLV(fuzz, TLV_TYPE_CONNECTTIMEOUT_MS, CURLOPT_CONNECTTIMEOUT_MS);
  ------------------
  |  |  519|     35|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 35, False: 15.5k]
  |  |  ------------------
  |  |  520|     35|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 3, False: 32]
  |  |  ------------------
  |  |  521|      3|            rc = 255;                                                         \
  |  |  522|      3|            goto EXIT_LABEL;                                                  \
  |  |  523|      3|          }                                                                   \
  |  |  524|     35|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     32|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     32|        {                                                                     \
  |  |  |  |  |  |  491|     32|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 31]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     32|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     32|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|     31|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|     31|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|     31|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     31|        {                                                                     \
  |  |  |  |  |  |  481|     31|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     31|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 31]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     31|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     31|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     31|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|     31|          break
  ------------------
  257|      9|    FU32TLV(fuzz, TLV_TYPE_HTTP_TRANSFER_DECODING, CURLOPT_HTTP_TRANSFER_DECODING);
  ------------------
  |  |  519|      4|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 4, False: 15.5k]
  |  |  ------------------
  |  |  520|      4|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 1, False: 3]
  |  |  ------------------
  |  |  521|      1|            rc = 255;                                                         \
  |  |  522|      1|            goto EXIT_LABEL;                                                  \
  |  |  523|      1|          }                                                                   \
  |  |  524|      4|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      3|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      3|        {                                                                     \
  |  |  |  |  |  |  491|      3|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      3|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|      3|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|      2|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|      2|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|      2|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      2|        {                                                                     \
  |  |  |  |  |  |  481|      2|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      2|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      2|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      2|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      2|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      2|          break
  ------------------
  258|     24|    FU32TLV(fuzz, TLV_TYPE_HTTP_CONTENT_DECODING, CURLOPT_HTTP_CONTENT_DECODING);
  ------------------
  |  |  519|      9|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 9, False: 15.5k]
  |  |  ------------------
  |  |  520|      9|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 1, False: 8]
  |  |  ------------------
  |  |  521|      1|            rc = 255;                                                         \
  |  |  522|      1|            goto EXIT_LABEL;                                                  \
  |  |  523|      1|          }                                                                   \
  |  |  524|      9|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      8|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      8|        {                                                                     \
  |  |  |  |  |  |  491|      8|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 7]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      8|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|      8|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|      7|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|      7|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|      7|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      7|        {                                                                     \
  |  |  |  |  |  |  481|      7|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      7|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 7]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      7|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      7|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      7|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      7|          break
  ------------------
  259|    155|    FU32TLV(fuzz, TLV_TYPE_NEW_FILE_PERMS, CURLOPT_NEW_FILE_PERMS);
  ------------------
  |  |  519|     58|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 58, False: 15.4k]
  |  |  ------------------
  |  |  520|     58|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 9, False: 49]
  |  |  ------------------
  |  |  521|      9|            rc = 255;                                                         \
  |  |  522|      9|            goto EXIT_LABEL;                                                  \
  |  |  523|      9|          }                                                                   \
  |  |  524|     58|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     49|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     49|        {                                                                     \
  |  |  |  |  |  |  491|     49|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 48]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     49|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     49|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|     48|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|     48|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|     48|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     48|        {                                                                     \
  |  |  |  |  |  |  481|     48|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     48|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 40, False: 8]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     48|          {                                                                   \
  |  |  |  |  |  |  484|     40|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|     40|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|     40|          }                                                                   \
  |  |  |  |  |  |  487|     48|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      8|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      8|          break
  ------------------
  260|      5|    FU32TLV(fuzz, TLV_TYPE_NEW_DIRECTORY_PERMS, CURLOPT_NEW_DIRECTORY_PERMS);
  ------------------
  |  |  519|      3|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 3, False: 15.5k]
  |  |  ------------------
  |  |  520|      3|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 2, False: 1]
  |  |  ------------------
  |  |  521|      2|            rc = 255;                                                         \
  |  |  522|      2|            goto EXIT_LABEL;                                                  \
  |  |  523|      2|          }                                                                   \
  |  |  524|      3|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      1|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      1|        {                                                                     \
  |  |  |  |  |  |  491|      1|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 0, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      1|          {                                                                   \
  |  |  |  |  |  |  493|      0|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      0|          }                                                                   \
  |  |  |  |  |  |  496|      1|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|      1|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|      1|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|      1|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      1|        {                                                                     \
  |  |  |  |  |  |  481|      1|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      1|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 1, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      1|          {                                                                   \
  |  |  |  |  |  |  484|      1|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      1|          }                                                                   \
  |  |  |  |  |  |  487|      1|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      0|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      0|          break
  ------------------
  261|     17|    FU32TLV(fuzz, TLV_TYPE_PROXY_TRANSFER_MODE, CURLOPT_PROXY_TRANSFER_MODE);
  ------------------
  |  |  519|     10|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 10, False: 15.5k]
  |  |  ------------------
  |  |  520|     10|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 6, False: 4]
  |  |  ------------------
  |  |  521|      6|            rc = 255;                                                         \
  |  |  522|      6|            goto EXIT_LABEL;                                                  \
  |  |  523|      6|          }                                                                   \
  |  |  524|     10|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      4|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      4|        {                                                                     \
  |  |  |  |  |  |  491|      4|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 3]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      4|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|      4|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|      3|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|      3|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|      3|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      3|        {                                                                     \
  |  |  |  |  |  |  481|      3|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      3|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 3]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      3|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      3|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      3|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      3|          break
  ------------------
  262|    157|    FU32TLV(fuzz, TLV_TYPE_ADDRESS_SCOPE, CURLOPT_ADDRESS_SCOPE);
  ------------------
  |  |  519|     60|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 60, False: 15.4k]
  |  |  ------------------
  |  |  520|     60|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 11, False: 49]
  |  |  ------------------
  |  |  521|     11|            rc = 255;                                                         \
  |  |  522|     11|            goto EXIT_LABEL;                                                  \
  |  |  523|     11|          }                                                                   \
  |  |  524|     60|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     49|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     49|        {                                                                     \
  |  |  |  |  |  |  491|     49|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 48]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     49|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     49|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|     48|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|     48|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|     48|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     48|        {                                                                     \
  |  |  |  |  |  |  481|     48|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     48|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 48]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     48|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     48|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     48|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|     48|          break
  ------------------
  263|     20|    FU32TLV(fuzz, TLV_TYPE_CERTINFO, CURLOPT_CERTINFO);
  ------------------
  |  |  519|     13|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 13, False: 15.5k]
  |  |  ------------------
  |  |  520|     13|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 9, False: 4]
  |  |  ------------------
  |  |  521|      9|            rc = 255;                                                         \
  |  |  522|      9|            goto EXIT_LABEL;                                                  \
  |  |  523|      9|          }                                                                   \
  |  |  524|     13|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      4|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      4|        {                                                                     \
  |  |  |  |  |  |  491|      4|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 3]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      4|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|      4|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|      3|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|      3|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|      3|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      3|        {                                                                     \
  |  |  |  |  |  |  481|      3|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      3|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 3]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      3|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      3|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      3|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      3|          break
  ------------------
  264|    188|    FU32TLV(fuzz, TLV_TYPE_TFTP_BLKSIZE, CURLOPT_TFTP_BLKSIZE);
  ------------------
  |  |  519|     65|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 65, False: 15.4k]
  |  |  ------------------
  |  |  520|     65|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 3, False: 62]
  |  |  ------------------
  |  |  521|      3|            rc = 255;                                                         \
  |  |  522|      3|            goto EXIT_LABEL;                                                  \
  |  |  523|      3|          }                                                                   \
  |  |  524|     65|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     62|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     62|        {                                                                     \
  |  |  |  |  |  |  491|     62|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 61]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     62|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     62|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|     61|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|     61|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|     61|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     61|        {                                                                     \
  |  |  |  |  |  |  481|     61|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     61|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 61]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     61|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     61|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     61|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|     61|          break
  ------------------
  265|      5|    FU32TLV(fuzz, TLV_TYPE_SOCKS5_GSSAPI_NEC, CURLOPT_SOCKS5_GSSAPI_NEC);
  ------------------
  |  |  519|      3|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 3, False: 15.5k]
  |  |  ------------------
  |  |  520|      3|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 2, False: 1]
  |  |  ------------------
  |  |  521|      2|            rc = 255;                                                         \
  |  |  522|      2|            goto EXIT_LABEL;                                                  \
  |  |  523|      2|          }                                                                   \
  |  |  524|      3|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      1|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      1|        {                                                                     \
  |  |  |  |  |  |  491|      1|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 0, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      1|          {                                                                   \
  |  |  |  |  |  |  493|      0|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      0|          }                                                                   \
  |  |  |  |  |  |  496|      1|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|      1|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|      1|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|      1|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      1|        {                                                                     \
  |  |  |  |  |  |  481|      1|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      1|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 1, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      1|          {                                                                   \
  |  |  |  |  |  |  484|      1|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      1|          }                                                                   \
  |  |  |  |  |  |  487|      1|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      0|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      0|          break
  ------------------
  266|     17|    FU32TLV(fuzz, TLV_TYPE_FTP_USE_PRET, CURLOPT_FTP_USE_PRET);
  ------------------
  |  |  519|     10|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 10, False: 15.5k]
  |  |  ------------------
  |  |  520|     10|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 6, False: 4]
  |  |  ------------------
  |  |  521|      6|            rc = 255;                                                         \
  |  |  522|      6|            goto EXIT_LABEL;                                                  \
  |  |  523|      6|          }                                                                   \
  |  |  524|     10|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      4|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      4|        {                                                                     \
  |  |  |  |  |  |  491|      4|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 3]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      4|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|      4|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|      3|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|      3|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|      3|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      3|        {                                                                     \
  |  |  |  |  |  |  481|      3|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      3|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 3]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      3|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      3|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      3|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      3|          break
  ------------------
  267|    182|    FU32TLV(fuzz, TLV_TYPE_RTSP_SERVER_CSEQ, CURLOPT_RTSP_SERVER_CSEQ);
  ------------------
  |  |  519|     65|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 65, False: 15.4k]
  |  |  ------------------
  |  |  520|     65|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 6, False: 59]
  |  |  ------------------
  |  |  521|      6|            rc = 255;                                                         \
  |  |  522|      6|            goto EXIT_LABEL;                                                  \
  |  |  523|      6|          }                                                                   \
  |  |  524|     65|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     59|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     59|        {                                                                     \
  |  |  |  |  |  |  491|     59|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 58]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     59|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     59|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|     58|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|     58|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|     58|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     58|        {                                                                     \
  |  |  |  |  |  |  481|     58|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     58|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 58]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     58|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     58|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     58|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|     58|          break
  ------------------
  268|     20|    FU32TLV(fuzz, TLV_TYPE_TRANSFER_ENCODING, CURLOPT_TRANSFER_ENCODING);
  ------------------
  |  |  519|     15|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 15, False: 15.5k]
  |  |  ------------------
  |  |  520|     15|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 12, False: 3]
  |  |  ------------------
  |  |  521|     12|            rc = 255;                                                         \
  |  |  522|     12|            goto EXIT_LABEL;                                                  \
  |  |  523|     12|          }                                                                   \
  |  |  524|     15|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      3|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      3|        {                                                                     \
  |  |  |  |  |  |  491|      3|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      3|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|      3|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|      2|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|      2|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|      2|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      2|        {                                                                     \
  |  |  |  |  |  |  481|      2|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      2|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      2|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      2|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      2|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      2|          break
  ------------------
  269|     98|    FU32TLV(fuzz, TLV_TYPE_ACCEPTTIMEOUT_MS, CURLOPT_ACCEPTTIMEOUT_MS);
  ------------------
  |  |  519|     35|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 35, False: 15.5k]
  |  |  ------------------
  |  |  520|     35|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 3, False: 32]
  |  |  ------------------
  |  |  521|      3|            rc = 255;                                                         \
  |  |  522|      3|            goto EXIT_LABEL;                                                  \
  |  |  523|      3|          }                                                                   \
  |  |  524|     35|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     32|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     32|        {                                                                     \
  |  |  |  |  |  |  491|     32|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 31]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     32|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     32|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|     31|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|     31|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|     31|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     31|        {                                                                     \
  |  |  |  |  |  |  481|     31|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     31|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 31]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     31|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     31|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     31|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|     31|          break
  ------------------
  270|     26|    FU32TLV(fuzz, TLV_TYPE_TCP_KEEPALIVE, CURLOPT_TCP_KEEPALIVE);
  ------------------
  |  |  519|     11|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 11, False: 15.5k]
  |  |  ------------------
  |  |  520|     11|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 3, False: 8]
  |  |  ------------------
  |  |  521|      3|            rc = 255;                                                         \
  |  |  522|      3|            goto EXIT_LABEL;                                                  \
  |  |  523|      3|          }                                                                   \
  |  |  524|     11|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      8|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      8|        {                                                                     \
  |  |  |  |  |  |  491|      8|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 7]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      8|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|      8|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|      7|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|      7|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|      7|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      7|        {                                                                     \
  |  |  |  |  |  |  481|      7|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      7|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 7]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      7|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      7|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      7|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      7|          break
  ------------------
  271|    200|    FU32TLV(fuzz, TLV_TYPE_TCP_KEEPIDLE, CURLOPT_TCP_KEEPIDLE);
  ------------------
  |  |  519|     69|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 69, False: 15.4k]
  |  |  ------------------
  |  |  520|     69|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 3, False: 66]
  |  |  ------------------
  |  |  521|      3|            rc = 255;                                                         \
  |  |  522|      3|            goto EXIT_LABEL;                                                  \
  |  |  523|      3|          }                                                                   \
  |  |  524|     69|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     66|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     66|        {                                                                     \
  |  |  |  |  |  |  491|     66|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 65]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     66|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     66|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|     65|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|     65|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|     65|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     65|        {                                                                     \
  |  |  |  |  |  |  481|     65|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     65|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 65]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     65|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     65|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     65|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|     65|          break
  ------------------
  272|    180|    FU32TLV(fuzz, TLV_TYPE_TCP_KEEPINTVL, CURLOPT_TCP_KEEPINTVL);
  ------------------
  |  |  519|     61|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 61, False: 15.4k]
  |  |  ------------------
  |  |  520|     61|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 1, False: 60]
  |  |  ------------------
  |  |  521|      1|            rc = 255;                                                         \
  |  |  522|      1|            goto EXIT_LABEL;                                                  \
  |  |  523|      1|          }                                                                   \
  |  |  524|     61|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     60|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     60|        {                                                                     \
  |  |  |  |  |  |  491|     60|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 59]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     60|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     60|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|     59|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|     59|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|     59|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     59|        {                                                                     \
  |  |  |  |  |  |  481|     59|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     59|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 59]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     59|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     59|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     59|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|     59|          break
  ------------------
  273|     30|    FU32TLV(fuzz, TLV_TYPE_SASL_IR, CURLOPT_SASL_IR);
  ------------------
  |  |  519|     17|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 17, False: 15.5k]
  |  |  ------------------
  |  |  520|     17|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 10, False: 7]
  |  |  ------------------
  |  |  521|     10|            rc = 255;                                                         \
  |  |  522|     10|            goto EXIT_LABEL;                                                  \
  |  |  523|     10|          }                                                                   \
  |  |  524|     17|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      7|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      7|        {                                                                     \
  |  |  |  |  |  |  491|      7|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 6]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      7|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|      7|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|      6|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|      6|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|      6|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      6|        {                                                                     \
  |  |  |  |  |  |  481|      6|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      6|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 6]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      6|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      6|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      6|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      6|          break
  ------------------
  274|     16|    FU32TLV(fuzz, TLV_TYPE_SSL_ENABLE_ALPN, CURLOPT_SSL_ENABLE_ALPN);
  ------------------
  |  |  519|     11|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 11, False: 15.5k]
  |  |  ------------------
  |  |  520|     11|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 8, False: 3]
  |  |  ------------------
  |  |  521|      8|            rc = 255;                                                         \
  |  |  522|      8|            goto EXIT_LABEL;                                                  \
  |  |  523|      8|          }                                                                   \
  |  |  524|     11|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      3|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      3|        {                                                                     \
  |  |  |  |  |  |  491|      3|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      3|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|      3|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|      2|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|      2|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|      2|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      2|        {                                                                     \
  |  |  |  |  |  |  481|      2|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      2|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      2|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      2|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      2|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      2|          break
  ------------------
  275|    170|    FU32TLV(fuzz, TLV_TYPE_EXPECT_100_TIMEOUT_MS, CURLOPT_EXPECT_100_TIMEOUT_MS);
  ------------------
  |  |  519|     61|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 61, False: 15.4k]
  |  |  ------------------
  |  |  520|     61|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 6, False: 55]
  |  |  ------------------
  |  |  521|      6|            rc = 255;                                                         \
  |  |  522|      6|            goto EXIT_LABEL;                                                  \
  |  |  523|      6|          }                                                                   \
  |  |  524|     61|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     55|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     55|        {                                                                     \
  |  |  |  |  |  |  491|     55|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 54]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     55|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     55|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|     54|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|     54|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|     54|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     54|        {                                                                     \
  |  |  |  |  |  |  481|     54|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     54|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 54]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     54|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     54|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     54|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|     54|          break
  ------------------
  276|     25|    FU32TLV(fuzz, TLV_TYPE_SSL_VERIFYSTATUS, CURLOPT_SSL_VERIFYSTATUS);
  ------------------
  |  |  519|     10|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 10, False: 15.5k]
  |  |  ------------------
  |  |  520|     10|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 2, False: 8]
  |  |  ------------------
  |  |  521|      2|            rc = 255;                                                         \
  |  |  522|      2|            goto EXIT_LABEL;                                                  \
  |  |  523|      2|          }                                                                   \
  |  |  524|     10|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      8|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      8|        {                                                                     \
  |  |  |  |  |  |  491|      8|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 7]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      8|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|      8|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|      7|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|      7|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|      7|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      7|        {                                                                     \
  |  |  |  |  |  |  481|      7|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      7|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 7]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      7|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      7|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      7|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      7|          break
  ------------------
  277|      5|    FU32TLV(fuzz, TLV_TYPE_SSL_FALSESTART, CURLOPT_SSL_FALSESTART);
  ------------------
  |  |  519|      3|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 3, False: 15.5k]
  |  |  ------------------
  |  |  520|      3|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 2, False: 1]
  |  |  ------------------
  |  |  521|      2|            rc = 255;                                                         \
  |  |  522|      2|            goto EXIT_LABEL;                                                  \
  |  |  523|      2|          }                                                                   \
  |  |  524|      3|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      1|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      1|        {                                                                     \
  |  |  |  |  |  |  491|      1|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 0, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      1|          {                                                                   \
  |  |  |  |  |  |  493|      0|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      0|          }                                                                   \
  |  |  |  |  |  |  496|      1|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|      1|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|      1|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|      1|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      1|        {                                                                     \
  |  |  |  |  |  |  481|      1|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      1|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 1, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      1|          {                                                                   \
  |  |  |  |  |  |  484|      1|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      1|          }                                                                   \
  |  |  |  |  |  |  487|      1|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      0|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      0|          break
  ------------------
  278|     21|    FU32TLV(fuzz, TLV_TYPE_PATH_AS_IS, CURLOPT_PATH_AS_IS);
  ------------------
  |  |  519|     12|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 12, False: 15.5k]
  |  |  ------------------
  |  |  520|     12|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 7, False: 5]
  |  |  ------------------
  |  |  521|      7|            rc = 255;                                                         \
  |  |  522|      7|            goto EXIT_LABEL;                                                  \
  |  |  523|      7|          }                                                                   \
  |  |  524|     12|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      5|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      5|        {                                                                     \
  |  |  |  |  |  |  491|      5|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      5|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|      5|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|      4|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|      4|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|      4|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      4|        {                                                                     \
  |  |  |  |  |  |  481|      4|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      4|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      4|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      4|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      4|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      4|          break
  ------------------
  279|     37|    FU32TLV(fuzz, TLV_TYPE_PIPEWAIT, CURLOPT_PIPEWAIT);
  ------------------
  |  |  519|     20|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 20, False: 15.5k]
  |  |  ------------------
  |  |  520|     20|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 11, False: 9]
  |  |  ------------------
  |  |  521|     11|            rc = 255;                                                         \
  |  |  522|     11|            goto EXIT_LABEL;                                                  \
  |  |  523|     11|          }                                                                   \
  |  |  524|     20|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      9|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      9|        {                                                                     \
  |  |  |  |  |  |  491|      9|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 8]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      9|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|      9|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|      8|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|      8|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|      8|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      8|        {                                                                     \
  |  |  |  |  |  |  481|      8|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      8|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 8]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      8|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      8|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      8|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      8|          break
  ------------------
  280|    116|    FU32TLV(fuzz, TLV_TYPE_STREAM_WEIGHT, CURLOPT_STREAM_WEIGHT);
  ------------------
  |  |  519|     45|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 45, False: 15.4k]
  |  |  ------------------
  |  |  520|     45|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 9, False: 36]
  |  |  ------------------
  |  |  521|      9|            rc = 255;                                                         \
  |  |  522|      9|            goto EXIT_LABEL;                                                  \
  |  |  523|      9|          }                                                                   \
  |  |  524|     45|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     36|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     36|        {                                                                     \
  |  |  |  |  |  |  491|     36|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 35]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     36|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     36|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|     35|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|     35|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|     35|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     35|        {                                                                     \
  |  |  |  |  |  |  481|     35|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     35|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 35]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     35|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     35|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     35|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|     35|          break
  ------------------
  281|     11|    FU32TLV(fuzz, TLV_TYPE_TFTP_NO_OPTIONS, CURLOPT_TFTP_NO_OPTIONS);
  ------------------
  |  |  519|      6|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 6, False: 15.5k]
  |  |  ------------------
  |  |  520|      6|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 3, False: 3]
  |  |  ------------------
  |  |  521|      3|            rc = 255;                                                         \
  |  |  522|      3|            goto EXIT_LABEL;                                                  \
  |  |  523|      3|          }                                                                   \
  |  |  524|      6|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      3|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      3|        {                                                                     \
  |  |  |  |  |  |  491|      3|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      3|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|      3|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|      2|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|      2|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|      2|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      2|        {                                                                     \
  |  |  |  |  |  |  481|      2|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      2|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      2|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      2|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      2|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      2|          break
  ------------------
  282|     19|    FU32TLV(fuzz, TLV_TYPE_TCP_FASTOPEN, CURLOPT_TCP_FASTOPEN);
  ------------------
  |  |  519|     10|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 10, False: 15.5k]
  |  |  ------------------
  |  |  520|     10|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 5, False: 5]
  |  |  ------------------
  |  |  521|      5|            rc = 255;                                                         \
  |  |  522|      5|            goto EXIT_LABEL;                                                  \
  |  |  523|      5|          }                                                                   \
  |  |  524|     10|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      5|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      5|        {                                                                     \
  |  |  |  |  |  |  491|      5|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      5|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|      5|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|      4|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|      4|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|      4|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      4|        {                                                                     \
  |  |  |  |  |  |  481|      4|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      4|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      4|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      4|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      4|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      4|          break
  ------------------
  283|     15|    FU32TLV(fuzz, TLV_TYPE_KEEP_SENDING_ON_ERROR, CURLOPT_KEEP_SENDING_ON_ERROR);
  ------------------
  |  |  519|      6|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 6, False: 15.5k]
  |  |  ------------------
  |  |  520|      6|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 1, False: 5]
  |  |  ------------------
  |  |  521|      1|            rc = 255;                                                         \
  |  |  522|      1|            goto EXIT_LABEL;                                                  \
  |  |  523|      1|          }                                                                   \
  |  |  524|      6|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      5|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      5|        {                                                                     \
  |  |  |  |  |  |  491|      5|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      5|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|      5|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|      4|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|      4|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|      4|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      4|        {                                                                     \
  |  |  |  |  |  |  481|      4|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      4|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      4|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      4|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      4|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      4|          break
  ------------------
  284|     35|    FU32TLV(fuzz, TLV_TYPE_PROXY_SSL_VERIFYPEER, CURLOPT_PROXY_SSL_VERIFYPEER);
  ------------------
  |  |  519|     16|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 16, False: 15.5k]
  |  |  ------------------
  |  |  520|     16|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 6, False: 10]
  |  |  ------------------
  |  |  521|      6|            rc = 255;                                                         \
  |  |  522|      6|            goto EXIT_LABEL;                                                  \
  |  |  523|      6|          }                                                                   \
  |  |  524|     16|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     10|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     10|        {                                                                     \
  |  |  |  |  |  |  491|     10|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 9]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     10|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     10|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|      9|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|      9|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|      9|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      9|        {                                                                     \
  |  |  |  |  |  |  481|      9|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      9|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 9]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      9|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      9|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      9|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      9|          break
  ------------------
  285|     49|    FU32TLV(fuzz, TLV_TYPE_PROXY_SSL_VERIFYHOST, CURLOPT_PROXY_SSL_VERIFYHOST);
  ------------------
  |  |  519|     24|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 24, False: 15.5k]
  |  |  ------------------
  |  |  520|     24|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 11, False: 13]
  |  |  ------------------
  |  |  521|     11|            rc = 255;                                                         \
  |  |  522|     11|            goto EXIT_LABEL;                                                  \
  |  |  523|     11|          }                                                                   \
  |  |  524|     24|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     13|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     13|        {                                                                     \
  |  |  |  |  |  |  491|     13|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 12]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     13|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     13|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|     12|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|     12|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|     12|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     12|        {                                                                     \
  |  |  |  |  |  |  481|     12|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     12|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 12]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     12|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     12|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     12|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|     12|          break
  ------------------
  286|     23|    FU32TLV(fuzz, TLV_TYPE_PROXY_SSL_OPTIONS, CURLOPT_PROXY_SSL_OPTIONS);
  ------------------
  |  |  519|     16|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 16, False: 15.5k]
  |  |  ------------------
  |  |  520|     16|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 12, False: 4]
  |  |  ------------------
  |  |  521|     12|            rc = 255;                                                         \
  |  |  522|     12|            goto EXIT_LABEL;                                                  \
  |  |  523|     12|          }                                                                   \
  |  |  524|     16|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      4|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      4|        {                                                                     \
  |  |  |  |  |  |  491|      4|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 3]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      4|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|      4|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|      3|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|      3|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|      3|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      3|        {                                                                     \
  |  |  |  |  |  |  481|      3|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      3|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 3]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      3|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      3|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      3|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      3|          break
  ------------------
  287|     17|    FU32TLV(fuzz, TLV_TYPE_SUPPRESS_CONNECT_HEADERS, CURLOPT_SUPPRESS_CONNECT_HEADERS);
  ------------------
  |  |  519|     10|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 10, False: 15.5k]
  |  |  ------------------
  |  |  520|     10|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 6, False: 4]
  |  |  ------------------
  |  |  521|      6|            rc = 255;                                                         \
  |  |  522|      6|            goto EXIT_LABEL;                                                  \
  |  |  523|      6|          }                                                                   \
  |  |  524|     10|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      4|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      4|        {                                                                     \
  |  |  |  |  |  |  491|      4|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 3]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      4|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|      4|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|      3|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|      3|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|      3|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      3|        {                                                                     \
  |  |  |  |  |  |  481|      3|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      3|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 3]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      3|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      3|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      3|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      3|          break
  ------------------
  288|     89|    FU32TLV(fuzz, TLV_TYPE_SOCKS5_AUTH, CURLOPT_SOCKS5_AUTH);
  ------------------
  |  |  519|     34|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 34, False: 15.5k]
  |  |  ------------------
  |  |  520|     34|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 6, False: 28]
  |  |  ------------------
  |  |  521|      6|            rc = 255;                                                         \
  |  |  522|      6|            goto EXIT_LABEL;                                                  \
  |  |  523|      6|          }                                                                   \
  |  |  524|     34|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     28|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     28|        {                                                                     \
  |  |  |  |  |  |  491|     28|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 27]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     28|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     28|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|     27|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|     27|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|     27|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     27|        {                                                                     \
  |  |  |  |  |  |  481|     27|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     27|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 25, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     27|          {                                                                   \
  |  |  |  |  |  |  484|     25|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|     25|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|     25|          }                                                                   \
  |  |  |  |  |  |  487|     27|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      2|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      2|          break
  ------------------
  289|      8|    FU32TLV(fuzz, TLV_TYPE_SSH_COMPRESSION, CURLOPT_SSH_COMPRESSION);
  ------------------
  |  |  519|      6|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 6, False: 15.5k]
  |  |  ------------------
  |  |  520|      6|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 5, False: 1]
  |  |  ------------------
  |  |  521|      5|            rc = 255;                                                         \
  |  |  522|      5|            goto EXIT_LABEL;                                                  \
  |  |  523|      5|          }                                                                   \
  |  |  524|      6|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      1|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      1|        {                                                                     \
  |  |  |  |  |  |  491|      1|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 0, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      1|          {                                                                   \
  |  |  |  |  |  |  493|      0|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      0|          }                                                                   \
  |  |  |  |  |  |  496|      1|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|      1|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|      1|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|      1|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      1|        {                                                                     \
  |  |  |  |  |  |  481|      1|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      1|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 1, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      1|          {                                                                   \
  |  |  |  |  |  |  484|      1|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      1|          }                                                                   \
  |  |  |  |  |  |  487|      1|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      0|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      0|          break
  ------------------
  290|     38|    FU32TLV(fuzz, TLV_TYPE_HAPPY_EYEBALLS_TIMEOUT_MS, CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS);
  ------------------
  |  |  519|     15|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 15, False: 15.5k]
  |  |  ------------------
  |  |  520|     15|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 3, False: 12]
  |  |  ------------------
  |  |  521|      3|            rc = 255;                                                         \
  |  |  522|      3|            goto EXIT_LABEL;                                                  \
  |  |  523|      3|          }                                                                   \
  |  |  524|     15|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     12|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     12|        {                                                                     \
  |  |  |  |  |  |  491|     12|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 11]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     12|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     12|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|     11|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|     11|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|     11|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     11|        {                                                                     \
  |  |  |  |  |  |  481|     11|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     11|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 11]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     11|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     11|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     11|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|     11|          break
  ------------------
  291|     21|    FU32TLV(fuzz, TLV_TYPE_HAPROXYPROTOCOL, CURLOPT_HAPROXYPROTOCOL);
  ------------------
  |  |  519|     10|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 10, False: 15.5k]
  |  |  ------------------
  |  |  520|     10|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 4, False: 6]
  |  |  ------------------
  |  |  521|      4|            rc = 255;                                                         \
  |  |  522|      4|            goto EXIT_LABEL;                                                  \
  |  |  523|      4|          }                                                                   \
  |  |  524|     10|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      6|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      6|        {                                                                     \
  |  |  |  |  |  |  491|      6|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 5]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      6|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|      6|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|      5|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|      5|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|      5|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      5|        {                                                                     \
  |  |  |  |  |  |  481|      5|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      5|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 5]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      5|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      5|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      5|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      5|          break
  ------------------
  292|     28|    FU32TLV(fuzz, TLV_TYPE_DNS_SHUFFLE_ADDRESSES, CURLOPT_DNS_SHUFFLE_ADDRESSES);
  ------------------
  |  |  519|     13|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 13, False: 15.5k]
  |  |  ------------------
  |  |  520|     13|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 5, False: 8]
  |  |  ------------------
  |  |  521|      5|            rc = 255;                                                         \
  |  |  522|      5|            goto EXIT_LABEL;                                                  \
  |  |  523|      5|          }                                                                   \
  |  |  524|     13|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      8|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      8|        {                                                                     \
  |  |  |  |  |  |  491|      8|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 7]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      8|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|      8|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|      7|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|      7|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|      7|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      7|        {                                                                     \
  |  |  |  |  |  |  481|      7|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      7|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 7]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      7|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      7|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      7|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      7|          break
  ------------------
  293|     21|    FU32TLV(fuzz, TLV_TYPE_DISALLOW_USERNAME_IN_URL, CURLOPT_DISALLOW_USERNAME_IN_URL);
  ------------------
  |  |  519|     14|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 14, False: 15.5k]
  |  |  ------------------
  |  |  520|     14|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 10, False: 4]
  |  |  ------------------
  |  |  521|     10|            rc = 255;                                                         \
  |  |  522|     10|            goto EXIT_LABEL;                                                  \
  |  |  523|     10|          }                                                                   \
  |  |  524|     14|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      4|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      4|        {                                                                     \
  |  |  |  |  |  |  491|      4|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 3]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      4|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|      4|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|      3|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|      3|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|      3|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      3|        {                                                                     \
  |  |  |  |  |  |  481|      3|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      3|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 3]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      3|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      3|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      3|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      3|          break
  ------------------
  294|    217|    FU32TLV(fuzz, TLV_TYPE_UPLOAD_BUFFERSIZE, CURLOPT_UPLOAD_BUFFERSIZE);
  ------------------
  |  |  519|     78|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 78, False: 15.4k]
  |  |  ------------------
  |  |  520|     78|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 8, False: 70]
  |  |  ------------------
  |  |  521|      8|            rc = 255;                                                         \
  |  |  522|      8|            goto EXIT_LABEL;                                                  \
  |  |  523|      8|          }                                                                   \
  |  |  524|     78|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     70|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     70|        {                                                                     \
  |  |  |  |  |  |  491|     70|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 69]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     70|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     70|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|     69|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|     69|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|     69|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     69|        {                                                                     \
  |  |  |  |  |  |  481|     69|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     69|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 69]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     69|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     69|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     69|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|     69|          break
  ------------------
  295|     91|    FU32TLV(fuzz, TLV_TYPE_UPKEEP_INTERVAL_MS, CURLOPT_UPKEEP_INTERVAL_MS);
  ------------------
  |  |  519|     38|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 38, False: 15.4k]
  |  |  ------------------
  |  |  520|     38|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 11, False: 27]
  |  |  ------------------
  |  |  521|     11|            rc = 255;                                                         \
  |  |  522|     11|            goto EXIT_LABEL;                                                  \
  |  |  523|     11|          }                                                                   \
  |  |  524|     38|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     27|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     27|        {                                                                     \
  |  |  |  |  |  |  491|     27|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 26]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     27|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     27|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|     26|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|     26|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|     26|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     26|        {                                                                     \
  |  |  |  |  |  |  481|     26|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     26|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 26]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     26|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     26|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     26|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|     26|          break
  ------------------
  296|     11|    FU32TLV(fuzz, TLV_TYPE_HTTP09_ALLOWED, CURLOPT_HTTP09_ALLOWED);
  ------------------
  |  |  519|      6|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 6, False: 15.5k]
  |  |  ------------------
  |  |  520|      6|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 3, False: 3]
  |  |  ------------------
  |  |  521|      3|            rc = 255;                                                         \
  |  |  522|      3|            goto EXIT_LABEL;                                                  \
  |  |  523|      3|          }                                                                   \
  |  |  524|      6|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      3|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      3|        {                                                                     \
  |  |  |  |  |  |  491|      3|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      3|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|      3|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|      2|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|      2|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|      2|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      2|        {                                                                     \
  |  |  |  |  |  |  481|      2|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      2|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      2|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      2|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      2|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      2|          break
  ------------------
  297|    117|    FU32TLV(fuzz, TLV_TYPE_ALTSVC_CTRL, CURLOPT_ALTSVC_CTRL);
  ------------------
  |  |  519|     44|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 44, False: 15.4k]
  |  |  ------------------
  |  |  520|     44|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 7, False: 37]
  |  |  ------------------
  |  |  521|      7|            rc = 255;                                                         \
  |  |  522|      7|            goto EXIT_LABEL;                                                  \
  |  |  523|      7|          }                                                                   \
  |  |  524|     44|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     37|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     37|        {                                                                     \
  |  |  |  |  |  |  491|     37|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 36]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     37|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     37|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|     36|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|     36|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|     36|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     36|        {                                                                     \
  |  |  |  |  |  |  481|     36|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     36|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 1, False: 35]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     36|          {                                                                   \
  |  |  |  |  |  |  484|      1|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      1|          }                                                                   \
  |  |  |  |  |  |  487|     36|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     35|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|     35|          break
  ------------------
  298|    138|    FU32TLV(fuzz, TLV_TYPE_MAXAGE_CONN, CURLOPT_MAXAGE_CONN);
  ------------------
  |  |  519|     53|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 53, False: 15.4k]
  |  |  ------------------
  |  |  520|     53|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 10, False: 43]
  |  |  ------------------
  |  |  521|     10|            rc = 255;                                                         \
  |  |  522|     10|            goto EXIT_LABEL;                                                  \
  |  |  523|     10|          }                                                                   \
  |  |  524|     53|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     43|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     43|        {                                                                     \
  |  |  |  |  |  |  491|     43|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 42]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     43|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     43|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|     42|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|     42|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|     42|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     42|        {                                                                     \
  |  |  |  |  |  |  481|     42|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     42|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 42]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     42|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     42|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     42|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|     42|          break
  ------------------
  299|     26|    FU32TLV(fuzz, TLV_TYPE_MAIL_RCPT_ALLOWFAILS, CURLOPT_MAIL_RCPT_ALLOWFAILS);
  ------------------
  |  |  519|     17|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 17, False: 15.5k]
  |  |  ------------------
  |  |  520|     17|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 12, False: 5]
  |  |  ------------------
  |  |  521|     12|            rc = 255;                                                         \
  |  |  522|     12|            goto EXIT_LABEL;                                                  \
  |  |  523|     12|          }                                                                   \
  |  |  524|     17|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      5|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      5|        {                                                                     \
  |  |  |  |  |  |  491|      5|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      5|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|      5|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|      4|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|      4|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|      4|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      4|        {                                                                     \
  |  |  |  |  |  |  481|      4|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      4|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      4|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      4|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      4|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      4|          break
  ------------------
  300|     40|    FU32TLV(fuzz, TLV_TYPE_HSTS_CTRL, CURLOPT_HSTS_CTRL);
  ------------------
  |  |  519|     19|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 19, False: 15.5k]
  |  |  ------------------
  |  |  520|     19|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 8, False: 11]
  |  |  ------------------
  |  |  521|      8|            rc = 255;                                                         \
  |  |  522|      8|            goto EXIT_LABEL;                                                  \
  |  |  523|      8|          }                                                                   \
  |  |  524|     19|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     11|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     11|        {                                                                     \
  |  |  |  |  |  |  491|     11|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 10]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     11|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     11|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|     10|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|     10|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|     10|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     10|        {                                                                     \
  |  |  |  |  |  |  481|     10|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     10|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 10]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     10|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     10|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     10|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|     10|          break
  ------------------
  301|     22|    FU32TLV(fuzz, TLV_TYPE_DOH_SSL_VERIFYPEER, CURLOPT_DOH_SSL_VERIFYPEER);
  ------------------
  |  |  519|     13|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 13, False: 15.5k]
  |  |  ------------------
  |  |  520|     13|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 8, False: 5]
  |  |  ------------------
  |  |  521|      8|            rc = 255;                                                         \
  |  |  522|      8|            goto EXIT_LABEL;                                                  \
  |  |  523|      8|          }                                                                   \
  |  |  524|     13|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      5|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      5|        {                                                                     \
  |  |  |  |  |  |  491|      5|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      5|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|      5|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|      4|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|      4|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|      4|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      4|        {                                                                     \
  |  |  |  |  |  |  481|      4|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      4|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      4|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      4|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      4|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      4|          break
  ------------------
  302|     20|    FU32TLV(fuzz, TLV_TYPE_DOH_SSL_VERIFYHOST, CURLOPT_DOH_SSL_VERIFYHOST);
  ------------------
  |  |  519|     15|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 15, False: 15.5k]
  |  |  ------------------
  |  |  520|     15|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 12, False: 3]
  |  |  ------------------
  |  |  521|     12|            rc = 255;                                                         \
  |  |  522|     12|            goto EXIT_LABEL;                                                  \
  |  |  523|     12|          }                                                                   \
  |  |  524|     15|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      3|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      3|        {                                                                     \
  |  |  |  |  |  |  491|      3|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      3|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|      3|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|      2|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|      2|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|      2|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      2|        {                                                                     \
  |  |  |  |  |  |  481|      2|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      2|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      2|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      2|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      2|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      2|          break
  ------------------
  303|     19|    FU32TLV(fuzz, TLV_TYPE_DOH_SSL_VERIFYSTATUS, CURLOPT_DOH_SSL_VERIFYSTATUS);
  ------------------
  |  |  519|     12|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 12, False: 15.5k]
  |  |  ------------------
  |  |  520|     12|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 8, False: 4]
  |  |  ------------------
  |  |  521|      8|            rc = 255;                                                         \
  |  |  522|      8|            goto EXIT_LABEL;                                                  \
  |  |  523|      8|          }                                                                   \
  |  |  524|     12|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      4|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      4|        {                                                                     \
  |  |  |  |  |  |  491|      4|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 3]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      4|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|      4|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|      3|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|      3|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|      3|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      3|        {                                                                     \
  |  |  |  |  |  |  481|      3|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      3|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 3]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      3|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      3|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      3|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      3|          break
  ------------------
  304|    162|    FU32TLV(fuzz, TLV_TYPE_MAXLIFETIME_CONN, CURLOPT_MAXLIFETIME_CONN);
  ------------------
  |  |  519|     63|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 63, False: 15.4k]
  |  |  ------------------
  |  |  520|     63|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 13, False: 50]
  |  |  ------------------
  |  |  521|     13|            rc = 255;                                                         \
  |  |  522|     13|            goto EXIT_LABEL;                                                  \
  |  |  523|     13|          }                                                                   \
  |  |  524|     63|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     50|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     50|        {                                                                     \
  |  |  |  |  |  |  491|     50|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 49]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     50|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     50|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|     49|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|     49|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|     49|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     49|        {                                                                     \
  |  |  |  |  |  |  481|     49|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     49|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 49]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     49|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     49|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     49|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|     49|          break
  ------------------
  305|     22|    FU32TLV(fuzz, TLV_TYPE_MIME_OPTIONS, CURLOPT_MIME_OPTIONS);
  ------------------
  |  |  519|     15|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 15, False: 15.5k]
  |  |  ------------------
  |  |  520|     15|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 11, False: 4]
  |  |  ------------------
  |  |  521|     11|            rc = 255;                                                         \
  |  |  522|     11|            goto EXIT_LABEL;                                                  \
  |  |  523|     11|          }                                                                   \
  |  |  524|     15|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      4|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      4|        {                                                                     \
  |  |  |  |  |  |  491|      4|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 3]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      4|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|      4|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|      3|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|      3|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|      3|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      3|        {                                                                     \
  |  |  |  |  |  |  481|      3|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      3|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 3]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      3|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      3|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      3|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      3|          break
  ------------------
  306|    197|    FU32TLV(fuzz, TLV_TYPE_CA_CACHE_TIMEOUT, CURLOPT_CA_CACHE_TIMEOUT);
  ------------------
  |  |  519|     70|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 70, False: 15.4k]
  |  |  ------------------
  |  |  520|     70|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 6, False: 64]
  |  |  ------------------
  |  |  521|      6|            rc = 255;                                                         \
  |  |  522|      6|            goto EXIT_LABEL;                                                  \
  |  |  523|      6|          }                                                                   \
  |  |  524|     70|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     64|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     64|        {                                                                     \
  |  |  |  |  |  |  491|     64|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 63]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     64|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     64|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|     63|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|     63|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|     63|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     63|        {                                                                     \
  |  |  |  |  |  |  481|     63|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     63|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 63]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     63|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     63|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     63|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|     63|          break
  ------------------
  307|     20|    FU32TLV(fuzz, TLV_TYPE_QUICK_EXIT, CURLOPT_QUICK_EXIT);
  ------------------
  |  |  519|     15|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 15, False: 15.5k]
  |  |  ------------------
  |  |  520|     15|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 12, False: 3]
  |  |  ------------------
  |  |  521|     12|            rc = 255;                                                         \
  |  |  522|     12|            goto EXIT_LABEL;                                                  \
  |  |  523|     12|          }                                                                   \
  |  |  524|     15|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      3|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      3|        {                                                                     \
  |  |  |  |  |  |  491|      3|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      3|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|      3|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|      2|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|      2|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|      2|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      2|        {                                                                     \
  |  |  |  |  |  |  481|      2|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      2|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      2|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      2|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      2|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      2|          break
  ------------------
  308|     93|    FU32TLV(fuzz, TLV_TYPE_SERVER_RESPONSE_TIMEOUT_MS, CURLOPT_SERVER_RESPONSE_TIMEOUT_MS);
  ------------------
  |  |  519|     40|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 40, False: 15.4k]
  |  |  ------------------
  |  |  520|     40|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 13, False: 27]
  |  |  ------------------
  |  |  521|     13|            rc = 255;                                                         \
  |  |  522|     13|            goto EXIT_LABEL;                                                  \
  |  |  523|     13|          }                                                                   \
  |  |  524|     40|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     27|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     27|        {                                                                     \
  |  |  |  |  |  |  491|     27|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 26]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     27|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     27|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|     26|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|     26|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|     26|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     26|        {                                                                     \
  |  |  |  |  |  |  481|     26|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     26|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 26]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     26|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     26|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     26|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|     26|          break
  ------------------
  309|    183|    FU32TLV(fuzz, TLV_TYPE_TCP_KEEPCNT, CURLOPT_TCP_KEEPCNT);
  ------------------
  |  |  519|     70|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 70, False: 15.4k]
  |  |  ------------------
  |  |  520|     70|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 13, False: 57]
  |  |  ------------------
  |  |  521|     13|            rc = 255;                                                         \
  |  |  522|     13|            goto EXIT_LABEL;                                                  \
  |  |  523|     13|          }                                                                   \
  |  |  524|     70|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     57|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     57|        {                                                                     \
  |  |  |  |  |  |  491|     57|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 56]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     57|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     57|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|     56|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|     56|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|     56|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     56|        {                                                                     \
  |  |  |  |  |  |  481|     56|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     56|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 56]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     56|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     56|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     56|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|     56|          break
  ------------------
  310|     81|    FU32TLV(fuzz, TLV_TYPE_SSLVERSION, CURLOPT_SSLVERSION);
  ------------------
  |  |  519|     36|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 36, False: 15.4k]
  |  |  ------------------
  |  |  520|     36|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 13, False: 23]
  |  |  ------------------
  |  |  521|     13|            rc = 255;                                                         \
  |  |  522|     13|            goto EXIT_LABEL;                                                  \
  |  |  523|     13|          }                                                                   \
  |  |  524|     36|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     23|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     23|        {                                                                     \
  |  |  |  |  |  |  491|     23|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 22]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     23|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     23|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|     22|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|     22|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|     22|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     22|        {                                                                     \
  |  |  |  |  |  |  481|     22|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     22|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 15, False: 7]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     22|          {                                                                   \
  |  |  |  |  |  |  484|     15|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|     15|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|     15|          }                                                                   \
  |  |  |  |  |  |  487|     22|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      7|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      7|          break
  ------------------
  311|    151|    FU32TLV(fuzz, TLV_TYPE_TIMECONDITION, CURLOPT_TIMECONDITION);
  ------------------
  |  |  519|     58|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 58, False: 15.4k]
  |  |  ------------------
  |  |  520|     58|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 11, False: 47]
  |  |  ------------------
  |  |  521|     11|            rc = 255;                                                         \
  |  |  522|     11|            goto EXIT_LABEL;                                                  \
  |  |  523|     11|          }                                                                   \
  |  |  524|     58|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     47|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     47|        {                                                                     \
  |  |  |  |  |  |  491|     47|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 46]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     47|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     47|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|     46|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|     46|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|     46|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     46|        {                                                                     \
  |  |  |  |  |  |  481|     46|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     46|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 40, False: 6]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     46|          {                                                                   \
  |  |  |  |  |  |  484|     40|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|     40|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|     40|          }                                                                   \
  |  |  |  |  |  |  487|     46|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      6|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      6|          break
  ------------------
  312|    105|    FU32TLV(fuzz, TLV_TYPE_PROXYAUTH, CURLOPT_PROXYAUTH);
  ------------------
  |  |  519|     38|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 38, False: 15.4k]
  |  |  ------------------
  |  |  520|     38|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 4, False: 34]
  |  |  ------------------
  |  |  521|      4|            rc = 255;                                                         \
  |  |  522|      4|            goto EXIT_LABEL;                                                  \
  |  |  523|      4|          }                                                                   \
  |  |  524|     38|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     34|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     34|        {                                                                     \
  |  |  |  |  |  |  491|     34|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 33]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     34|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     34|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|     33|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|     33|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|     33|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     33|        {                                                                     \
  |  |  |  |  |  |  481|     33|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     33|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 1, False: 32]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     33|          {                                                                   \
  |  |  |  |  |  |  484|      1|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      1|          }                                                                   \
  |  |  |  |  |  |  487|     33|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     32|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|     32|          break
  ------------------
  313|    105|    FU32TLV(fuzz, TLV_TYPE_IPRESOLVE, CURLOPT_IPRESOLVE);
  ------------------
  |  |  519|     38|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 38, False: 15.4k]
  |  |  ------------------
  |  |  520|     38|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 4, False: 34]
  |  |  ------------------
  |  |  521|      4|            rc = 255;                                                         \
  |  |  522|      4|            goto EXIT_LABEL;                                                  \
  |  |  523|      4|          }                                                                   \
  |  |  524|     38|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     34|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     34|        {                                                                     \
  |  |  |  |  |  |  491|     34|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 33]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     34|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     34|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|     33|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|     33|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|     33|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     33|        {                                                                     \
  |  |  |  |  |  |  481|     33|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     33|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 31, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     33|          {                                                                   \
  |  |  |  |  |  |  484|     31|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|     31|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|     31|          }                                                                   \
  |  |  |  |  |  |  487|     33|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      2|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      2|          break
  ------------------
  314|    143|    FU32TLV(fuzz, TLV_TYPE_USE_SSL, CURLOPT_USE_SSL);
  ------------------
  |  |  519|     54|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 54, False: 15.4k]
  |  |  ------------------
  |  |  520|     54|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 9, False: 45]
  |  |  ------------------
  |  |  521|      9|            rc = 255;                                                         \
  |  |  522|      9|            goto EXIT_LABEL;                                                  \
  |  |  523|      9|          }                                                                   \
  |  |  524|     54|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     45|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     45|        {                                                                     \
  |  |  |  |  |  |  491|     45|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 44]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     45|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     45|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|     44|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|     44|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|     44|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     44|        {                                                                     \
  |  |  |  |  |  |  481|     44|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     44|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 40, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     44|          {                                                                   \
  |  |  |  |  |  |  484|     40|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|     40|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|     40|          }                                                                   \
  |  |  |  |  |  |  487|     44|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      4|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      4|          break
  ------------------
  315|    145|    FU32TLV(fuzz, TLV_TYPE_FTPSSLAUTH, CURLOPT_FTPSSLAUTH);
  ------------------
  |  |  519|     58|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 58, False: 15.4k]
  |  |  ------------------
  |  |  520|     58|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 14, False: 44]
  |  |  ------------------
  |  |  521|     14|            rc = 255;                                                         \
  |  |  522|     14|            goto EXIT_LABEL;                                                  \
  |  |  523|     14|          }                                                                   \
  |  |  524|     58|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     44|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     44|        {                                                                     \
  |  |  |  |  |  |  491|     44|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 43]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     44|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     44|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|     43|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|     43|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|     43|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     43|        {                                                                     \
  |  |  |  |  |  |  481|     43|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     43|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 38, False: 5]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     43|          {                                                                   \
  |  |  |  |  |  |  484|     38|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|     38|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|     38|          }                                                                   \
  |  |  |  |  |  |  487|     43|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      5|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      5|          break
  ------------------
  316|    127|    FU32TLV(fuzz, TLV_TYPE_FTP_FILEMETHOD, CURLOPT_FTP_FILEMETHOD);
  ------------------
  |  |  519|     46|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 46, False: 15.4k]
  |  |  ------------------
  |  |  520|     46|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 5, False: 41]
  |  |  ------------------
  |  |  521|      5|            rc = 255;                                                         \
  |  |  522|      5|            goto EXIT_LABEL;                                                  \
  |  |  523|      5|          }                                                                   \
  |  |  524|     46|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     41|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     41|        {                                                                     \
  |  |  |  |  |  |  491|     41|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 40]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     41|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     41|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|     40|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|     40|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|     40|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     40|        {                                                                     \
  |  |  |  |  |  |  481|     40|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     40|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 38, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     40|          {                                                                   \
  |  |  |  |  |  |  484|     38|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|     38|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|     38|          }                                                                   \
  |  |  |  |  |  |  487|     40|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      2|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      2|          break
  ------------------
  317|     20|    FU32TLV(fuzz, TLV_TYPE_SSH_AUTH_TYPES, CURLOPT_SSH_AUTH_TYPES);
  ------------------
  |  |  519|     16|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 16, False: 15.5k]
  |  |  ------------------
  |  |  520|     16|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 14, False: 2]
  |  |  ------------------
  |  |  521|     14|            rc = 255;                                                         \
  |  |  522|     14|            goto EXIT_LABEL;                                                  \
  |  |  523|     14|          }                                                                   \
  |  |  524|     16|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      2|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      2|        {                                                                     \
  |  |  |  |  |  |  491|      2|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 0, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      2|          {                                                                   \
  |  |  |  |  |  |  493|      0|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      0|          }                                                                   \
  |  |  |  |  |  |  496|      2|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|      2|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|      2|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|      2|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      2|        {                                                                     \
  |  |  |  |  |  |  481|      2|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      2|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      2|          {                                                                   \
  |  |  |  |  |  |  484|      2|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      2|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      2|          }                                                                   \
  |  |  |  |  |  |  487|      2|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      0|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      0|          break
  ------------------
  318|     97|    FU32TLV(fuzz, TLV_TYPE_POSTREDIR, CURLOPT_POSTREDIR);
  ------------------
  |  |  519|     34|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 34, False: 15.5k]
  |  |  ------------------
  |  |  520|     34|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 2, False: 32]
  |  |  ------------------
  |  |  521|      2|            rc = 255;                                                         \
  |  |  522|      2|            goto EXIT_LABEL;                                                  \
  |  |  523|      2|          }                                                                   \
  |  |  524|     34|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     32|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     32|        {                                                                     \
  |  |  |  |  |  |  491|     32|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 31]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     32|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     32|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|     31|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|     31|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|     31|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     31|        {                                                                     \
  |  |  |  |  |  |  481|     31|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     31|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 31]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     31|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     31|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     31|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|     31|          break
  ------------------
  319|      5|    FU32TLV(fuzz, TLV_TYPE_GSSAPI_DELEGATION, CURLOPT_GSSAPI_DELEGATION);
  ------------------
  |  |  519|      3|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 3, False: 15.5k]
  |  |  ------------------
  |  |  520|      3|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 2, False: 1]
  |  |  ------------------
  |  |  521|      2|            rc = 255;                                                         \
  |  |  522|      2|            goto EXIT_LABEL;                                                  \
  |  |  523|      2|          }                                                                   \
  |  |  524|      3|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      1|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      1|        {                                                                     \
  |  |  |  |  |  |  491|      1|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 0, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      1|          {                                                                   \
  |  |  |  |  |  |  493|      0|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      0|          }                                                                   \
  |  |  |  |  |  |  496|      1|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|      1|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|      1|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|      1|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      1|        {                                                                     \
  |  |  |  |  |  |  481|      1|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      1|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 1, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      1|          {                                                                   \
  |  |  |  |  |  |  484|      1|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      1|          }                                                                   \
  |  |  |  |  |  |  487|      1|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      0|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      0|          break
  ------------------
  320|     25|    FU32TLV(fuzz, TLV_TYPE_SSL_OPTIONS, CURLOPT_SSL_OPTIONS);
  ------------------
  |  |  519|     16|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 16, False: 15.5k]
  |  |  ------------------
  |  |  520|     16|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 11, False: 5]
  |  |  ------------------
  |  |  521|     11|            rc = 255;                                                         \
  |  |  522|     11|            goto EXIT_LABEL;                                                  \
  |  |  523|     11|          }                                                                   \
  |  |  524|     16|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      5|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      5|        {                                                                     \
  |  |  |  |  |  |  491|      5|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      5|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|      5|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|      4|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|      4|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|      4|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      4|        {                                                                     \
  |  |  |  |  |  |  481|      4|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      4|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      4|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      4|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      4|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      4|          break
  ------------------
  321|     11|    FU32TLV(fuzz, TLV_TYPE_HEADEROPT, CURLOPT_HEADEROPT);
  ------------------
  |  |  519|      6|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 6, False: 15.5k]
  |  |  ------------------
  |  |  520|      6|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 3, False: 3]
  |  |  ------------------
  |  |  521|      3|            rc = 255;                                                         \
  |  |  522|      3|            goto EXIT_LABEL;                                                  \
  |  |  523|      3|          }                                                                   \
  |  |  524|      6|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      3|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      3|        {                                                                     \
  |  |  |  |  |  |  491|      3|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      3|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|      3|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|      2|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|      2|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|      2|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      2|        {                                                                     \
  |  |  |  |  |  |  481|      2|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      2|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      2|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      2|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      2|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      2|          break
  ------------------
  322|     71|    FU32TLV(fuzz, TLV_TYPE_PROXY_SSLVERSION, CURLOPT_PROXY_SSLVERSION);
  ------------------
  |  |  519|     30|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 30, False: 15.5k]
  |  |  ------------------
  |  |  520|     30|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 9, False: 21]
  |  |  ------------------
  |  |  521|      9|            rc = 255;                                                         \
  |  |  522|      9|            goto EXIT_LABEL;                                                  \
  |  |  523|      9|          }                                                                   \
  |  |  524|     30|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     21|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     21|        {                                                                     \
  |  |  |  |  |  |  491|     21|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 20]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     21|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     21|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|     20|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|     20|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|     20|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     20|        {                                                                     \
  |  |  |  |  |  |  481|     20|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     20|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 15, False: 5]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     20|          {                                                                   \
  |  |  |  |  |  |  484|     15|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|     15|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|     15|          }                                                                   \
  |  |  |  |  |  |  487|     20|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      5|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      5|          break
  ------------------
  323|    114|    FU32TLV(fuzz, TLV_TYPE_RESUME_FROM_LARGE, CURLOPT_RESUME_FROM_LARGE);
  ------------------
  |  |  519|     43|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 43, False: 15.4k]
  |  |  ------------------
  |  |  520|     43|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 7, False: 36]
  |  |  ------------------
  |  |  521|      7|            rc = 255;                                                         \
  |  |  522|      7|            goto EXIT_LABEL;                                                  \
  |  |  523|      7|          }                                                                   \
  |  |  524|     43|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     36|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     36|        {                                                                     \
  |  |  |  |  |  |  491|     36|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 35]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     36|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     36|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|     35|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|     35|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|     35|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     35|        {                                                                     \
  |  |  |  |  |  |  481|     35|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     35|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 35]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     35|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     35|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     35|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|     35|          break
  ------------------
  324|     44|    FU32TLV(fuzz, TLV_TYPE_MAXFILESIZE_LARGE, CURLOPT_MAXFILESIZE_LARGE);
  ------------------
  |  |  519|     23|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 23, False: 15.5k]
  |  |  ------------------
  |  |  520|     23|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 12, False: 11]
  |  |  ------------------
  |  |  521|     12|            rc = 255;                                                         \
  |  |  522|     12|            goto EXIT_LABEL;                                                  \
  |  |  523|     12|          }                                                                   \
  |  |  524|     23|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     11|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     11|        {                                                                     \
  |  |  |  |  |  |  491|     11|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 10]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     11|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     11|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|     10|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|     10|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|     10|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     10|        {                                                                     \
  |  |  |  |  |  |  481|     10|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     10|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 10]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     10|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     10|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     10|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|     10|          break
  ------------------
  325|       |    // too easy for API misuse FU32TLV(fuzz, TLV_TYPE_POSTFIELDSIZE_LARGE, CURLOPT_POSTFIELDSIZE_LARGE);
  326|    164|    FU32TLV(fuzz, TLV_TYPE_MAX_SEND_SPEED_LARGE, CURLOPT_MAX_SEND_SPEED_LARGE);
  ------------------
  |  |  519|     57|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 57, False: 15.4k]
  |  |  ------------------
  |  |  520|     57|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 3, False: 54]
  |  |  ------------------
  |  |  521|      3|            rc = 255;                                                         \
  |  |  522|      3|            goto EXIT_LABEL;                                                  \
  |  |  523|      3|          }                                                                   \
  |  |  524|     57|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     54|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     54|        {                                                                     \
  |  |  |  |  |  |  491|     54|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 53]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     54|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     54|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|     53|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|     53|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|     53|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     53|        {                                                                     \
  |  |  |  |  |  |  481|     53|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     53|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 53]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     53|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     53|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     53|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|     53|          break
  ------------------
  327|    166|    FU32TLV(fuzz, TLV_TYPE_MAX_RECV_SPEED_LARGE, CURLOPT_MAX_RECV_SPEED_LARGE);
  ------------------
  |  |  519|     65|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 65, False: 15.4k]
  |  |  ------------------
  |  |  520|     65|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 14, False: 51]
  |  |  ------------------
  |  |  521|     14|            rc = 255;                                                         \
  |  |  522|     14|            goto EXIT_LABEL;                                                  \
  |  |  523|     14|          }                                                                   \
  |  |  524|     65|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     51|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     51|        {                                                                     \
  |  |  |  |  |  |  491|     51|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 50]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     51|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     51|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|     50|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|     50|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|     50|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     50|        {                                                                     \
  |  |  |  |  |  |  481|     50|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     50|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 50]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     50|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     50|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     50|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|     50|          break
  ------------------
  328|     21|    FU32TLV(fuzz, TLV_TYPE_TIMEVALUE_LARGE, CURLOPT_TIMEVALUE_LARGE);
  ------------------
  |  |  519|     14|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (519:9): [True: 14, False: 15.5k]
  |  |  ------------------
  |  |  520|     14|          if(tlv->length != 4) {                                              \
  |  |  ------------------
  |  |  |  Branch (520:14): [True: 10, False: 4]
  |  |  ------------------
  |  |  521|     10|            rc = 255;                                                         \
  |  |  522|     10|            goto EXIT_LABEL;                                                  \
  |  |  523|     10|          }                                                                   \
  |  |  524|     14|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      4|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      4|        {                                                                     \
  |  |  |  |  |  |  491|      4|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 3]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      4|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|      4|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  525|      3|          tmp_u32 = to_u32(tlv->value);                                       \
  |  |  526|      3|          FSET_OPTION(FUZZP, OPTNAME, tmp_u32);                               \
  |  |  ------------------
  |  |  |  |  499|      3|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      3|        {                                                                     \
  |  |  |  |  |  |  481|      3|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      3|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 3]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      3|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      3|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      3|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  527|      3|          break
  ------------------
  329|       |
  330|       |    /* Define a set of singleton TLVs - they can only have their value set once
  331|       |       and all follow the same pattern. */
  332|     63|    FSINGLETONTLV(fuzz, TLV_TYPE_URL, CURLOPT_URL);
  ------------------
  |  |  506|     32|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 32, False: 15.5k]
  |  |  ------------------
  |  |  507|     32|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     32|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     32|        {                                                                     \
  |  |  |  |  |  |  491|     32|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 31]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     32|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     32|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|     31|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|     31|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|     31|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     31|        {                                                                     \
  |  |  |  |  |  |  481|     31|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     31|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 31]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     31|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     31|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     31|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|     31|          break
  ------------------
  333|      9|    FSINGLETONTLV(fuzz, TLV_TYPE_DOH_URL, CURLOPT_DOH_URL);
  ------------------
  |  |  506|      5|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 5, False: 15.5k]
  |  |  ------------------
  |  |  507|      5|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      5|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      5|        {                                                                     \
  |  |  |  |  |  |  491|      5|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      5|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|      5|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|      4|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|      4|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|      4|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      4|        {                                                                     \
  |  |  |  |  |  |  481|      4|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      4|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      4|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      4|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      4|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|      4|          break
  ------------------
  334|     33|    FSINGLETONTLV(fuzz, TLV_TYPE_USERNAME, CURLOPT_USERNAME);
  ------------------
  |  |  506|     17|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 17, False: 15.5k]
  |  |  ------------------
  |  |  507|     17|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     17|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     17|        {                                                                     \
  |  |  |  |  |  |  491|     17|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 16]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     17|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     17|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|     16|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|     16|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|     16|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     16|        {                                                                     \
  |  |  |  |  |  |  481|     16|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     16|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 16]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     16|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     16|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     16|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|     16|          break
  ------------------
  335|     39|    FSINGLETONTLV(fuzz, TLV_TYPE_PASSWORD, CURLOPT_PASSWORD);
  ------------------
  |  |  506|     20|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 20, False: 15.5k]
  |  |  ------------------
  |  |  507|     20|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     20|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     20|        {                                                                     \
  |  |  |  |  |  |  491|     20|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 19]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     20|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     20|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|     19|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|     19|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|     19|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     19|        {                                                                     \
  |  |  |  |  |  |  481|     19|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     19|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 19]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     19|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     19|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     19|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|     19|          break
  ------------------
  336|     15|    FSINGLETONTLV(fuzz, TLV_TYPE_COOKIE, CURLOPT_COOKIE);
  ------------------
  |  |  506|      8|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 8, False: 15.5k]
  |  |  ------------------
  |  |  507|      8|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      8|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      8|        {                                                                     \
  |  |  |  |  |  |  491|      8|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 7]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      8|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|      8|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|      7|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|      7|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|      7|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      7|        {                                                                     \
  |  |  |  |  |  |  481|      7|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      7|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 7]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      7|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      7|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      7|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|      7|          break
  ------------------
  337|     29|    FSINGLETONTLV(fuzz, TLV_TYPE_RANGE, CURLOPT_RANGE);
  ------------------
  |  |  506|     15|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 15, False: 15.5k]
  |  |  ------------------
  |  |  507|     15|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     15|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     15|        {                                                                     \
  |  |  |  |  |  |  491|     15|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 14]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     15|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     15|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|     14|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|     14|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|     14|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     14|        {                                                                     \
  |  |  |  |  |  |  481|     14|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     14|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 14]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     14|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     14|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     14|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|     14|          break
  ------------------
  338|     13|    FSINGLETONTLV(fuzz, TLV_TYPE_CUSTOMREQUEST, CURLOPT_CUSTOMREQUEST);
  ------------------
  |  |  506|      7|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 7, False: 15.5k]
  |  |  ------------------
  |  |  507|      7|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      7|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      7|        {                                                                     \
  |  |  |  |  |  |  491|      7|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 6]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      7|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|      7|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|      6|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|      6|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|      6|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      6|        {                                                                     \
  |  |  |  |  |  |  481|      6|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      6|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 6]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      6|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      6|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      6|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|      6|          break
  ------------------
  339|     37|    FSINGLETONTLV(fuzz, TLV_TYPE_MAIL_FROM, CURLOPT_MAIL_FROM);
  ------------------
  |  |  506|     19|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 19, False: 15.5k]
  |  |  ------------------
  |  |  507|     19|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     19|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     19|        {                                                                     \
  |  |  |  |  |  |  491|     19|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 18]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     19|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     19|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|     18|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|     18|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|     18|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     18|        {                                                                     \
  |  |  |  |  |  |  481|     18|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     18|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 18]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     18|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     18|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     18|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|     18|          break
  ------------------
  340|     31|    FSINGLETONTLV(fuzz, TLV_TYPE_ACCEPTENCODING, CURLOPT_ACCEPT_ENCODING);
  ------------------
  |  |  506|     16|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 16, False: 15.5k]
  |  |  ------------------
  |  |  507|     16|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     16|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     16|        {                                                                     \
  |  |  |  |  |  |  491|     16|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 15]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     16|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     16|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|     15|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|     15|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|     15|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     15|        {                                                                     \
  |  |  |  |  |  |  481|     15|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     15|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 15]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     15|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     15|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     15|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|     15|          break
  ------------------
  341|     35|    FSINGLETONTLV(fuzz, TLV_TYPE_RTSP_SESSION_ID, CURLOPT_RTSP_SESSION_ID);
  ------------------
  |  |  506|     18|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 18, False: 15.5k]
  |  |  ------------------
  |  |  507|     18|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     18|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     18|        {                                                                     \
  |  |  |  |  |  |  491|     18|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 17]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     18|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     18|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|     17|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|     17|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|     17|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     17|        {                                                                     \
  |  |  |  |  |  |  481|     17|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     17|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 17]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     17|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     17|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     17|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|     17|          break
  ------------------
  342|     27|    FSINGLETONTLV(fuzz, TLV_TYPE_RTSP_STREAM_URI, CURLOPT_RTSP_STREAM_URI);
  ------------------
  |  |  506|     14|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 14, False: 15.5k]
  |  |  ------------------
  |  |  507|     14|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     14|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     14|        {                                                                     \
  |  |  |  |  |  |  491|     14|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 13]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     14|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     14|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|     13|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|     13|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|     13|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     13|        {                                                                     \
  |  |  |  |  |  |  481|     13|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     13|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 13]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     13|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     13|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     13|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|     13|          break
  ------------------
  343|     29|    FSINGLETONTLV(fuzz, TLV_TYPE_RTSP_TRANSPORT, CURLOPT_RTSP_TRANSPORT);
  ------------------
  |  |  506|     15|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 15, False: 15.5k]
  |  |  ------------------
  |  |  507|     15|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     15|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     15|        {                                                                     \
  |  |  |  |  |  |  491|     15|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 14]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     15|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     15|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|     14|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|     14|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|     14|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     14|        {                                                                     \
  |  |  |  |  |  |  481|     14|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     14|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 14]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     14|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     14|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     14|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|     14|          break
  ------------------
  344|     35|    FSINGLETONTLV(fuzz, TLV_TYPE_MAIL_AUTH, CURLOPT_MAIL_AUTH);
  ------------------
  |  |  506|     18|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 18, False: 15.5k]
  |  |  ------------------
  |  |  507|     18|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     18|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     18|        {                                                                     \
  |  |  |  |  |  |  491|     18|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 17]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     18|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     18|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|     17|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|     17|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|     17|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     17|        {                                                                     \
  |  |  |  |  |  |  481|     17|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     17|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 17]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     17|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     17|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     17|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|     17|          break
  ------------------
  345|     21|    FSINGLETONTLV(fuzz, TLV_TYPE_LOGIN_OPTIONS, CURLOPT_LOGIN_OPTIONS);
  ------------------
  |  |  506|     11|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 11, False: 15.5k]
  |  |  ------------------
  |  |  507|     11|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     11|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     11|        {                                                                     \
  |  |  |  |  |  |  491|     11|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 10]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     11|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     11|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|     10|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|     10|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|     10|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     10|        {                                                                     \
  |  |  |  |  |  |  481|     10|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     10|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 10]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     10|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     10|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     10|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|     10|          break
  ------------------
  346|     15|    FSINGLETONTLV(fuzz, TLV_TYPE_XOAUTH2_BEARER, CURLOPT_XOAUTH2_BEARER);
  ------------------
  |  |  506|      8|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 8, False: 15.5k]
  |  |  ------------------
  |  |  507|      8|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      8|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      8|        {                                                                     \
  |  |  |  |  |  |  491|      8|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 7]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      8|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|      8|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|      7|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|      7|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|      7|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      7|        {                                                                     \
  |  |  |  |  |  |  481|      7|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      7|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 7]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      7|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      7|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      7|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|      7|          break
  ------------------
  347|     39|    FSINGLETONTLV(fuzz, TLV_TYPE_USERPWD, CURLOPT_USERPWD);
  ------------------
  |  |  506|     20|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 20, False: 15.5k]
  |  |  ------------------
  |  |  507|     20|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     20|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     20|        {                                                                     \
  |  |  |  |  |  |  491|     20|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 19]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     20|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     20|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|     19|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|     19|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|     19|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     19|        {                                                                     \
  |  |  |  |  |  |  481|     19|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     19|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 19]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     19|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     19|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     19|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|     19|          break
  ------------------
  348|     15|    FSINGLETONTLV(fuzz, TLV_TYPE_USERAGENT, CURLOPT_USERAGENT);
  ------------------
  |  |  506|      8|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 8, False: 15.5k]
  |  |  ------------------
  |  |  507|      8|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      8|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      8|        {                                                                     \
  |  |  |  |  |  |  491|      8|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 7]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      8|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|      8|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|      7|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|      7|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|      7|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      7|        {                                                                     \
  |  |  |  |  |  |  481|      7|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      7|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 7]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      7|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      7|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      7|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|      7|          break
  ------------------
  349|      6|    FSINGLETONTLV(fuzz, TLV_TYPE_SSH_HOST_PUBLIC_KEY_SHA256, CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256);
  ------------------
  |  |  506|      3|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 3, False: 15.5k]
  |  |  ------------------
  |  |  507|      3|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      3|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      3|        {                                                                     \
  |  |  |  |  |  |  491|      3|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 0, False: 3]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      3|          {                                                                   \
  |  |  |  |  |  |  493|      0|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      0|          }                                                                   \
  |  |  |  |  |  |  496|      3|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|      3|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|      3|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|      3|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      3|        {                                                                     \
  |  |  |  |  |  |  481|      3|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      3|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 3, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      3|          {                                                                   \
  |  |  |  |  |  |  484|      3|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      3|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      3|          }                                                                   \
  |  |  |  |  |  |  487|      3|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      0|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|      0|          break
  ------------------
  350|     33|    FSINGLETONTLV(fuzz, TLV_TYPE_PROXY, CURLOPT_PROXY);
  ------------------
  |  |  506|     17|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 17, False: 15.5k]
  |  |  ------------------
  |  |  507|     17|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     17|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     17|        {                                                                     \
  |  |  |  |  |  |  491|     17|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 16]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     17|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     17|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|     16|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|     16|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|     16|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     16|        {                                                                     \
  |  |  |  |  |  |  481|     16|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     16|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 16]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     16|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     16|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     16|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|     16|          break
  ------------------
  351|    331|    FSINGLETONTLV(fuzz, TLV_TYPE_PROXYUSERPWD, CURLOPT_PROXYUSERPWD);
  ------------------
  |  |  506|    166|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 166, False: 15.3k]
  |  |  ------------------
  |  |  507|    166|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|    166|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|    166|        {                                                                     \
  |  |  |  |  |  |  491|    166|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 165]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|    166|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|    166|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|    165|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|    165|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|    165|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|    165|        {                                                                     \
  |  |  |  |  |  |  481|    165|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|    165|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 3, False: 162]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|    165|          {                                                                   \
  |  |  |  |  |  |  484|      3|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      3|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      3|          }                                                                   \
  |  |  |  |  |  |  487|    165|        }
  |  |  |  |  ------------------
  |  |  |  |  500|    162|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|    162|          break
  ------------------
  352|     27|    FSINGLETONTLV(fuzz, TLV_TYPE_REFERER, CURLOPT_REFERER);
  ------------------
  |  |  506|     14|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 14, False: 15.5k]
  |  |  ------------------
  |  |  507|     14|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     14|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     14|        {                                                                     \
  |  |  |  |  |  |  491|     14|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 13]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     14|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     14|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|     13|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|     13|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|     13|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     13|        {                                                                     \
  |  |  |  |  |  |  481|     13|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     13|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 13]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     13|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     13|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     13|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|     13|          break
  ------------------
  353|     15|    FSINGLETONTLV(fuzz, TLV_TYPE_FTPPORT, CURLOPT_FTPPORT);
  ------------------
  |  |  506|      8|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 8, False: 15.5k]
  |  |  ------------------
  |  |  507|      8|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      8|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      8|        {                                                                     \
  |  |  |  |  |  |  491|      8|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 7]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      8|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|      8|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|      7|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|      7|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|      7|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      7|        {                                                                     \
  |  |  |  |  |  |  481|      7|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      7|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 7]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      7|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      7|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      7|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|      7|          break
  ------------------
  354|     27|    FSINGLETONTLV(fuzz, TLV_TYPE_SSLCERT, CURLOPT_SSLCERT);
  ------------------
  |  |  506|     14|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 14, False: 15.5k]
  |  |  ------------------
  |  |  507|     14|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     14|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     14|        {                                                                     \
  |  |  |  |  |  |  491|     14|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 13]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     14|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     14|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|     13|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|     13|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|     13|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     13|        {                                                                     \
  |  |  |  |  |  |  481|     13|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     13|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 13]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     13|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     13|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     13|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|     13|          break
  ------------------
  355|     27|    FSINGLETONTLV(fuzz, TLV_TYPE_KEYPASSWD, CURLOPT_KEYPASSWD);
  ------------------
  |  |  506|     14|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 14, False: 15.5k]
  |  |  ------------------
  |  |  507|     14|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     14|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     14|        {                                                                     \
  |  |  |  |  |  |  491|     14|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 13]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     14|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     14|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|     13|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|     13|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|     13|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     13|        {                                                                     \
  |  |  |  |  |  |  481|     13|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     13|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 13]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     13|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     13|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     13|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|     13|          break
  ------------------
  356|    261|    FSINGLETONTLV(fuzz, TLV_TYPE_INTERFACE, CURLOPT_INTERFACE);
  ------------------
  |  |  506|    131|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 131, False: 15.4k]
  |  |  ------------------
  |  |  507|    131|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|    131|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|    131|        {                                                                     \
  |  |  |  |  |  |  491|    131|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 130]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|    131|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|    131|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|    130|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|    130|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|    130|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|    130|        {                                                                     \
  |  |  |  |  |  |  481|    130|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|    130|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 6, False: 124]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|    130|          {                                                                   \
  |  |  |  |  |  |  484|      6|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      6|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      6|          }                                                                   \
  |  |  |  |  |  |  487|    130|        }
  |  |  |  |  ------------------
  |  |  |  |  500|    124|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|    124|          break
  ------------------
  357|      4|    FSINGLETONTLV(fuzz, TLV_TYPE_KRBLEVEL, CURLOPT_KRBLEVEL);
  ------------------
  |  |  506|      2|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 2, False: 15.5k]
  |  |  ------------------
  |  |  507|      2|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      2|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      2|        {                                                                     \
  |  |  |  |  |  |  491|      2|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 0, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      2|          {                                                                   \
  |  |  |  |  |  |  493|      0|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      0|          }                                                                   \
  |  |  |  |  |  |  496|      2|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|      2|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|      2|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|      2|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      2|        {                                                                     \
  |  |  |  |  |  |  481|      2|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      2|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      2|          {                                                                   \
  |  |  |  |  |  |  484|      2|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      2|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      2|          }                                                                   \
  |  |  |  |  |  |  487|      2|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      0|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|      0|          break
  ------------------
  358|     27|    FSINGLETONTLV(fuzz, TLV_TYPE_CAINFO, CURLOPT_CAINFO);
  ------------------
  |  |  506|     14|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 14, False: 15.5k]
  |  |  ------------------
  |  |  507|     14|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     14|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     14|        {                                                                     \
  |  |  |  |  |  |  491|     14|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 13]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     14|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     14|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|     13|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|     13|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|     13|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     13|        {                                                                     \
  |  |  |  |  |  |  481|     13|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     13|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 13]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     13|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     13|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     13|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|     13|          break
  ------------------
  359|     29|    FSINGLETONTLV(fuzz, TLV_TYPE_SSL_CIPHER_LIST, CURLOPT_SSL_CIPHER_LIST);
  ------------------
  |  |  506|     15|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 15, False: 15.5k]
  |  |  ------------------
  |  |  507|     15|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     15|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     15|        {                                                                     \
  |  |  |  |  |  |  491|     15|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 14]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     15|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     15|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|     14|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|     14|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|     14|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     14|        {                                                                     \
  |  |  |  |  |  |  481|     14|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     14|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 14]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     14|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     14|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     14|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|     14|          break
  ------------------
  360|     19|    FSINGLETONTLV(fuzz, TLV_TYPE_SSLCERTTYPE, CURLOPT_SSLCERTTYPE);
  ------------------
  |  |  506|     10|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 10, False: 15.5k]
  |  |  ------------------
  |  |  507|     10|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     10|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     10|        {                                                                     \
  |  |  |  |  |  |  491|     10|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 9]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     10|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     10|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|      9|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|      9|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|      9|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      9|        {                                                                     \
  |  |  |  |  |  |  481|      9|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      9|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 9]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      9|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      9|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      9|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|      9|          break
  ------------------
  361|     12|    FSINGLETONTLV(fuzz, TLV_TYPE_SSLKEY, CURLOPT_SSLKEY);
  ------------------
  |  |  506|      7|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 7, False: 15.5k]
  |  |  ------------------
  |  |  507|      7|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      7|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      7|        {                                                                     \
  |  |  |  |  |  |  491|      7|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 2, False: 5]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      7|          {                                                                   \
  |  |  |  |  |  |  493|      2|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      2|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      2|          }                                                                   \
  |  |  |  |  |  |  496|      7|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|      5|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|      5|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|      5|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      5|        {                                                                     \
  |  |  |  |  |  |  481|      5|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      5|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 5]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      5|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      5|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      5|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|      5|          break
  ------------------
  362|      5|    FSINGLETONTLV(fuzz, TLV_TYPE_SSLKEYTYPE, CURLOPT_SSLKEYTYPE);
  ------------------
  |  |  506|      3|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 3, False: 15.5k]
  |  |  ------------------
  |  |  507|      3|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      3|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      3|        {                                                                     \
  |  |  |  |  |  |  491|      3|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      3|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|      3|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|      2|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|      2|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|      2|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      2|        {                                                                     \
  |  |  |  |  |  |  481|      2|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      2|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      2|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      2|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      2|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|      2|          break
  ------------------
  363|    229|    FSINGLETONTLV(fuzz, TLV_TYPE_SSLENGINE, CURLOPT_SSLENGINE);
  ------------------
  |  |  506|    115|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 115, False: 15.4k]
  |  |  ------------------
  |  |  507|    115|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|    115|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|    115|        {                                                                     \
  |  |  |  |  |  |  491|    115|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 114]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|    115|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|    115|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|    114|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|    114|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|    114|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|    114|        {                                                                     \
  |  |  |  |  |  |  481|    114|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|    114|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 107, False: 7]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|    114|          {                                                                   \
  |  |  |  |  |  |  484|    107|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|    107|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|    107|          }                                                                   \
  |  |  |  |  |  |  487|    114|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      7|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|      7|          break
  ------------------
  364|     11|    FSINGLETONTLV(fuzz, TLV_TYPE_CAPATH, CURLOPT_CAPATH);
  ------------------
  |  |  506|      6|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 6, False: 15.5k]
  |  |  ------------------
  |  |  507|      6|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      6|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      6|        {                                                                     \
  |  |  |  |  |  |  491|      6|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 5]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      6|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|      6|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|      5|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|      5|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|      5|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      5|        {                                                                     \
  |  |  |  |  |  |  481|      5|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      5|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 5]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      5|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      5|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      5|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|      5|          break
  ------------------
  365|     23|    FSINGLETONTLV(fuzz, TLV_TYPE_FTP_ACCOUNT, CURLOPT_FTP_ACCOUNT);
  ------------------
  |  |  506|     12|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 12, False: 15.5k]
  |  |  ------------------
  |  |  507|     12|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     12|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     12|        {                                                                     \
  |  |  |  |  |  |  491|     12|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 11]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     12|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     12|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|     11|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|     11|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|     11|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     11|        {                                                                     \
  |  |  |  |  |  |  481|     11|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     11|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 11]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     11|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     11|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     11|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|     11|          break
  ------------------
  366|  3.88k|    FSINGLETONTLV(fuzz, TLV_TYPE_COOKIELIST, CURLOPT_COOKIELIST);
  ------------------
  |  |  506|  1.94k|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 1.94k, False: 13.5k]
  |  |  ------------------
  |  |  507|  1.94k|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|  1.94k|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|  1.94k|        {                                                                     \
  |  |  |  |  |  |  491|  1.94k|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 1.94k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|  1.94k|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|  1.94k|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|  1.94k|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|  1.94k|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|  1.94k|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|  1.94k|        {                                                                     \
  |  |  |  |  |  |  481|  1.94k|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|  1.94k|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 1.94k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|  1.94k|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|  1.94k|        }
  |  |  |  |  ------------------
  |  |  |  |  500|  1.94k|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|  1.94k|          break
  ------------------
  367|     21|    FSINGLETONTLV(fuzz, TLV_TYPE_FTP_ALTERNATIVE_TO_USER, CURLOPT_FTP_ALTERNATIVE_TO_USER);
  ------------------
  |  |  506|     11|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 11, False: 15.5k]
  |  |  ------------------
  |  |  507|     11|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     11|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     11|        {                                                                     \
  |  |  |  |  |  |  491|     11|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 10]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     11|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     11|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|     10|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|     10|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|     10|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     10|        {                                                                     \
  |  |  |  |  |  |  481|     10|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     10|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 10]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     10|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     10|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     10|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|     10|          break
  ------------------
  368|      2|    FSINGLETONTLV(fuzz, TLV_TYPE_SSH_PUBLIC_KEYFILE, CURLOPT_SSH_PUBLIC_KEYFILE);
  ------------------
  |  |  506|      1|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 1, False: 15.5k]
  |  |  ------------------
  |  |  507|      1|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      1|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      1|        {                                                                     \
  |  |  |  |  |  |  491|      1|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 0, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      1|          {                                                                   \
  |  |  |  |  |  |  493|      0|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      0|          }                                                                   \
  |  |  |  |  |  |  496|      1|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|      1|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|      1|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|      1|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      1|        {                                                                     \
  |  |  |  |  |  |  481|      1|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      1|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 1, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      1|          {                                                                   \
  |  |  |  |  |  |  484|      1|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      1|          }                                                                   \
  |  |  |  |  |  |  487|      1|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      0|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|      0|          break
  ------------------
  369|      2|    FSINGLETONTLV(fuzz, TLV_TYPE_SSH_PRIVATE_KEYFILE, CURLOPT_SSH_PRIVATE_KEYFILE);
  ------------------
  |  |  506|      1|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 1, False: 15.5k]
  |  |  ------------------
  |  |  507|      1|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      1|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      1|        {                                                                     \
  |  |  |  |  |  |  491|      1|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 0, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      1|          {                                                                   \
  |  |  |  |  |  |  493|      0|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      0|          }                                                                   \
  |  |  |  |  |  |  496|      1|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|      1|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|      1|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|      1|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      1|        {                                                                     \
  |  |  |  |  |  |  481|      1|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      1|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 1, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      1|          {                                                                   \
  |  |  |  |  |  |  484|      1|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      1|          }                                                                   \
  |  |  |  |  |  |  487|      1|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      0|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|      0|          break
  ------------------
  370|      2|    FSINGLETONTLV(fuzz, TLV_TYPE_SSH_HOST_PUBLIC_KEY_MD5, CURLOPT_SSH_HOST_PUBLIC_KEY_MD5);
  ------------------
  |  |  506|      1|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 1, False: 15.5k]
  |  |  ------------------
  |  |  507|      1|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      1|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      1|        {                                                                     \
  |  |  |  |  |  |  491|      1|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 0, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      1|          {                                                                   \
  |  |  |  |  |  |  493|      0|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      0|          }                                                                   \
  |  |  |  |  |  |  496|      1|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|      1|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|      1|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|      1|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      1|        {                                                                     \
  |  |  |  |  |  |  481|      1|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      1|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 1, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      1|          {                                                                   \
  |  |  |  |  |  |  484|      1|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      1|          }                                                                   \
  |  |  |  |  |  |  487|      1|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      0|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|      0|          break
  ------------------
  371|     31|    FSINGLETONTLV(fuzz, TLV_TYPE_ISSUERCERT, CURLOPT_ISSUERCERT);
  ------------------
  |  |  506|     16|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 16, False: 15.5k]
  |  |  ------------------
  |  |  507|     16|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     16|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     16|        {                                                                     \
  |  |  |  |  |  |  491|     16|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 15]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     16|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     16|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|     15|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|     15|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|     15|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     15|        {                                                                     \
  |  |  |  |  |  |  481|     15|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     15|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 15]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     15|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     15|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     15|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|     15|          break
  ------------------
  372|     11|    FSINGLETONTLV(fuzz, TLV_TYPE_PROXYUSERNAME, CURLOPT_PROXYUSERNAME);
  ------------------
  |  |  506|      6|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 6, False: 15.5k]
  |  |  ------------------
  |  |  507|      6|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      6|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      6|        {                                                                     \
  |  |  |  |  |  |  491|      6|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 5]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      6|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|      6|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|      5|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|      5|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|      5|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      5|        {                                                                     \
  |  |  |  |  |  |  481|      5|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      5|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 5]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      5|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      5|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      5|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|      5|          break
  ------------------
  373|     29|    FSINGLETONTLV(fuzz, TLV_TYPE_PROXYPASSWORD, CURLOPT_PROXYPASSWORD);
  ------------------
  |  |  506|     15|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 15, False: 15.5k]
  |  |  ------------------
  |  |  507|     15|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     15|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     15|        {                                                                     \
  |  |  |  |  |  |  491|     15|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 14]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     15|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     15|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|     14|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|     14|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|     14|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     14|        {                                                                     \
  |  |  |  |  |  |  481|     14|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     14|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 14]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     14|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     14|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     14|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|     14|          break
  ------------------
  374|     27|    FSINGLETONTLV(fuzz, TLV_TYPE_NOPROXY, CURLOPT_NOPROXY);
  ------------------
  |  |  506|     14|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 14, False: 15.5k]
  |  |  ------------------
  |  |  507|     14|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     14|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     14|        {                                                                     \
  |  |  |  |  |  |  491|     14|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 13]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     14|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     14|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|     13|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|     13|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|     13|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     13|        {                                                                     \
  |  |  |  |  |  |  481|     13|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     13|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 13]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     13|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     13|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     13|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|     13|          break
  ------------------
  375|      2|    FSINGLETONTLV(fuzz, TLV_TYPE_SSH_KNOWNHOSTS, CURLOPT_SSH_KNOWNHOSTS);
  ------------------
  |  |  506|      1|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 1, False: 15.5k]
  |  |  ------------------
  |  |  507|      1|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      1|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      1|        {                                                                     \
  |  |  |  |  |  |  491|      1|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 0, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      1|          {                                                                   \
  |  |  |  |  |  |  493|      0|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      0|          }                                                                   \
  |  |  |  |  |  |  496|      1|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|      1|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|      1|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|      1|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      1|        {                                                                     \
  |  |  |  |  |  |  481|      1|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      1|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 1, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      1|          {                                                                   \
  |  |  |  |  |  |  484|      1|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      1|          }                                                                   \
  |  |  |  |  |  |  487|      1|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      0|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|      0|          break
  ------------------
  376|      2|    FSINGLETONTLV(fuzz, TLV_TYPE_TLSAUTH_USERNAME, CURLOPT_TLSAUTH_USERNAME);
  ------------------
  |  |  506|      1|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 1, False: 15.5k]
  |  |  ------------------
  |  |  507|      1|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      1|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      1|        {                                                                     \
  |  |  |  |  |  |  491|      1|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 0, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      1|          {                                                                   \
  |  |  |  |  |  |  493|      0|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      0|          }                                                                   \
  |  |  |  |  |  |  496|      1|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|      1|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|      1|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|      1|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      1|        {                                                                     \
  |  |  |  |  |  |  481|      1|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      1|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 1, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      1|          {                                                                   \
  |  |  |  |  |  |  484|      1|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      1|          }                                                                   \
  |  |  |  |  |  |  487|      1|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      0|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|      0|          break
  ------------------
  377|      2|    FSINGLETONTLV(fuzz, TLV_TYPE_TLSAUTH_PASSWORD, CURLOPT_TLSAUTH_PASSWORD);
  ------------------
  |  |  506|      1|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 1, False: 15.5k]
  |  |  ------------------
  |  |  507|      1|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      1|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      1|        {                                                                     \
  |  |  |  |  |  |  491|      1|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 0, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      1|          {                                                                   \
  |  |  |  |  |  |  493|      0|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      0|          }                                                                   \
  |  |  |  |  |  |  496|      1|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|      1|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|      1|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|      1|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      1|        {                                                                     \
  |  |  |  |  |  |  481|      1|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      1|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 1, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      1|          {                                                                   \
  |  |  |  |  |  |  484|      1|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      1|          }                                                                   \
  |  |  |  |  |  |  487|      1|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      0|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|      0|          break
  ------------------
  378|      6|    FSINGLETONTLV(fuzz, TLV_TYPE_TLSAUTH_TYPE, CURLOPT_TLSAUTH_TYPE);
  ------------------
  |  |  506|      3|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 3, False: 15.5k]
  |  |  ------------------
  |  |  507|      3|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      3|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      3|        {                                                                     \
  |  |  |  |  |  |  491|      3|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 0, False: 3]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      3|          {                                                                   \
  |  |  |  |  |  |  493|      0|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      0|          }                                                                   \
  |  |  |  |  |  |  496|      3|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|      3|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|      3|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|      3|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      3|        {                                                                     \
  |  |  |  |  |  |  481|      3|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      3|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 3, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      3|          {                                                                   \
  |  |  |  |  |  |  484|      3|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      3|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      3|          }                                                                   \
  |  |  |  |  |  |  487|      3|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      0|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|      0|          break
  ------------------
  379|      6|    FSINGLETONTLV(fuzz, TLV_TYPE_DNS_SERVERS, CURLOPT_DNS_SERVERS);
  ------------------
  |  |  506|      3|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 3, False: 15.5k]
  |  |  ------------------
  |  |  507|      3|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      3|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      3|        {                                                                     \
  |  |  |  |  |  |  491|      3|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 0, False: 3]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      3|          {                                                                   \
  |  |  |  |  |  |  493|      0|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      0|          }                                                                   \
  |  |  |  |  |  |  496|      3|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|      3|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|      3|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|      3|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      3|        {                                                                     \
  |  |  |  |  |  |  481|      3|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      3|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 3, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      3|          {                                                                   \
  |  |  |  |  |  |  484|      3|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      3|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      3|          }                                                                   \
  |  |  |  |  |  |  487|      3|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      0|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|      0|          break
  ------------------
  380|      2|    FSINGLETONTLV(fuzz, TLV_TYPE_DNS_INTERFACE, CURLOPT_DNS_INTERFACE);
  ------------------
  |  |  506|      1|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 1, False: 15.5k]
  |  |  ------------------
  |  |  507|      1|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      1|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      1|        {                                                                     \
  |  |  |  |  |  |  491|      1|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 0, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      1|          {                                                                   \
  |  |  |  |  |  |  493|      0|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      0|          }                                                                   \
  |  |  |  |  |  |  496|      1|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|      1|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|      1|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|      1|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      1|        {                                                                     \
  |  |  |  |  |  |  481|      1|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      1|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 1, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      1|          {                                                                   \
  |  |  |  |  |  |  484|      1|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      1|          }                                                                   \
  |  |  |  |  |  |  487|      1|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      0|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|      0|          break
  ------------------
  381|      2|    FSINGLETONTLV(fuzz, TLV_TYPE_DNS_LOCAL_IP4, CURLOPT_DNS_LOCAL_IP4);
  ------------------
  |  |  506|      1|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 1, False: 15.5k]
  |  |  ------------------
  |  |  507|      1|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      1|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      1|        {                                                                     \
  |  |  |  |  |  |  491|      1|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 0, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      1|          {                                                                   \
  |  |  |  |  |  |  493|      0|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      0|          }                                                                   \
  |  |  |  |  |  |  496|      1|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|      1|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|      1|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|      1|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      1|        {                                                                     \
  |  |  |  |  |  |  481|      1|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      1|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 1, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      1|          {                                                                   \
  |  |  |  |  |  |  484|      1|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      1|          }                                                                   \
  |  |  |  |  |  |  487|      1|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      0|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|      0|          break
  ------------------
  382|      2|    FSINGLETONTLV(fuzz, TLV_TYPE_DNS_LOCAL_IP6, CURLOPT_DNS_LOCAL_IP6);
  ------------------
  |  |  506|      1|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 1, False: 15.5k]
  |  |  ------------------
  |  |  507|      1|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      1|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      1|        {                                                                     \
  |  |  |  |  |  |  491|      1|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 0, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      1|          {                                                                   \
  |  |  |  |  |  |  493|      0|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      0|          }                                                                   \
  |  |  |  |  |  |  496|      1|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|      1|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|      1|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|      1|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      1|        {                                                                     \
  |  |  |  |  |  |  481|      1|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      1|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 1, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      1|          {                                                                   \
  |  |  |  |  |  |  484|      1|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      1|          }                                                                   \
  |  |  |  |  |  |  487|      1|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      0|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|      0|          break
  ------------------
  383|     15|    FSINGLETONTLV(fuzz, TLV_TYPE_PINNEDPUBLICKEY, CURLOPT_PINNEDPUBLICKEY);
  ------------------
  |  |  506|      8|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 8, False: 15.5k]
  |  |  ------------------
  |  |  507|      8|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      8|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      8|        {                                                                     \
  |  |  |  |  |  |  491|      8|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 7]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      8|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|      8|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|      7|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|      7|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|      7|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      7|        {                                                                     \
  |  |  |  |  |  |  481|      7|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      7|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 7]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      7|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      7|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      7|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|      7|          break
  ------------------
  384|      7|    FSINGLETONTLV(fuzz, TLV_TYPE_UNIX_SOCKET_PATH, CURLOPT_UNIX_SOCKET_PATH);
  ------------------
  |  |  506|      4|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 4, False: 15.5k]
  |  |  ------------------
  |  |  507|      4|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      4|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      4|        {                                                                     \
  |  |  |  |  |  |  491|      4|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 3]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      4|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|      4|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|      3|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|      3|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|      3|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      3|        {                                                                     \
  |  |  |  |  |  |  481|      3|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      3|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 3]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      3|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      3|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      3|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|      3|          break
  ------------------
  385|     21|    FSINGLETONTLV(fuzz, TLV_TYPE_PROXY_SERVICE_NAME, CURLOPT_PROXY_SERVICE_NAME);
  ------------------
  |  |  506|     11|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 11, False: 15.5k]
  |  |  ------------------
  |  |  507|     11|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     11|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     11|        {                                                                     \
  |  |  |  |  |  |  491|     11|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 10]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     11|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     11|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|     10|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|     10|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|     10|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     10|        {                                                                     \
  |  |  |  |  |  |  481|     10|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     10|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 10]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     10|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     10|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     10|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|     10|          break
  ------------------
  386|     31|    FSINGLETONTLV(fuzz, TLV_TYPE_SERVICE_NAME, CURLOPT_SERVICE_NAME);
  ------------------
  |  |  506|     16|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 16, False: 15.5k]
  |  |  ------------------
  |  |  507|     16|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     16|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     16|        {                                                                     \
  |  |  |  |  |  |  491|     16|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 15]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     16|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     16|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|     15|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|     15|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|     15|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     15|        {                                                                     \
  |  |  |  |  |  |  481|     15|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     15|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 15]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     15|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     15|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     15|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|     15|          break
  ------------------
  387|     25|    FSINGLETONTLV(fuzz, TLV_TYPE_DEFAULT_PROTOCOL, CURLOPT_DEFAULT_PROTOCOL);
  ------------------
  |  |  506|     13|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 13, False: 15.5k]
  |  |  ------------------
  |  |  507|     13|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     13|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     13|        {                                                                     \
  |  |  |  |  |  |  491|     13|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 12]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     13|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     13|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|     12|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|     12|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|     12|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     12|        {                                                                     \
  |  |  |  |  |  |  481|     12|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     12|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 12]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     12|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     12|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     12|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|     12|          break
  ------------------
  388|     27|    FSINGLETONTLV(fuzz, TLV_TYPE_PROXY_CAINFO, CURLOPT_PROXY_CAINFO);
  ------------------
  |  |  506|     14|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 14, False: 15.5k]
  |  |  ------------------
  |  |  507|     14|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     14|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     14|        {                                                                     \
  |  |  |  |  |  |  491|     14|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 13]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     14|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     14|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|     13|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|     13|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|     13|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     13|        {                                                                     \
  |  |  |  |  |  |  481|     13|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     13|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 13]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     13|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     13|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     13|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|     13|          break
  ------------------
  389|     27|    FSINGLETONTLV(fuzz, TLV_TYPE_PROXY_CAPATH, CURLOPT_PROXY_CAPATH);
  ------------------
  |  |  506|     14|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 14, False: 15.5k]
  |  |  ------------------
  |  |  507|     14|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     14|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     14|        {                                                                     \
  |  |  |  |  |  |  491|     14|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 13]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     14|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     14|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|     13|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|     13|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|     13|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     13|        {                                                                     \
  |  |  |  |  |  |  481|     13|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     13|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 13]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     13|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     13|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     13|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|     13|          break
  ------------------
  390|      2|    FSINGLETONTLV(fuzz, TLV_TYPE_PROXY_TLSAUTH_USERNAME, CURLOPT_PROXY_TLSAUTH_USERNAME);
  ------------------
  |  |  506|      1|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 1, False: 15.5k]
  |  |  ------------------
  |  |  507|      1|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      1|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      1|        {                                                                     \
  |  |  |  |  |  |  491|      1|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 0, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      1|          {                                                                   \
  |  |  |  |  |  |  493|      0|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      0|          }                                                                   \
  |  |  |  |  |  |  496|      1|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|      1|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|      1|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|      1|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      1|        {                                                                     \
  |  |  |  |  |  |  481|      1|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      1|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 1, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      1|          {                                                                   \
  |  |  |  |  |  |  484|      1|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      1|          }                                                                   \
  |  |  |  |  |  |  487|      1|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      0|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|      0|          break
  ------------------
  391|      2|    FSINGLETONTLV(fuzz, TLV_TYPE_PROXY_TLSAUTH_PASSWORD, CURLOPT_PROXY_TLSAUTH_PASSWORD);
  ------------------
  |  |  506|      1|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 1, False: 15.5k]
  |  |  ------------------
  |  |  507|      1|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      1|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      1|        {                                                                     \
  |  |  |  |  |  |  491|      1|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 0, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      1|          {                                                                   \
  |  |  |  |  |  |  493|      0|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      0|          }                                                                   \
  |  |  |  |  |  |  496|      1|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|      1|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|      1|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|      1|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      1|        {                                                                     \
  |  |  |  |  |  |  481|      1|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      1|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 1, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      1|          {                                                                   \
  |  |  |  |  |  |  484|      1|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      1|          }                                                                   \
  |  |  |  |  |  |  487|      1|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      0|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|      0|          break
  ------------------
  392|      4|    FSINGLETONTLV(fuzz, TLV_TYPE_PROXY_TLSAUTH_TYPE, CURLOPT_PROXY_TLSAUTH_TYPE);
  ------------------
  |  |  506|      2|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 2, False: 15.5k]
  |  |  ------------------
  |  |  507|      2|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      2|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      2|        {                                                                     \
  |  |  |  |  |  |  491|      2|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 0, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      2|          {                                                                   \
  |  |  |  |  |  |  493|      0|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      0|          }                                                                   \
  |  |  |  |  |  |  496|      2|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|      2|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|      2|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|      2|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      2|        {                                                                     \
  |  |  |  |  |  |  481|      2|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      2|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      2|          {                                                                   \
  |  |  |  |  |  |  484|      2|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      2|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      2|          }                                                                   \
  |  |  |  |  |  |  487|      2|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      0|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|      0|          break
  ------------------
  393|     29|    FSINGLETONTLV(fuzz, TLV_TYPE_PROXY_SSLCERT, CURLOPT_PROXY_SSLCERT);
  ------------------
  |  |  506|     15|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 15, False: 15.5k]
  |  |  ------------------
  |  |  507|     15|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     15|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     15|        {                                                                     \
  |  |  |  |  |  |  491|     15|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 14]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     15|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     15|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|     14|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|     14|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|     14|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     14|        {                                                                     \
  |  |  |  |  |  |  481|     14|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     14|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 14]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     14|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     14|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     14|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|     14|          break
  ------------------
  394|     13|    FSINGLETONTLV(fuzz, TLV_TYPE_PROXY_SSLCERTTYPE, CURLOPT_PROXY_SSLCERTTYPE);
  ------------------
  |  |  506|      7|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 7, False: 15.5k]
  |  |  ------------------
  |  |  507|      7|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      7|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      7|        {                                                                     \
  |  |  |  |  |  |  491|      7|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 6]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      7|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|      7|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|      6|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|      6|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|      6|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      6|        {                                                                     \
  |  |  |  |  |  |  481|      6|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      6|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 6]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      6|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      6|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      6|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|      6|          break
  ------------------
  395|     31|    FSINGLETONTLV(fuzz, TLV_TYPE_PROXY_SSLKEY, CURLOPT_PROXY_SSLKEY);
  ------------------
  |  |  506|     16|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 16, False: 15.5k]
  |  |  ------------------
  |  |  507|     16|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     16|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     16|        {                                                                     \
  |  |  |  |  |  |  491|     16|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 15]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     16|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     16|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|     15|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|     15|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|     15|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     15|        {                                                                     \
  |  |  |  |  |  |  481|     15|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     15|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 15]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     15|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     15|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     15|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|     15|          break
  ------------------
  396|     31|    FSINGLETONTLV(fuzz, TLV_TYPE_PROXY_SSLKEYTYPE, CURLOPT_PROXY_SSLKEYTYPE);
  ------------------
  |  |  506|     16|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 16, False: 15.5k]
  |  |  ------------------
  |  |  507|     16|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     16|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     16|        {                                                                     \
  |  |  |  |  |  |  491|     16|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 15]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     16|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     16|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|     15|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|     15|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|     15|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     15|        {                                                                     \
  |  |  |  |  |  |  481|     15|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     15|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 15]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     15|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     15|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     15|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|     15|          break
  ------------------
  397|     23|    FSINGLETONTLV(fuzz, TLV_TYPE_PROXY_KEYPASSWD, CURLOPT_PROXY_KEYPASSWD);
  ------------------
  |  |  506|     12|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 12, False: 15.5k]
  |  |  ------------------
  |  |  507|     12|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     12|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     12|        {                                                                     \
  |  |  |  |  |  |  491|     12|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 11]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     12|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     12|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|     11|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|     11|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|     11|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     11|        {                                                                     \
  |  |  |  |  |  |  481|     11|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     11|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 11]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     11|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     11|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     11|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|     11|          break
  ------------------
  398|     23|    FSINGLETONTLV(fuzz, TLV_TYPE_PROXY_SSL_CIPHER_LIST, CURLOPT_PROXY_SSL_CIPHER_LIST);
  ------------------
  |  |  506|     12|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 12, False: 15.5k]
  |  |  ------------------
  |  |  507|     12|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     12|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     12|        {                                                                     \
  |  |  |  |  |  |  491|     12|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 11]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     12|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     12|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|     11|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|     11|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|     11|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     11|        {                                                                     \
  |  |  |  |  |  |  481|     11|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     11|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 11]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     11|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     11|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     11|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|     11|          break
  ------------------
  399|     27|    FSINGLETONTLV(fuzz, TLV_TYPE_PROXY_CRLFILE, CURLOPT_PROXY_CRLFILE);
  ------------------
  |  |  506|     14|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 14, False: 15.5k]
  |  |  ------------------
  |  |  507|     14|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     14|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     14|        {                                                                     \
  |  |  |  |  |  |  491|     14|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 13]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     14|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     14|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|     13|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|     13|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|     13|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     13|        {                                                                     \
  |  |  |  |  |  |  481|     13|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     13|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 13]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     13|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     13|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     13|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|     13|          break
  ------------------
  400|     31|    FSINGLETONTLV(fuzz, TLV_TYPE_PRE_PROXY, CURLOPT_PRE_PROXY);
  ------------------
  |  |  506|     16|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 16, False: 15.5k]
  |  |  ------------------
  |  |  507|     16|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     16|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     16|        {                                                                     \
  |  |  |  |  |  |  491|     16|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 15]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     16|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     16|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|     15|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|     15|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|     15|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     15|        {                                                                     \
  |  |  |  |  |  |  481|     15|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     15|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 15]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     15|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     15|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     15|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|     15|          break
  ------------------
  401|     29|    FSINGLETONTLV(fuzz, TLV_TYPE_PROXY_PINNEDPUBLICKEY, CURLOPT_PROXY_PINNEDPUBLICKEY);
  ------------------
  |  |  506|     15|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 15, False: 15.5k]
  |  |  ------------------
  |  |  507|     15|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     15|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     15|        {                                                                     \
  |  |  |  |  |  |  491|     15|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 14]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     15|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     15|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|     14|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|     14|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|     14|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     14|        {                                                                     \
  |  |  |  |  |  |  481|     14|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     14|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 14]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     14|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     14|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     14|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|     14|          break
  ------------------
  402|     25|    FSINGLETONTLV(fuzz, TLV_TYPE_ABSTRACT_UNIX_SOCKET, CURLOPT_ABSTRACT_UNIX_SOCKET);
  ------------------
  |  |  506|     13|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 13, False: 15.5k]
  |  |  ------------------
  |  |  507|     13|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     13|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     13|        {                                                                     \
  |  |  |  |  |  |  491|     13|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 12]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     13|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     13|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|     12|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|     12|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|     12|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     12|        {                                                                     \
  |  |  |  |  |  |  481|     12|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     12|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 12]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     12|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     12|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     12|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|     12|          break
  ------------------
  403|     29|    FSINGLETONTLV(fuzz, TLV_TYPE_REQUEST_TARGET, CURLOPT_REQUEST_TARGET);
  ------------------
  |  |  506|     15|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 15, False: 15.5k]
  |  |  ------------------
  |  |  507|     15|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     15|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     15|        {                                                                     \
  |  |  |  |  |  |  491|     15|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 14]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     15|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     15|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|     14|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|     14|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|     14|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     14|        {                                                                     \
  |  |  |  |  |  |  481|     14|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     14|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 14]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     14|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     14|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     14|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|     14|          break
  ------------------
  404|     11|    FSINGLETONTLV(fuzz, TLV_TYPE_TLS13_CIPHERS, CURLOPT_TLS13_CIPHERS);
  ------------------
  |  |  506|      6|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 6, False: 15.5k]
  |  |  ------------------
  |  |  507|      6|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      6|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      6|        {                                                                     \
  |  |  |  |  |  |  491|      6|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 5]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      6|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|      6|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|      5|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|      5|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|      5|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      5|        {                                                                     \
  |  |  |  |  |  |  481|      5|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      5|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 5]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      5|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      5|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      5|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|      5|          break
  ------------------
  405|     29|    FSINGLETONTLV(fuzz, TLV_TYPE_PROXY_TLS13_CIPHERS, CURLOPT_PROXY_TLS13_CIPHERS);
  ------------------
  |  |  506|     15|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 15, False: 15.5k]
  |  |  ------------------
  |  |  507|     15|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     15|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     15|        {                                                                     \
  |  |  |  |  |  |  491|     15|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 14]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     15|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     15|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|     14|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|     14|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|     14|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     14|        {                                                                     \
  |  |  |  |  |  |  481|     14|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     14|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 14]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     14|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     14|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     14|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|     14|          break
  ------------------
  406|     29|    FSINGLETONTLV(fuzz, TLV_TYPE_SASL_AUTHZID, CURLOPT_SASL_AUTHZID);
  ------------------
  |  |  506|     15|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 15, False: 15.5k]
  |  |  ------------------
  |  |  507|     15|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     15|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     15|        {                                                                     \
  |  |  |  |  |  |  491|     15|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 14]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     15|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     15|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|     14|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|     14|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|     14|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     14|        {                                                                     \
  |  |  |  |  |  |  481|     14|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     14|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 14]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     14|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     14|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     14|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|     14|          break
  ------------------
  407|     31|    FSINGLETONTLV(fuzz, TLV_TYPE_PROXY_ISSUERCERT, CURLOPT_PROXY_ISSUERCERT);
  ------------------
  |  |  506|     16|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 16, False: 15.5k]
  |  |  ------------------
  |  |  507|     16|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     16|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     16|        {                                                                     \
  |  |  |  |  |  |  491|     16|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 15]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     16|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     16|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|     15|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|     15|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|     15|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     15|        {                                                                     \
  |  |  |  |  |  |  481|     15|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     15|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 15]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     15|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     15|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     15|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|     15|          break
  ------------------
  408|     29|    FSINGLETONTLV(fuzz, TLV_TYPE_SSL_EC_CURVES, CURLOPT_SSL_EC_CURVES);
  ------------------
  |  |  506|     15|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 15, False: 15.5k]
  |  |  ------------------
  |  |  507|     15|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     15|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     15|        {                                                                     \
  |  |  |  |  |  |  491|     15|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 14]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     15|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     15|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|     14|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|     14|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|     14|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     14|        {                                                                     \
  |  |  |  |  |  |  481|     14|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     14|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 14]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     14|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     14|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     14|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|     14|          break
  ------------------
  409|     27|    FSINGLETONTLV(fuzz, TLV_TYPE_AWS_SIGV4, CURLOPT_AWS_SIGV4);
  ------------------
  |  |  506|     14|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 14, False: 15.5k]
  |  |  ------------------
  |  |  507|     14|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     14|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     14|        {                                                                     \
  |  |  |  |  |  |  491|     14|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 13]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     14|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     14|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|     13|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|     13|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|     13|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     13|        {                                                                     \
  |  |  |  |  |  |  481|     13|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     13|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 13]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     13|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|     13|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     13|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|     13|          break
  ------------------
  410|    111|    FSINGLETONTLV(fuzz, TLV_TYPE_REDIR_PROTOCOLS_STR, CURLOPT_REDIR_PROTOCOLS_STR);
  ------------------
  |  |  506|     56|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 56, False: 15.4k]
  |  |  ------------------
  |  |  507|     56|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|     56|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|     56|        {                                                                     \
  |  |  |  |  |  |  491|     56|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 55]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|     56|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|     56|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|     55|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|     55|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|     55|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|     55|        {                                                                     \
  |  |  |  |  |  |  481|     55|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|     55|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 45, False: 10]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|     55|          {                                                                   \
  |  |  |  |  |  |  484|     45|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|     45|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|     45|          }                                                                   \
  |  |  |  |  |  |  487|     55|        }
  |  |  |  |  ------------------
  |  |  |  |  500|     10|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|     10|          break
  ------------------
  411|      9|    FSINGLETONTLV(fuzz, TLV_TYPE_HAPROXY_CLIENT_IP, CURLOPT_HAPROXY_CLIENT_IP);
  ------------------
  |  |  506|      5|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 5, False: 15.5k]
  |  |  ------------------
  |  |  507|      5|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      5|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      5|        {                                                                     \
  |  |  |  |  |  |  491|      5|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 1, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      5|          {                                                                   \
  |  |  |  |  |  |  493|      1|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      1|          }                                                                   \
  |  |  |  |  |  |  496|      5|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|      4|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|      4|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|      4|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      4|        {                                                                     \
  |  |  |  |  |  |  481|      4|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      4|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 0, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      4|          {                                                                   \
  |  |  |  |  |  |  484|      0|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      0|          }                                                                   \
  |  |  |  |  |  |  487|      4|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      4|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|      4|          break
  ------------------
  412|      2|    FSINGLETONTLV(fuzz, TLV_TYPE_ECH, CURLOPT_ECH);
  ------------------
  |  |  506|      1|        case TLVNAME:                                                         \
  |  |  ------------------
  |  |  |  Branch (506:9): [True: 1, False: 15.5k]
  |  |  ------------------
  |  |  507|      1|          FCHECK_OPTION_UNSET(FUZZP, OPTNAME);                                \
  |  |  ------------------
  |  |  |  |  503|      1|        FCHECK((FUZZP)->options[OPTNAME % 1000] == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      1|        {                                                                     \
  |  |  |  |  |  |  491|      1|          if (!(COND))                                                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:15): [True: 0, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  492|      1|          {                                                                   \
  |  |  |  |  |  |  493|      0|            rc = 255;                                                         \
  |  |  |  |  |  |  494|      0|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  495|      0|          }                                                                   \
  |  |  |  |  |  |  496|      1|        }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  508|      1|          tmp = fuzz_tlv_to_string(tlv);                                      \
  |  |  509|      1|          FSET_OPTION(FUZZP, OPTNAME, tmp);                                   \
  |  |  ------------------
  |  |  |  |  499|      1|        FTRY(curl_easy_setopt((FUZZP)->easy, OPTNAME, OPTVALUE));             \
  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      1|        {                                                                     \
  |  |  |  |  |  |  481|      1|          int _func_rc = (FUNC);                                              \
  |  |  |  |  |  |  482|      1|          if (_func_rc)                                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:15): [True: 1, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  483|      1|          {                                                                   \
  |  |  |  |  |  |  484|      1|            rc = _func_rc;                                                    \
  |  |  |  |  |  |  485|      1|            goto EXIT_LABEL;                                                  \
  |  |  |  |  |  |  486|      1|          }                                                                   \
  |  |  |  |  |  |  487|      1|        }
  |  |  |  |  ------------------
  |  |  |  |  500|      0|        (FUZZP)->options[OPTNAME % 1000] = 1
  |  |  ------------------
  |  |  510|      0|          break
  ------------------
  413|     42|    default:
  ------------------
  |  Branch (413:5): [True: 42, False: 15.4k]
  ------------------
  414|       |      /* The fuzzer generates lots of unknown TLVs - we don't want these in the
  415|       |         corpus so we reject any unknown TLVs. */
  416|     42|      rc = 127;
  417|     42|      goto EXIT_LABEL;
  418|      0|      break;
  419|  15.5k|  }
  420|       |
  421|  13.6k|  rc = 0;
  422|       |
  423|  15.5k|EXIT_LABEL:
  424|       |
  425|  15.5k|  fuzz_free((void **)&tmp);
  426|       |
  427|  15.5k|  return rc;
  428|  13.6k|}
_Z18fuzz_tlv_to_stringP3tlv:
  434|  6.99k|{
  435|  6.99k|  char *tlvstr;
  436|       |
  437|       |  /* Allocate enough space, plus a null terminator */
  438|  6.99k|  tlvstr = (char *)malloc(tlv->length + 1);
  439|       |
  440|  6.99k|  if(tlvstr != NULL) {
  ------------------
  |  Branch (440:6): [True: 6.99k, False: 0]
  ------------------
  441|  6.99k|    memcpy(tlvstr, tlv->value, tlv->length);
  442|  6.99k|    tlvstr[tlv->length] = 0;
  443|  6.99k|  }
  444|       |
  445|  6.99k|  return tlvstr;
  446|  6.99k|}
_Z20fuzz_setup_http_postP9fuzz_dataP3tlv:
  450|     12|{
  451|     12|  if (fuzz->httppost == NULL) {
  ------------------
  |  Branch (451:7): [True: 12, False: 0]
  ------------------
  452|     12|    struct curl_httppost *post = NULL;
  453|     12|    struct curl_httppost *last = NULL;
  454|       |
  455|     12|    fuzz->post_body = fuzz_tlv_to_string(tlv);
  456|     12|    if (fuzz->post_body == NULL) {
  ------------------
  |  Branch (456:9): [True: 0, False: 12]
  ------------------
  457|      0|      return;
  458|      0|    }
  459|       |
  460|       |    /* This is just one of several possible entrypoints to
  461|       |     * the HTTPPOST API. see https://curl.se/libcurl/c/curl_formadd.html
  462|       |     * for lots of others which could be added here.
  463|       |     */
  464|     12|    curl_formadd(&post, &last,
  465|     12|                 CURLFORM_COPYNAME, FUZZ_HTTPPOST_NAME,
  ------------------
  |  |  277|     12|#define FUZZ_HTTPPOST_NAME              "test"
  ------------------
  466|     12|                 CURLFORM_PTRCONTENTS, fuzz->post_body,
  467|     12|                 CURLFORM_CONTENTLEN, (curl_off_t) strlen(fuzz->post_body),
  468|     12|                 CURLFORM_END);
  469|       |
  470|     12|    fuzz->last_post_part = last;
  471|     12|    fuzz->httppost = post;
  472|     12|  }
  473|       |
  474|     12|  return;
  475|     12|}
_Z18fuzz_add_mime_partP3tlvP13curl_mimepart:
  481|  2.69k|{
  482|  2.69k|  FUZZ_DATA part_fuzz;
  483|  2.69k|  TLV tlv;
  484|  2.69k|  int rc = 0;
  485|  2.69k|  int tlv_rc;
  486|       |
  487|  2.69k|  memset(&part_fuzz, 0, sizeof(FUZZ_DATA));
  488|       |
  489|  2.69k|  if(src_tlv->length < sizeof(TLV_RAW)) {
  ------------------
  |  Branch (489:6): [True: 1.85k, False: 840]
  ------------------
  490|       |    /* Not enough data for a single TLV - don't continue */
  491|  1.85k|    goto EXIT_LABEL;
  492|  1.85k|  }
  493|       |
  494|       |  /* Set up the state parser */
  495|    840|  part_fuzz.state.data = src_tlv->value;
  496|    840|  part_fuzz.state.data_len = src_tlv->length;
  497|       |
  498|    840|  for(tlv_rc = fuzz_get_first_tlv(&part_fuzz, &tlv);
  499|  1.83k|      tlv_rc == 0;
  ------------------
  |  Branch (499:7): [True: 1.19k, False: 640]
  ------------------
  500|  1.19k|      tlv_rc = fuzz_get_next_tlv(&part_fuzz, &tlv)) {
  501|       |
  502|       |    /* Have the TLV in hand. Parse the TLV. */
  503|  1.19k|    rc = fuzz_parse_mime_tlv(part, &tlv);
  504|       |
  505|  1.19k|    if(rc != 0) {
  ------------------
  |  Branch (505:8): [True: 200, False: 994]
  ------------------
  506|       |      /* Failed to parse the TLV. Can't continue. */
  507|    200|      goto EXIT_LABEL;
  508|    200|    }
  509|  1.19k|  }
  510|       |
  511|    640|  if(tlv_rc != TLV_RC_NO_MORE_TLVS) {
  ------------------
  |  |  267|    640|#define TLV_RC_NO_MORE_TLVS             1
  ------------------
  |  Branch (511:6): [True: 269, False: 371]
  ------------------
  512|       |    /* A TLV call failed. Can't continue. */
  513|    269|    goto EXIT_LABEL;
  514|    269|  }
  515|       |
  516|  2.69k|EXIT_LABEL:
  517|       |
  518|  2.69k|  return rc;
  519|    640|}
_Z19fuzz_parse_mime_tlvP13curl_mimepartP3tlv:
  525|  1.19k|{
  526|  1.19k|  int rc;
  527|  1.19k|  char *tmp;
  528|       |
  529|  1.19k|  switch(tlv->type) {
  530|    204|    case TLV_TYPE_MIME_PART_NAME:
  ------------------
  |  |   42|    204|#define TLV_TYPE_MIME_PART_NAME                 14
  ------------------
  |  Branch (530:5): [True: 204, False: 990]
  ------------------
  531|    204|      tmp = fuzz_tlv_to_string(tlv);
  532|    204|      curl_mime_name(part, tmp);
  533|    204|      fuzz_free((void **)&tmp);
  534|    204|      break;
  535|       |
  536|    790|    case TLV_TYPE_MIME_PART_DATA:
  ------------------
  |  |   43|    790|#define TLV_TYPE_MIME_PART_DATA                 15
  ------------------
  |  Branch (536:5): [True: 790, False: 404]
  ------------------
  537|    790|      curl_mime_data(part, (const char *)tlv->value, tlv->length);
  538|    790|      break;
  539|       |
  540|    200|    default:
  ------------------
  |  Branch (540:5): [True: 200, False: 994]
  ------------------
  541|       |      /* The fuzzer generates lots of unknown TLVs - we don't want these in the
  542|       |         corpus so we reject any unknown TLVs. */
  543|    200|      rc = 255;
  544|    200|      goto EXIT_LABEL;
  545|      0|      break;
  546|  1.19k|  }
  547|       |
  548|    994|  rc = 0;
  549|       |
  550|  1.19k|EXIT_LABEL:
  551|       |
  552|  1.19k|  return rc;
  553|    994|}

