diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/xplist.c | 7 | 
1 files changed, 2 insertions, 5 deletions
| diff --git a/src/xplist.c b/src/xplist.c index 2eeccf9..c89b143 100644 --- a/src/xplist.c +++ b/src/xplist.c @@ -290,12 +290,10 @@ static void node_to_xml(node_t* node, bytearray_t **outbuf, uint32_t depth)          tagOpen = TRUE;          str_buf_append(*outbuf, "\n", 1);          if (node_data->length > 0) { -            char *buf = malloc(80);              uint32_t j = 0;              uint32_t indent = (depth > 8) ? 8 : depth;              uint32_t maxread = MAX_DATA_BYTES_PER_LINE(indent);              size_t count = 0; -            size_t b64count = 0;              size_t amount = (node_data->length / 3 * 4) + 4 + (((node_data->length / maxread) + 1) * (indent+1));              if ((*outbuf)->len + amount > (*outbuf)->capacity) {                  str_buf_grow(*outbuf, amount); @@ -305,12 +303,11 @@ static void node_to_xml(node_t* node, bytearray_t **outbuf, uint32_t depth)                      str_buf_append(*outbuf, "\t", 1);                  }                  count = (node_data->length-j < maxread) ? node_data->length-j : maxread; -                b64count = base64encode(buf, node_data->buff + j, count); -                str_buf_append(*outbuf, buf, b64count); +                assert((*outbuf)->len + count < (*outbuf)->capacity); +                (*outbuf)->len += base64encode((char*)(*outbuf)->data + (*outbuf)->len, node_data->buff + j, count);                  str_buf_append(*outbuf, "\n", 1);                  j+=count;              } -            free(buf);          }          for (i = 0; i < depth; i++) {              str_buf_append(*outbuf, "\t", 1); | 
