-
Notifications
You must be signed in to change notification settings - Fork 42
Open
Description
The printf buffers for degrees, minutes, and seconds in Utils.c are 11 bytes, but formatting could result in 12 bytes. Here's my GCC version: gcc (Gentoo 13.3.1_p20240614 p17) 13.3.1 20240614. Fixed it myself in the patch below.
From 70eae2589b7b1ccdd0c1e3aedf68e22e6fd43ac9 Mon Sep 17 00:00:00 2001
From: pgsocks <pgsocks@pm.me>
Date: Thu, 3 Oct 2024 18:13:47 -0500
Subject: [PATCH 2/2] Resize degrees, minutes, seconds buffer to 12 bytes
A formatted string could possibly be up to 12 bytes while the buffers
were only 11 bytes.
---
modules/c/nrt/source/Utils.c | 24 ++++++++++++------------
1 file changed, 12 insertions(+), 12 deletions(-)
diff --git a/modules/c/nrt/source/Utils.c b/modules/c/nrt/source/Utils.c
index 5d5340d0..52edf5b9 100644
--- a/modules/c/nrt/source/Utils.c
+++ b/modules/c/nrt/source/Utils.c
@@ -577,12 +577,12 @@ NRTPROT(void) nrt_Utils_geographicLatToCharArray(int degrees, int minutes,
seconds = 99.0;
}
- char degrees_buffer[11]; // "2147483647"
- NRT_SNPRINTF(degrees_buffer, 11, "%02d", degrees);
- char minutes_buffer[11];
- NRT_SNPRINTF(minutes_buffer, 11, "%02d", minutes);
- char seconds_buffer[11];
- NRT_SNPRINTF(seconds_buffer, 11, "%02d", (int)seconds);
+ char degrees_buffer[12]; // "2147483647"
+ NRT_SNPRINTF(degrees_buffer, 12, "%02d", degrees);
+ char minutes_buffer[12];
+ NRT_SNPRINTF(minutes_buffer, 12, "%02d", minutes);
+ char seconds_buffer[12];
+ NRT_SNPRINTF(seconds_buffer, 12, "%02d", (int)seconds);
NRT_SNPRINTF(buffer7, 8, "%c%c%c%c%c%c%c",
degrees_buffer[0], degrees_buffer[1],
@@ -650,12 +650,12 @@ NRTPROT(void) nrt_Utils_geographicLonToCharArray(int degrees, int minutes,
seconds = 99.0;
}
- char degrees_buffer[11]; // "2147483647"
- NRT_SNPRINTF(degrees_buffer, 11, "%03d", degrees);
- char minutes_buffer[11];
- NRT_SNPRINTF(minutes_buffer, 11, "%02d", minutes);
- char seconds_buffer[11];
- NRT_SNPRINTF(seconds_buffer, 11, "%02d", (int)seconds);
+ char degrees_buffer[12]; // "2147483647"
+ NRT_SNPRINTF(degrees_buffer, 12, "%03d", degrees);
+ char minutes_buffer[12];
+ NRT_SNPRINTF(minutes_buffer, 12, "%02d", minutes);
+ char seconds_buffer[12];
+ NRT_SNPRINTF(seconds_buffer, 12, "%02d", (int)seconds);
NRT_SNPRINTF(buffer8, 9, "%c%c%c%c%c%c%c%c",
degrees_buffer[0], degrees_buffer[1], degrees_buffer[2],
--
2.45.2 Metadata
Metadata
Assignees
Labels
No labels