View Issue Details

IDProjectCategoryView StatusLast Update
0000307fileGeneralpublic2022-01-10 14:15
ReporterFabrice Assigned Tochristos  
PrioritynormalSeverityminorReproducibilityalways
Status resolvedResolutionfixed 
Product Version5.41 
Fixed in Version5.42 
Summary0000307: Build failure with gcc 4.8
DescriptionWe have the following build failure on buildroot with file 5.41 and gcc 4.8

readelf.c: In function 'do_auxv_note':
readelf.c:1046:2: error: 'for' loop initial declarations are only allowed in C99 mode
  for (size_t off = 0; off + elsize <= descsz; off += elsize) {
  ^

funcs.c:93:2: error: 'for' loop initial declarations are only allowed in C99 mode
  for (const char *p = fmt; *p; p++) {
  ^

Please find a patch below

Full build log:
 - http://autobuild.buildroot.org/results/31c/31cbc313fceb84c0cbb1969fca5ac44244871dbc/build-end.log
Tagsbuild

Activities

Fabrice

2022-01-02 20:01

reporter  

0001-fix-build-with-gcc-4.8.patch (3,086 bytes)   
From e36455301a3757618381cb83bf17115dd386131e Mon Sep 17 00:00:00 2001
From: Fabrice Fontaine <fontaine.fabrice@gmail.com>
Date: Sun, 2 Jan 2022 20:41:31 +0100
Subject: [PATCH] fix build with gcc 4.8

Fix the following build failure with gcc 4.8

readelf.c: In function 'do_auxv_note':
readelf.c:1046:2: error: 'for' loop initial declarations are only allowed in C99 mode
  for (size_t off = 0; off + elsize <= descsz; off += elsize) {
  ^

funcs.c:93:2: error: 'for' loop initial declarations are only allowed in C99 mode
  for (const char *p = fmt; *p; p++) {
  ^

Fixes:
 - http://autobuild.buildroot.org/results/31cbc313fceb84c0cbb1969fca5ac44244871dbc

Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
---
 src/der.c     | 6 ++++--
 src/funcs.c   | 3 ++-
 src/readelf.c | 4 ++--
 3 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/src/der.c b/src/der.c
index 4bee9f16..23b9a574 100644
--- a/src/der.c
+++ b/src/der.c
@@ -235,6 +235,7 @@ der_tag(char *buf, size_t len, uint32_t tag)
 static int
 der_data(char *buf, size_t blen, uint32_t tag, const void *q, uint32_t len)
 {
+	uint32_t i;
 	const uint8_t *d = CAST(const uint8_t *, q);
 	switch (tag) {
 	case DER_TAG_PRINTABLE_STRING:
@@ -251,7 +252,7 @@ der_data(char *buf, size_t blen, uint32_t tag, const void *q, uint32_t len)
 		break;
 	}
 
-	for (uint32_t i = 0; i < len; i++) {
+	for (i = 0; i < len; i++) {
 		uint32_t z = i << 1;
 		if (z < blen - 2)
 			snprintf(buf + z, blen - z, "%.2x", d[i]);
@@ -283,7 +284,8 @@ der_offs(struct magic_set *ms, struct magic *m, size_t nbytes)
 	offs += ms->offset + m->offset;
 	DPRINTF(("cont_level = %d\n", m->cont_level));
 #ifdef DEBUG_DER
-	for (size_t i = 0; i < m->cont_level; i++)
+	size_t i;
+	for (i = 0; i < m->cont_level; i++)
 		printf("cont_level[%" SIZE_T_FORMAT "u] = %u\n", i,
 		    ms->c.li[i].off);
 #endif
diff --git a/src/funcs.c b/src/funcs.c
index d968873d..08b565fb 100644
--- a/src/funcs.c
+++ b/src/funcs.c
@@ -90,7 +90,8 @@ file_checkfield(char *msg, size_t mlen, const char *what, const char **pp)
 protected int
 file_checkfmt(char *msg, size_t mlen, const char *fmt)
 {
-	for (const char *p = fmt; *p; p++) {
+	const char *p;
+	for (p = fmt; *p; p++) {
 		if (*p != '%')
 			continue;
 		if (*++p == '%')
diff --git a/src/readelf.c b/src/readelf.c
index 01c60fe9..46421a2e 100644
--- a/src/readelf.c
+++ b/src/readelf.c
@@ -1015,7 +1015,7 @@ do_auxv_note(struct magic_set *ms, unsigned char *nbuf, uint32_t type,
 	size_t elsize = xauxv_sizeof;
 	const char *tag;
 	int is_string;
-	size_t nval;
+	size_t nval, off;
 
 	if ((*flags & (FLAGS_IS_CORE|FLAGS_DID_CORE_STYLE)) !=
 	    (FLAGS_IS_CORE|FLAGS_DID_CORE_STYLE))
@@ -1043,7 +1043,7 @@ do_auxv_note(struct magic_set *ms, unsigned char *nbuf, uint32_t type,
 	*flags |= FLAGS_DID_AUXV;
 
 	nval = 0;
-	for (size_t off = 0; off + elsize <= descsz; off += elsize) {
+	for (off = 0; off + elsize <= descsz; off += elsize) {
 		memcpy(xauxv_addr, &nbuf[doff + off], xauxv_sizeof);
 		/* Limit processing to 50 vector entries to prevent DoS */
 		if (nval++ >= 50) {
-- 
2.33.0

christos

2022-01-10 14:15

manager   ~0003685

fixed, thanks!

Issue History

Date Modified Username Field Change
2022-01-02 20:01 Fabrice New Issue
2022-01-02 20:01 Fabrice File Added: 0001-fix-build-with-gcc-4.8.patch
2022-01-02 20:01 Fabrice Tag Attached: build
2022-01-10 14:15 christos Assigned To => christos
2022-01-10 14:15 christos Status new => assigned
2022-01-10 14:15 christos Status assigned => resolved
2022-01-10 14:15 christos Resolution open => fixed
2022-01-10 14:15 christos Fixed in Version => 5.42
2022-01-10 14:15 christos Note Added: 0003685