Hi Grygorii,

On 04/11/2019 15:09, Grygorii Tertychnyi (gtertych) wrote:
Andrei,

From: Andrei Gherzan <and...@gherzan.ro>
Sent: Friday, November 1, 2019 13:28
To: Grygorii Tertychnyi (gtertych); openembedded-core@lists.openembedded.org
Cc: xe-linux-external(mailer list)
Subject: Re: [OE-core] [PATCH] archiver: avoid empty incfile in ar_recipe

do_ar_recipe fails on perf recipe on line:

include ${@bb.utils.contains('PACKAGECONFIG', 'scripting', 'perf-perl.inc', '', 
d)}

1. "${...}" part expands into empty string
2. bb.utils.which() takes empty string and returns first directory name from 
bbpath

This doesn't sound sane. If the include directive has no argument,
incfile should end up None. That's what the code "assumes" at this

I agree.

point. I would fix it either at the regex expression level or
stripping the matched string. I reckon the former makes more sense
(.*).

Not sure I understand. Archiver class does not interpret "include" directive.
It just parses text files. The regular expression looks correct:

These lines:

440         elif include_re.match(line):
441             incfile = include_re.match(line).group(1)

put "${...}" _string_ into "incfile" variable. So, "incfile" is not None at 
"this stage.

"${...}" it's already expanded to a white-space. So in that case it matches "include ".

Then,

443             incfile = d.expand(incfile)

Now "incfile" is empty and nobody checks it.

incfile is not empty. It's actually a string containing one white-space.


444             incfile = bb.utils.which(bbpath, incfile)

Now "incfile" is set to first directory name in BBPATH (wrong behavour?)

445             if incfile:
446                 shutil.copy(incfile, outdir)

Exception here: "incfile" is directory, not a file.


The include regex is the following:

include_re = re.compile( r"include\s+(.+)" )

The issue is that when this is matched on a string suffixed with only spaces, it will match the last space as group(1). This is because ".+" forces to match the last white-space. Changing that to ".*" will make the group(1) be an empty string and later the if will evaluate False.

--
Andrei Gherzan
--
_______________________________________________
Openembedded-core mailing list
Openembedded-core@lists.openembedded.org
http://lists.openembedded.org/mailman/listinfo/openembedded-core

Reply via email to