check-symbol-change: fix regex to match on end of map file

Message ID 20181101135410.15945-1-nhorman@tuxdriver.com (mailing list archive)
State Accepted, archived
Delegated to: Thomas Monjalon
Headers
Series check-symbol-change: fix regex to match on end of map file |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation success Compilation OK

Commit Message

Neil Horman Nov. 1, 2018, 1:54 p.m. UTC
  the regex to determine the end of the map file chunk in a patch seems to
be wrong,  It was using perl regex syntax, which awk doesn't appear to
support (I'm still not sure how it was working previously).  Regardless,
it wasn't triggering and as a result symbols were getting added to the
mapdb that shouldn't be there.

Fix it by converting the regex to use traditional posix syntax, matching
only on the negation of the character class [^map]

Tested and shown to be working on the ip_frag patch set provided by
doucette@bu.edu

Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
CC: thomas@monjalon.net
CC: doucette@bu.edu
Reported-by: doucette@bu.edu
---
 devtools/check-symbol-change.sh | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)
  

Comments

Thomas Monjalon Nov. 1, 2018, 10:53 p.m. UTC | #1
01/11/2018 14:54, Neil Horman:
> the regex to determine the end of the map file chunk in a patch seems to
> be wrong,  It was using perl regex syntax, which awk doesn't appear to
> support (I'm still not sure how it was working previously).  Regardless,
> it wasn't triggering and as a result symbols were getting added to the
> mapdb that shouldn't be there.
> 
> Fix it by converting the regex to use traditional posix syntax, matching
> only on the negation of the character class [^map]
> 
> Tested and shown to be working on the ip_frag patch set provided by
> doucette@bu.edu
> 
> Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
> CC: thomas@monjalon.net
> CC: doucette@bu.edu
> Reported-by: doucette@bu.edu

You could use these lines:

Fixes: 4bec48184e33 ("devtools: add checks for ABI symbol addition")

Reported-by: Cody Doucette <doucette@bu.edu>

> --- a/devtools/check-symbol-change.sh
> +++ b/devtools/check-symbol-change.sh
> -		/[-+] a\/.*\.^(map)/ {in_map=0}
> +		/[-+] a\/.*\.[^map]/ {in_map=0}

Not sure this is what you intend:
[^map] means any character except "m", "a" and "p".

I don't know whether awk supports this syntax: (?!foo)
  
Neil Horman Nov. 2, 2018, 11:50 a.m. UTC | #2
On Thu, Nov 01, 2018 at 11:53:00PM +0100, Thomas Monjalon wrote:
> 01/11/2018 14:54, Neil Horman:
> > the regex to determine the end of the map file chunk in a patch seems to
> > be wrong,  It was using perl regex syntax, which awk doesn't appear to
> > support (I'm still not sure how it was working previously).  Regardless,
> > it wasn't triggering and as a result symbols were getting added to the
> > mapdb that shouldn't be there.
> > 
> > Fix it by converting the regex to use traditional posix syntax, matching
> > only on the negation of the character class [^map]
> > 
> > Tested and shown to be working on the ip_frag patch set provided by
> > doucette@bu.edu
> > 
> > Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
> > CC: thomas@monjalon.net
> > CC: doucette@bu.edu
> > Reported-by: doucette@bu.edu
> 
> You could use these lines:
> 
> Fixes: 4bec48184e33 ("devtools: add checks for ABI symbol addition")
> 
> Reported-by: Cody Doucette <doucette@bu.edu>
> 
I'm fine with the second line, and the first is fine I guess, but I'm not sure
there is an exact correlation

> > --- a/devtools/check-symbol-change.sh
> > +++ b/devtools/check-symbol-change.sh
> > -		/[-+] a\/.*\.^(map)/ {in_map=0}
> > +		/[-+] a\/.*\.[^map]/ {in_map=0}
> 
> Not sure this is what you intend:
> [^map] means any character except "m", "a" and "p".
> 
Its not 100%, but its pretty close.  The regex for exact matching on not a
specific string is pretty large and complex.  Since we have no files that that
end in .m .a or .p, this should give us what we want for the forseeable future.

> I don't know whether awk supports this syntax: (?!foo)
> 
It unfortunately doesn't, thats perl syntax, and while grep I think supports it,
awk is more strictly posix compliant.

Neil

> 
>
  
Thomas Monjalon Nov. 18, 2018, 10:25 p.m. UTC | #3
02/11/2018 12:50, Neil Horman:
> On Thu, Nov 01, 2018 at 11:53:00PM +0100, Thomas Monjalon wrote:
> > 01/11/2018 14:54, Neil Horman:
> > > the regex to determine the end of the map file chunk in a patch seems to
> > > be wrong,  It was using perl regex syntax, which awk doesn't appear to
> > > support (I'm still not sure how it was working previously).  Regardless,
> > > it wasn't triggering and as a result symbols were getting added to the
> > > mapdb that shouldn't be there.
> > > 
> > > Fix it by converting the regex to use traditional posix syntax, matching
> > > only on the negation of the character class [^map]
> > > 
> > > Tested and shown to be working on the ip_frag patch set provided by
> > > doucette@bu.edu
> > > 
> > > Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
> > > CC: thomas@monjalon.net
> > > CC: doucette@bu.edu
> > > Reported-by: doucette@bu.edu
> > 
> > You could use these lines:
> > 
> > Fixes: 4bec48184e33 ("devtools: add checks for ABI symbol addition")
> > 
> > Reported-by: Cody Doucette <doucette@bu.edu>
> > 
> I'm fine with the second line, and the first is fine I guess, but I'm not sure
> there is an exact correlation
> 
> > > --- a/devtools/check-symbol-change.sh
> > > +++ b/devtools/check-symbol-change.sh
> > > -		/[-+] a\/.*\.^(map)/ {in_map=0}
> > > +		/[-+] a\/.*\.[^map]/ {in_map=0}
> > 
> > Not sure this is what you intend:
> > [^map] means any character except "m", "a" and "p".
> > 
> Its not 100%, but its pretty close.  The regex for exact matching on not a
> specific string is pretty large and complex.  Since we have no files that that
> end in .m .a or .p, this should give us what we want for the forseeable future.
> 
> > I don't know whether awk supports this syntax: (?!foo)
> > 
> It unfortunately doesn't, thats perl syntax, and while grep I think supports it,
> awk is more strictly posix compliant.

I understand now.

Applied, thanks
  

Patch

diff --git a/devtools/check-symbol-change.sh b/devtools/check-symbol-change.sh
index c0d2a6da1..1d21e9165 100755
--- a/devtools/check-symbol-change.sh
+++ b/devtools/check-symbol-change.sh
@@ -23,7 +23,7 @@  build_map_changes()
 		# does not end in 'map', indicating we have left the map chunk.
 		# When we hit this, turn off the in_map variable, which
 		# supresses the subordonate rules below
-		/[-+] a\/.*\.^(map)/ {in_map=0}
+		/[-+] a\/.*\.[^map]/ {in_map=0}
 
 		# Triggering this rule, which starts a line and ends it
 		# with a { identifies a versioned section.  The section name is
@@ -153,7 +153,6 @@  clean_and_exit_on_sig()
 build_map_changes "$patch" "$mapfile"
 check_for_rule_violations "$mapfile"
 exit_code=$?
-
 rm -f "$mapfile"
 
 exit $exit_code