BUG/MINOR: stats: use strncmp() instead of memcmp() on health states
The reports for health states are checked using memcmp() in order to
only focus on the first word and possibly ignore trailing %d/%d etc.
This makes gcc unhappy about a potential use of "" as the string, which
never happens since the string is always set. This resulted in commit
c4e6460f6 ("MINOR: build: Disable -Wstringop-overflow.") to silence
these messages. However some lengths are incorrect (though cannot cause
trouble), and in the end strncmp() is just safer and cleaner.
This can be backported to all stable branches as it will shut a warning
with gcc 8 and above.
(cherry picked from commit 7b52485f1afb7d420633d7794549ec0549d1e2d7)
Signed-off-by: Willy Tarreau <w@1wt.eu>
(cherry picked from commit af400cf0ec9a418ac1f127d9ed696e7807c2f33b)
Signed-off-by: Willy Tarreau <w@1wt.eu>
(cherry picked from commit 5e50d2c1f4c237dff5180a4882df88d03a301f69)
Signed-off-by: Willy Tarreau <w@1wt.eu>
diff --git a/src/stats.c b/src/stats.c
index f2091bb..fcf3752 100644
--- a/src/stats.c
+++ b/src/stats.c
@@ -939,7 +939,7 @@
style = "going_down";
}
- if (memcmp(field_str(stats, ST_F_STATUS), "MAINT", 5) == 0)
+ if (strncmp(field_str(stats, ST_F_STATUS), "MAINT", 5) == 0)
chunk_appendf(out, "<tr class=\"maintain\">");
else
chunk_appendf(out,
@@ -1103,15 +1103,15 @@
*/
- if (memcmp(field_str(stats, ST_F_STATUS), "MAINT", 5) == 0) {
+ if (strncmp(field_str(stats, ST_F_STATUS), "MAINT", 5) == 0) {
chunk_appendf(out, "%s MAINT", human_time(stats[ST_F_LASTCHG].u.u32, 1));
}
- else if (memcmp(field_str(stats, ST_F_STATUS), "no check", 5) == 0) {
+ else if (strcmp(field_str(stats, ST_F_STATUS), "no check") == 0) {
chunk_strcat(out, "<i>no check</i>");
}
else {
chunk_appendf(out, "%s %s", human_time(stats[ST_F_LASTCHG].u.u32, 1), field_str(stats, ST_F_STATUS));
- if (memcmp(field_str(stats, ST_F_STATUS), "DOWN", 4) == 0) {
+ if (strncmp(field_str(stats, ST_F_STATUS), "DOWN", 4) == 0) {
if (stats[ST_F_CHECK_HEALTH].u.u32)
chunk_strcat(out, " ↑");
}
@@ -1119,7 +1119,7 @@
chunk_strcat(out, " ↓");
}
- if (memcmp(field_str(stats, ST_F_STATUS), "DOWN", 4) == 0 &&
+ if (strncmp(field_str(stats, ST_F_STATUS), "DOWN", 4) == 0 &&
stats[ST_F_AGENT_STATUS].type && !stats[ST_F_AGENT_HEALTH].u.u32) {
chunk_appendf(out,
"</td><td class=ac><u> %s",