[Boost-bugs] [Boost C++ Libraries] #2010: bas64 iterator improvement

Subject: [Boost-bugs] [Boost C++ Libraries] #2010: bas64 iterator improvement
From: Boost C++ Libraries (noreply_at_[hidden])
Date: 2008-06-14 16:07:39


#2010: bas64 iterator improvement
----------------------------------+-----------------------------------------
 Reporter: ramey | Owner: ramey
     Type: Tasks | Status: new
Milestone: Boost 1.36.0 | Component: None
  Version: Boost 1.35.0 | Severity: Problem
 Keywords: serialization base64 |
----------------------------------+-----------------------------------------
 {{{
  Hello,
>
> Code that pads base64 output with '=' looks in
> basic_text_oprimitive.ipp like following:
>
> std::size_t padding = 2 - count % 3;
> if(padding > 1)
> *oi = '=';
> if(padding > 2)
> *oi = '=';
>
> It will give the following transformations of a few simple strings:
>
> "012" -> "MDEy="
> "0123" -> "MDEyMw"
> "01234" -> "MDEyMzQ"
> "012345" -> "MDEyMzQ1="
>
> Which violates the principle of the base 64 that the encoded output
> length is multiple of 4 bytes. Right output for the samples above
> should be:
>
> "012" -> "MDEy"
> "0123" -> "MDEyMw=="
> "01234" -> "MDEyMzQ="
> "012345" -> "MDEyMzQ1"
>
>
> The problem with the code above is that the condition (padding > 2)
> is never satisfied. I think that the proper code should look like
>
> std::size_t padding = 2 - count % 3;
> if (padding < 2) {
> *oi = '=';
> if (padding > 0)
> *oi = '=';
> }



 }}}

--
Ticket URL: <http://svn.boost.org/trac/boost/ticket/2010>
Boost C++ Libraries <http://www.boost.org/>
Boost provides free peer-reviewed portable C++ source libraries.


This archive was generated by hypermail 2.1.7 : 2017-02-16 18:49:58 UTC