From 5788d36fc26baff3523be896ac5e801b8387e719 Mon Sep 17 00:00:00 2001 From: Lammert Bies Date: Sun, 11 Dec 2016 12:15:36 +0100 Subject: [PATCH] Moved get_request_len to own file --- Makefile | 1 + src/httplib_get_request_len.c | 57 +++++++++++++++++++++++++++++++++++ src/libhttp.c | 29 ------------------ 3 files changed, 58 insertions(+), 29 deletions(-) create mode 100644 src/httplib_get_request_len.c diff --git a/Makefile b/Makefile index a5df77e1..2431c705 100644 --- a/Makefile +++ b/Makefile @@ -71,6 +71,7 @@ LIB_SOURCES = src/libhttp.c \ src/httplib_get_rel_url_at_current_server.c \ src/httplib_get_remote_ip.c \ src/httplib_get_request_handler.c \ + src/httplib_get_request_len.c \ src/httplib_get_response.c \ src/httplib_get_response_code_text.c \ src/httplib_get_system_name.c \ diff --git a/src/httplib_get_request_len.c b/src/httplib_get_request_len.c new file mode 100644 index 00000000..51fb39e5 --- /dev/null +++ b/src/httplib_get_request_len.c @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2016 Lammert Bies + * Copyright (c) 2013-2016 the Civetweb developers + * Copyright (c) 2004-2013 Sergey Lyubka + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + + +#include "libhttp-private.h" + + + +/* Check whether full request is buffered. Return: + * -1 if request is malformed + * 0 if request is not yet fully buffered + * >0 actual request length, including last \r\n\r\n */ +int XX_httplib_get_request_len( const char *buf, int buflen ) { + + const char *s; + const char *e; + int len = 0; + + for (s = buf, e = s + buflen - 1; len <= 0 && s < e; s++) + /* Control characters are not allowed but >=128 is. */ + if (!isprint(*(const unsigned char *)s) && *s != '\r' && *s != '\n' + && *(const unsigned char *)s < 128) { + len = -1; + break; /* [i_a] abort scan as soon as one malformed character is + * found; */ + /* don't let subsequent \r\n\r\n win us over anyhow */ + } else if (s[0] == '\n' && s[1] == '\n') { + len = (int)(s - buf) + 2; + } else if (s[0] == '\n' && &s[1] < e && s[1] == '\r' && s[2] == '\n') { + len = (int)(s - buf) + 3; + } + + return len; + +} /* XX_httplib_get_request_len */ diff --git a/src/libhttp.c b/src/libhttp.c index f4ae8a2e..ee562c14 100644 --- a/src/libhttp.c +++ b/src/libhttp.c @@ -3520,32 +3520,3 @@ interpret_cleanup: #endif /* !defined(NO_FILES) */ } /* XX_httplib_interpret_uri */ - - -/* Check whether full request is buffered. Return: - * -1 if request is malformed - * 0 if request is not yet fully buffered - * >0 actual request length, including last \r\n\r\n */ -int XX_httplib_get_request_len( const char *buf, int buflen ) { - - const char *s; - const char *e; - int len = 0; - - for (s = buf, e = s + buflen - 1; len <= 0 && s < e; s++) - /* Control characters are not allowed but >=128 is. */ - if (!isprint(*(const unsigned char *)s) && *s != '\r' && *s != '\n' - && *(const unsigned char *)s < 128) { - len = -1; - break; /* [i_a] abort scan as soon as one malformed character is - * found; */ - /* don't let subsequent \r\n\r\n win us over anyhow */ - } else if (s[0] == '\n' && s[1] == '\n') { - len = (int)(s - buf) + 2; - } else if (s[0] == '\n' && &s[1] < e && s[1] == '\r' && s[2] == '\n') { - len = (int)(s - buf) + 3; - } - - return len; - -} /* XX_httplib_get_request_len */