Avoid bizarre meson behavior with backslashes in command arguments.
authorTom Lane <[email protected]>
Mon, 11 Nov 2024 17:20:08 +0000 (12:20 -0500)
committerTom Lane <[email protected]>
Mon, 11 Nov 2024 17:20:08 +0000 (12:20 -0500)
meson makes the backslashes in text2macro.pl's --strip argument
into forward slashes, effectively disabling comment stripping.
That hasn't caused us issues before, but it breaks the test case
for b7e3a52a8.  We don't really need the pattern to be adjustable,
so just hard-wire it into the script instead.

Context: https://.com/mesonbuild/meson/issues/1564
Security: CVE-2024-10979

src/pl/plperl/GNUmakefile
src/pl/plperl/meson.build
src/pl/plperl/text2macro.pl

index b6310d7673846b667064c3ed026e9dbddc8eb1b8..558c764aadb2a80051f0831ae5c25044534455cb 100644 (file)
@@ -85,7 +85,7 @@ plperl_opmask.h: plperl_opmask.pl
 
 perlchunks.h: $(PERLCHUNKS)
    @if [ x"$(perl_privlibexp)" = x"" ]; then echo "configure switch --with-perl was not specified."; exit 1; fi
-   $(PERL) $(srcdir)/text2macro.pl --strip='^(\#.*|\s*)$$' $^ > $@
+   $(PERL) $(srcdir)/text2macro.pl $^ > $@
 
 all: all-lib
 
index 6b4fa229c4a6affd53aab64453889fda3d6b632a..006f7356e6b2201abbdbcd736ba42c9d82cb0ca0 100644 (file)
@@ -17,7 +17,7 @@ plperl_sources += custom_target('perlchunks.h',
   input: files('plc_perlboot.pl', 'plc_trusted.pl'),
   output: 'perlchunks.h',
   capture: true,
-  command: [perl, files('text2macro.pl'), '--strip=^(\#.*|\s*)$', '@INPUT@']
+  command: [perl, files('text2macro.pl'), '@INPUT@']
 )
 
 plperl_sources += custom_target('plperl_opmask.h',
index c6240af69c7d7aef6e8c1b6a35c0ec2b18583ab0..ee65eed363830fd7958c96416b1c2afa7a9c05e0 100644 (file)
@@ -15,14 +15,13 @@ Options:
 
   --prefix=S   - add prefix S to the names of the macros
   --name=S     - use S as the macro name (assumes only one file)
-  --strip=S    - don't include lines that match perl regex S
 
 =head1 DESCRIPTION
 
 Reads one or more text files and outputs a corresponding series of C
 pre-processor macro definitions. Each macro defines a string literal that
 contains the contents of the corresponding text file. The basename of the text
-file as capitalized and used as the name of the macro, along with an optional prefix.
+file is capitalized and used as the name of the macro, along with an optional prefix.
 
 =cut
 
@@ -34,9 +33,12 @@ use Getopt::Long;
 GetOptions(
    'prefix=s' => \my $opt_prefix,
    'name=s' => \my $opt_name,
-   'strip=s' => \my $opt_strip,
    'selftest!' => sub { exit selftest() },) or exit 1;
 
+# This was once a command-line option, but meson is obstreperous
+# about passing backslashes through custom targets.
+my $opt_strip = '^(#.*|\s*)$';
+
 die "No text files specified"
   unless @ARGV;