Opened 16 years ago

Closed 16 years ago

#678 closed Bugs (None)

bug in boost:format

Reported by: andreims Owned by: Douglas Gregor
Milestone: Component: function
Version: None Severity:
Keywords: Cc:

Description

Hello,

software configuration:
boost 1.33.1
stlport 5.0

example:
std::string ret = boost::str(boost::format("%1%") %  
std::string(""));

If you try to send as first argument the empty string
to %-operator then you catch assertion failure in stl 
code:

STLport-5.0.0\stlport\stl/debug/_string.h(308): STL 
error : Invalid argument to operation (see operation 
documentation)
STLport-5.0.0\stlport\stl/debug/_string.h(308): STL 
assertion failure:     (__s != 0) 
 

The null-pointer argument is passed from this:

boost/boost/format/feed_args.hpp

namespace boost {
namespace io {
namespace detail {

    template<class Ch, class Tr, class Alloc>
    void mk_str( std::basic_string<Ch,Tr, Alloc> & 
res, 
                 const Ch * beg,
                 typename 
std::basic_string<Ch,Tr,Alloc>::size_type size,
                 std::streamsize w, 
                 const Ch fill_char,
                 std::ios_base::fmtflags f, 
                 const Ch prefix_space, // 0 if no 
space-padding
                 bool center) 
    // applies centered/left/right  padding  to the 
string  [beg, beg+size[
    // Effects : the result is placed in res.
    {
        typedef typename 
std::basic_string<Ch,Tr,Alloc>::size_type size_type;
        res.resize(0);
        if(w<=0 || static_cast<size_type>(w) <=size) {
            // no need to pad.
            res.reserve(size + !!prefix_space);
            if(prefix_space) 
              res.append(1, prefix_space);
            res.append(beg, size);  ///  here "beg" is 
null
        }
...

////////////////////--------------------------

There is no assertion failure if you pass empty string 
as second argument, 
e.g.
std::string ret = boost::str(boost::format("%1% %2%") 
% 2 % std::string(""));


Best regards,
          Andrei Selikhanovich



Change History (1)

comment:1 by joaquintides, 16 years ago

Status: assignedclosed
Logged In: YES 
user_id=911241

This bug has been reported in #1450260 and #1506914
and is currently corrected in the CVS:

* trunk: feed_args.hpp revisions 1.39 and 1.30
* RC_1_34_0: feed_args.hpp revisions 1.28.6.1 and 1.28.6.2

Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
Note: See TracTickets for help on using tickets.