Nasty filter bug
Craig Newman
craig at starfirelighting.com
Wed Jan 24 15:33:43 EST 2024
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> 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> 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> 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
More information about the use-livecode
mailing list