[Insight-developers] formatstring vulnerability in NumericSeriesFileNames::GetFileNames

Henning Meyer tutmann at gmail.com
Wed Jun 28 02:33:32 EDT 2006


You can find a little bit of documentation here:
http://www.halpernwightsoftware.com/stdlib-scratch/quickref.html#io3
Another alternative to boost might be:
http://sourceforge.net/projects/iof

Boost and CMake may work together somehow:
http://public.kitware.com/pipermail/cmake/2005-October/007324.html

Henning

2006/6/27, Kent Williams <kent at psychiatry.uiowa.edu>:
> On platforms that support it. substituting snprintf will remove the
> buffer overflow problem.
> I checked, and Linux,MacOSX and Irix support snprintf. Not all Windows
> compilers support snprintf, though Visual C++ and Borland C++ do have
> _snprintf going back several versions, which is the same thing.
>
> It would be a worthy goal to remove printf family functions from
> Insight, both because of the potential for buffer overruns, and because
> printf isn't part of "The C++ Way."  Unfortunately printf-family
> functions seem to provide finer-grained control over output formats than
> their C++ replacements, or at least I've never seen a concise
> description of how to replace printf with functionally equivalent stream
> operations.
>
> It probably wouldn't hurt to add a snprintf wrapper to the KWSys
> library, to hide compiler dependencies. In looking through the KWSys
> header, I noticed there is a function EstimateFormatLength, which will
> return the upper bound on the buffer size needed for a particular format
> and argument list. Unfortunately it uses va_list argument lists, which
> are rather clumsy to use.
>
> Boost has a replacement, but due to the Boost build system, if you want
> to use Boost, you have to live in Boost's world.
>
> Henning Meyer wrote:
>
> > Hello,
> >
> > I just had a look a this function and it looks like there is a format
> > string vulnerability:
> >  char temp[4096];
> >  for (unsigned long i = m_StartIndex; i <= m_EndIndex; i+=
> > m_IncrementIndex)
> >    {
> >    sprintf (temp, m_SeriesFormat.c_str(), i);
> >    std::string fileName(temp);
> >    m_FileNames.push_back(fileName);
> >    }
> > As far as I have seen the length of m_SeriesFormat is not checked. So
> > one might use it for format string attacks.
>
>


More information about the Insight-developers mailing list