[emboss-dev] Upper limit to "floats" - Checked by AntiVir DEMO vers

Peter Rice pmr at ebi.ac.uk
Fri Mar 2 13:40:26 UTC 2007


Hi Guy,

Guy Bottu wrote:
> On Fri, Mar 02, 2007 at 12:20:08PM +0000, Peter Rice wrote:
>> Curious. This error suggests you have called ajMemCalloc with a request 
>> for an array of zero (or negative) length.
>> I suspect you have exceeded the size of an integer. It does not look like 
>> a floating point problem.
> 
> Actually, the ACD contains :
> 
>   float: effdbsize [
>     information: "Effective databank size for statistical
>                   calculations"
>     minimum: "0.0"
>   ]
> 
> and the program :
> 
>   float CLfloat; /* real number on command line */
> ...
>   embInit ("blast2seq", argc, argv);
> (here it crashes)

Aha ... and it crashes in valgrind too.

Excellent timing, just as we are thinking about 4.1.0.

Is this a problem with the current CVS code? We made changes to the way this 
works, so 4.0.0 seems to have no problem.

The problem is in function ajStrFromFloat where converting the float to a string 
goes through extracting the absolute value as an integer to work out how long 
the string needs to be. We do this because all ACD values are stored as strings 
internally.

To fix it, in ajmath.c look at functions ajNumLengthFloat and ajNumLengthDouble 
and replace int with long, and replace UINT_MAX wth ULONG_MAX

Fixed in 4.1.0 and I will commit ajmath.c once the QAtests complete (they take 
rather longer than they used to now - we added a lot more memory tests :-)




More information about the emboss-dev mailing list