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

Carlo Teubner carlo at cteubner.net
Sun Oct 3 07:24:06 UTC 2021


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 at 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);
 		putchar('\n');
-- 
2.33.0



More information about the pacman-dev mailing list