diff options
author | Dan Williams <dcbw@redhat.com> | 2012-11-26 16:49:39 -0600 |
---|---|---|
committer | Dan Williams <dcbw@redhat.com> | 2012-11-27 09:56:25 -0600 |
commit | a7167b93b9f077e063024754ad2d566fc65f76b4 (patch) | |
tree | ec6b74e47086c1bf2141d1bd568603096dadbba6 | |
parent | 6106d1d6a2b05a031c54c75861363b199136e417 (diff) |
port-probe: fix crash in buffer-full processing
Signal was attached with user_data as MMPortProbe*, but
serial_buffer_full() treated user_data as a PortProbeRunTask*.
Hillarity ensued.
-rw-r--r-- | src/mm-port-probe.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/src/mm-port-probe.c b/src/mm-port-probe.c index 37c2baf1..598ceb6e 100644 --- a/src/mm-port-probe.c +++ b/src/mm-port-probe.c | |||
@@ -880,7 +880,7 @@ static const guint8 zerobuf[32] = { | |||
880 | static void | 880 | static void |
881 | serial_buffer_full (MMSerialPort *serial, | 881 | serial_buffer_full (MMSerialPort *serial, |
882 | GByteArray *buffer, | 882 | GByteArray *buffer, |
883 | PortProbeRunTask *task) | 883 | MMPortProbe *self) |
884 | { | 884 | { |
885 | const gchar **iter; | 885 | const gchar **iter; |
886 | size_t iter_len; | 886 | size_t iter_len; |
@@ -892,7 +892,11 @@ serial_buffer_full (MMSerialPort *serial, | |||
892 | if ( (buffer->len >= sizeof (zerobuf)) | 892 | if ( (buffer->len >= sizeof (zerobuf)) |
893 | && (memcmp (buffer->data, zerobuf, sizeof (zerobuf)) == 0)) { | 893 | && (memcmp (buffer->data, zerobuf, sizeof (zerobuf)) == 0)) { |
894 | mm_serial_port_close (serial); | 894 | mm_serial_port_close (serial); |
895 | port_probe_run_task_complete (task, FALSE, NULL); | 895 | port_probe_run_task_complete (self->priv->task, |
896 | FALSE, | ||
897 | g_error_new_literal (MM_CORE_ERROR, | ||
898 | MM_CORE_ERROR_FAILED, | ||
899 | "Probing stopped due to non-AT response")); | ||
896 | return; | 900 | return; |
897 | } | 901 | } |
898 | 902 | ||
@@ -913,7 +917,11 @@ serial_buffer_full (MMSerialPort *serial, | |||
913 | if (!memcmp (&buffer->data[i], *iter, iter_len)) { | 917 | if (!memcmp (&buffer->data[i], *iter, iter_len)) { |
914 | /* Immediately close the port and complete probing */ | 918 | /* Immediately close the port and complete probing */ |
915 | mm_serial_port_close (serial); | 919 | mm_serial_port_close (serial); |
916 | port_probe_run_task_complete (task, FALSE, NULL); | 920 | port_probe_run_task_complete (self->priv->task, |
921 | FALSE, | ||
922 | g_error_new_literal (MM_CORE_ERROR, | ||
923 | MM_CORE_ERROR_FAILED, | ||
924 | "Probing stopped due to non-AT response")); | ||
917 | return; | 925 | return; |
918 | } | 926 | } |
919 | } | 927 | } |