glibc/stdio-common
Florian Weimer 3cc4a8367c stdio: Remove memory leak from multibyte convertion [BZ#25691]
This is an updated version of a previous patch [1] with the
following changes:

  - Use compiler overflow builtins on done_add_func function.
  - Define the scratch +utstring_converted_wide_string using
    CHAR_T.
  - Added a testcase and mention the bug report.

Both default and wide printf functions might leak memory when
manipulate multibyte characters conversion depending of the size
of the input (whether __libc_use_alloca trigger or not the fallback
heap allocation).

This patch fixes it by removing the extra memory allocation on
string formatting with conversion parts.

The testcase uses input argument size that trigger memory leaks
on unpatched code (using a scratch buffer the threashold to use
heap allocation is lower).

Checked on x86_64-linux-gnu and i686-linux-gnu.

Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>

[1] https://sourceware.org/pipermail/libc-alpha/2017-June/082098.html
2020-03-20 11:02:38 -03:00
..
bits Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
_i18n_number.h Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
_itoa.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
_itowa.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
_itowa.h Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
asprintf.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
bug1.c
bug1.input
bug2.c
bug3.c Fix hardcoded /tmp paths in testing (bug 13888). 2018-06-26 21:48:48 +00:00
bug4.c Fix hardcoded /tmp paths in testing (bug 13888). 2018-06-26 21:48:48 +00:00
bug5.c Fix hardcoded /tmp paths in testing (bug 13888). 2018-06-26 21:48:48 +00:00
bug6.c
bug6.input
bug7.c Avoid insecure usage of tmpnam in tests. 2018-07-18 21:04:12 +00:00
bug8.c
bug9.c
bug10.c
bug11.c
bug12.c
bug13.c
bug14.c
bug16.c stdio-common: Use array_length and array_end macros 2017-11-02 12:45:20 +01:00
bug17.c
bug18.c
bug18a.c
bug19.c
bug19a.c
bug20.c
bug21.c Use C99-compliant scanf under _GNU_SOURCE with modern compilers. 2019-01-03 11:12:39 -05:00
bug22.c Disable -Wformat-overflow= warnings for some printf tests. 2018-11-01 17:13:55 +00:00
bug23-2.c CVE-2012-3406: Stack overflow in vfprintf [BZ #16617] 2014-12-15 10:09:33 +01:00
bug23-3.c CVE-2012-3406: Stack overflow in vfprintf [BZ #16617] 2014-12-15 10:09:33 +01:00
bug23-4.c CVE-2012-3406: Stack overflow in vfprintf [BZ #16617] 2014-12-15 10:09:33 +01:00
bug23.c Fix allocation when handling positional parameters in printf. 2011-02-20 07:59:49 -05:00
bug24.c Add test for BZ 13114 2011-08-20 09:22:16 -04:00
bug25.c Another round of inclusion fixes for _ISOMAC testsuite. 2017-03-22 08:44:32 -04:00
bug26.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
bug-vfprintf-nargs.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
ctermid.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
cuserid.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
Depend
dprintf.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
errlist.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
errnobug.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
flockfile.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
fprintf.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
fscanf.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
ftrylockfile.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
funlockfile.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
fxprintf.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
gentempfd.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
getline.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
getw.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
iovfscanf.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
iovfwscanf.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
isoc99_fscanf.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
isoc99_scanf.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
isoc99_sscanf.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
isoc99_vfscanf.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
isoc99_vscanf.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
isoc99_vsscanf.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
itoa-digits.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
itoa-udigits.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
itowa-digits.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
Makefile Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
perror.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
printf_fp.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
printf_fphex.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
printf_size.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
printf-parse.h Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
printf-parsemb.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
printf-parsewc.c
printf-prs.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
printf.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
printf.h Prepare redirections for IEEE long double on powerpc64le 2020-02-17 15:28:29 -06:00
psiginfo-data.h Fix typos. 2013-10-12 14:47:50 +02:00
psiginfo-define.h
psiginfo.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
psignal.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
putw.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
reg-modifier.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
reg-printf.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
reg-type.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
remove.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
rename.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
renameat2.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
renameat.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
scanf1.c
scanf2.c
scanf3.c
scanf4.c Split DIAG_* macros to new header libc-diag.h. 2017-02-25 09:59:46 -05:00
scanf5.c
scanf7.c Split DIAG_* macros to new header libc-diag.h. 2017-02-25 09:59:46 -05:00
scanf8.c
scanf9.c
scanf10.c
scanf11.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
scanf12.c
scanf12.input
scanf13.c Avoid warning in scanf test. 2009-10-30 09:23:24 -07:00
scanf14.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
scanf14a.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
scanf15.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
scanf16.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
scanf16a.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
scanf17.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
scanf.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
siglist.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
snprintf.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
sprintf.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
sscanf.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
stdio_ext.h Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
stdio_lim.h.in Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tempnam.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tempname.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
temptest.c
test_rdwr.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
test-fseek.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
test-fwrite.c Modify several tests to use test-skeleton.c 2015-08-06 02:59:04 -04:00
test-popen.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
test-vfprintf.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tfformat.c Avoid use of "register" as optimization hint. 2013-06-07 22:24:35 +00:00
tiformat.c
tllformat.c
tmpfile64.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tmpfile.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tmpnam_r.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tmpnam.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tst-bz11319-fortify2.c Use PRINTF_FORTIFY instead of _IO_FLAGS2_FORTIFY (bug 11319) 2018-12-05 18:15:43 -02:00
tst-bz11319.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tst-cookie.c Modify several tests to use test-skeleton.c 2014-11-05 15:24:08 +05:30
tst-fdopen.c Avoid insecure usage of tmpnam in tests. 2018-07-18 21:04:12 +00:00
tst-ferror.c Modify several tests to use test-skeleton.c 2015-08-06 02:59:04 -04:00
tst-ferror.input
tst-fgets.c Prefer https for Sourceware links 2017-11-16 11:49:26 +05:30
tst-fileno.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tst-fmemopen2.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tst-fmemopen3.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tst-fmemopen4.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tst-fmemopen.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tst-fphex-wide.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tst-fphex.c stdio-common: Use array_length and array_end macros 2017-11-02 12:45:20 +01:00
tst-fseek.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tst-fwrite.c Prefer https for Sourceware links 2017-11-16 11:49:26 +05:30
tst-gets.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tst-gets.input
tst-grouping.c Fix grouping when rounding increases number of integer digits. 2011-01-12 20:37:51 -05:00
tst-long-dbl-fphex.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tst-obprintf.c Modify several tests to use test-skeleton.c 2014-11-05 15:24:08 +05:30
tst-perror.c Modify several tests to use test-skeleton.c 2014-11-05 15:24:08 +05:30
tst-popen2.c
tst-popen.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tst-printf-bz18872.sh Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tst-printf-round.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tst-printf.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tst-printf.sh Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tst-printfsz-islongdouble.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tst-printfsz-islongdouble.sh Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tst-printfsz.c Split DIAG_* macros to new header libc-diag.h. 2017-02-25 09:59:46 -05:00
tst-put-error.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tst-renameat2.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tst-rndseek.c Don't reduce test timeout to less than default 2018-10-17 09:34:13 +02:00
tst-scanf-round.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tst-setvbuf1.c
tst-setvbuf1.expect
tst-sprintf2.c Modify several tests to use test-skeleton.c 2014-11-05 15:24:08 +05:30
tst-sprintf3.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tst-sprintf.c Split DIAG_* macros to new header libc-diag.h. 2017-02-25 09:59:46 -05:00
tst-sscanf.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tst-swprintf.c stdio-common: Use array_length and array_end macros 2017-11-02 12:45:20 +01:00
tst-swscanf.c
tst-tmpnam.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tst-unbputc.c Modify several tests to use test-skeleton.c 2014-11-05 15:24:08 +05:30
tst-unbputc.sh Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tst-ungetc.c Avoid insecure usage of tmpnam in tests. 2018-07-18 21:04:12 +00:00
tst-unlockedio.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tst-vfprintf-mbs-prec.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tst-vfprintf-user-type.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tst-vfprintf-width-prec.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tst-wc-printf.c Modify several tests to use test-skeleton.c 2014-11-05 15:24:08 +05:30
tstdiomisc.c stdio-common: Use array_length and array_end macros 2017-11-02 12:45:20 +01:00
tstgetln.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tstgetln.input
tstscanf.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tstscanf.input
Versions Add __vfscanf_internal and __vfwscanf_internal with flags arguments. 2018-12-05 18:15:42 -02:00
vfprintf-internal.c stdio: Remove memory leak from multibyte convertion [BZ#25691] 2020-03-20 11:02:38 -03:00
vfprintf.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
vfscanf-internal.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
vfscanf.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
vfwprintf-internal.c Add __v*printf_internal with flags arguments 2018-12-05 18:15:42 -02:00
vfwprintf.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
vfwscanf-internal.c Add __vfscanf_internal and __vfwscanf_internal with flags arguments. 2018-12-05 18:15:42 -02:00
vfwscanf.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
vprintf.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
xbug.c Convert 703 function definitions to prototype style. 2015-10-16 20:21:49 +00:00