From cf7df018ccf5513b79bcfe0b108e348b6da341c1 Mon Sep 17 00:00:00 2001 From: Simon McVittie Date: Sat, 30 Sep 2017 17:14:34 +0100 Subject: [PATCH] IkiWiki::Receive: Avoid using asprintf On GNU/Linux, it isn't declared in stdio.h unless we define _GNU_SOURCE, which we don't; using the implicit declaration risks crashes on platforms where sizeof(pointer) != sizeof(int). On other platforms it isn't guaranteed to exist at all. Signed-off-by: Simon McVittie --- IkiWiki/Receive.pm | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/IkiWiki/Receive.pm b/IkiWiki/Receive.pm index 332ba7c2c..f985f560b 100644 --- a/IkiWiki/Receive.pm +++ b/IkiWiki/Receive.pm @@ -26,6 +26,8 @@ sub genwrapper () { my $ret=<<"EOF"; { int u=getuid(); + /* 3 characters per byte is certainly enough */ + char uid_string[sizeof(u) * 3 + 1]; EOF $ret.="\t\tif ( ". join("&&", map { @@ -46,8 +48,8 @@ EOF while (read(0, &buf, 256) != 0) {} exit(0); } - asprintf(&s, "%i", u); - addenv("CALLER_UID", s); + snprintf(uid_string, sizeof(uid_string), "%i", u); + addenv("CALLER_UID", uid_string); } EOF return $ret;