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

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

