Skip to content

Commit 7db5c8a

Browse files
committed
Fix toString('base64') bug
Thanks to Stepan Stolyarov for the test case.
1 parent 24c6d26 commit 7db5c8a

File tree

2 files changed

+9
-1
lines changed

2 files changed

+9
-1
lines changed

src/node_buffer.cc

+1-1
Original file line numberDiff line numberDiff line change
@@ -327,7 +327,7 @@ Handle<Value> Buffer::Base64Slice(const Arguments &args) {
327327
int out_len = (n + 2 - ((n + 2) % 3)) / 3 * 4;
328328
char *out = new char[out_len];
329329

330-
char bitbuf[3];
330+
uint8_t bitbuf[3];
331331
int i = start; // data() index
332332
int j = 0; // out index
333333
char c;

test/simple/test-buffer.js

+8
Original file line numberDiff line numberDiff line change
@@ -306,3 +306,11 @@ assert.equal(new Buffer('72INjkR5fchcxk9+VgdGPFJDxUBFR5/rMFsghgxADiw', 'base64
306306
assert.equal(new Buffer('w69jACy6BgZmaFvv96HG6MYksWytuZu3T1FvGnulPg==', 'base64').length, 31);
307307
assert.equal(new Buffer('w69jACy6BgZmaFvv96HG6MYksWytuZu3T1FvGnulPg=', 'base64').length, 31);
308308
assert.equal(new Buffer('w69jACy6BgZmaFvv96HG6MYksWytuZu3T1FvGnulPg', 'base64').length, 31);
309+
310+
// This string encodes single '.' character in UTF-16
311+
dot = new Buffer('//4uAA==', 'base64');
312+
assert.equal(dot[0], 0xff);
313+
assert.equal(dot[1], 0xfe);
314+
assert.equal(dot[2], 0x2e);
315+
assert.equal(dot[3], 0x00);
316+
assert.equal(dot.toString('base64'), '//4uAA==');

0 commit comments

Comments
 (0)