summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJann Horn <jann@thejh.net>2014-07-16 21:55:42 +0200
committerGert Doering <gert@greenie.muc.de>2014-09-14 20:51:38 +0200
commit25e1ec71dd150e803c0a25308c193fea124c7b7a (patch)
tree77df03be681aa64407b415e808def3f79ee0bc91
parentdf8ebb21ad1957ec013ab832a0f6c18e9d6744f6 (diff)
downloadopenvpn-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>
-rw-r--r--src/openvpn/base64.c2
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;