summaryrefslogtreecommitdiffstats
path: root/gst/librfb/rfbdecoder.c
diff options
context:
space:
mode:
authorDavid Schleef <ds@schleef.org>2005-03-26 01:24:38 +0000
committerDavid Schleef <ds@schleef.org>2005-03-26 01:24:38 +0000
commita587eb0e3849a4937889cb14bdd14f677ad66c59 (patch)
treee9cbc444d30eef087d0d84833825a67ae6ea59ed /gst/librfb/rfbdecoder.c
parent808f0f53fe27fc32b5a40f34f635b1d9c6047ac8 (diff)
downloadgst-plugins-bad-a587eb0e3849a4937889cb14bdd14f677ad66c59.tar.gz
gst-plugins-bad-a587eb0e3849a4937889cb14bdd14f677ad66c59.tar.bz2
gst-plugins-bad-a587eb0e3849a4937889cb14bdd14f677ad66c59.zip
gst/librfb/gstrfbsrc.c: Check return values to avoid segfaults.
Original commit message from CVS: * gst/librfb/gstrfbsrc.c: (gst_rfbsrc_get): Check return values to avoid segfaults. * gst/librfb/rfbbytestream.c: (rfb_bytestream_get), (rfb_bytestream_check), (rfb_bytestream_copy_nocheck), (rfb_bytestream_read), (rfb_bytestream_peek): * gst/librfb/rfbbytestream.h: * gst/librfb/rfbdecoder.c: (rfb_socket_get_buffer), (rfb_socket_send_buffer), (rfb_decoder_iterate), (rfb_decoder_state_wait_for_protocol_version), (rfb_decoder_state_wait_for_security), (rfb_decoder_state_wait_for_server_initialisation), (rfb_decoder_state_normal), (rfb_decoder_state_framebuffer_update):
Diffstat (limited to 'gst/librfb/rfbdecoder.c')
-rw-r--r--gst/librfb/rfbdecoder.c22
1 files changed, 14 insertions, 8 deletions
diff --git a/gst/librfb/rfbdecoder.c b/gst/librfb/rfbdecoder.c
index 0b35f494..b30dc34d 100644
--- a/gst/librfb/rfbdecoder.c
+++ b/gst/librfb/rfbdecoder.c
@@ -7,6 +7,8 @@
#include <arpa/inet.h>
#include <errno.h>
+#include <gst/gst.h>
+
#if 0
struct _RfbSocketPrivate
@@ -29,7 +31,7 @@ rfb_socket_get_buffer (int length, gpointer user_data)
buffer->data = g_malloc (length);
buffer->free_data = (void *) g_free;
- g_print ("calling read(%d, %p, %d)\n", fd, buffer->data, length);
+ GST_DEBUG ("calling read(%d, %p, %d)", fd, buffer->data, length);
ret = read (fd, buffer->data, length);
if (ret <= 0) {
g_critical ("read: %s", strerror (errno));
@@ -48,7 +50,7 @@ rfb_socket_send_buffer (guint8 * buffer, int length, gpointer user_data)
int fd = GPOINTER_TO_INT (user_data);
int ret;
- g_print ("calling write(%d, %p, %d)\n", fd, buffer, length);
+ GST_DEBUG ("calling write(%d, %p, %d)", fd, buffer, length);
ret = write (fd, buffer, length);
if (ret < 0) {
g_critical ("write: %s", strerror (errno));
@@ -125,7 +127,7 @@ rfb_decoder_iterate (RfbDecoder * decoder)
decoder->state = rfb_decoder_state_wait_for_protocol_version;
}
- g_print ("iterating...\n");
+ GST_DEBUG ("iterating...");
return decoder->state (decoder);
}
@@ -152,7 +154,7 @@ rfb_decoder_state_wait_for_protocol_version (RfbDecoder * decoder)
data = buffer->data;
g_assert (memcmp (buffer->data, "RFB 003.00", 10) == 0);
- g_print ("\"%.11s\"\n", buffer->data);
+ GST_DEBUG ("\"%.11s\"", buffer->data);
rfb_buffer_free (buffer);
rfb_decoder_send (decoder, "RFB 003.003\n", 12);
@@ -173,7 +175,7 @@ rfb_decoder_state_wait_for_security (RfbDecoder * decoder)
return FALSE;
decoder->security_type = RFB_GET_UINT32 (buffer->data);
- g_print ("security = %d\n", decoder->security_type);
+ GST_DEBUG ("security = %d", decoder->security_type);
rfb_buffer_free (buffer);
@@ -220,8 +222,8 @@ rfb_decoder_state_wait_for_server_initialisation (RfbDecoder * decoder)
decoder->green_shift = RFB_GET_UINT8 (data + 15);
decoder->blue_shift = RFB_GET_UINT8 (data + 16);
- g_print ("width: %d\n", decoder->width);
- g_print ("height: %d\n", decoder->height);
+ GST_DEBUG ("width: %d", decoder->width);
+ GST_DEBUG ("height: %d", decoder->height);
name_length = RFB_GET_UINT32 (data + 20);
rfb_buffer_free (buffer);
@@ -231,7 +233,7 @@ rfb_decoder_state_wait_for_server_initialisation (RfbDecoder * decoder)
return FALSE;
decoder->name = g_strndup ((char *) (buffer->data) + 24, name_length);
- g_print ("name: %s\n", decoder->name);
+ GST_DEBUG ("name: %s", decoder->name);
rfb_buffer_free (buffer);
decoder->state = rfb_decoder_state_normal;
@@ -248,6 +250,8 @@ rfb_decoder_state_normal (RfbDecoder * decoder)
int message_type;
ret = rfb_bytestream_read (decoder->bytestream, &buffer, 1);
+ if (ret < 1)
+ return FALSE;
message_type = RFB_GET_UINT8 (buffer->data);
switch (message_type) {
@@ -280,6 +284,8 @@ rfb_decoder_state_framebuffer_update (RfbDecoder * decoder)
int ret;
ret = rfb_bytestream_read (decoder->bytestream, &buffer, 3);
+ if (ret < 3)
+ return FALSE;
decoder->n_rects = RFB_GET_UINT16 (buffer->data + 1);
decoder->state = rfb_decoder_state_framebuffer_update_rectangle;