* [nft PATCH 1/2] parser_bison: Get rid of (most) bison compiler warnings @ 2019-07-20 18:52 Phil Sutter 2019-07-20 18:52 ` [nft PATCH 2/2] nfnl_osf: Silence string truncation gcc warnings Phil Sutter 2019-07-20 19:43 ` [nft PATCH 1/2] parser_bison: Get rid of (most) bison compiler warnings Florian Westphal 0 siblings, 2 replies; 8+ messages in thread From: Phil Sutter @ 2019-07-20 18:52 UTC (permalink / raw) To: Pablo Neira Ayuso; +Cc: netfilter-devel Shut the complaints about POSIX incompatibility by passing -Wno-yacc to bison. An alternative would be to not pass -y, but that caused seemingly unsolveable problems with automake and expected file names. Fix two warnings about deprecated '%pure-parser' and '%error-verbose' statements by replacing them with what bison suggests. A third warning sadly left in place: Replacing '%name-prefix' by what is suggested leads to compilation errors. Signed-off-by: Phil Sutter <phil@nwl.cc> --- src/Makefile.am | 2 +- src/parser_bison.y | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Makefile.am b/src/Makefile.am index e2b531390cefb..740c21f2cac85 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -22,7 +22,7 @@ AM_CFLAGS = -Wall \ -Waggregate-return -Wunused -Wwrite-strings ${GCC_FVISIBILITY_HIDDEN} -AM_YFLAGS = -d +AM_YFLAGS = -d -Wno-yacc BUILT_SOURCES = parser_bison.h diff --git a/src/parser_bison.y b/src/parser_bison.y index c90de47e88f74..12e499b4dd025 100644 --- a/src/parser_bison.y +++ b/src/parser_bison.y @@ -116,12 +116,12 @@ int nft_lex(void *, void *, void *); %name-prefix "nft_" %debug -%pure-parser +%define api.pure %parse-param { struct nft_ctx *nft } %parse-param { void *scanner } %parse-param { struct parser_state *state } %lex-param { scanner } -%error-verbose +%define parse.error verbose %locations %initial-action { -- 2.22.0 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [nft PATCH 2/2] nfnl_osf: Silence string truncation gcc warnings 2019-07-20 18:52 [nft PATCH 1/2] parser_bison: Get rid of (most) bison compiler warnings Phil Sutter @ 2019-07-20 18:52 ` Phil Sutter 2019-07-20 19:36 ` Florian Westphal 2019-07-21 11:15 ` Fernando Fernandez Mancera 2019-07-20 19:43 ` [nft PATCH 1/2] parser_bison: Get rid of (most) bison compiler warnings Florian Westphal 1 sibling, 2 replies; 8+ messages in thread From: Phil Sutter @ 2019-07-20 18:52 UTC (permalink / raw) To: Pablo Neira Ayuso; +Cc: netfilter-devel Albeit a bit too enthusiastic, gcc is right in that these strings may be truncated since the destination buffer is smaller than the source one. Get rid of the warnings (and the potential problem) by specifying a string "precision" of one character less than the destination. This ensures a terminating nul-character may be written as well. Fixes: af00174af3ef4 ("src: osf: import nfnl_osf.c to load osf fingerprints") Signed-off-by: Phil Sutter <phil@nwl.cc> --- src/nfnl_osf.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/nfnl_osf.c b/src/nfnl_osf.c index be3fd8100b665..bed9ba64b65c6 100644 --- a/src/nfnl_osf.c +++ b/src/nfnl_osf.c @@ -289,32 +289,34 @@ static int osf_load_line(char *buffer, int len, int del, pend = nf_osf_strchr(pbeg, OSFPDEL); if (pend) { *pend = '\0'; - cnt = snprintf(obuf, sizeof(obuf), "%s,", pbeg); + i = sizeof(obuf); + cnt = snprintf(obuf, i, "%.*s,", i - 2, pbeg); pbeg = pend + 1; } pend = nf_osf_strchr(pbeg, OSFPDEL); if (pend) { *pend = '\0'; + i = sizeof(f.genre); if (pbeg[0] == '@' || pbeg[0] == '*') - cnt = snprintf(f.genre, sizeof(f.genre), "%s", pbeg + 1); - else - cnt = snprintf(f.genre, sizeof(f.genre), "%s", pbeg); + pbeg++; + cnt = snprintf(f.genre, i, "%.*s", i - 1, pbeg + 1); pbeg = pend + 1; } pend = nf_osf_strchr(pbeg, OSFPDEL); if (pend) { *pend = '\0'; - cnt = snprintf(f.version, sizeof(f.version), "%s", pbeg); + i = sizeof(f.version); + cnt = snprintf(f.version, i, "%.*s", i - 1, pbeg); pbeg = pend + 1; } pend = nf_osf_strchr(pbeg, OSFPDEL); if (pend) { *pend = '\0'; - cnt = - snprintf(f.subtype, sizeof(f.subtype), "%s", pbeg); + i = sizeof(f.subtype); + cnt = snprintf(f.subtype, i, "%.*s", i - 1, pbeg); pbeg = pend + 1; } -- 2.22.0 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [nft PATCH 2/2] nfnl_osf: Silence string truncation gcc warnings 2019-07-20 18:52 ` [nft PATCH 2/2] nfnl_osf: Silence string truncation gcc warnings Phil Sutter @ 2019-07-20 19:36 ` Florian Westphal 2019-07-20 20:22 ` Phil Sutter 2019-07-21 11:15 ` Fernando Fernandez Mancera 1 sibling, 1 reply; 8+ messages in thread From: Florian Westphal @ 2019-07-20 19:36 UTC (permalink / raw) To: Phil Sutter; +Cc: Pablo Neira Ayuso, netfilter-devel Phil Sutter <phil@nwl.cc> wrote: > Albeit a bit too enthusiastic, gcc is right in that these strings may be > truncated since the destination buffer is smaller than the source one. > Get rid of the warnings (and the potential problem) by specifying a > string "precision" of one character less than the destination. This > ensures a terminating nul-character may be written as well. Fernando sent a patch for this already, with the notable difference of altering the size of the destination buffer by one. ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [nft PATCH 2/2] nfnl_osf: Silence string truncation gcc warnings 2019-07-20 19:36 ` Florian Westphal @ 2019-07-20 20:22 ` Phil Sutter 0 siblings, 0 replies; 8+ messages in thread From: Phil Sutter @ 2019-07-20 20:22 UTC (permalink / raw) To: Florian Westphal; +Cc: Pablo Neira Ayuso, netfilter-devel On Sat, Jul 20, 2019 at 09:36:28PM +0200, Florian Westphal wrote: > Phil Sutter <phil@nwl.cc> wrote: > > Albeit a bit too enthusiastic, gcc is right in that these strings may be > > truncated since the destination buffer is smaller than the source one. > > Get rid of the warnings (and the potential problem) by specifying a > > string "precision" of one character less than the destination. This > > ensures a terminating nul-character may be written as well. > > Fernando sent a patch for this already, with the notable difference > of altering the size of the destination buffer by one. Ah, thanks! I missed it. Replied to it pointing at my patch, also spotted a typo in his patch. :) Cheers, Phil ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [nft PATCH 2/2] nfnl_osf: Silence string truncation gcc warnings 2019-07-20 18:52 ` [nft PATCH 2/2] nfnl_osf: Silence string truncation gcc warnings Phil Sutter 2019-07-20 19:36 ` Florian Westphal @ 2019-07-21 11:15 ` Fernando Fernandez Mancera 2019-07-21 11:29 ` Phil Sutter 1 sibling, 1 reply; 8+ messages in thread From: Fernando Fernandez Mancera @ 2019-07-21 11:15 UTC (permalink / raw) To: Phil Sutter; +Cc: Pablo Neira Ayuso, netfilter-devel Hi Phil, I am porting your changes to my patch and I have few comments, please see below. On 7/20/19 8:52 PM, Phil Sutter wrote: > Albeit a bit too enthusiastic, gcc is right in that these strings may be > truncated since the destination buffer is smaller than the source one. > Get rid of the warnings (and the potential problem) by specifying a > string "precision" of one character less than the destination. This > ensures a terminating nul-character may be written as well. > > Fixes: af00174af3ef4 ("src: osf: import nfnl_osf.c to load osf fingerprints") > Signed-off-by: Phil Sutter <phil@nwl.cc> > --- > src/nfnl_osf.c | 16 +++++++++------- > 1 file changed, 9 insertions(+), 7 deletions(-) > > diff --git a/src/nfnl_osf.c b/src/nfnl_osf.c > index be3fd8100b665..bed9ba64b65c6 100644 > --- a/src/nfnl_osf.c > +++ b/src/nfnl_osf.c > @@ -289,32 +289,34 @@ static int osf_load_line(char *buffer, int len, int del, > pend = nf_osf_strchr(pbeg, OSFPDEL); > if (pend) { > *pend = '\0'; > - cnt = snprintf(obuf, sizeof(obuf), "%s,", pbeg); > + i = sizeof(obuf); > + cnt = snprintf(obuf, i, "%.*s,", i - 2, pbeg); > pbeg = pend + 1; > } > > pend = nf_osf_strchr(pbeg, OSFPDEL); > if (pend) { > *pend = '\0'; > + i = sizeof(f.genre); > if (pbeg[0] == '@' || pbeg[0] == '*') > - cnt = snprintf(f.genre, sizeof(f.genre), "%s", pbeg + 1); > - else > - cnt = snprintf(f.genre, sizeof(f.genre), "%s", pbeg); > + pbeg++; > + cnt = snprintf(f.genre, i, "%.*s", i - 1, pbeg + 1); > pbeg = pend + 1; > } I am not including this because the pbeg pointer is being modified if the condition is true which is not what we want. Note that pbeg is being used below. Also, we cannot do pbeg++ and at the same time shift the pointer passed to snprintf with pbeg + 1. I propose to let the if statement as it is and modify only the snprintf(). What do you think? Am I missing something here? Thanks Phil! > > pend = nf_osf_strchr(pbeg, OSFPDEL); > if (pend) { > *pend = '\0'; > - cnt = snprintf(f.version, sizeof(f.version), "%s", pbeg); > + i = sizeof(f.version); > + cnt = snprintf(f.version, i, "%.*s", i - 1, pbeg); > pbeg = pend + 1; > } > > pend = nf_osf_strchr(pbeg, OSFPDEL); > if (pend) { > *pend = '\0'; > - cnt = > - snprintf(f.subtype, sizeof(f.subtype), "%s", pbeg); > + i = sizeof(f.subtype); > + cnt = snprintf(f.subtype, i, "%.*s", i - 1, pbeg); > pbeg = pend + 1; > } > > ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [nft PATCH 2/2] nfnl_osf: Silence string truncation gcc warnings 2019-07-21 11:15 ` Fernando Fernandez Mancera @ 2019-07-21 11:29 ` Phil Sutter 0 siblings, 0 replies; 8+ messages in thread From: Phil Sutter @ 2019-07-21 11:29 UTC (permalink / raw) To: Fernando Fernandez Mancera; +Cc: Pablo Neira Ayuso, netfilter-devel Hi, On Sun, Jul 21, 2019 at 01:15:58PM +0200, Fernando Fernandez Mancera wrote: [...] > > pend = nf_osf_strchr(pbeg, OSFPDEL); > > if (pend) { > > *pend = '\0'; > > + i = sizeof(f.genre); > > if (pbeg[0] == '@' || pbeg[0] == '*') > > - cnt = snprintf(f.genre, sizeof(f.genre), "%s", pbeg + 1); > > - else > > - cnt = snprintf(f.genre, sizeof(f.genre), "%s", pbeg); > > + pbeg++; > > + cnt = snprintf(f.genre, i, "%.*s", i - 1, pbeg + 1); > > pbeg = pend + 1; > > } > > I am not including this because the pbeg pointer is being modified if > the condition is true which is not what we want. Note that pbeg is being > used below. Also, we cannot do pbeg++ and at the same time shift the > pointer passed to snprintf with pbeg + 1. Oh, sorry that 'pbeg + 1' in my added code is a bug. I guess incrementing pbeg if it starts with @ or * is fine because after the call to snprintf() it is reset ('pbeg = pend + 1') without reusing its old value. Cheers, Phil ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [nft PATCH 1/2] parser_bison: Get rid of (most) bison compiler warnings 2019-07-20 18:52 [nft PATCH 1/2] parser_bison: Get rid of (most) bison compiler warnings Phil Sutter 2019-07-20 18:52 ` [nft PATCH 2/2] nfnl_osf: Silence string truncation gcc warnings Phil Sutter @ 2019-07-20 19:43 ` Florian Westphal 2019-07-20 20:13 ` Phil Sutter 1 sibling, 1 reply; 8+ messages in thread From: Florian Westphal @ 2019-07-20 19:43 UTC (permalink / raw) To: Phil Sutter; +Cc: Pablo Neira Ayuso, netfilter-devel Phil Sutter <phil@nwl.cc> wrote: > Shut the complaints about POSIX incompatibility by passing -Wno-yacc to > bison. An alternative would be to not pass -y, but that caused seemingly > unsolveable problems with automake and expected file names. > > Fix two warnings about deprecated '%pure-parser' and '%error-verbose' > statements by replacing them with what bison suggests. > > A third warning sadly left in place: Replacing '%name-prefix' by what > is suggested leads to compilation errors. Can you add those warnings to the changelog before pushing? I don't see them, even without this patch. ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [nft PATCH 1/2] parser_bison: Get rid of (most) bison compiler warnings 2019-07-20 19:43 ` [nft PATCH 1/2] parser_bison: Get rid of (most) bison compiler warnings Florian Westphal @ 2019-07-20 20:13 ` Phil Sutter 0 siblings, 0 replies; 8+ messages in thread From: Phil Sutter @ 2019-07-20 20:13 UTC (permalink / raw) To: Florian Westphal; +Cc: Pablo Neira Ayuso, netfilter-devel On Sat, Jul 20, 2019 at 09:43:22PM +0200, Florian Westphal wrote: > Phil Sutter <phil@nwl.cc> wrote: > > Shut the complaints about POSIX incompatibility by passing -Wno-yacc to > > bison. An alternative would be to not pass -y, but that caused seemingly > > unsolveable problems with automake and expected file names. > > > > Fix two warnings about deprecated '%pure-parser' and '%error-verbose' > > statements by replacing them with what bison suggests. > > > > A third warning sadly left in place: Replacing '%name-prefix' by what > > is suggested leads to compilation errors. > > Can you add those warnings to the changelog before pushing? Sure! > I don't see them, even without this patch. I started seeing them just recently, maybe after the last bison update (to 3.4.1). Cheers, Phil ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2019-07-21 11:29 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2019-07-20 18:52 [nft PATCH 1/2] parser_bison: Get rid of (most) bison compiler warnings Phil Sutter 2019-07-20 18:52 ` [nft PATCH 2/2] nfnl_osf: Silence string truncation gcc warnings Phil Sutter 2019-07-20 19:36 ` Florian Westphal 2019-07-20 20:22 ` Phil Sutter 2019-07-21 11:15 ` Fernando Fernandez Mancera 2019-07-21 11:29 ` Phil Sutter 2019-07-20 19:43 ` [nft PATCH 1/2] parser_bison: Get rid of (most) bison compiler warnings Florian Westphal 2019-07-20 20:13 ` Phil Sutter
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox