From 6454f70c8d6643856b51fd0d5d6b91cf43fd7710 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Higor=20Eur=C3=ADpedes?= Date: Sat, 14 Nov 2015 15:39:40 -0300 Subject: [PATCH] (libretrodb) Return the correct str/buf length in rmsgpack_read and read_buff --- libretro-db/rmsgpack.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/libretro-db/rmsgpack.c b/libretro-db/rmsgpack.c index 2e99453d1e..1f4efb8e76 100644 --- a/libretro-db/rmsgpack.c +++ b/libretro-db/rmsgpack.c @@ -458,16 +458,21 @@ error: static int read_buff(RFILE *fd, size_t size, char **pbuff, uint64_t *len) { uint64_t tmp_len = 0; + ssize_t read_len = 0; if (read_uint(fd, &tmp_len, size) == -1) return -errno; - *pbuff = (char *)calloc((size_t)(tmp_len + 1), sizeof(char)); + *pbuff = (char *)malloc((size_t)(tmp_len + 1) * sizeof(char)); - if (retro_fread(fd, *pbuff, (size_t)tmp_len) == -1) + if ((read_len = retro_fread(fd, *pbuff, (size_t)tmp_len)) == -1) goto error; - *len = tmp_len; + *len = read_len; + (*pbuff)[read_len] = 0; + + /* Throw warning on read_len != tmp_len ? */ + return 0; error: @@ -562,7 +567,7 @@ int rmsgpack_read(RFILE *fd, free(buff); return 0; } - return callbacks->read_string(buff, (uint32_t)tmp_len, data); + return callbacks->read_string(buff, (uint32_t)read_len, data); } else if (type > MPF_MAP32) {