[bitbake-devel] shell parser: deep nesting

Patrick Ohly patrick.ohly at intel.com
Fri Nov 18 15:22:09 UTC 2016


Hello!

I ran into a bug
(https://bugzilla.yoctoproject.org/show_bug.cgi?id=10668) where parsing
a shell fragment like "echo hello & wait $!" triggers this error:

Traceback (most recent call last):
  File "/work/poky/bitbake/lib/bb/codeparser.py", line 400, in ShellParser.process_tokens(tokens=[('if_clause', <bb.pysh.pyshyacc.IfCond object at 0x7fb480963390>)]):
                 if more_tokens:
    >                self.process_tokens(more_tokens)
     
  File "/work/poky/bitbake/lib/bb/codeparser.py", line 400, in ShellParser.process_tokens(tokens=<itertools.chain object at 0x7fb480949278>):
                 if more_tokens:
    >                self.process_tokens(more_tokens)
     
  File "/work/poky/bitbake/lib/bb/codeparser.py", line 400, in ShellParser.process_tokens(tokens=[('while_clause', <bb.pysh.pyshyacc.WhileLoop object at 0x7fb480949518>)]):
                 if more_tokens:
    >                self.process_tokens(more_tokens)
     
  File "/work/poky/bitbake/lib/bb/codeparser.py", line 400, in ShellParser.process_tokens(tokens=<itertools.chain object at 0x7fb480446668>):
                 if more_tokens:
    >                self.process_tokens(more_tokens)
     
  File "/work/poky/bitbake/lib/bb/codeparser.py", line 393, in ShellParser.process_tokens(tokens=[[('pipeline', <bb.pysh.pyshyacc.Pipeline object at 0x7fb480949c88>)]]):
             for token in tokens:
    >            name, value = token
                 try:
ValueError: need more than 1 value to unpack

After thinking about this a bit more I *think* I understand the problem
(expecting a certain level of nesting while the parser may also hand out
tokens with deeper nesting in the pipeline case) and I'll send a patch
fixing the issue for me.

But I'm not entirely sure whether that's really addressing the root
cause of the problem - perhaps such deep nesting shouldn't occur?

So I hope that someone familiar with this code can have a look at the
problem and the proposed solution.

Also, does it have performance implications that
ShellParser.process_tokens() defines the same helper functions
repeatedly? They don't depend on the current invocation context and thus
could also be defined as private helper functions in ShellParser.

-- 
Best Regards, Patrick Ohly

The content of this message is my personal opinion only and although
I am an employee of Intel, the statements I make here in no way
represent Intel's position on the issue, nor am I authorized to speak
on behalf of Intel on this matter.






More information about the bitbake-devel mailing list