# [SERVER] ALPHA release of LambdaMOO server 1.7.9

Gustavo Glusman (bmgustav@bioinformatics.weizmann.ac.il)
Thu, 28 Sep 1995 11:12:41 PDT

- Messages sorted by:[ date ][ thread ][ subject ][ author ]

    >   ********** The old GNU regex package had a bug in its handling of certain
    >   ** NOTE ** patterns with parentheses in them, and it is reasonably likely
    >   ********** that many MOO programmers have, perhaps unconsciously, come to
    >   depend upon this buggy behavior.  Unfortunately for such programmers, RX
    >   does not have this bug, so you will want to fix your regular expressions
    >   before upgrading to this release; the fixed patterns will work correctly on
    >   both releases.

    Isn't backwards incompatibility great?

    >     The old bug concerns patterns of the form `%( ... %)*', that is, a starred
    >   parenthesized sub-pattern; for example, consider the MOO expression
    >        match("foo", "%(o%)*")

    I'm not sure what 'of the form' includes, but it also seems to include
    patterns 'of the form': "%( ... %)+".
    Could we get a list of *all* 'forms' that used to be 'wrong', to simplify
    the 'fixing' task?

    Oh great. I just tried ;match("foo", "%(o%)*") in both 1.7.8p4 and 1.7.9a1.
    1.7.8p4 returns => {1, 0, {{0, -1}, {0, -1}, {0, -1}, {0, -1}, {0, -1}, {0,
    -1}, {0, -1}, {0, -1}, {0, -1}}, "foo"}
    1.7.9a1 returns => {1, 0, {{0, -1}, {0, -1}, {0, -1}, {0, -1}, {0, -1}, {0,
    -1}, {0, -1}, {0, -1}, {0, -1}, {0, -1}, {0, -1}, {0, -1}, {0, -1}, {0,
    -1}, {0, -1}, {0, -1}, {0, -1}, {0, -1}, {0, -1}, {0, -1}, {0, -1}, {0,
    -1}, {0, -1}, {0, -1}, {0, -1}, {0, -1}, {0, -1}, {0, -1}, {0, -1}}, "foo"}

    >   To get the effect of the old bug, you need another set of parentheses around
    >   the whole starred sub-pattern:
    >        match("foo", "%(%(o%)*%)")

    This is really great! Now regexp's are even more cryptic!
    Wouldn't it be nice if regexps could include some kind of parentheses that
    don't make the server keep the value matched? I mean, %( %) has currently
    two functions. Many times I'd like to enclose a subpattern and not keep it
    in the match output, especially if the pattern is complex and there are
    many subpatterns to remember...

    >   You should look carefully at your uses of match() and rmatch() before
    >   upgrading to this release, fixing those places where your code depends on
    >   the old, buggy behavior.

    This is a great suggestion. Grepping code and fixing it is the best way to
    discover hidden security holes.
     '@egrep [^:]match('  gave 'only' 122 verbs in BioMOO. Isn't backwards
    incompatibility great?

    Could someone suggest a better regexp to @egrep with, to make the task simpler?
    Would "[^:]r?match(.*%%(.*%%)[+*]" be any better? Would this be comprehensive?
    >From the results of '@egrep [^:]match(', I see there are various LambdaCore
    uses of match that have variable regexps, which will of course make it very
    nice to debug. Moreover, some receive the string to be matched, and the
    pattern, as arguments. So you have to go back and check who calls the verb,
    etc, etc, etc.

    Bah, I'd better stop rambling. This looks like it isn't going to be a
    trivial server change.
    It would be great if people posted what changes are needed in LambdaCore.
    Personally, I think this is a huge waste of time. Sometimes, broken seems
    to be better.

    -------------------------------------------------------------
    Gustavo Glusman               Founder/administrator of BioMOO
    -- Gustavo@bioinformatics.weizmann.ac.il
    -- http://bioinformatics.weizmann.ac.il:70/0h/Gustavo/Glusman
    -- BioMOO: telnet bioinformatics.weizmann.ac.il 8888
               WWW:   http://bioinfo.weizmann.ac.il:8888