diff options
author | Josh Rahm <joshuarahm@gmail.com> | 2024-05-24 19:18:11 +0000 |
---|---|---|
committer | Josh Rahm <joshuarahm@gmail.com> | 2024-05-24 19:18:11 +0000 |
commit | ff7ed8f586589d620a806c3758fac4a47a8e7e15 (patch) | |
tree | 729bbcb92231538fa61dab6c3d890b025484b7f5 /src/nvim/base64.c | |
parent | 376914f419eb08fdf4c1a63a77e1f035898a0f10 (diff) | |
parent | 28c04948a1c887a1cc0cb64de79fa32631700466 (diff) | |
download | rneovim-ff7ed8f586589d620a806c3758fac4a47a8e7e15.tar.gz rneovim-ff7ed8f586589d620a806c3758fac4a47a8e7e15.tar.bz2 rneovim-ff7ed8f586589d620a806c3758fac4a47a8e7e15.zip |
Merge remote-tracking branch 'upstream/master' into mix_20240309
Diffstat (limited to 'src/nvim/base64.c')
-rw-r--r-- | src/nvim/base64.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/src/nvim/base64.c b/src/nvim/base64.c index d461b7e3ff..a645c64fe3 100644 --- a/src/nvim/base64.c +++ b/src/nvim/base64.c @@ -132,12 +132,18 @@ char *base64_encode(const char *src, size_t src_len) /// Decode a Base64 encoded string. /// +/// The returned string is NOT null-terminated, because the decoded string may +/// contain embedded NULLs. Use the output parameter out_lenp to determine the +/// length of the returned string. +/// /// @param src Base64 encoded string /// @param src_len Length of {src} +/// @param [out] out_lenp Returns the length of the decoded string /// @return Decoded string -char *base64_decode(const char *src, size_t src_len) +char *base64_decode(const char *src, size_t src_len, size_t *out_lenp) { assert(src != NULL); + assert(out_lenp != NULL); char *dest = NULL; @@ -155,7 +161,7 @@ char *base64_decode(const char *src, size_t src_len) const uint8_t *s = (const uint8_t *)src; - dest = xmalloc(out_len + 1); + dest = xmalloc(out_len); int acc = 0; int acc_len = 0; @@ -203,7 +209,7 @@ char *base64_decode(const char *src, size_t src_len) } } - dest[out_len] = '\0'; + *out_lenp = out_len; return dest; @@ -212,5 +218,7 @@ invalid: xfree((void *)dest); } + *out_lenp = 0; + return NULL; } |