Skip to content

Commit c99fbaf

Browse files
committed
bugfix: ngx.base: decode_base64url/encode_base64url: worked around a bug in LuaJIT's allocation sinking optimizer which might lead to NULL cdata pointers and segfaults.
Fix #232. Will investigate and fix the LuaJIT bug after the new OpenResty 1.15.8.1 release.
1 parent 274256e commit c99fbaf

File tree

1 file changed

+10
-14
lines changed

1 file changed

+10
-14
lines changed

lib/ngx/base64.lua

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -46,18 +46,16 @@ function _M.encode_base64url(s)
4646

4747
local len = #s
4848
local trans_len = base64_encoded_length(len)
49-
local src = src_str_t[0]
50-
local dst = dst_str_t[0]
5149

52-
src.data = s
53-
src.len = len
50+
src_str_t[0].data = s
51+
src_str_t[0].len = len
5452

55-
dst.data = get_string_buf(trans_len)
56-
dst.len = trans_len
53+
dst_str_t[0].data = get_string_buf(trans_len)
54+
dst_str_t[0].len = trans_len
5755

5856
C.ngx_encode_base64url(dst_str_t, src_str_t)
5957

60-
return ffi_str(dst.data, dst.len)
58+
return ffi_str(dst_str_t[0].data, dst_str_t[0].len)
6159
end
6260

6361

@@ -68,21 +66,19 @@ function _M.decode_base64url(s)
6866

6967
local len = #s
7068
local trans_len = base64_decoded_length(len)
71-
local src = src_str_t[0]
72-
local dst = dst_str_t[0]
7369

74-
src.data = s
75-
src.len = len
70+
src_str_t[0].data = s
71+
src_str_t[0].len = len
7672

77-
dst.data = get_string_buf(trans_len)
78-
dst.len = trans_len
73+
dst_str_t[0].data = get_string_buf(trans_len)
74+
dst_str_t[0].len = trans_len
7975

8076
local ret = C.ngx_decode_base64url(dst_str_t, src_str_t)
8177
if ret == NGX_ERROR then
8278
return nil, "invalid input"
8379
end
8480

85-
return ffi_str(dst.data, dst.len)
81+
return ffi_str(dst_str_t[0].data, dst_str_t[0].len)
8682
end
8783

8884

0 commit comments

Comments
 (0)