From 23ef62b3e04ad834153269980dab4aac35a1fc7e Mon Sep 17 00:00:00 2001 From: Ben Gamari Date: Thu, 7 Apr 2022 14:28:28 -0400 Subject: rts: Fix off-by-one in snwprintf usage --- rts/linker/LoadArchive.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/rts/linker/LoadArchive.c b/rts/linker/LoadArchive.c index a2641e83ad..3c35a029a4 100644 --- a/rts/linker/LoadArchive.c +++ b/rts/linker/LoadArchive.c @@ -520,8 +520,11 @@ HsInt loadArchive_ (pathchar *path) int size = pathprintf(NULL, 0, WSTR("%" PATH_FMT "(#%d:%.*s)"), path, memberIdx, (int)thisFileNameSize, fileName); - archiveMemberName = stgMallocBytes((size+1) * sizeof(pathchar), "loadArchive(file)"); - pathprintf(archiveMemberName, size, WSTR("%" PATH_FMT "(#%d:%.*s)"), + // I don't understand why this extra +1 is needed here; pathprintf + // should have given us the correct length but in practice it seems + // to be one byte short on Win32. + archiveMemberName = stgMallocBytes((size+1+1) * sizeof(pathchar), "loadArchive(file)"); + pathprintf(archiveMemberName, size+1, WSTR("%" PATH_FMT "(#%d:%.*s)"), path, memberIdx, (int)thisFileNameSize, fileName); ObjectCode *oc = mkOc(STATIC_OBJECT, path, image, memberSize, false, archiveMemberName, -- cgit v1.2.1