Bug Tracker item #3290708, was opened at 2011-04-21 03:46
Message generated for change (Tracker Item Submitted) made by raizel
You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=1126467&aid=3290708&group_id=250683

Please note that this message will contain a full copy of the comment thread,
including the initial issue submission, for this request,
not just the latest update.
Category: None
Group: v3.9.0
Status: Open
Resolution: None
Priority: 5
Private: No
Submitted By: Raizel (raizel)
Assigned to: Nobody/Anonymous (nobody)
Summary: MySQL error while learning

Initial Comment:
Hello,

I'm running dspam on an Arch Linux and I just noticed that with the last update 
to version 3.9.0-4 the learning routine sometimes fails with an MySQL error.
The error may also just have arised due to an MySQL update to version 5.5.11-1 
installed on the same day.
In any case, it seems that MySQL now evaluates fields and operations on field 
strictly abiding the field type.
Hence GREATEST(0,innocent_hits-1) will fail when innocent_hits is already 0, as 
it was defined unsigned.

I replicated the issue by using

SELECT innocent_hits-1 FROM dspam_token_data;

and

SELECT GREATEST(0,innocent_hits-1) FROM dspam_token_data;

Both resulting in the same out of range error.

The table layout I used is the one provided with the installation of dspam by 
the way.
mysql> describe dspam_token_data;
+---------------+---------------------+------+-----+---------+-------+
| Field         | Type                | Null | Key | Default | Extra |
+---------------+---------------------+------+-----+---------+-------+
| uid           | int(10) unsigned    | NO   | PRI | NULL    |       |
| token         | varchar(20)         | NO   | PRI | NULL    |       |
| spam_hits     | bigint(20) unsigned | NO   |     | NULL    |       |
| innocent_hits | bigint(20) unsigned | NO   |     | NULL    |       |
| last_hit      | date                | NO   |     | NULL    |       |
+---------------+---------------------+------+-----+---------+-------+

The affected places in the code might be two different, one for learning spam 
(-> innocent-1) and one for innocent (->spam-1).

[04/07/2011 20:52:02] 12192: BIGINT UNSIGNED value is out of range in 
'(`crm_mail_dspam`.`dspam_token_data`.`spam_hits` - 1)': UPDATE 
dspam_token_data SET 
last_hit=CURRENT_DATE(),spam_hits=GREATEST(0,spam_hits-1),innocent_hits=GREATEST(0,innocent_hits+1)
 WHERE uid=1 AND token IN 
('919723413030374694','13443240891866447616','16665632978184174093','6671638468243386368','9307258077686163
[...]
);
[04/08/2011 20:52:01] 12591: BIGINT UNSIGNED value is out of range in 
'(`crm_mail_dspam`.`dspam_token_data`.`innocent_hits` - 1)': UPDATE 
dspam_token_data SET 
last_hit=CURRENT_DATE(),spam_hits=GREATEST(0,spam_hits+1),innocent_hits=GREATEST(0,innocent_hits-1)
 WHERE uid=1 AND token IN 
('11954504243112204174','208962648082639053','7327233996930628601','5813000335823732736','8588670824882
[...]
);

As we want to keep updating the other respective values of the record, I 
suggest using IF([spam|innocent]_hits,[spam|innocent]_hits-1,0) instead of 
using GREATEST().

If this issue is already fixed in 3.9.1, I'll patiently wait for the release. 
Thanks in advance.

----------------------------------------------------------------------

You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=1126467&aid=3290708&group_id=250683

------------------------------------------------------------------------------
Benefiting from Server Virtualization: Beyond Initial Workload 
Consolidation -- Increasing the use of server virtualization is a top
priority.Virtualization can reduce costs, simplify management, and improve 
application availability and disaster protection. Learn more about boosting 
the value of server virtualization. http://p.sf.net/sfu/vmware-sfdev2dev
_______________________________________________
Dspam-devel mailing list
Dspam-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/dspam-devel

Reply via email to