This is an automated email from the git hooks/post-receive script. guillem pushed a commit to branch main in repository dpkg.
View the commit online: https://git.dpkg.org/cgit/dpkg/dpkg.git/commit/?id=d5ef1bfa677d37e1daa1aeb4235d18fc679a76d2 commit d5ef1bfa677d37e1daa1aeb4235d18fc679a76d2 Author: Guillem Jover <[email protected]> AuthorDate: Fri Nov 28 23:09:01 2025 +0100 Dpkg::BuildProfiles: Add new build_profile_is_invalid function This function validates whether a build profile formula is valid. --- scripts/Dpkg/BuildProfiles.pm | 54 +++++++++++++++++++++++++++++++++++++++++- scripts/t/Dpkg_BuildProfiles.t | 23 +++++++++++++++++- 2 files changed, 75 insertions(+), 2 deletions(-) diff --git a/scripts/Dpkg/BuildProfiles.pm b/scripts/Dpkg/BuildProfiles.pm index b3b2961d8..2444a313c 100644 --- a/scripts/Dpkg/BuildProfiles.pm +++ b/scripts/Dpkg/BuildProfiles.pm @@ -26,13 +26,14 @@ profiles. =cut -package Dpkg::BuildProfiles 1.00; +package Dpkg::BuildProfiles 1.01; use v5.36; our @EXPORT_OK = qw( get_build_profiles set_build_profiles + build_profile_is_invalid parse_build_profiles evaluate_restriction_formula ); @@ -82,6 +83,53 @@ sub set_build_profiles { Dpkg::BuildEnv::set('DEB_BUILD_PROFILES', join ' ', @profiles); } +=item $bool = build_profile_is_invalid($string) + +Validate a build profile formula. + +=cut + +my $profile_name_regex = qr{ + !? + # Be lenient for now. Accept operators for extensibility, uppercase, + # and package name characters. + [ + ?/;:=@%*~_ + A-Z + a-z0-9+.\- + ]+ +}x; + +my $restriction_list_regex = qr{ + < + \s* + ( + $profile_name_regex + (?: + \s+ + $profile_name_regex + )* + ) + \s* + > +}x; + +my $restriction_formula_regex = qr{ + ^ + (?: + \s* + $restriction_list_regex + )* + \s* + $ +}x; + + +sub build_profile_is_invalid($string) +{ + return $string !~ $restriction_formula_regex; +} + =item @profiles = parse_build_profiles($string) Parses a build profiles specification, into an array of array references. @@ -138,6 +186,10 @@ sub evaluate_restriction_formula { =head1 CHANGES +=head2 Version 1.01 (dpkg 1.23.0) + +New functions: build_profile_is_invalid(). + =head2 Version 1.00 (dpkg 1.17.17) Mark the module as public. diff --git a/scripts/t/Dpkg_BuildProfiles.t b/scripts/t/Dpkg_BuildProfiles.t index 94676a352..2b5f5f3ea 100644 --- a/scripts/t/Dpkg_BuildProfiles.t +++ b/scripts/t/Dpkg_BuildProfiles.t @@ -15,9 +15,10 @@ use v5.36; -use Test::More tests => 8; +use Test::More tests => 17; use ok 'Dpkg::BuildProfiles', qw( + build_profile_is_invalid parse_build_profiles set_build_profiles get_build_profiles @@ -27,6 +28,26 @@ use ok 'Dpkg::BuildProfiles', qw( my $formula; +ok(!build_profile_is_invalid(''), + 'check that build profiles with no characters are valid'); +ok(!build_profile_is_invalid('<nocheck>'), + 'check that build profiles with a valid single element are valid'); +ok(!build_profile_is_invalid('<nocheck nodoc> <pkg/dpkg/author-checks>'), + 'check that build profiles with a valid formula are valid'); + +ok(build_profile_is_invalid('<invalid> + <characters>'), + 'check that build profiles with invalid characters are invalid'); +ok(build_profile_is_invalid('missing angle brackets'), + 'check that build profiles with missing opening/closing angle brackets are invalid'); +ok(build_profile_is_invalid('<missing angle brackets <here too'), + 'check that build profiles with missing closing angle brackets are invalid 1'); +ok(build_profile_is_invalid('<missing angle brackets <here too>'), + 'check that build profiles with missing closing angle brackets are invalid 2'); +ok(build_profile_is_invalid('missing angle> brackets>'), + 'check that build profiles with missing opening angle brackets are invalid 1'); +ok(build_profile_is_invalid('missing angle> <brackets>'), + 'check that build profiles with missing opening angle brackets are invalid 2'); + $formula = [ ]; is_deeply([ parse_build_profiles('') ], $formula, 'parse build profiles formula empty'); -- Dpkg.Org's dpkg

