[Pharo-dev] Is there a portable way to check if a string is a block?

Guillermo Polito guillermopolito at gmail.com
Sun Aug 13 07:58:16 EDT 2017


RBParser parseMethod: '...'

parses a method

RBParser parseExpression: '...'

does it for an expression

But I think both of them return a method node? I cannot recall.

However, you can always do at the end

   node methodNode statements last isBlockNode

or something like that. Can't you?

On Sun, Aug 13, 2017 at 4:32 AM, Eliot Miranda <eliot.miranda at gmail.com>
wrote:

> Hi Mariano,
>
> _,,,^..^,,,_ (phone)
>
> On Jul 24, 2017, at 9:21 AM, Mariano Martinez Peck <marianopeck at gmail.com>
> wrote:
>
> Hi guys,
>
> Is there a portable (that would work in GemStone too) and safe way to know
> if a String would be a block?
>
> I must support this kind of strings:
>
> 'singleString'   -> false
> 'multi string' -> false
> '      [:a | 42]' -> true
> '   '' ''  [:a | 42]' -> true
> '[:a | 42]' -> true
> ' "a commet" [:a | 42]' -> true
> ' WhateverClass someVeryBadHackishMethod. [:a | 42]' -> true
>
> I need to identify whether the string is a closure or not. And ideally, I
> don't want to do an #evaluate: because I don't want any left hand code to
> be executed.
> I tried with #parse:  why I am having problems.
>
> Any ideas?
>
>
> Not sure if you're still stuck but if you dive into evaluate: you'll be
> able to find the point at which it parses, and find out how to invoke the
> parser for an expression (a doit).   evaluate: parses an expression so
> you want to check that the resulting parse tree is that of a return node
> whose expression is a literal block.  You can also check the block's
> argument count.
>
> Once you've extracted the parser invocation you can wrap this in a
> suitable exception handler.  Then you have your block parser.  You still
> have to validate the parse tree and/or generated code before evaluating
> since someone could write malicious code within the block right?
>
>
> Thanks in advance
>
> --
> Mariano
> http://marianopeck.wordpress.com
>
>


-- 



Guille Polito


Research Engineer

French National Center for Scientific Research - *http://www.cnrs.fr*
<http://www.cnrs.fr>



*Web:* *http://guillep.github.io* <http://guillep.github.io>

*Phone: *+33 06 52 70 66 13
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.pharo.org/pipermail/pharo-dev_lists.pharo.org/attachments/20170813/82cf73b3/attachment.html>


More information about the Pharo-dev mailing list