From 3b8cdae343f99fcbb881fbaab21908a60ac774ff Mon Sep 17 00:00:00 2001 From: Todd Zullinger Date: Mon, 20 Mar 2023 11:22:58 -0400 Subject: [PATCH] handle license exception in grouping, better (rhbz#2175241) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Apply upstream commits 48aa148b (TagsCheck: restore space exclusion to license_exception_regex, 2023-03-20)¹ and 65abdbd3 (TagsCheck: handle license exception in first item of a grouping, 2023-03-20)² to improve the handling of license exceptions within groupings. ¹ https://github.com/rpm-software-management/rpmlint/commit/48aa148b ² https://github.com/rpm-software-management/rpmlint/commit/65abdbd3 --- ...e-space-exclusion-to-license_excepti.patch | 28 ++++++ ...-license-exception-in-first-item-of-.patch | 97 +++++++++++++++++++ rpmlint.spec | 7 +- 3 files changed, 131 insertions(+), 1 deletion(-) create mode 100644 0001-TagsCheck-restore-space-exclusion-to-license_excepti.patch create mode 100644 0002-TagsCheck-handle-license-exception-in-first-item-of-.patch diff --git a/0001-TagsCheck-restore-space-exclusion-to-license_excepti.patch b/0001-TagsCheck-restore-space-exclusion-to-license_excepti.patch new file mode 100644 index 0000000..e52e93b --- /dev/null +++ b/0001-TagsCheck-restore-space-exclusion-to-license_excepti.patch @@ -0,0 +1,28 @@ +From 48aa148bd633aa4e27b28239d98cd809e0e45f22 Mon Sep 17 00:00:00 2001 +From: Todd Zullinger +Date: Mon, 20 Mar 2023 03:14:14 -0400 +Subject: [PATCH] TagsCheck: restore space exclusion to license_exception_regex + +In 7d707f7f (TagsCheck: handle license exception in grouping, +2023-03-03), the regex lost the exclusion of space characters. This +isn't immediately noticeable because we strip the strings generated by +the regex before use, but it's better to keep the regex more precise. + +Suggested-by: Daniel Garcia Moreno +--- + rpmlint/checks/TagsCheck.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/rpmlint/checks/TagsCheck.py b/rpmlint/checks/TagsCheck.py +index 923538ba..65c75c92 100644 +--- a/rpmlint/checks/TagsCheck.py ++++ b/rpmlint/checks/TagsCheck.py +@@ -21,7 +21,7 @@ + leading_space_regex = re.compile(r'^\s+') + pkg_config_regex = re.compile(r'^/usr/(?:lib\d*|share)/pkgconfig/') + license_regex = re.compile(r'\(([^)]+)\)|\s(?:and|or|AND|OR)\s') +-license_exception_regex = re.compile(r'(\S+)\s(?:WITH|with)\s([^)]+)') ++license_exception_regex = re.compile(r'(\S+)\s(?:WITH|with)\s([^)\s]+)') + invalid_version_regex = re.compile(r'([0-9](?:rc|alpha|beta|pre).*)', re.IGNORECASE) + # () are here for grouping purpose in the regexp + tag_regex = re.compile(r'^((?:Auto(?:Req|Prov|ReqProv)|Build(?:Arch(?:itectures)?|Root)|(?:Build)?Conflicts|(?:Build)?(?:Pre)?Requires|Copyright|(?:CVS|SVN)Id|Dist(?:ribution|Tag|URL)|DocDir|(?:Build)?Enhances|Epoch|Exclu(?:de|sive)(?:Arch|OS)|Group|Icon|License|Name|No(?:Patch|Source)|Obsoletes|Packager|Patch\d*|Prefix(?:es)?|Provides|(?:Build)?Recommends|Release|RHNPlatform|Serial|Source\d*|(?:Build)?Suggests|Summary|(?:Build)?Supplements|(?:Bug)?URL|Vendor|Version)(?:\([^)]+\))?:)\s*\S', re.IGNORECASE) diff --git a/0002-TagsCheck-handle-license-exception-in-first-item-of-.patch b/0002-TagsCheck-handle-license-exception-in-first-item-of-.patch new file mode 100644 index 0000000..b23d36f --- /dev/null +++ b/0002-TagsCheck-handle-license-exception-in-first-item-of-.patch @@ -0,0 +1,97 @@ +From 65abdbd383166ce727ece30f79b0808f46c2da29 Mon Sep 17 00:00:00 2001 +From: Todd Zullinger +Date: Mon, 20 Mar 2023 03:20:44 -0400 +Subject: [PATCH] TagsCheck: handle license exception in first item of a + grouping + +The change in 7d707f7f (TagsCheck: handle license exception in grouping, +2023-03-03) is insufficient when the exception is on the first item in a +grouping, e.g.: + + License: (Apache-2.0 WITH LLVM-exception OR NCSA) AND BSD-3-Clause + +Adjust `license_exception_regex` to exclude a leading '(' as well as a +trailing ')'. +--- + rpmlint/checks/TagsCheck.py | 2 +- + .../valid-exception-begin-grouping-1.0-1.src.rpm | Bin 0 -> 6644 bytes + test/test_tags.py | 12 ++++++++++++ + 3 files changed, 13 insertions(+), 1 deletion(-) + create mode 100644 test/source/valid-exception-begin-grouping-1.0-1.src.rpm + +diff --git a/rpmlint/checks/TagsCheck.py b/rpmlint/checks/TagsCheck.py +index 65c75c92..64088f55 100644 +--- a/rpmlint/checks/TagsCheck.py ++++ b/rpmlint/checks/TagsCheck.py +@@ -21,7 +21,7 @@ + leading_space_regex = re.compile(r'^\s+') + pkg_config_regex = re.compile(r'^/usr/(?:lib\d*|share)/pkgconfig/') + license_regex = re.compile(r'\(([^)]+)\)|\s(?:and|or|AND|OR)\s') +-license_exception_regex = re.compile(r'(\S+)\s(?:WITH|with)\s([^)\s]+)') ++license_exception_regex = re.compile(r'([^(\s]+)\s(?:WITH|with)\s([^)\s]+)') + invalid_version_regex = re.compile(r'([0-9](?:rc|alpha|beta|pre).*)', re.IGNORECASE) + # () are here for grouping purpose in the regexp + tag_regex = re.compile(r'^((?:Auto(?:Req|Prov|ReqProv)|Build(?:Arch(?:itectures)?|Root)|(?:Build)?Conflicts|(?:Build)?(?:Pre)?Requires|Copyright|(?:CVS|SVN)Id|Dist(?:ribution|Tag|URL)|DocDir|(?:Build)?Enhances|Epoch|Exclu(?:de|sive)(?:Arch|OS)|Group|Icon|License|Name|No(?:Patch|Source)|Obsoletes|Packager|Patch\d*|Prefix(?:es)?|Provides|(?:Build)?Recommends|Release|RHNPlatform|Serial|Source\d*|(?:Build)?Suggests|Summary|(?:Build)?Supplements|(?:Bug)?URL|Vendor|Version)(?:\([^)]+\))?:)\s*\S', re.IGNORECASE) +diff --git a/test/source/valid-exception-begin-grouping-1.0-1.src.rpm b/test/source/valid-exception-begin-grouping-1.0-1.src.rpm +new file mode 100644 +index 0000000000000000000000000000000000000000..d0aba4903debd79db253b7655f3a001f2edfe0b2 +GIT binary patch +literal 6644 +zcmeI0X>3$g6vyv$3f3aFEV78;Lm+IK;q6OBs1%_PECOW_i}IHHrlYf^^Qr?V`=X#k +z!y+0!ARz{1u?UI;(1I2aF%Y7H0*L|z1leR&YwJ1f1&N9H#c$3_PXF)s&Rx&DeUtpp +ztv-L)Pl%8Bo;M?5CqPp+O?csWEMU=4I2H(%#mf`nSSTO_`G7#~eECSDzc-k__Oy>Z +zyNi(Ajd0%w0`FIV=EBrXK^sHh1#NxJK#{vQu>Uk@CPaks&!EtsBp{%_{{krHr$Rt~ +z|3y&D&xAB5Qd^>uVJNn!nX)7cifh{%6?jm^po&99jmk151~pBWw+&s;ZR%*YVGD}o +z2vl=aNpMBpRe8(SWSiGy)#6Rc^NOG;)U-^^q@ruXgoI?3R0xNCyC+vK%R3uLG!s62 +zlaP$9^{MoqbOq8CNLL_Tfpi7Z6-ZYgU4e83(iKQoAYFlU1=1DxzgM8%6RE4KdmRb^ +zo(3Ve`6dc@8jIjjUkLCu{Ifu@jRTPdffxE7=#!vtlEL^V#vK`-Vcdl=`Y3lpbY*;w +zag_0SQ1n&Mv%&GvXTkA5W_$@0^ItQ*42tGI4ISvJxzhdqXZ`oDGWYJ;qHyp?qe;MOK#w!>P0>%C-84qXqHH^nFu3-Em +zD7N3o7~d0)f3sfWSiX|wpJsf5u>*?ht7c3Y<2l9sxQy}K0k>EHisNIwkax2D4aPVw +zt_RNv=5btT@6Tt9=MeJ#{>TO7&VDBWzmo{0m?k~WjhAsl!ZwX1Dd(9X?uD>d%9%0l +zmRHJ|9_N)(uHG_@fm_POUC!igdZ+)*C_&=1uG$xkmnBNWF&gw}JZ8pB+w>yA81-OJ +zxUE&ie?8`gcutUX8~DVKfC%PoJQkV2jUH57$PM!X`0&>9(cA6LJzCVC>o=l*KnfH@ +z%LVaUcPOGG1Kt6M=lnkb{mBy|RaBeV#& +z(VegyKItD0!CQxCQjibIV0z0zwch-egMtYyOCMlyXC3l@yLgP|-&TP> +zT!3rv%L80E7WTqsgiDzAb7qK=e|mwOplXJw8H%bkY!R1TABcFLb-M+B=RF6L32GB! +zC&FTnqga(MioWW4NGw(Lr`p0 +zvMh_Ls%opINGZ7Gcx4Her0TB3JF;Ucx+qD4Zn>@_+oo$6s-rkAjO=QnZd$r67?LEb +zj_rsPCN~V%;Bk=pAGNx=8vLl_J~$8lKjF&ozczf>&>ej4$<3c0OL4;%%#SV05(c!K +z(fQ@SXWo_1!1WnRLK= +zs`k>FZC5J-*QSrYxXtQ(YU$!WT}C}y6>3>nHKRE6O7S$i`7b>e?a8vwRNgyf^!l!Y +zAMX(CQ8KVXcx(~c_TJ2i0Ztm`dug;oPWOjRL`0PrH#1G7#nw=fUZ=!ZSRQO&= +z(<>Rd+0knw$L;TM<-(jJ$;^X2#%{knexg5T@%uBj)Lw3!^UlL(wpXv%)vl(;j=i~) +z9?1E!prABrM~Y6&t?a^4fmv1(Z=ST3inUh +sK6Om(sO2?NYCrpALSNx`_1)v=$EO}yH){1}ue!y_! - 2.4.0-6 +- handle license exception in grouping, better (rhbz#2175241) + * Mon Mar 06 2023 Todd Zullinger - 2.4.0-5 - handle license exception in grouping (rhbz#2175241)