UA_base64:
   17|    104|UA_base64(const unsigned char *src, size_t len, size_t *out_len) {
   18|    104|    if(len == 0) {
  ------------------
  |  Branch (18:8): [True: 0, False: 104]
  ------------------
   19|      0|        *out_len = 0;
   20|      0|        return NULL;
   21|      0|    }
   22|       |
   23|    104|    size_t olen = 4*((len + 2) / 3); /* 3-byte blocks to 4-byte */
   24|    104|    if(olen < len)
  ------------------
  |  Branch (24:8): [True: 0, False: 104]
  ------------------
   25|      0|        return NULL; /* integer overflow */
   26|       |
   27|    104|    unsigned char *out = (unsigned char*)UA_malloc(olen);
  ------------------
  |  |  350|    104|# define UA_malloc(size) UA_mallocSingleton(size)
  ------------------
   28|    104|    if(!out)
  ------------------
  |  Branch (28:8): [True: 0, False: 104]
  ------------------
   29|      0|        return NULL;
   30|       |
   31|    104|    *out_len = UA_base64_buf(src, len, out);
   32|    104|    return out;
   33|    104|}
UA_base64_buf:
   36|    104|UA_base64_buf(const unsigned char *src, size_t len, unsigned char *out) {
   37|    104|    const unsigned char *end = src + len;
   38|    104|    const unsigned char *in = src;
   39|    104|    unsigned char *pos = out;
   40|  5.68M|    while(end - in >= 3) {
  ------------------
  |  Branch (40:11): [True: 5.68M, False: 104]
  ------------------
   41|  5.68M|        *pos++ = base64_table[in[0] >> 2];
   42|  5.68M|        *pos++ = base64_table[((in[0] & 0x03) << 4) | (in[1] >> 4)];
   43|  5.68M|        *pos++ = base64_table[((in[1] & 0x0f) << 2) | (in[2] >> 6)];
   44|  5.68M|        *pos++ = base64_table[in[2] & 0x3f];
   45|  5.68M|        in += 3;
   46|  5.68M|    }
   47|       |
   48|    104|    if(end - in) {
  ------------------
  |  Branch (48:8): [True: 82, False: 22]
  ------------------
   49|     82|        *pos++ = base64_table[in[0] >> 2];
   50|     82|        if(end - in == 1) {
  ------------------
  |  Branch (50:12): [True: 59, False: 23]
  ------------------
   51|     59|            *pos++ = base64_table[(in[0] & 0x03) << 4];
   52|     59|            *pos++ = '=';
   53|     59|        } else {
   54|     23|            *pos++ = base64_table[((in[0] & 0x03) << 4) | (in[1] >> 4)];
   55|     23|            *pos++ = base64_table[(in[1] & 0x0f) << 2];
   56|     23|        }
   57|     82|        *pos++ = '=';
   58|     82|    }
   59|       |
   60|    104|    return (size_t)(pos - out);
   61|    104|}

LLVMFuzzerTestOneInput:
   18|    104|LLVMFuzzerTestOneInput(uint8_t *data, size_t size) {
   19|    104|    size_t retLen;
   20|    104|    unsigned char* ret = UA_base64(data, size, &retLen);
   21|    104|    if (retLen > 0)
  ------------------
  |  Branch (21:9): [True: 104, False: 0]
  ------------------
   22|    104|        free(ret);
   23|    104|    return 0;
   24|    104|}

