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
The printf buffers for degrees, minutes, and seconds in
Utils.care 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