Closed Bug 103658 Opened 23 years ago Closed 18 years ago

if a filter rule contains an odd number of quotes, Mozilla is unable to parse it

Categories

(MailNews Core :: Filters, defect)

defect
Not set
critical

Tracking

(Not tracked)

RESOLVED FIXED
mozilla1.9alpha1

People

(Reporter: alexeyc2003, Assigned: galfandary)

References

Details

(Keywords: dataloss, fixed1.8.1.3)

Attachments

(2 files)

Build: 2001100503

Steps to reproduce:
1. Create a filter rule with odd number of quotes and a few more rules behind
it. For example:
condition="OR (subject,contains,\\") OR (subject,contains,moo) OR
(subject,contains,foo) OR (subject,contains,\"moo ) foo\")"
2. Quit Mozilla.
3. Open Mozilla and check how it has read the rules from the file.

Actual Results: Complete mess, see for yourself.
Expected Results: Have the rules the same way you entered them.

Even worse, if you create a rule on a quote escape sequence like this:
condition="OR (subject,contains,\\\")"
on load, *all* the filters (not rules) that follow will disappear.

I understand this is an issue of a bad syntax design and changing syntax at this
stage is unacceptable. However, I found a quirk that might help us fix all this
without changing syntax. When Mozilla saves a rule with quotes in it, it escapes
the quotes twice like this \\". When it encloses a rule in quotes like in case
when they contain ')' character, then the outside quotes are escaped once like
this \" (see
http://lxr.mozilla.org/mozilla/source/mailnews/base/search/src/nsMsgSearchTerm.cpp#339
). And the quotes that contain all rules are not escaped at all.
So you can apply simple logic in here: If a double escaped quote is encountered
\\" - that means that the quote is contained inside the rule string.
This is a hack, but since we can't change the syntax at this stage, the only
alternative we have is forbid quotes inside rules. But that would mean
introducing a limitation on a great (we'd like to think) product, which would
suck, and breaking backward compatibility which would suck even more.
Your analysis looks correct to me.  It's unfortunate that some quotes are double
escaped. We'd need to make sure that only quotes are escaped (e.g., what happens
with '/' ? Are any other characters escaped?) I think not, but we should make sure.
Target Milestone: --- → Future
Re: the last comment -
Why not use the same sort or syntax used in some programming languages that
'\' escapes [makes literal] whatever follows.  Personally, I see no good reason
for the quotes that enclose the whole condition statement, but what do I know.

While we're at it, there seems no _good_ reason for including quotes around
custom headers - they all have the same one-word form.

If the interior '\"'s or '\)'s or '\\'s and any other troublesome character is
escaped there is no reason to care whether the un-escaped, un-quoted string has
an even or odd number of anything.
Bug#104799 suggests the comma must also be escaped.  I would nominate one of
these as duplicate
This bug can be reproduced with an even number of quotes, too:
1. open filter ui
2. create new filter rule: sender contains "(my name plus)_xyz"@hotmail.com
3. save rule and filter
4. receive new mails (a restart of Mozilla is not necessary)
5. open the filter and the condition of the rule now is: "(my name plus
6. all following filter rules were deleted

reproducable with Mozilla/5.0 (X11; U; Linux i686; de-AT; rv:1.1) Gecko/20020826
I've also found another case that gets messed up:

One of the Acrobat lists at Adobe.com sends mail with the following headers --

From: <Acrobat Answers to Frequently Asked Questions (FAQ)>
To: <Acrobat Answers to Frequently Asked Questions (FAQ)>
Subject: re: Launching Acrobat or Reader
Message-Id: <1de56114.0@WebX.la2eafNXanI>
Mime-Version: 1.0

If I clip the From or To and attempt to use them, (1) a search doesn't find
anything, and (2) I can store the filter but, when it is stored the filter rule
is set to match <empty-string> so EVERY piece of mail gets a hit on the damaged
filter and gets moved where it doesn't belong.

Looks as though the parens are a significant part of the problem.
Just came across this bug. Been driving me up the wall!

I think this should be a major bug, as it causes data loss:
You loose all filters after the filter with quote.

Not only that, but while mozilla is running you can go back to the filter dialogs,
and see the filter. You can even, in the latest builds run the filter on any
folder and it will work correctly.

Only on close does this become a problem.

Hack it, disable it, or put it in the release notes, but please do something
about it!
mass re-assign.
Assignee: naving → sspitzer
This bug also happens with Thunderbird 20030808 on Linux.
OS: Windows 2000 → All
This bug is REALLY nasty for the following reason: I entered a filter rule that
ended by a quote, and it worked fine until I closed Mozilla. But when I opened
Mozilla the following time, the filter was there, but was empty... so it was
being applied to ALL messages coming in from my mailbox. If by chance it is a
deletion or mark read filter, you may imagine what this may mean :-(

So please do something about it... at least, you could for the time being forbid
quotes inside filter rules, by making the filter editor reject them. At least
you wouldn't cause unexpected data loss to those using Mozilla as primary mail
program...

Thanks :)
Severity: normal → critical
Keywords: dataloss
I see the same thing as comment #5 with the < delimiter.

