Internal change PiperOrigin-RevId: 473874471
diff --git a/build/source_list.bzl b/build/source_list.bzl index 2f69820..6a35a8e 100644 --- a/build/source_list.bzl +++ b/build/source_list.bzl
@@ -45,6 +45,7 @@ "common/print_elements.h", "common/quiche_buffer_allocator.h", "common/quiche_circular_deque.h", + "common/quiche_crypto_logging.h", "common/quiche_data_reader.h", "common/quiche_data_writer.h", "common/quiche_endian.h", @@ -406,6 +407,7 @@ "common/platform/api/quiche_hostname_utils.cc", "common/platform/api/quiche_mutex.cc", "common/quiche_buffer_allocator.cc", + "common/quiche_crypto_logging.cc", "common/quiche_data_reader.cc", "common/quiche_data_writer.cc", "common/quiche_ip_address.cc",
diff --git a/build/source_list.gni b/build/source_list.gni index 9defb90..8d629f6 100644 --- a/build/source_list.gni +++ b/build/source_list.gni
@@ -45,6 +45,7 @@ "src/quiche/common/print_elements.h", "src/quiche/common/quiche_buffer_allocator.h", "src/quiche/common/quiche_circular_deque.h", + "src/quiche/common/quiche_crypto_logging.h", "src/quiche/common/quiche_data_reader.h", "src/quiche/common/quiche_data_writer.h", "src/quiche/common/quiche_endian.h", @@ -406,6 +407,7 @@ "src/quiche/common/platform/api/quiche_hostname_utils.cc", "src/quiche/common/platform/api/quiche_mutex.cc", "src/quiche/common/quiche_buffer_allocator.cc", + "src/quiche/common/quiche_crypto_logging.cc", "src/quiche/common/quiche_data_reader.cc", "src/quiche/common/quiche_data_writer.cc", "src/quiche/common/quiche_ip_address.cc",
diff --git a/build/source_list.json b/build/source_list.json index 8ab853a..e0c9ba9 100644 --- a/build/source_list.json +++ b/build/source_list.json
@@ -44,6 +44,7 @@ "quiche/common/print_elements.h", "quiche/common/quiche_buffer_allocator.h", "quiche/common/quiche_circular_deque.h", + "quiche/common/quiche_crypto_logging.h", "quiche/common/quiche_data_reader.h", "quiche/common/quiche_data_writer.h", "quiche/common/quiche_endian.h", @@ -405,6 +406,7 @@ "quiche/common/platform/api/quiche_hostname_utils.cc", "quiche/common/platform/api/quiche_mutex.cc", "quiche/common/quiche_buffer_allocator.cc", + "quiche/common/quiche_crypto_logging.cc", "quiche/common/quiche_data_reader.cc", "quiche/common/quiche_data_writer.cc", "quiche/common/quiche_ip_address.cc",
diff --git a/quiche/common/quiche_crypto_logging.cc b/quiche/common/quiche_crypto_logging.cc new file mode 100644 index 0000000..7f3eb2a --- /dev/null +++ b/quiche/common/quiche_crypto_logging.cc
@@ -0,0 +1,42 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "quiche/common/quiche_crypto_logging.h" + +#include "absl/status/status.h" +#include "absl/strings/string_view.h" +#include "openssl/err.h" +#include "quiche/common/platform/api/quiche_logging.h" + +namespace quiche { +void DLogOpenSslErrors() { +#ifdef NDEBUG + // Clear OpenSSL error stack. + ClearOpenSslErrors(); +#else + while (uint32_t error = ERR_get_error()) { + char buf[120]; + ERR_error_string_n(error, buf, ABSL_ARRAYSIZE(buf)); + QUICHE_DLOG(ERROR) << "OpenSSL error: " << buf; + } +#endif +} + +void ClearOpenSslErrors() { + while (ERR_get_error()) { + } +} + +absl::Status SslErrorAsStatus(absl::string_view msg) { + std::string message; + absl::StrAppend(&message, msg, "OpenSSL error: "); + while (uint32_t error = ERR_get_error()) { + char buf[120]; + ERR_error_string_n(error, buf, ABSL_ARRAYSIZE(buf)); + absl::StrAppend(&message, buf); + } + return absl::InternalError(message); +} + +} // namespace quiche
diff --git a/quiche/common/quiche_crypto_logging.h b/quiche/common/quiche_crypto_logging.h new file mode 100644 index 0000000..709694d --- /dev/null +++ b/quiche/common/quiche_crypto_logging.h
@@ -0,0 +1,25 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef QUICHE_COMMON_QUICHE_CRYPTO_LOGGING_H_ +#define QUICHE_COMMON_QUICHE_CRYPTO_LOGGING_H_ + +#include "absl/status/status.h" + +namespace quiche { + +// In debug builds only, log OpenSSL error stack. Then clear OpenSSL error +// stack. +void DLogOpenSslErrors(); + +// Clears OpenSSL error stack. +void ClearOpenSslErrors(); + +// Include OpenSSL error stack in Status msg so that callers could choose to +// only log it in debug builds if required. +absl::Status SslErrorAsStatus(absl::string_view msg); + +} // namespace quiche + +#endif // QUICHE_COMMON_QUICHE_CRYPTO_LOGGING_H_
diff --git a/quiche/quic/core/crypto/aead_base_decrypter.cc b/quiche/quic/core/crypto/aead_base_decrypter.cc index c79e74e..b6a3c4f 100644 --- a/quiche/quic/core/crypto/aead_base_decrypter.cc +++ b/quiche/quic/core/crypto/aead_base_decrypter.cc
@@ -15,31 +15,13 @@ #include "quiche/quic/core/quic_utils.h" #include "quiche/quic/platform/api/quic_bug_tracker.h" #include "quiche/quic/platform/api/quic_logging.h" +#include "quiche/common/quiche_crypto_logging.h" namespace quic { - +using ::quiche::ClearOpenSslErrors; +using ::quiche::DLogOpenSslErrors; namespace { -// Clear OpenSSL error stack. -void ClearOpenSslErrors() { - while (ERR_get_error()) { - } -} - -// In debug builds only, log OpenSSL error stack. Then clear OpenSSL error -// stack. -void DLogOpenSslErrors() { -#ifdef NDEBUG - ClearOpenSslErrors(); -#else - while (uint32_t error = ERR_get_error()) { - char buf[120]; - ERR_error_string_n(error, buf, ABSL_ARRAYSIZE(buf)); - QUIC_DLOG(ERROR) << "OpenSSL error: " << buf; - } -#endif -} - const EVP_AEAD* InitAndCall(const EVP_AEAD* (*aead_getter)()) { // Ensure BoringSSL is initialized before calling |aead_getter|. In Chromium, // the static initializer is disabled.
diff --git a/quiche/quic/core/crypto/aead_base_encrypter.cc b/quiche/quic/core/crypto/aead_base_encrypter.cc index a2f0d59..481eaa9 100644 --- a/quiche/quic/core/crypto/aead_base_encrypter.cc +++ b/quiche/quic/core/crypto/aead_base_encrypter.cc
@@ -12,26 +12,12 @@ #include "quiche/quic/core/quic_utils.h" #include "quiche/quic/platform/api/quic_bug_tracker.h" #include "quiche/quic/platform/api/quic_logging.h" +#include "quiche/common/quiche_crypto_logging.h" namespace quic { - +using ::quiche::DLogOpenSslErrors; namespace { -// In debug builds only, log OpenSSL error stack. Then clear OpenSSL error -// stack. -void DLogOpenSslErrors() { -#ifdef NDEBUG - while (ERR_get_error()) { - } -#else - while (unsigned long error = ERR_get_error()) { - char buf[120]; - ERR_error_string_n(error, buf, ABSL_ARRAYSIZE(buf)); - QUIC_DLOG(ERROR) << "OpenSSL error: " << buf; - } -#endif -} - const EVP_AEAD* InitAndCall(const EVP_AEAD* (*aead_getter)()) { // Ensure BoringSSL is initialized before calling |aead_getter|. In Chromium, // the static initializer is disabled.