Make all read errors idempotent.
Now that we've gotten everything, test this by just making bssl_shim run
all errors twice. The manual tests added to ssl_test.cc may now be
removed.
Bug: 206
Change-Id: Iefa0eae83ba59b476e6b6c6f0f921d5d1b72cbfb
Reviewed-on: https://boringssl-review.googlesource.com/21886
Commit-Queue: Steven Valdez <svaldez@google.com>
CQ-Verified: CQ bot account: commit-bot@chromium.org <commit-bot@chromium.org>
Reviewed-by: Steven Valdez <svaldez@google.com>
diff --git a/ssl/dtls_record.cc b/ssl/dtls_record.cc
index eccc66b..a746640 100644
--- a/ssl/dtls_record.cc
+++ b/ssl/dtls_record.cc
@@ -174,11 +174,15 @@
}
}
-static enum ssl_open_record_t do_dtls_open_record(SSL *ssl, uint8_t *out_type,
- Span<uint8_t> *out,
- size_t *out_consumed,
- uint8_t *out_alert,
- Span<uint8_t> in) {
+enum ssl_open_record_t dtls_open_record(SSL *ssl, uint8_t *out_type,
+ Span<uint8_t> *out,
+ size_t *out_consumed,
+ uint8_t *out_alert, Span<uint8_t> in) {
+ *out_consumed = 0;
+ if (ssl->s3->read_shutdown == ssl_shutdown_close_notify) {
+ return ssl_open_record_close_notify;
+ }
+
if (in.empty()) {
return ssl_open_record_partial;
}
@@ -267,30 +271,6 @@
return ssl_open_record_success;
}
-enum ssl_open_record_t dtls_open_record(SSL *ssl, uint8_t *out_type,
- Span<uint8_t> *out,
- size_t *out_consumed,
- uint8_t *out_alert, Span<uint8_t> in) {
- *out_consumed = 0;
- switch (ssl->s3->read_shutdown) {
- case ssl_shutdown_none:
- break;
- case ssl_shutdown_error:
- ERR_restore_state(ssl->s3->read_error);
- *out_alert = 0;
- return ssl_open_record_error;
- case ssl_shutdown_close_notify:
- return ssl_open_record_close_notify;
- }
-
- enum ssl_open_record_t ret =
- do_dtls_open_record(ssl, out_type, out, out_consumed, out_alert, in);
- if (ret == ssl_open_record_error) {
- ssl_set_read_error(ssl);
- }
- return ret;
-}
-
static const SSLAEADContext *get_write_aead(const SSL *ssl,
enum dtls1_use_epoch_t use_epoch) {
if (use_epoch == dtls1_use_previous_epoch) {