The filter doesn't actually work during the same session, but the settings seem
to be retained when the message filters dialog is reopened.  Upon quitting
Mozilla and restarting, the filter conditions have dissappeared entirely leaving
a "match any of the following" with no conditions, which matches all messages.  
Product: MailNews → Core
*** Bug 236528 has been marked as a duplicate of this bug. ***
*** Bug 276848 has been marked as a duplicate of this bug. ***
*** Bug 337697 has been marked as a duplicate of this bug. ***
*** Bug 355926 has been marked as a duplicate of this bug. ***
Assignee: sspitzer → nobody
QA Contact: laurel → filters
5 years are more than enough to fix such a trivial bug,
or should I do it myself?
(In reply to comment #15)
> 5 years are more than enough to fix such a trivial bug,
> or should I do it myself?

I bet people would appreciate if you do it!
Attached patch Proposed fixSplinter Review
(In reply to comment #16)
> (In reply to comment #15)
> I bet people would appreciate if you do it!
I doubt that they would, in fact (from experience) I expect
quite the opposite (no good deed goes unpunished and all
that). Oh well, forever the optimist I attach a proposed
fix, please don't hold that against me.
You need to ask for review on that patch in order for it to move forward.
(In reply to comment #18)
> You need to ask for review on that patch in order for it to move forward.
> 
Hopefully this patch would fix your problem as it did mine,
however I have no official capacity here. This was open
for 5 years and would likely stay so 5 more :-(
To request review for the patch, choose the Edit action for it and set the 'r?' flag to a reviewer, e.g. bienvenu@nventure.com or mscott@mozilla.org
Attachment #241707 - Flags: review?(mscott)
(In reply to comment #20)
> To request review for the patch, choose the Edit action for it and set the 'r?'
> flag to a reviewer, e.g. bienvenu@nventure.com or mscott@mozilla.org
> 
You live and learn. At any rate, you live.
Thanks.
Attachment #241707 - Flags: superreview?(bienvenu)
Comment on attachment 241707 [details] [diff] [review]
Proposed fix

thx for the patch! it looks correct to me... I haven't had a chance to verify it yet, though.
Attachment #241707 - Flags: superreview?(bienvenu) → superreview+
Comment on attachment 241707 [details] [diff] [review]
Proposed fix

thanks for the patch!
Attachment #241707 - Flags: review?(mscott) → review+
You might be able to talk Gavin into checking this in for you. 
Whiteboard: [checkin needed]
Assignee: nobody → galfandary
Checked in to the trunk.
mozilla/extensions/irc/xul/content/chatzilla.xul 	1.67
Status: NEW → RESOLVED
Closed: 18 years ago
Hardware: PC → All
Resolution: --- → FIXED
Whiteboard: [checkin needed]
Target Milestone: Future → mozilla1.9alpha
Comment on attachment 241707 [details] [diff] [review]
Proposed fix

(In reply to comment #25)
> Checked in to the trunk.
> mozilla/extensions/irc/xul/content/chatzilla.xul        1.67

seamonkey/source/mailnews/base/search/src/nsMsgFilterList.cpp  1.101  

would be the correct filename and version.  :)
Attachment #241707 - Flags: approval-thunderbird2?
Blocks: 336793
Comment on attachment 241707 [details] [diff] [review]
Proposed fix

this has baked on the trunk for quite a while.
Attachment #241707 - Flags: approval-thunderbird2? → approval-thunderbird2+
Keywords: fixed1.8.1.3
the steps to reproduce from comment #4 are working fine for me on Thunderbird 2 RC 1. 

When i try the steps from comment#0 with the rules 

"OR (subject,contains,\\") OR (subject,contains,moo) OR
(subject,contains,foo) OR (subject,contains,\"moo ) foo\")"

I get a error Message on Thunderbird restart (see screenshot), its this expected ?
It would be helpful for the steps-to-reproduce if you stated exactly what you were typing into the UI, rather than what the file contains; I really can't tell what text in the UI corresponds to: 
[...] (subject,contains,\"moo ) foo\")"

It seems that whatever you type is copied verbatim into the file -- that is, if you type three backslashes, three backslashes are what gets stored.  On read-back, those are misparsed for display; so there is at least one bug lurking here.

If you type an unmatched quote, it gets a backslash of its own.

I *think* that the clause quoted above implies this text in the UI (including quotes):
   "moo ) foo"
but when I type that in, the msgFilterRules.dat contains:
   (subject,contains,\"\\"moo ) foo\\"\")
which is read back in without an error.  (TB 2pre-0324)
Product: Core → MailNews Core
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Creator:
Created:
Updated:
Size: