[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

regexp needs a terminator



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


Reply to: