summaryrefslogtreecommitdiff
path: root/gnome-unstable/glib-networking/fix_G_TLS_ERROR_EOF_handling.patch
blob: c26f422aa25e079459f4102366d922cbe93bf284 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
From 9e2aaacafb45d51cff57dc033f4b5ad5bc1a1762 Mon Sep 17 00:00:00 2001
From: Dan Winship <danw@gnome.org>
Date: Fri, 16 Sep 2011 15:29:29 +0000
Subject: gnutls: fix G_TLS_ERROR_EOF handling with gnutls 3.0

gnutls 3.0 has a new error code for "peer closed connection without
sending a Close packet", so add some #ifdefs to do the right thing
with either 2.x or 3.x.

https://bugzilla.gnome.org/show_bug.cgi?id=659233
---
diff --git a/tls/gnutls/gtlsconnection-gnutls.c b/tls/gnutls/gtlsconnection-gnutls.c
index c1ede79..0f792bb 100644
--- a/tls/gnutls/gtlsconnection-gnutls.c
+++ b/tls/gnutls/gtlsconnection-gnutls.c
@@ -132,7 +132,10 @@ struct _GTlsConnectionGnutlsPrivate
 
   GError *error;
   GCancellable *cancellable;
-  gboolean blocking, eof;
+  gboolean blocking;
+#ifndef GNUTLS_E_PREMATURE_TERMINATION
+  gboolean eof;
+#endif
   GIOCondition internal_direction;
 };
 
@@ -548,19 +551,22 @@ end_gnutls_io (GTlsConnectionGnutls  *gnutls,
       gnutls->priv->need_handshake = TRUE;
       return status;
     }
-  else if (status == GNUTLS_E_UNEXPECTED_PACKET_LENGTH)
+  else if (
+#ifdef GNUTLS_E_PREMATURE_TERMINATION
+	   status == GNUTLS_E_PREMATURE_TERMINATION
+#else
+	   status == GNUTLS_E_UNEXPECTED_PACKET_LENGTH && gnutls->priv->eof
+#endif
+	   )
     {
-      if (gnutls->priv->eof)
+      if (gnutls->priv->require_close_notify)
 	{
-	  if (gnutls->priv->require_close_notify)
-	    {
-	      g_set_error_literal (error, G_TLS_ERROR, G_TLS_ERROR_EOF,
-				   _("TLS connection closed unexpectedly"));
-	      return status;
-	    }
-	  else
-	    return 0;
+	  g_set_error_literal (error, G_TLS_ERROR, G_TLS_ERROR_EOF,
+			       _("TLS connection closed unexpectedly"));
+	  return status;
 	}
+      else
+	return 0;
     }
 
   return status;
@@ -795,8 +801,10 @@ g_tls_connection_gnutls_pull_func (gnutls_transport_ptr_t  transport_data,
 
   if (ret < 0)
     set_gnutls_error (gnutls, G_IO_IN);
+#ifndef GNUTLS_E_PREMATURE_TERMINATION
   else if (ret == 0)
     gnutls->priv->eof = TRUE;
+#endif
 
   return ret;
 }
--
cgit v0.9.0.2