diff mbox series

[rt-tests,v0,1/4] pmqtest: Increase buffer to avoid overflow

Message ID 20190816064204.6339-2-wagi@monom.org
State New
Headers show
Series Fix gcc warning | expand

Commit Message

Daniel Wagner Aug. 16, 2019, 6:42 a.m. UTC
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@monom.org>

---
 src/pmqtest/pmqtest.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

-- 
2.21.0

Comments

Sebastian Andrzej Siewior Aug. 16, 2019, 3:41 p.m. UTC | #1
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@monom.org>

> ---

>  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.

Sebastian
Daniel Wagner Aug. 19, 2019, 6:34 a.m. UTC | #2
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@monom.org>

>> ---

>>   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.
diff mbox series

Patch

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];
 
 		sprintf(mqname, SYNCMQ_NAME, i);
 		receiver[i].syncmq = mq_open(mqname, oflag, 0777, &mqstat);
@@ -567,7 +567,7 @@  int main(int argc, char *argv[])
 	}
 	nanosleep(&maindelay, NULL);
 	for (i = 0; i < num_threads; i++) {
-		char mqname[16];
+		char mqname[32];
 
 		mq_close(receiver[i].syncmq);
 		sprintf(mqname, SYNCMQ_NAME, i);