diff options
author | Chris Dyer <cdyer@cab.ark.cs.cmu.edu> | 2012-08-13 15:24:45 -0400 |
---|---|---|
committer | Chris Dyer <cdyer@cab.ark.cs.cmu.edu> | 2012-08-13 15:24:45 -0400 |
commit | b7ba2cea89e832a8133de0d495896a251087a36d (patch) | |
tree | 72f8742f4a52b6fb715475898902c2ab3204fb2f /utils/b64tools.cc | |
parent | 8df50dcff502990b69349f753ca2bb7223610bee (diff) |
fix buffer overrun
Diffstat (limited to 'utils/b64tools.cc')
-rw-r--r-- | utils/b64tools.cc | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/utils/b64tools.cc b/utils/b64tools.cc index 5512f975..78c1cb4e 100644 --- a/utils/b64tools.cc +++ b/utils/b64tools.cc @@ -10,9 +10,10 @@ static const char cd64[]="|$$$}rstuvwxyz{$$$$$$$>?@ABCDEFGHIJKLMNOPQRSTUVW$$$$$$ static void encodeblock(const unsigned char* in, ostream* os, int len) { char out[4]; + // cerr << len << endl; out[0] = cb64[ in[0] >> 2 ]; - out[1] = cb64[ ((in[0] & 0x03) << 4) | ((in[1] & 0xf0) >> 4) ]; - out[2] = (len > 1 ? cb64[ ((in[1] & 0x0f) << 2) | ((in[2] & 0xc0) >> 6) ] : '='); + out[1] = cb64[ ((in[0] & 0x03) << 4) | (len > 1 ? ((in[1] & 0xf0) >> 4) : static_cast<unsigned char>(0))]; + out[2] = (len > 2 ? cb64[ ((in[1] & 0x0f) << 2) | ((in[2] & 0xc0) >> 6) ] : '='); out[3] = (len > 2 ? cb64[ in[2] & 0x3f ] : '='); os->write(out, 4); } |