Patchwork [v1] Add Reiwa era tests to time/tst-strftime3.c

login
register
mail settings
Submitter DJ Delorie
Date April 3, 2019, 9:55 p.m.
Message ID <xnh8ben48s.fsf@greed.delorie.com>
Download mbox | patch
Permalink /patch/32154/
State New
Headers show

Comments

DJ Delorie - April 3, 2019, 9:55 p.m.
Steve Ellcey <sellcey@marvell.com> writes:
> tst-strftime3.c:443:62: error: ā€˜%sā€™ directive output may be truncated writing up to 49 bytes into a region of size between 0 and 30 [-Werror=format-truncation=]

Fixed thusly:

snprintf will only truncate the output if the data its given
is corrupted, but a truncated buffer will not match the
"pristine" data's buffer, which is all we need.  So just
disable the warning via the DIAG macros.

2019-04-03  DJ Delorie  <dj@redhat.com>

	* time/tst-strftime3.c (tm_to_printed): Disable warning about
	snprintf truncating output.
Carlos O'Donell - April 4, 2019, 2:23 a.m.
On 4/3/19 5:55 PM, DJ Delorie wrote:
> Steve Ellcey <sellcey@marvell.com> writes:
>> tst-strftime3.c:443:62: error: ā€˜%sā€™ directive output may be truncated writing up to 49 bytes into a region of size between 0 and 30 [-Werror=format-truncation=]
> 
> Fixed thusly:
> 
> snprintf will only truncate the output if the data its given
> is corrupted, but a truncated buffer will not match the
> "pristine" data's buffer, which is all we need.  So just
> disable the warning via the DIAG macros.

Thank you for fixing this.

We can always circle back and change things later if we find a way
to do this without DIAG_* macros, but we should fix the regression
first and formost so people like Steve don't have their builds
impacted.

It is *always* OK to use DIAG_* macros in a sensible way like this
to unbreak the builds. We can always change it later.

Cheers,
Carlos.

Patch

diff --git a/time/tst-strftime3.c b/time/tst-strftime3.c
index 32ce0d93e2..eeca0921cb 100644
--- a/time/tst-strftime3.c
+++ b/time/tst-strftime3.c
@@ -25,6 +25,7 @@ 
 
 #include <support/check.h>
 #include <array_length.h>
+#include <libc-diag.h>
 
 /* These exist for the convenience of writing the test data, because
    zero-based vs one-based.  */
@@ -440,6 +441,14 @@  tm_to_printed (struct tm *tm, char *buffer)
       sprintf (temp, "%d", tm->tm_wday);
     }
 
+  DIAG_PUSH_NEEDS_COMMENT;
+#if __GNUC_PREREQ (9, 0)
+  /* GCC 9 warns that strncmp may truncate its output, but that's why
+     we're using it.  When it needs to truncate, it got corrupted
+     data, and we only care that the string is different than valid
+     data, which won't truncate.  */
+  DIAG_IGNORE_NEEDS_COMMENT (9, "-Wformat-truncation=");
+#endif
   snprintf (buffer, TMBUFLEN, "%04d/%02d/%02d %02d:%02d:%02d %s",
 	    tm->tm_year + 1900,
 	    tm->tm_mon + 1,
@@ -448,6 +457,7 @@  tm_to_printed (struct tm *tm, char *buffer)
 	    tm->tm_min,
 	    tm->tm_sec,
 	    wn);
+  DIAG_POP_NEEDS_COMMENT;
 }
 
 static int