Boost logo

Boost :

From: SourceForge.net (noreply_at_[hidden])
Date: 2006-07-07 06:07:38


Bugs item #1518640, was opened at 2006-07-07 13:07
Message generated for change (Tracker Item Submitted) made by Item Submitter
You can respond by visiting:
https://sourceforge.net/tracker/?func=detail&atid=107586&aid=1518640&group_id=7586

Please note that this message will contain a full copy of the comment thread,
including the initial issue submission, for this request,
not just the latest update.
Category: function
Group: None
Status: Open
Resolution: None
Priority: 5
Submitted By: AndreiMS (andreims)
Assigned to: Douglas Gregor (dgregor)
Summary: bug in boost:format

Initial Comment:
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

----------------------------------------------------------------------

You can respond by visiting:
https://sourceforge.net/tracker/?func=detail&atid=107586&aid=1518640&group_id=7586

Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
Boost-bugs mailing list
Boost-bugs_at_[hidden]
https://lists.sourceforge.net/lists/listinfo/boost-bugs


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk