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

Message ID 20211003072406.8959-1-carlo@cteubner.net
State Accepted
Headers show
Series "pacman -Q --changelog": fix writing uninit'd mem | expand

Commit Message

Carlo Teubner Oct. 3, 2021, 7:24 a.m. UTC
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>
 src/pacman/package.c | 6 +-----
 1 file changed, 1 insertion(+), 5 deletions(-)


diff --git a/src/pacman/package.c b/src/pacman/package.c
index eaee3bb0..3eae9797 100644
--- a/src/pacman/package.c
+++ b/src/pacman/package.c
@@ -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);