"pacman -Q --changelog": fix writing uninit'd mem

Previously, when printing a package changelog to stdout, we would write
chunks of data that were not necessarily nul-terminated to stdout using
a function (fputs) which requires the input string to be nul-terminated.

On my system, this would result in occasional garbage characters showing
up in the "pacman -Qc" output.

Fix this by never nul-terminating the chunk, and using the fwrite()
function which takes an explicit input size and does not require a
nul-terminated string.

Signed-off-by: Carlo Teubner <carlo@cteubner.net>
(cherry picked from commit 806ccd90ed)
This commit is contained in:
Carlo Teubner 2021-10-03 09:24:06 +02:00 committed by Allan McRae
parent ec0bf17ced
commit e56c7a3f41

View file

@ -466,11 +466,7 @@ void dump_pkg_changelog(alpm_pkg_t *pkg)
char buf[CLBUF_SIZE];
size_t ret = 0;
while((ret = alpm_pkg_changelog_read(buf, CLBUF_SIZE, pkg, fp))) {
if(ret < CLBUF_SIZE) {
/* if we hit the end of the file, we need to add a null terminator */
*(buf + ret) = '\0';
}
fputs(buf, stdout);
fwrite(buf, 1, ret, stdout);
}
alpm_pkg_changelog_close(pkg, fp);
putchar('\n');