From 8f050e66fd51d2d03581558f26b6a6501c4c588b Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sun, 28 Apr 2019 17:48:58 +0200 Subject: [PATCH] [FREELDR] Use RtlStringCbPrintfA instead of sprintf Fixes GCC 8 warnings like: boot/freeldr/freeldr/disk/scsiport.c:806:31: error: 'partition(0)' directive writing 12 bytes into a region of size between 1 and 64 [-Werror=format-overflow=] sprintf(PartitionName, "%spartition(0)", ArcName); ^~~~~~~~~~~~ boot/freeldr/freeldr/disk/scsiport.c:806:5: note: 'sprintf' output between 13 and 76 bytes into a destination of size 64 sprintf(PartitionName, "%spartition(0)", ArcName); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ --- boot/freeldr/freeldr/disk/scsiport.c | 9 ++++++--- boot/freeldr/freeldr/include/freeldr.h | 1 + boot/freeldr/freeldr/linuxboot.c | 4 ++-- boot/freeldr/freeldr/ntldr/wlregistry.c | 12 ++++++------ 4 files changed, 15 insertions(+), 11 deletions(-) diff --git a/boot/freeldr/freeldr/disk/scsiport.c b/boot/freeldr/freeldr/disk/scsiport.c index 7f206aafe65..0c0a0fa66cc 100644 --- a/boot/freeldr/freeldr/disk/scsiport.c +++ b/boot/freeldr/freeldr/disk/scsiport.c @@ -803,7 +803,7 @@ SpiScanDevice( CHAR PartitionName[64]; /* Register device with partition(0) suffix */ - sprintf(PartitionName, "%spartition(0)", ArcName); + RtlStringCbPrintfA(PartitionName, sizeof(PartitionName), "%spartition(0)", ArcName); FsRegisterDevice(PartitionName, &DiskVtbl); /* Read device partition table */ @@ -817,8 +817,11 @@ SpiScanDevice( { if (PartitionBuffer->PartitionEntry[i].PartitionType != PARTITION_ENTRY_UNUSED) { - sprintf(PartitionName, "%spartition(%lu)", - ArcName, PartitionBuffer->PartitionEntry[i].PartitionNumber); + RtlStringCbPrintfA(PartitionName, + sizeof(PartitionName), + "%spartition(%lu)", + ArcName, + PartitionBuffer->PartitionEntry[i].PartitionNumber); FsRegisterDevice(PartitionName, &DiskVtbl); } } diff --git a/boot/freeldr/freeldr/include/freeldr.h b/boot/freeldr/freeldr/include/freeldr.h index b62d4e56003..82a6b89f06b 100644 --- a/boot/freeldr/freeldr/include/freeldr.h +++ b/boot/freeldr/freeldr/include/freeldr.h @@ -50,6 +50,7 @@ #include #include #include +#include #else #include #endif diff --git a/boot/freeldr/freeldr/linuxboot.c b/boot/freeldr/freeldr/linuxboot.c index 54b16a62827..23258941eb8 100644 --- a/boot/freeldr/freeldr/linuxboot.c +++ b/boot/freeldr/freeldr/linuxboot.c @@ -341,7 +341,7 @@ BOOLEAN LinuxReadKernel(PFILE LinuxKernelFile) CHAR StatusText[260]; PVOID LoadAddress; - sprintf(StatusText, "Loading %s", LinuxKernelName); + RtlStringCbPrintfA(StatusText, sizeof(StatusText), "Loading %s", LinuxKernelName); UiDrawStatusText(StatusText); /* Allocate memory for Linux kernel */ @@ -411,7 +411,7 @@ BOOLEAN LinuxReadInitrd(PFILE LinuxInitrdFile) ULONG BytesLoaded; CHAR StatusText[260]; - sprintf(StatusText, "Loading %s", LinuxInitrdName); + RtlStringCbPrintfA(StatusText, sizeof(StatusText), "Loading %s", LinuxInitrdName); UiDrawStatusText(StatusText); // Allocate memory for the ramdisk diff --git a/boot/freeldr/freeldr/ntldr/wlregistry.c b/boot/freeldr/freeldr/ntldr/wlregistry.c index 155030dbc2d..3f813819dfc 100644 --- a/boot/freeldr/freeldr/ntldr/wlregistry.c +++ b/boot/freeldr/freeldr/ntldr/wlregistry.c @@ -586,15 +586,15 @@ WinLdrScanRegistry(IN OUT PLIST_ENTRY BootDriverListHead, { TRACE_CH(REACTOS, "ImagePath: not found\n"); TempImagePath[0] = 0; - sprintf(ImagePath, "%s\\system32\\drivers\\%S.sys", DirectoryPath, ServiceName); + RtlStringCbPrintfA(ImagePath, sizeof(ImagePath), "%s\\system32\\drivers\\%S.sys", DirectoryPath, ServiceName); } else if (TempImagePath[0] != L'\\') { - sprintf(ImagePath, "%s%S", DirectoryPath, TempImagePath); + RtlStringCbPrintfA(ImagePath, sizeof(ImagePath), "%s%S", DirectoryPath, TempImagePath); } else { - sprintf(ImagePath, "%S", TempImagePath); + RtlStringCbPrintfA(ImagePath, sizeof(ImagePath), "%S", TempImagePath); TRACE_CH(REACTOS, "ImagePath: '%s'\n", ImagePath); } @@ -666,15 +666,15 @@ WinLdrScanRegistry(IN OUT PLIST_ENTRY BootDriverListHead, { TRACE_CH(REACTOS, "ImagePath: not found\n"); TempImagePath[0] = 0; - sprintf(ImagePath, "%ssystem32\\drivers\\%S.sys", DirectoryPath, ServiceName); + RtlStringCbPrintfA(ImagePath, sizeof(ImagePath), "%ssystem32\\drivers\\%S.sys", DirectoryPath, ServiceName); } else if (TempImagePath[0] != L'\\') { - sprintf(ImagePath, "%s%S", DirectoryPath, TempImagePath); + RtlStringCbPrintfA(ImagePath, sizeof(ImagePath), "%s%S", DirectoryPath, TempImagePath); } else { - sprintf(ImagePath, "%S", TempImagePath); + RtlStringCbPrintfA(ImagePath, sizeof(ImagePath), "%S", TempImagePath); TRACE_CH(REACTOS, "ImagePath: '%s'\n", ImagePath); } TRACE(" Adding boot driver: '%s'\n", ImagePath); -- 2.17.1