Nasty filter bug

Brian Milby brian at milby7.com
Wed Jan 24 18:56:25 EST 2024


It seems that an unmatched opening bracket makes it completely fail.  My
guess is that the filter string is not valid so it doesn't even try.  I
couldn't get a filter string containing a "[" to match anything.

On Wed, Jan 24, 2024 at 5:23 PM Craig Newman via use-livecode <
use-livecode at lists.runrev.com> wrote:

> Brian.
>
> So the inclusion of “[“ would have matched nothing in the original string
> ""aaa[bbb””? That is, even though the bracketed string was not “closed”
> with “]”, did it try to find a string that began with “b”, failed, and
> therefore returned the original string untouched?
>
> Craig
>
> > On Jan 24, 2024, at 4:37 PM, Brian Milby via use-livecode <
> use-livecode at lists.runrev.com> wrote:
> >
> > I just want to clarify that this isn’t the regex version of filter but
> the wildcard pattern version.  It is much less complicated than regex.
> Square brackets are used to group characters to be matched so you can use
> [abc]* to match any item that starts with a, b, or c.  The dictionary entry
> for this is pretty good.
> >
> > Brian Milby
> > brian at milby7.com <mailto:brian at milby7.com>
> >
> >> On Jan 24, 2024, at 3:35 PM, Craig Newman via use-livecode <
> use-livecode at lists.runrev.com <mailto:use-livecode at lists.runrev.com>>
> wrote:
> >>
> >> Brian.
> >>
> >> The original post tried to filter a string by filtering (without) that
> actual string, and was interested in why that did not yield empty.
> Intuitively, the result of such a filter operation ought always to be
> empty. The presence of the char “[“ is the “culprit”. That is as far as I
> took it.
> >>
> >> Anyway, you state that the char “[“ is a regex special character, which
> explains a lot. The other two, “?” and “*” filter without issue, though,
> and I guess one has to be a regex user to see why.
> >>
> >> I am not.
> >>
> >> Craig
> >>
> >>> On Jan 24, 2024, at 2:53 PM, Brian Milby via use-livecode <
> use-livecode at lists.runrev.com <mailto:use-livecode at lists.runrev.com>>
> wrote:
> >>>
> >>> Your test misses the actual issue:
> >>>
> >>> on mouseup
> >>> local tStr
> >>> local tFilter
> >>> put "a*b" into tFilter
> >>> put "anything bold" into tStr
> >>> filter tStr with tFilter
> >>> put tStr
> >>> end mouseup
> >>>
> >>> Will yield "anything bold"
> >>>
> >>> while using the following 2 lines:
> >>> put "a?b" into tFilter
> >>> put "a*b" into tStr
> >>> will yield "a*b"
> >>>
> >>> Finally, using the following 2 lines:
> >>> put "a[?]b" into tFilter
> >>> put "a?b" into tStr
> >>> will  yield "a?b"
> >>>
> >>> The point is that you can end up with issues if you are counting on
> "*" and
> >>> "?" to filter literally.  They don't - they are wildcards and can match
> >>> anything (multiple char or single char respectively).  The "[" is also
> >>> special.
> >>>
> >>> To ensure that your filters work properly if you do not want to use any
> >>> wildcards (i.e. match * and ? literally) would require you to change
> *, ?,
> >>> and [ to [*], [?], and [[].
> >>>
> >>>> On Wed, Jan 24, 2024 at 1:19 PM Craig Newman via use-livecode <
> >>>> use-livecode at lists.runrev.com <mailto:use-livecode at lists.runrev.com>>
> wrote:
> >>>>
> >>>> OK, instead of working I did this:
> >>>>
> >>>> on mouseUp
> >>>>
> >>>> repeat with y = 1 to 255
> >>>>
> >>>> put "XX" & numToChar(y) & "XX"  into temp
> >>>>
> >>>> filter temp without temp
> >>>>
> >>>> if temp <> "" then put y & return after accum
> >>>>
> >>>> end repeat
> >>>>
> >>>> answer accum
> >>>>
> >>>> end mouseUp
> >>>>
> >>>> There are two characters that prevent the filter command from doing
> its
> >>>> job: ASCII 91 (“[“) and ASCII 10, the return char.
> >>>>
> >>>>
> >>>>
> >>>> Craig
> >>>>
> >>>>
> >>>>> On Jan 24, 2024, at 12:51 PM, Craig Newman via use-livecode <
> >>>> use-livecode at lists.runrev.com <mailto:use-livecode at lists.runrev.com>>
> wrote:
> >>>>>
> >>>>> Brian.
> >>>>>
> >>>>> Nope. Those two chars pass through the filter, er, filtered.
> >>>>>
> >>>>> Again, I did not test the entire character set.
> >>>>>
> >>>>> Craig
> >>>>>
> >>>>>> On Jan 24, 2024, at 11:05 AM, Brian Milby via use-livecode <
> >>>> use-livecode at lists.runrev.com> wrote:
> >>>>>>
> >>>>>> The only other two that would cause issues are ? and * which are
> single
> >>>> and multiple char wildcards respectively.
> >>>>>>
> >>>>>> Brian Milby
> >>>>>> brian at milby7.com
> >>>>>>
> >>>>>>> On Jan 24, 2024, at 10:21 AM, Craig Newman via use-livecode <
> >>>> use-livecode at lists.runrev.com> wrote:
> >>>>>>>
> >>>>>>> I did not test the ASCII set exhaustively, but the culprit is the
> >>>> char “[“ (ASCII 91). Any other char (including “]”) in the string
> works
> >>>> correctly, that is, nothing is left after the filter command executes.
> >>>>>>>
> >>>>>>> I do not know enough to say whether that particular char  does
> >>>> something to the filter command, which may use regex somehow in its
> inner
> >>>> workings.
> >>>>>>>
> >>>>>>> Craig
> >>>>>>>
> >>>>>>> Craig
> >>>>>>>
> >>>>>>>> On Jan 23, 2024, at 9:45 PM, Brian Milby via use-livecode <
> >>>> use-livecode at lists.runrev.com> wrote:
> >>>>>>>>
> >>>>>>>> Not sure this is really a bug.  The default is to match a
> >>>> wildcardPattern.  If you want to match [ then you must use [[] in the
> >>>> pattern.
> >>>>>>>>
> >>>>>>>> Brian Milby
> >>>>>>>> brian at milby7.com
> >>>>>>>>
> >>>>>>>>>> On Jan 23, 2024, at 9:02 PM, Neville Smythe via use-livecode <
> >>>> use-livecode at lists.runrev.com> wrote:
> >>>>>>>>>
> >>>>>>>>> Try this in the msg box:
> >>>>>>>>>
> >>>>>>>>> put "aaa[bbb" into tStr; put line 1 of tStr into tLine; filter
> tStr
> >>>> without tLine; put tStr
> >>>>>>>>> I get (using MacOS, LC 9.6.11)
> >>>>>>>>>
> >>>>>>>>> aaa[bbb
> >>>>>>>>>
> >>>>>>>>> That is to say, the line is not filtered out.
> >>>>>>>>>
> >>>>>>>>> And:
> >>>>>>>>>
> >>>>>>>>> put "aaa[bbb" into tStr; filter tStr with tStr; put tStr
> >>>>>>>>>
> >>>>>>>>> produces an empty string instead of the original string.
> >>>>>>>>>
> >>>>>>>>> The bug occurs if the line contains the character “[“ anywhere;
> any
> >>>> lines containing that character are ignored by both filter with and
> filter
> >>>> without.
> >>>>>>>>>
> >>>>>>>>> This is really serious, because I rely on the filter command a
> lot,
> >>>> as I would think do many other developers!
> >>>>>>>>>
> >>>>>>>>> Don’t know if it occurs with other characters, but I have never
> seen
> >>>> it before. I discovered it when filtering lines with regular
> expressions.
> >>>> Other special regexp characters I have tested do not trigger the bug.
> >>>>>>>>>
> >>>>>>>>> Neville Smythe
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>> _______________________________________________
> >>>>>>>>> use-livecode mailing list
> >>>>>>>>> use-livecode at lists.runrev.com
> >>>>>>>>> Please visit this url to subscribe, unsubscribe and manage your
> >>>> subscription preferences:
> >>>>>>>>> http://lists.runrev.com/mailman/listinfo/use-livecode
> >>>>>>>>
> >>>>>>>> _______________________________________________
> >>>>>>>> use-livecode mailing list
> >>>>>>>> use-livecode at lists.runrev.com
> >>>>>>>> Please visit this url to subscribe, unsubscribe and manage your
> >>>> subscription preferences:
> >>>>>>>> http://lists.runrev.com/mailman/listinfo/use-livecode
> >>>>>>>
> >>>>>>>
> >>>>>>> _______________________________________________
> >>>>>>> use-livecode mailing list
> >>>>>>> use-livecode at lists.runrev.com
> >>>>>>> Please visit this url to subscribe, unsubscribe and manage your
> >>>> subscription preferences:
> >>>>>>> http://lists.runrev.com/mailman/listinfo/use-livecode
> >>>>>>
> >>>>>> _______________________________________________
> >>>>>> use-livecode mailing list
> >>>>>> use-livecode at lists.runrev.com
> >>>>>> Please visit this url to subscribe, unsubscribe and manage your
> >>>> subscription preferences:
> >>>>>> http://lists.runrev.com/mailman/listinfo/use-livecode
> >>>>>
> >>>>>
> >>>>> _______________________________________________
> >>>>> use-livecode mailing list
> >>>>> use-livecode at lists.runrev.com
> >>>>> Please visit this url to subscribe, unsubscribe and manage your
> >>>> subscription preferences:
> >>>>> http://lists.runrev.com/mailman/listinfo/use-livecode
> >>>>
> >>>> _______________________________________________
> >>>> use-livecode mailing list
> >>>> use-livecode at lists.runrev.com
> >>>> Please visit this url to subscribe, unsubscribe and manage your
> >>>> subscription preferences:
> >>>> http://lists.runrev.com/mailman/listinfo/use-livecode
> >>>>
> >>> _______________________________________________
> >>> use-livecode mailing list
> >>> use-livecode at lists.runrev.com
> >>> Please visit this url to subscribe, unsubscribe and manage your
> subscription preferences:
> >>> http://lists.runrev.com/mailman/listinfo/use-livecode
> >>
> >>
> >> _______________________________________________
> >> use-livecode mailing list
> >> use-livecode at lists.runrev.com
> >> Please visit this url to subscribe, unsubscribe and manage your
> subscription preferences:
> >> http://lists.runrev.com/mailman/listinfo/use-livecode
> >
> > _______________________________________________
> > use-livecode mailing list
> > use-livecode at lists.runrev.com <mailto:use-livecode at lists.runrev.com>
> > Please visit this url to subscribe, unsubscribe and manage your
> subscription preferences:
> > http://lists.runrev.com/mailman/listinfo/use-livecode
>
> _______________________________________________
> use-livecode mailing list
> use-livecode at lists.runrev.com
> Please visit this url to subscribe, unsubscribe and manage your
> subscription preferences:
> http://lists.runrev.com/mailman/listinfo/use-livecode
>


More information about the use-livecode mailing list