From 3199c132d57cb7a7c7d289c03512ecb9426ec7b1 Mon Sep 17 00:00:00 2001 From: Veniamin Gvozdikov <vgvozdikov@tarantool.org> Date: Thu, 25 Sep 2014 12:59:10 +0000 Subject: [PATCH] Fix base64 endcode/decode sizes, and added more tests --- src/lua/digest.lua | 6 +++--- test/box/digest.result | 32 ++++++++++++++++++++++++++++++++ test/box/digest.test.lua | 9 +++++++++ 3 files changed, 44 insertions(+), 3 deletions(-) diff --git a/src/lua/digest.lua b/src/lua/digest.lua index 3ed17ae92d..dd942480c2 100644 --- a/src/lua/digest.lua +++ b/src/lua/digest.lua @@ -73,12 +73,12 @@ end local m = { base64_encode = function(bin) if bin == nil then - bin = '' + error('Usage: base64.encode(str)') else -- note: need add check size of bin, bin might containe any binary data if type(bin) == 'string' then local blen = string.len(bin) - local slen = math.ceil(blen * 4 / 3) + 1 + local slen = math.ceil(blen * 4 / 3) + 2 local so = ffi.new('char[?]', slen) local len = ffi.C.base64_encode(bin, blen, so, slen) bin = ffi.string(so, len) @@ -94,7 +94,7 @@ local m = { data = '' else local slen = string.len(data) - local blen = math.ceil((slen - 1) * 4 / 3) + local blen = math.ceil(slen * 3 / 4) local bo = ffi.new('char[?]', blen) local len = ffi.C.base64_decode(data, slen, bo, blen) data = ffi.string(bo, len) diff --git a/test/box/digest.result b/test/box/digest.result index 81d2414971..018d9e1083 100644 --- a/test/box/digest.result +++ b/test/box/digest.result @@ -157,6 +157,38 @@ digest.base64_decode('MTIzNDU=') --- - '12345' ... +digest.base64_encode('asdfl asdf adfa zxc vzxcvz llll') +--- +- YXNkZmwgYXNkZiBhZGZhIHp4YyB2enhjdnogbGxsbA== +... +digest.base64_decode('YXNkZmwgYXNkZiBhZGZhIHp4YyB2enhjdnogbGxsbA==') +--- +- asdfl asdf adfa zxc vzxcvz llll +... +digest.base64_encode('11 00 11 00 abcdef ABCDEF 00 11 00 11') +--- +- MTEgMDAgMTEgMDAgYWJjZGVmIEFCQ0RFRiAwMCAxMSAwMCAxMQ== +... +digest.base64_decode('MTEgMDAgMTEgMDAgYWJjZGVmIEFCQ0RFRiAwMCAxMSAwMCAxMQ==') +--- +- 11 00 11 00 abcdef ABCDEF 00 11 00 11 +... +digest.base64_decode(nil) +--- +- +... +digest.base64_encode(nil) +--- +- error: 'builtin/digest.lua:76: Usage: base64.encode(str)' +... +digest.base64_encode(123) +--- +- +... +digest.base64_decode(123) +--- +- +... digest = nil --- ... diff --git a/test/box/digest.test.lua b/test/box/digest.test.lua index cc63c16280..f988abc98b 100644 --- a/test/box/digest.test.lua +++ b/test/box/digest.test.lua @@ -46,4 +46,13 @@ digest.crc32_update(digest.crc32('abc'), 'cde') digest.base64_encode('12345') digest.base64_decode('MTIzNDU=') +digest.base64_encode('asdfl asdf adfa zxc vzxcvz llll') +digest.base64_decode('YXNkZmwgYXNkZiBhZGZhIHp4YyB2enhjdnogbGxsbA==') +digest.base64_encode('11 00 11 00 abcdef ABCDEF 00 11 00 11') +digest.base64_decode('MTEgMDAgMTEgMDAgYWJjZGVmIEFCQ0RFRiAwMCAxMSAwMCAxMQ==') +digest.base64_decode(nil) +digest.base64_encode(nil) +digest.base64_encode(123) +digest.base64_decode(123) + digest = nil -- GitLab