Hello,

Fabian, thanks a lot, it was enlightening. I added those patches as is.

Regards, Nadiya

On Sat, Jul 1, 2017 at 4:06 AM, Fabian Klötzl <[email protected]>
wrote:

> Hi,
>
> I much prefer an interesting coding challenge to cleaning out my flat,
> so I tackled this problem.
>
> On 01.07.2017 00:04, Nadiya Sitdykova wrote:
> >
> > 2) negative argument for malloc size
> > ==10017== Thread 13:
> > ==10017== Argument 'size' of function malloc has a fishy (possibly
> > negative) value: -9223372036854775657
> > ==10017==    at 0x4C2BBAF: malloc (vg_replace_malloc.c:299)
> > ==10017==    by 0x12E34A: bsw2_pair1 (bwtsw2_pair.c:123)
> > ==10017==    by 0x12EC37: bsw2_pair (bwtsw2_pair.c:193)
> > ==10017==    by 0x127B4E: bsw2_aln_core (bwtsw2_aux.c:621)
> > ==10017==    by 0x127E90: worker (bwtsw2_aux.c:660)
> > ==10017==    by 0x535D493: start_thread (pthread_create.c:333)
> >
> > Thanks to debug output I knew that this happens when l_mseq = 149, end =
> > 0, beg = 1
>
> end is not 0, but a *very* small number. But that is only the symptom of
> an issue earlier on.
>
> In bsw2_stat some statistics of the given data are computed, which are
> then used to calculate beg and end in bsw2_pair1, the function with the
> broken malloc. The computed statistics are avg and std. However, only
> values within certain boundaries are used to compute the avg. If none of
> the input values fall within that interval it all boils down to avg =
> 0/0 = NaN. This then screws up any downstream computation. A
> straightforward patch is attached to this mail.
>
> While I was at it, I also created a patch for the malloc wrapper: size_t
> is unsigned. (Technically, the valgrind message given above is also wrong.)
>
> Feel free to modify and forward at you leisure.
>
> Best,
> Fabian
>
>

Reply via email to