aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartijn van Beurden <mvanb1@gmail.com>2023-04-14 11:39:14 +0200
committerMartijn van Beurden <mvanb1@gmail.com>2023-05-09 20:29:05 +0200
commitc623f0f42c5fc8abb42ffddd2094cf095f4f7f57 (patch)
tree494cdb3a265609fa3c1594a12c666d3e76934a7b
parentfd842b6a3bacac9e47504ca4d4fb611fab014fa2 (diff)
downloadflac-c623f0f42c5fc8abb42ffddd2094cf095f4f7f57.tar.gz
Fix use-after-free warning in GCC 12
A pointer was used for arithmatic after a realloc. Co-authored-by: Alexia Massalin <alexia@lambda.csail.mit.edu>
-rw-r--r--src/share/utf8/iconvert.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/src/share/utf8/iconvert.c b/src/share/utf8/iconvert.c
index 307e0024..9a1e3f6b 100644
--- a/src/share/utf8/iconvert.c
+++ b/src/share/utf8/iconvert.c
@@ -62,7 +62,7 @@ int iconvert(const char *fromcode, const char *tocode,
char *ib;
char *ob;
char *utfbuf = 0, *outbuf, *newbuf;
- size_t utflen, outlen, ibl, obl, k;
+ size_t utflen, outlen, ibl, obl, obp, k;
char tbuf[2048];
cd1 = iconv_open("UTF-8", fromcode);
@@ -124,11 +124,12 @@ int iconvert(const char *fromcode, const char *tocode,
if(utflen*2 < utflen) /* overflow check */
goto fail;
utflen *= 2;
+ obp = ob - utfbuf; /* save position */
newbuf = realloc(utfbuf, utflen);
if (!newbuf)
goto fail;
- ob = (ob - utfbuf) + newbuf;
- obl = utflen - (ob - newbuf);
+ ob = newbuf + obp;
+ obl = utflen - obp;
utfbuf = newbuf;
}
else {