Hi Phil,
Many thanks for finding, fixing, and reporting this bug.  We'll incorporate
the fix into our next release.
Cheers,
--Luis


On Wed, Jan 16, 2013 at 7:35 AM, Phil Charles <estofi...@gmail.com> wrote:

> Hi guys,
>
> I ran across a bug in Parsers/Algorithm2XML/Mascot2XML/MascotConverter.cxx
> while trying to work out why Mascot2XML was segfaulting on a particular
> Mascot dat file.
>
> On line 316 the 'nextpeptide' variable is defined to hold peptide
> sequences extracted from the dat file.  It has a length of 128.
> *316: *char nextpeptide[128];
>
> Then, on line 440, a value is assigned to nextpeptide, among other things,
> by sscanf (5th item, %s):
> *440: *int result = sscanf(nextline, "%d %lf %lf %d %s %d %s %lf %s %d
> %d;%c",
> *441: *&first, &mass, &massdiff, &nextionmatch, nextpeptide, &first,
> nextmods, &nextionscore, discard, &first, &first, &nextc);
>
> However, sscanf isn't overflow safe, so if the peptide is more than 128
> residues (unlikely, yes, but not impossible, and it only needs one...) the
> remaining characters will overflow nextpeptide and overwrite whatever's
> next - on my build, this meant it overwrote the variable holding the MIME
> delimiter used to parse the dat file, which led to a later segfault as the
> spectra_ array wasn't populated.  Incidentally, compiling with debug flags
> using 'make debug' seemed to solve the error, or at least prevent the
> segfault - not quite sure why this was (maybe it overflowed into something
> less critical), but it certainly made tracking down the issue a bit harder.
>
> The fix I applied was to increase the nextpeptide length and
> overflow-proof the sscanf with respect to this variable (although if you
> have a 1000 residue there's probably something else gone wrong!) with a
> length limit on that %s.
> *316:** *char nextpeptide[*1000*];
> ...
> *440: *int result = sscanf(nextline, "%d %lf %lf %d %*1000*s %d %s %lf %s
> %d %d;%c",
> *441: *&first, &mass, &massdiff, &nextionmatch, nextpeptide, &first,
> nextmods, &nextionscore, discard, &first, &first, &nextc);
>
> Cheers,
>
> Phil
>
> --
> You received this message because you are subscribed to the Google Groups
> "spctools-discuss" group.
> To view this discussion on the web visit
> https://groups.google.com/d/msg/spctools-discuss/-/9LUaN1h-4mAJ.
> To post to this group, send email to spctools-discuss@googlegroups.com.
> To unsubscribe from this group, send email to
> spctools-discuss+unsubscr...@googlegroups.com.
> For more options, visit this group at
> http://groups.google.com/group/spctools-discuss?hl=en.
>

-- 
You received this message because you are subscribed to the Google Groups 
"spctools-discuss" group.
To post to this group, send email to spctools-discuss@googlegroups.com.
To unsubscribe from this group, send email to 
spctools-discuss+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/spctools-discuss?hl=en.

Reply via email to