From 6e9109df4cc781d451ca49ccb9adba9081750651 Mon Sep 17 00:00:00 2001 From: Přemysl Janouch Date: Mon, 23 Mar 2015 20:12:02 +0100 Subject: Don't allow whitespace in base64 --- demo-json-rpc-server.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/demo-json-rpc-server.c b/demo-json-rpc-server.c index 806225c..322d7d2 100644 --- a/demo-json-rpc-server.c +++ b/demo-json-rpc-server.c @@ -221,7 +221,7 @@ static uint8_t g_base64_table[256] = }; static inline bool -base64_decode_group (const char **s, struct str *output) +base64_decode_group (const char **s, bool ignore_ws, struct str *output) { uint8_t input[4]; size_t loaded = 0; @@ -229,7 +229,7 @@ base64_decode_group (const char **s, struct str *output) { if (!**s) return loaded == 0; - if (!isspace_ascii (**s)) + if (!ignore_ws || !isspace_ascii (**s)) input[loaded++] = **s; } @@ -270,10 +270,10 @@ base64_decode_group (const char **s, struct str *output) } static bool -base64_decode (const char *s, struct str *output) +base64_decode (const char *s, bool ignore_ws, struct str *output) { while (*s) - if (!base64_decode_group (&s, output)) + if (!base64_decode_group (&s, ignore_ws, output)) return false; return true; } @@ -2255,7 +2255,7 @@ ws_handler_finish_handshake (struct ws_handler *self) struct str tmp; str_init (&tmp); - bool key_is_valid = base64_decode (key, &tmp) && tmp.len == 16; + bool key_is_valid = base64_decode (key, false, &tmp) && tmp.len == 16; str_free (&tmp); if (!key_is_valid) FAIL_HANDSHAKE (HTTP_400_BAD_REQUEST, NULL); -- cgit v1.2.3-70-g09d2