diff options
author | Jann Horn <jann@thejh.net> | 2014-07-16 21:55:42 +0200 |
---|---|---|
committer | Gert Doering <gert@greenie.muc.de> | 2014-09-14 20:51:38 +0200 |
commit | 25e1ec71dd150e803c0a25308c193fea124c7b7a (patch) | |
tree | 77df03be681aa64407b415e808def3f79ee0bc91 /src/openvpn/base64.c | |
parent | df8ebb21ad1957ec013ab832a0f6c18e9d6744f6 (diff) | |
download | openvpn-25e1ec71dd150e803c0a25308c193fea124c7b7a.tar.gz openvpn-25e1ec71dd150e803c0a25308c193fea124c7b7a.tar.xz openvpn-25e1ec71dd150e803c0a25308c193fea124c7b7a.zip |
Remove quadratic complexity from openvpn_base64_decode()
Every four input characters, openvpn_base64_decode called token_decode,
which in turn called strlen() on the remaining input. This means that
base64 decoding in openvpn had quadratic complexity.
All we really need to know is whether the token is complete, so replace
the check to check just that, and make the complexity linear wrt the
input length.
Signed-off-by: Steffan Karger <steffan.karger@fox-it.com>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <5408494D.7050407@fox-it.com>
URL: http://article.gmane.org/gmane.network.openvpn.devel/9016
Signed-off-by: Gert Doering <gert@greenie.muc.de>
Diffstat (limited to 'src/openvpn/base64.c')
-rw-r--r-- | src/openvpn/base64.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/src/openvpn/base64.c b/src/openvpn/base64.c index 6dc8479..258b258 100644 --- a/src/openvpn/base64.c +++ b/src/openvpn/base64.c @@ -108,7 +108,7 @@ token_decode(const char *token) int i; unsigned int val = 0; int marker = 0; - if (strlen(token) < 4) + if (!token[0] || !token[1] || !token[2] || !token[3]) return DECODE_ERROR; for (i = 0; i < 4; i++) { val *= 64; |