Dear Evolution hackers,
analyzing crashes, I see that in `./camel/camel-folder-summary.c`
        count = bdata_extract_digit (&part)
sometimes seems to be negative, which seems unreasonable. I added
`g_assert (count < 0)` right after that and in at least one case I hit
that assert. Though this is not reproducible.
Now the question is, whether this is due to some memory corruption or a
programming error.
`bdata_extract_digit ()` was added in
        commit ceb906002ae20ffa8eb4d79407d8111b0aa0798d
        Author: Milan Crha <mcrha redhat com>
        Date:   Thu Dec 9 13:56:19 2010 +0100
            Bug #573125 - Crashes right after startup when having broken db summary
and replaced the following macros.
        #define EXTRACT_FIRST_DIGIT(val) val=strtoul (part, &part, 10);
        #define EXTRACT_DIGIT(val) part++; val=strtoul (part, &part, 10);
Looking at the function it would be awesome if you could help me
understand it.
        gint
        bdata_extract_digit (/* const */ gchar **part)
        {
First we check whether at least one of the pointers or the string are
empty/NULL.
	        if (!part || !*part || !**part)
		        return 0;
Now we check whether the first character of the string is a space and if
true we go to the next character.
	        if (**part == ' ')
		        *part += 1;
The next check checks again, if the string exists and should be
redundant to `if (!part)`.
	        if (!**part)
		        return 0;
Now `strtoul()` is used to convert the string to an unsigned long int.
	        return strtoul (*part, part, 10);
Could this cause problems because `count` is a normal integer and not an
unsigned integer?
        }
Also I do not understand why we check for a space because according to
`man strtoul` spaces are skipped.
Thanks,
Paul
[1] http://git.gnome.org/browse/evolution-data-server/tree/camel/camel-folder-summary.c?id=ceb906002ae20ffa8eb4d79407d8111b0aa0798d#n4904
Attachment:
signature.asc
Description: This is a digitally signed message part