summaryrefslogtreecommitdiff
path: root/utils/b64tools.cc
diff options
context:
space:
mode:
authorChris Dyer <cdyer@cab.ark.cs.cmu.edu>2012-08-13 15:24:45 -0400
committerChris Dyer <cdyer@cab.ark.cs.cmu.edu>2012-08-13 15:24:45 -0400
commit7b6125586338547dceaa1e9fd3a91db17a5cb78e (patch)
tree7346aedba42f68a75227b7aa49118535294d8af0 /utils/b64tools.cc
parentff7ad6621a2d003eb5281a4ae570635c6e693cf6 (diff)
fix buffer overrun
Diffstat (limited to 'utils/b64tools.cc')
-rw-r--r--utils/b64tools.cc5
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);
}