]> granicus.if.org Git - curl/commitdiff
polarssl: fix hangs
authorMichael Kaufmann <mail@michael-kaufmann.ch>
Sat, 28 Jan 2017 18:45:52 +0000 (19:45 +0100)
committerMichael Kaufmann <mail@michael-kaufmann.ch>
Sat, 28 Jan 2017 18:47:08 +0000 (19:47 +0100)
This bugfix is similar to commit c111178bd4.

docs/KNOWN_BUGS
lib/vtls/polarssl.c
lib/vtls/polarssl.h

index 80feba071dbde06b5d3dc2f8bec905dc0e7ac88c..12eeedd023a9ff3c46866fe127d3ce0f014c66f5 100644 (file)
@@ -24,10 +24,9 @@ problems may have been fixed or changed somewhat since this was written!
  1.11 CURLOPT_SEEKFUNCTION not called with CURLFORM_STREAM
 
  2. TLS
- 2.1 Hangs with PolarSSL
- 2.2 CURLINFO_SSL_VERIFYRESULT has limited support
- 2.3 DER in keychain
- 2.4 GnuTLS backend skips really long certificate fields
+ 2.1 CURLINFO_SSL_VERIFYRESULT has limited support
+ 2.2 DER in keychain
+ 2.3 GnuTLS backend skips really long certificate fields
 
  3. Email protocols
  3.1 IMAP SEARCH ALL truncated response
@@ -207,26 +206,17 @@ problems may have been fixed or changed somewhat since this was written!
 
 2. TLS
 
-2.1 Hangs with PolarSSL
-
- "curl_easy_perform hangs with imap and PolarSSL"
- https://github.com/curl/curl/issues/334
-
- Most likely, a fix similar to commit c111178bd4 (for mbedTLS) is
- necessary. Or if we just wait a little longer we'll rip out all support for
- PolarSSL instead...
-
-2.2 CURLINFO_SSL_VERIFYRESULT has limited support
+2.1 CURLINFO_SSL_VERIFYRESULT has limited support
 
  CURLINFO_SSL_VERIFYRESULT is only implemented for the OpenSSL and NSS
  backends, so relying on this information in a generic app is flaky.
 
-2.3 DER in keychain
+2.2 DER in keychain
 
  Curl doesn't recognize certificates in DER format in keychain, but it works
  with PEM.  https://curl.haxx.se/bug/view.cgi?id=1065
 
-2.4 GnuTLS backend skips really long certificate fields
+2.3 GnuTLS backend skips really long certificate fields
 
  libcurl calls gnutls_x509_crt_get_dn() with a fixed buffer size and if the
  field is too long in the cert, it'll just return an error and the field will
index 4bba3e3f28954bd80d41d4f2a405b41afd7b3199..1a9421d821027c52b9e3ca47f2c3173e4b1795bb 100644 (file)
@@ -816,4 +816,12 @@ void Curl_polarssl_cleanup(void)
   (void)Curl_polarsslthreadlock_thread_cleanup();
 }
 
+
+int Curl_polarssl_data_pending(const struct connectdata *conn, int sockindex)
+{
+  ssl_context *ssl =
+    (ssl_context *)&conn->ssl[sockindex].ssl;
+  return ssl->in_msglen != 0;
+}
+
 #endif /* USE_POLARSSL */
index 7098b24a42b7dec659343a8046863d6649706853..47af7b4173fed4412bf5ce60eb4429e5a1ddc627 100644 (file)
@@ -31,6 +31,7 @@
 /* Called on first use PolarSSL, setup threading if supported */
 int  Curl_polarssl_init(void);
 void Curl_polarssl_cleanup(void);
+int Curl_polarssl_data_pending(const struct connectdata *conn, int sockindex);
 
 
 CURLcode Curl_polarssl_connect(struct connectdata *conn, int sockindex);
@@ -69,7 +70,7 @@ int Curl_polarssl_shutdown(struct connectdata *conn, int sockindex);
 #define curlssl_engines_list(x) ((void)x, (struct curl_slist *)NULL)
 #define curlssl_version Curl_polarssl_version
 #define curlssl_check_cxn(x) ((void)x, -1)
-#define curlssl_data_pending(x,y) ((void)x, (void)y, 0)
+#define curlssl_data_pending(x,y) Curl_polarssl_data_pending(x, y)
 #define curlssl_sha256sum(a,b,c,d) sha256(a,b,c,0)
 
 /* This might cause libcurl to use a weeker random!