On 8/16/19 5:41 PM, Sebastian Andrzej Siewior wrote:
On 2019-08-16 08:42:01 [+0200], Daniel Wagner wrote:
Increase the size of the char buffer. gcc 9.1.1 reports:
src/pmqtest/pmqtest.c: In function ‘main’:
src/pmqtest/pmqtest.c:46:21: warning: ‘%d’ directive writing between 1 and 10 bytes into a region of size 8 [-Wformat-overflow=]
46 | #define SYNCMQ_NAME "/syncmsg%d"
| ^~~~~~~~~~~~
src/pmqtest/pmqtest.c:445:3: note: ‘sprintf’ output between 10 and 19 bytes into a destination of size 16
445 | sprintf(mqname, SYNCMQ_NAME, i);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Signed-off-by: Daniel Wagner <wagi@xxxxxxxxx>
---
src/pmqtest/pmqtest.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/pmqtest/pmqtest.c b/src/pmqtest/pmqtest.c
index a04fc49872bf..20164c8d547f 100644
--- a/src/pmqtest/pmqtest.c
+++ b/src/pmqtest/pmqtest.c
@@ -440,7 +440,7 @@ int main(int argc, char *argv[])
goto nomem;
for (i = 0; i < num_threads; i++) {
- char mqname[16];
+ char mqname[32];
The compiler says, based on SYNCMQ_NAME's size and maximum possible %d
we will have 19 bytes max. Why do you change it to 32? Why it is not
wrong, one might ask what the extra storage is for.
I was taking the 16 bytes value as reference and doubled it. Indeed, 19
bytes would be a better choice. Let me refresh the series.