Restore s->early_data_state with the original value
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>
Mon, 3 Apr 2017 13:17:58 +0000 (14:17 +0100)
committerMatt Caswell <matt@openssl.org>
Mon, 3 Apr 2017 18:07:29 +0000 (19:07 +0100)
Reviewed-by: Rich Salz <rsalz@openssl.org>
Reviewed-by: Matt Caswell <matt@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/3091)

ssl/ssl_lib.c

index 61e1a7a4c808861611df133a3e14767d8e70c08e..5b5bff1faaaf93cfaf3226a9b75586109131d335 100644 (file)
@@ -1830,12 +1830,14 @@ int SSL_write_early_data(SSL *s, const void *buf, size_t num, size_t *written)
         return ret;
 
     case SSL_EARLY_DATA_FINISHED_READING:
         return ret;
 
     case SSL_EARLY_DATA_FINISHED_READING:
-    case SSL_EARLY_DATA_READ_RETRY:
+    case SSL_EARLY_DATA_READ_RETRY: {
+        int early_data_state = s->early_data_state;
         /* We are a server writing to an unauthenticated client */
         s->early_data_state = SSL_EARLY_DATA_UNAUTH_WRITING;
         ret = SSL_write_ex(s, buf, num, written);
         /* We are a server writing to an unauthenticated client */
         s->early_data_state = SSL_EARLY_DATA_UNAUTH_WRITING;
         ret = SSL_write_ex(s, buf, num, written);
-        s->early_data_state = SSL_EARLY_DATA_READ_RETRY;
+        s->early_data_state = early_data_state;
         return ret;
         return ret;
+    }
 
     default:
         SSLerr(SSL_F_SSL_WRITE_EARLY_DATA, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
 
     default:
         SSLerr(SSL_F_SSL_WRITE_EARLY_DATA, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);