diff options
author | Martijn van Beurden <mvanb1@gmail.com> | 2023-04-14 11:39:14 +0200 |
---|---|---|
committer | Martijn van Beurden <mvanb1@gmail.com> | 2023-05-09 20:29:05 +0200 |
commit | c623f0f42c5fc8abb42ffddd2094cf095f4f7f57 (patch) | |
tree | 494cdb3a265609fa3c1594a12c666d3e76934a7b | |
parent | fd842b6a3bacac9e47504ca4d4fb611fab014fa2 (diff) | |
download | flac-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.c | 7 |
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 { |