commit 21f9a70d53a472e0c3894099308ca040d401209a
parent d9ab40f53238b49c9f4a4df13e0262fbefb4a95a
Author: Andrey Uzunov <andrey.uzunov@gmail.com>
Date: Fri, 28 Jun 2013 22:30:10 +0000
spdy: minor leaks, dead code, etc. fixed
Diffstat:
4 files changed, 96 insertions(+), 82 deletions(-)
diff --git a/src/microspdy/applicationlayer.c b/src/microspdy/applicationlayer.c
@@ -124,17 +124,20 @@ spdy_handler_new_stream (void *cls,
else
for(i=0; i<iterator->num_values; ++i)
if (SPDY_YES != SPDY_name_value_add(headers,iterator->name,iterator->value[i]))
+ {
+ SPDY_destroy_request(request);
goto free_and_fail;
+ }
iterator = iterator->next;
}
request->method=method;
- request->path=path;
- request->version=version;
- request->host=host;
- request->scheme=scheme;
- request->headers=headers;
+ request->path=path;
+ request->version=version;
+ request->host=host;
+ request->scheme=scheme;
+ request->headers=headers;
//check request validity, all these fields are mandatory for a request
if(NULL == method || strlen(method) == 0
@@ -366,7 +369,7 @@ SPDY_build_response(int status,
size_t size)
{
struct SPDY_Response *response = NULL;
- struct SPDY_NameValue ** all_headers = NULL;
+ struct SPDY_NameValue ** all_headers = NULL; //TODO maybe array in stack is enough
char *fullstatus = NULL;
int ret;
int num_hdr_containers = 1;
@@ -417,6 +420,7 @@ SPDY_build_response(int status,
SPDY_name_value_destroy(all_headers[0]);
free(all_headers);
+ all_headers = NULL;
if(size > 0)
{
diff --git a/src/microspdy/daemon.c b/src/microspdy/daemon.c
@@ -231,9 +231,7 @@ SPDYF_start_daemon_va (uint16_t port,
}
if(NULL == daemon->address)
- {
- addrlen = sizeof (struct sockaddr_in6);
-
+ {
if (NULL == (servaddr6 = malloc (addrlen)))
{
SPDYF_DEBUG("malloc");
@@ -246,7 +244,16 @@ SPDYF_start_daemon_va (uint16_t port,
daemon->address = (struct sockaddr *) servaddr6;
}
- afamily = AF_INET6 == daemon->address->sa_family ? PF_INET6 : PF_INET;
+ if(AF_INET6 == daemon->address->sa_family)
+ {
+ afamily = PF_INET6;
+ addrlen = sizeof (struct sockaddr_in6);
+ }
+ else
+ {
+ afamily = PF_INET;
+ addrlen = sizeof (struct sockaddr_in);
+ }
#else
//handling IPv4
if(daemon->flags & SPDY_DAEMON_FLAG_ONLY_IPV6)
@@ -255,10 +262,10 @@ SPDYF_start_daemon_va (uint16_t port,
goto free_and_fail;
}
+ addrlen = sizeof (struct sockaddr_in);
+
if(NULL == daemon->address)
- {
- addrlen = sizeof (struct sockaddr_in);
-
+ {
if (NULL == (servaddr4 = malloc (addrlen)))
{
SPDYF_DEBUG("malloc");
diff --git a/src/microspdy/session.c b/src/microspdy/session.c
@@ -136,29 +136,32 @@ spdyf_handler_read_syn_stream (struct SPDY_Session *session)
return;
}
}
-
- ret = SPDYF_name_value_from_stream(name_value_strm, name_value_strm_size, &headers);
- if(SPDY_NO == ret)
- {
- //memory error, try later
- free(name_value_strm);
- return;
- }
-
- session->streams_head->headers = headers;
- //inform the application layer for the new stream received
- if(SPDY_YES != session->daemon->fnew_stream_cb(session->daemon->fcls, session->streams_head))
- {
- //memory error, try later
- free(name_value_strm);
- return;
- }
-
- session->read_buffer_beginning += compressed_data_size;
+ else
+ {
+ ret = SPDYF_name_value_from_stream(name_value_strm, name_value_strm_size, &headers);
+ if(SPDY_NO == ret)
+ {
+ //memory error, try later
+ free(name_value_strm);
+ return;
+ }
+
+ session->streams_head->headers = headers;
+ //inform the application layer for the new stream received
+ if(SPDY_YES != session->daemon->fnew_stream_cb(session->daemon->fcls, session->streams_head))
+ {
+ //memory error, try later
+ free(name_value_strm);
+ return;
+ }
+
+ session->read_buffer_beginning += compressed_data_size;
+ free(name_value_strm);
+ }
+
//change state to wait for new frame
session->status = SPDY_SESSION_STATUS_WAIT_FOR_HEADER;
free(frame);
- free(name_value_strm);
}
diff --git a/src/microspdy/structures.c b/src/microspdy/structures.c
@@ -455,25 +455,25 @@ SPDYF_name_value_to_stream(struct SPDY_NameValue * container[],
for(j=0; j<num_containers; ++j)
{
- iterator = container[j];
- while(iterator != NULL)
- {
- ++num_pairs;
- size += 4 + strlen(iterator->name); //length + string
-
- SPDYF_ASSERT(iterator->num_values>0, "num_values is 0");
-
- size += 4; //value length
-
- for(i=0; i<iterator->num_values; ++i)
- {
- size += strlen(iterator->value[i]); // string
- if(i/* || !strlen(iterator->value[i])*/) ++size; //NULL separator
- }
-
- iterator = iterator->next;
- }
-}
+ iterator = container[j];
+ while(iterator != NULL)
+ {
+ ++num_pairs;
+ size += 4 + strlen(iterator->name); //length + string
+
+ SPDYF_ASSERT(iterator->num_values>0, "num_values is 0");
+
+ size += 4; //value length
+
+ for(i=0; i<iterator->num_values; ++i)
+ {
+ size += strlen(iterator->value[i]); // string
+ if(i/* || !strlen(iterator->value[i])*/) ++size; //NULL separator
+ }
+
+ iterator = iterator->next;
+ }
+ }
if(NULL == (*stream = malloc(size)))
{
@@ -488,36 +488,36 @@ SPDYF_name_value_to_stream(struct SPDY_NameValue * container[],
//put all other headers to the stream
for(j=0; j<num_containers; ++j)
{
- iterator = container[j];
- while(iterator != NULL)
- {
- name_size = strlen(iterator->name);
- temp = htonl(name_size);
- memcpy(*stream + offset, &temp, 4);
- offset += 4;
- strncpy(*stream + offset, iterator->name, name_size);
- offset += name_size;
-
- value_offset = offset;
- offset += 4;
- for(i=0; i<iterator->num_values; ++i)
- {
- if(i /*|| !strlen(iterator->value[0])*/)
- {
- memset(*stream + offset, 0, 1);
- ++offset;
- if(!i) continue;
- }
- strncpy(*stream + offset, iterator->value[i], strlen(iterator->value[i]));
- offset += strlen(iterator->value[i]);
- }
- value_size = offset - value_offset - 4;
- value_size = htonl(value_size);
- memcpy(*stream + value_offset, &value_size, 4);
-
- iterator = iterator->next;
- }
-}
+ iterator = container[j];
+ while(iterator != NULL)
+ {
+ name_size = strlen(iterator->name);
+ temp = htonl(name_size);
+ memcpy(*stream + offset, &temp, 4);
+ offset += 4;
+ strncpy(*stream + offset, iterator->name, name_size);
+ offset += name_size;
+
+ value_offset = offset;
+ offset += 4;
+ for(i=0; i<iterator->num_values; ++i)
+ {
+ if(i /*|| !strlen(iterator->value[0])*/)
+ {
+ memset(*stream + offset, 0, 1);
+ ++offset;
+ //if(!i) continue;
+ }
+ strncpy(*stream + offset, iterator->value[i], strlen(iterator->value[i]));
+ offset += strlen(iterator->value[i]);
+ }
+ value_size = offset - value_offset - 4;
+ value_size = htonl(value_size);
+ memcpy(*stream + value_offset, &value_size, 4);
+
+ iterator = iterator->next;
+ }
+ }
SPDYF_ASSERT(offset == size,"offset is wrong");