[telepathy-gabble/master] Fix usage of potentially freed memory
Sjoerd Simons
sjoerd.simons at collabora.co.uk
Fri Dec 18 06:12:48 PST 2009
In various error cases the data buffer in the socks5 bytestream gets freed
directly, in such cases don't try to return the lenght of said buffer. Instead
return -1, which, in case the buffer isn't freed yet, will erase all the data
left, which is exactly what we want.
---
src/bytestream-socks5.c | 20 ++++++++++----------
1 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/src/bytestream-socks5.c b/src/bytestream-socks5.c
index 606526c..4d8641c 100644
--- a/src/bytestream-socks5.c
+++ b/src/bytestream-socks5.c
@@ -853,7 +853,7 @@ initiator_got_connect_reply (GabbleBytestreamSocks5 *self)
/* Process the received data and returns the number of bytes that have been
* used */
-static gsize
+static gssize
socks5_handle_received_data (GabbleBytestreamSocks5 *self,
GString *string)
{
@@ -882,7 +882,7 @@ socks5_handle_received_data (GabbleBytestreamSocks5 *self,
DEBUG ("Authentication failed");
socks5_error (self);
- return string->len;
+ return -1;
}
/* We have been authorized, let's send a CONNECT command */
@@ -945,7 +945,7 @@ socks5_handle_received_data (GabbleBytestreamSocks5 *self,
DEBUG ("Connection refused");
socks5_error (self);
- return string->len;
+ return -1;
}
if (string->str[3] == SOCKS5_ATYP_DOMAIN)
@@ -966,7 +966,7 @@ socks5_handle_received_data (GabbleBytestreamSocks5 *self,
DEBUG ("Wrong domain");
socks5_error (self);
- return string->len;
+ return -1;
}
if ((guint8) string->len < SOCKS5_MIN_LENGTH + addr_len)
@@ -984,7 +984,7 @@ socks5_handle_received_data (GabbleBytestreamSocks5 *self,
DEBUG ("Connection refused");
socks5_error (self);
- return string->len;
+ return -1;
}
if (priv->socks5_state == SOCKS5_STATE_TARGET_CONNECT_REQUESTED)
@@ -1029,7 +1029,7 @@ socks5_handle_received_data (GabbleBytestreamSocks5 *self,
DEBUG ("Authentication failed");
socks5_error (self);
- return string->len;
+ return -1;
}
/* The auth request string is SOCKS5_VERSION + # of methods + methods */
@@ -1059,7 +1059,7 @@ socks5_handle_received_data (GabbleBytestreamSocks5 *self,
socks5_error (self);
- return auth_len;
+ return -1;
case SOCKS5_STATE_INITIATOR_AWAITING_COMMAND:
/* The client has been authorized and we are waiting for a command,
@@ -1092,7 +1092,7 @@ socks5_handle_received_data (GabbleBytestreamSocks5 *self,
DEBUG ("Invalid SOCKS5 connect message");
socks5_error (self);
- return string->len;
+ return -1;
}
domain = compute_domain (priv->stream_id, priv->self_full_jid,
@@ -1104,7 +1104,7 @@ socks5_handle_received_data (GabbleBytestreamSocks5 *self,
socks5_close_transport (self);
socks5_error (self);
g_free (domain);
- return string->len;
+ return -1;
}
msg[0] = SOCKS5_VERSION;
@@ -1187,7 +1187,7 @@ transport_handler (GibberTransport *transport,
GabbleBytestreamSocks5 *self = GABBLE_BYTESTREAM_SOCKS5 (user_data);
GabbleBytestreamSocks5Private *priv =
GABBLE_BYTESTREAM_SOCKS5_GET_PRIVATE (self);
- gsize used_bytes;
+ gssize used_bytes;
g_assert (priv->read_buffer != NULL);
g_string_append_len (priv->read_buffer, (const gchar *) data->data,
--
1.5.6.5
More information about the telepathy-commits
mailing list