id,summary,reporter,owner,description,type,status,milestone,component,version,severity,resolution,keywords,cc 2010,bas64 iterator improvement,Robert Ramey,Robert Ramey," {{{ 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 = '='; > } }}} ",Tasks,closed,Boost 1.36.0,None,Boost 1.35.0,Problem,fixed,serialization base64,