A simple test script should illustrate the problem with the proposed
change:
#!/usr/bin/perl
my @tests = qw:/usr/share/foo/foo1.2la /usr/lib/foo/foo1.2la
/usr/share/foo/foo1.2.la /usr/lib/foo/foo1.2.la
/usr/lib/qof.la /usr/lib/qof-1.la /usr/lib/qof-%DF_1.la
/usr/lib/qof.lai /usr/lib/qof.laitrtl /usr/lib/qof]zd.la
/usr/lib/qof-~1.la /usr/lib/qof%d.la /usr/lib/qof-_1.la:;
my $crosslib = "/usr/arm-linux-gnu";
foreach my $t (@tests)
{
$safe = $t;
$t =~ s/\S+\/(\w+.la)$/$crosslib\/$1/g;
print "$t\n";
$t = $safe;
$t =~ s/\S+\/([\w-.]+\.la)/$crosslib\/$1/g;
print "\t$t\n";
$t = $safe;
$t =~ s/\S+\/([\w\.\-]+\.la)$/$crosslib\/$1/g;
print "\t\t$t\n";
}
First reg exp is the current version (buggy).
Second reg exp is the proposal from this bug report.
Third is my proposed fix.
output:
/usr/share/foo/foo1.2la
/usr/share/foo/foo1.2la
/usr/share/foo/foo1.2la
/usr/lib/foo/foo1.2la
/usr/lib/foo/foo1.2la
/usr/lib/foo/foo1.2la
/usr/share/foo/foo1.2.la
/usr/arm-linux-gnu/foo1.2.la
/usr/arm-linux-gnu/foo1.2.la
/usr/lib/foo/foo1.2.la
/usr/arm-linux-gnu/foo1.2.la
/usr/arm-linux-gnu/foo1.2.la
/usr/arm-linux-gnu/qof.la
/usr/arm-linux-gnu/qof.la
/usr/arm-linux-gnu/qof.la
/usr/lib/qof-1.la
/usr/arm-linux-gnu/qof-1.la
/usr/arm-linux-gnu/qof-1.la
/usr/lib/qof-%DF_1.la
/usr/lib/qof-%DF_1.la
/usr/lib/qof-%DF_1.la
/usr/lib/qof.lai
/usr/arm-linux-gnu/qof.lai
/usr/lib/qof.lai
/usr/lib/qof.laitrtl
/usr/arm-linux-gnu/qof.laitrtl
/usr/lib/qof.laitrtl
/usr/lib/qof]zd.la
/usr/lib/qof]zd.la
/usr/lib/qof]zd.la
/usr/lib/qof-~1.la
/usr/lib/qof-~1.la
/usr/lib/qof-~1.la
/usr/lib/qof%d.la
/usr/lib/qof%d.la
/usr/lib/qof%d.la
/usr/lib/qof-_1.la
/usr/arm-linux-gnu/qof-_1.la
/usr/arm-linux-gnu/qof-_1.la
The difference is here:
/usr/lib/qof.lai
/usr/arm-linux-gnu/qof.lai
/usr/lib/qof.lai
/usr/lib/qof.laitrtl
/usr/arm-linux-gnu/qof.laitrtl
/usr/lib/qof.laitrtl
lai and laitrl (made-up) files should not match this reg exp.
Escaping the '.' makes no difference.
Is '~' valid in such a context? Is it worth specifically including?
- $t =~ s/\S+\/([\w\.\-]+\.la)$/$crosslib\/$1/g;
+ $t =~ s/\S+\/([\w\.\-\~]+\.la)$/$crosslib\/$1/g;
--
Neil Williams
=============
http://www.data-freedom.org/
http://www.nosoftwarepatents.com/
http://www.linux.codehelp.co.uk/
Attachment:
signature.asc
Description: This is a digitally signed message part