Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
M
mongoose
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
esp
mongoose
Commits
c52e0744
Commit
c52e0744
authored
Mar 17, 2015
by
Sergey Lyubka
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Squashed warnings after size_t change
parent
6c09c303
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
23 additions
and
14 deletions
+23
-14
mongoose.c
mongoose.c
+20
-12
unit_test.c
test/unit_test.c
+3
-2
No files found.
mongoose.c
View file @
c52e0744
...
...
@@ -1383,7 +1383,7 @@ typedef pid_t process_id_t;
struct
vec
{
const
char
*
ptr
;
uintptr
_t
len
;
size
_t
len
;
};
// For directory listing and WevDAV support
...
...
@@ -1747,7 +1747,7 @@ static int mg_snprintf(char *buf, size_t buflen, const char *fmt, ...) {
// >0 actual request length, including last \r\n\r\n
static
int
get_request_len
(
const
char
*
s
,
size_t
buf_len
)
{
const
unsigned
char
*
buf
=
(
unsigned
char
*
)
s
;
in
t
i
;
size_
t
i
;
for
(
i
=
0
;
i
<
buf_len
;
i
++
)
{
// Control characters are not allowed but >=128 are.
...
...
@@ -1787,7 +1787,7 @@ static char *skip(char **buf, const char *delimiters) {
// Parse HTTP headers from the given buffer, advance buffer to the point
// where parsing stopped.
static
void
parse_http_headers
(
char
**
buf
,
struct
mg_connection
*
ri
)
{
in
t
i
;
size_
t
i
;
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
ri
->
http_headers
);
i
++
)
{
ri
->
http_headers
[
i
].
name
=
skip
(
buf
,
": "
);
...
...
@@ -2339,12 +2339,12 @@ static void on_cgi_data(struct ns_connection *nc) {
if
(
conn
->
ns_conn
->
flags
&
NSF_BUFFER_BUT_DONT_SEND
)
{
struct
iobuf
*
io
=
&
conn
->
ns_conn
->
send_iobuf
;
size_t
s_len
=
sizeof
(
cgi_status
)
-
1
;
ssize_
t
len
=
get_request_len
(
io
->
buf
+
s_len
,
io
->
len
-
s_len
);
in
t
len
=
get_request_len
(
io
->
buf
+
s_len
,
io
->
len
-
s_len
);
char
buf
[
MAX_REQUEST_SIZE
],
*
s
=
buf
;
if
(
len
==
0
)
return
;
if
(
len
<
0
||
len
>
sizeof
(
buf
))
{
if
(
len
<
0
||
len
>
(
int
)
sizeof
(
buf
))
{
len
=
io
->
len
;
iobuf_remove
(
io
,
io
->
len
);
send_http_error
(
conn
,
500
,
"CGI program sent malformed headers: [%.*s]"
,
...
...
@@ -2440,11 +2440,12 @@ static void remove_double_dots_and_double_slashes(char *s) {
int
mg_url_decode
(
const
char
*
src
,
size_t
src_len
,
char
*
dst
,
size_t
dst_len
,
int
is_form_url_encoded
)
{
int
i
,
j
,
a
,
b
;
#define HEXTOI(x) (isdigit(x) ? x - '0' : x - 'W')
size_t
i
,
j
=
0
;
int
a
,
b
;
#define HEXTOI(x) (isdigit(x) ? (x) - '0' : (x) - 'W')
for
(
i
=
j
=
0
;
i
<
src_len
&&
j
<
dst_len
-
1
;
i
++
,
j
++
)
{
if
(
src
[
i
]
==
'%'
&&
i
<
src_len
-
2
&&
if
(
src
[
i
]
==
'%'
&&
i
+
2
<
src_len
&&
isxdigit
(
*
(
const
unsigned
char
*
)
(
src
+
i
+
1
))
&&
isxdigit
(
*
(
const
unsigned
char
*
)
(
src
+
i
+
2
)))
{
a
=
tolower
(
*
(
const
unsigned
char
*
)
(
src
+
i
+
1
));
...
...
@@ -2473,7 +2474,8 @@ static int is_valid_http_method(const char *s) {
// This function modifies the buffer by NUL-terminating
// HTTP request components, header names and header values.
// Note that len must point to the last \n of HTTP headers.
static
size_t
parse_http_message
(
char
*
buf
,
size_t
len
,
struct
mg_connection
*
ri
)
{
static
size_t
parse_http_message
(
char
*
buf
,
size_t
len
,
struct
mg_connection
*
ri
)
{
int
is_request
,
n
;
// Reset the connection. Make sure that we don't touch fields that are
...
...
@@ -2481,6 +2483,8 @@ static size_t parse_http_message(char *buf, size_t len, struct mg_connection *ri
ri
->
request_method
=
ri
->
uri
=
ri
->
http_version
=
ri
->
query_string
=
NULL
;
ri
->
num_headers
=
ri
->
status_code
=
ri
->
is_websocket
=
ri
->
content_len
=
0
;
if
(
len
<
1
)
return
SIZE_MAX
;
buf
[
len
-
1
]
=
'\0'
;
// RFC says that all initial whitespaces should be ingored
...
...
@@ -2496,7 +2500,7 @@ static size_t parse_http_message(char *buf, size_t len, struct mg_connection *ri
is_request
=
is_valid_http_method
(
ri
->
request_method
);
if
((
is_request
&&
memcmp
(
ri
->
http_version
,
"HTTP/"
,
5
)
!=
0
)
||
(
!
is_request
&&
memcmp
(
ri
->
request_method
,
"HTTP/"
,
5
)
!=
0
))
{
len
=
-
1
;
len
=
SIZE_MAX
;
}
else
{
if
(
is_request
)
{
ri
->
http_version
+=
5
;
...
...
@@ -2651,7 +2655,7 @@ static int convert_uri_to_file_name(struct connection *conn, char *buf,
// Perform virtual hosting rewrites
if
(
rewrites
!=
NULL
&&
domain
!=
NULL
)
{
const
char
*
colon
=
strchr
(
domain
,
':'
);
s
s
ize_t
domain_len
=
colon
==
NULL
?
strlen
(
domain
)
:
colon
-
domain
;
size_t
domain_len
=
colon
==
NULL
?
strlen
(
domain
)
:
colon
-
domain
;
while
((
rewrites
=
next_option
(
rewrites
,
&
a
,
&
b
))
!=
NULL
)
{
if
(
a
.
len
>
1
&&
a
.
ptr
[
0
]
==
'@'
&&
a
.
len
==
domain_len
+
1
&&
...
...
@@ -3258,8 +3262,12 @@ static int find_index_file(struct connection *conn, char *path,
// path and see if the file exists. If it exists, break the loop
while
((
list
=
next_option
(
list
,
&
filename_vec
,
NULL
))
!=
NULL
)
{
if
(
path_len
<=
n
+
2
)
{
continue
;
}
// Ignore too long entries that may overflow path buffer
if
(
filename_vec
.
len
>
(
int
)
(
path_len
-
(
n
+
2
)))
if
(
filename_vec
.
len
>
(
path_len
-
(
n
+
2
)))
continue
;
// Prepare full path to the index file
...
...
test/unit_test.c
View file @
c52e0744
...
...
@@ -120,8 +120,8 @@ static const char *test_parse_http_message() {
ASSERT
(
strcmp
(
ri
.
http_version
,
"1.1"
)
==
0
);
ASSERT
(
ri
.
num_headers
==
0
);
ASSERT
(
parse_http_message
(
req2
,
sizeof
(
req2
)
-
1
,
&
ri
)
==
-
1
);
ASSERT
(
parse_http_message
(
req6
,
0
,
&
ri
)
==
-
1
);
ASSERT
(
parse_http_message
(
req2
,
sizeof
(
req2
)
-
1
,
&
ri
)
==
SIZE_MAX
);
ASSERT
(
parse_http_message
(
req6
,
0
,
&
ri
)
==
SIZE_MAX
);
ASSERT
(
parse_http_message
(
req8
,
sizeof
(
req8
)
-
1
,
&
ri
)
==
sizeof
(
req8
)
-
1
);
// TODO(lsm): Fix this. Header value may span multiple lines.
...
...
@@ -261,6 +261,7 @@ static const char *test_url_decode(void) {
ASSERT
(
strcmp
(
buf
,
"a "
)
==
0
);
ASSERT
(
mg_url_decode
(
"%61"
,
1
,
buf
,
sizeof
(
buf
),
1
)
==
1
);
printf
(
"[%s]
\n
"
,
buf
);
ASSERT
(
strcmp
(
buf
,
"%"
)
==
0
);
ASSERT
(
mg_url_decode
(
"%61"
,
2
,
buf
,
sizeof
(
buf
),
1
)
==
2
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment