Skip to content

Commit

Permalink
quic: address recent coverity warning
Browse files Browse the repository at this point in the history
Address coverity warning about uninitialized value

Signed-off-by: Michael Dawson <[email protected]>
PR-URL: nodejs#47753
Reviewed-By: James M Snell <[email protected]>
Reviewed-By: Mohammed Keyvanzadeh <[email protected]>
Reviewed-By: Yagiz Nizipli <[email protected]>
Reviewed-By: Luigi Pinca <[email protected]>
  • Loading branch information
mhdawson authored and MoLow committed Jul 6, 2023
1 parent b34eaf3 commit 5f8aef4
Showing 1 changed file with 140 additions and 0 deletions.
140 changes: 140 additions & 0 deletions src/quic/data.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,140 @@
#pragma once

#if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
#if HAVE_OPENSSL && NODE_OPENSSL_HAS_QUIC

#include <env.h>
#include <memory_tracker.h>
#include <nghttp3/nghttp3.h>
#include <ngtcp2/ngtcp2.h>
#include <node_internals.h>
#include <node_sockaddr.h>
#include <v8.h>

namespace node {
namespace quic {

struct Path final : public ngtcp2_path {
Path(const SocketAddress& local, const SocketAddress& remote);
};

struct PathStorage final : public ngtcp2_path_storage {
PathStorage();
operator ngtcp2_path();
};

class Store final : public MemoryRetainer {
public:
Store() = default;

Store(std::shared_ptr<v8::BackingStore> store,
size_t length,
size_t offset = 0);
Store(std::unique_ptr<v8::BackingStore> store,
size_t length,
size_t offset = 0);

enum class Option {
NONE,
DETACH,
};

Store(v8::Local<v8::ArrayBuffer> buffer, Option option = Option::NONE);
Store(v8::Local<v8::ArrayBufferView> view, Option option = Option::NONE);

v8::Local<v8::Uint8Array> ToUint8Array(Environment* env) const;

operator uv_buf_t() const;
operator ngtcp2_vec() const;
operator nghttp3_vec() const;
operator bool() const;
size_t length() const;

void MemoryInfo(MemoryTracker* tracker) const override;
SET_MEMORY_INFO_NAME(Store)
SET_SELF_SIZE(Store)

private:
template <typename T, typename t>
T convert() const;
std::shared_ptr<v8::BackingStore> store_;
size_t length_ = 0;
size_t offset_ = 0;
};

class QuicError final : public MemoryRetainer {
public:
using error_code = uint64_t;

static constexpr error_code QUIC_NO_ERROR = NGTCP2_NO_ERROR;
static constexpr error_code QUIC_APP_NO_ERROR = 65280;

enum class Type {
TRANSPORT = NGTCP2_CONNECTION_CLOSE_ERROR_CODE_TYPE_TRANSPORT,
APPLICATION = NGTCP2_CONNECTION_CLOSE_ERROR_CODE_TYPE_APPLICATION,
VERSION_NEGOTIATION =
NGTCP2_CONNECTION_CLOSE_ERROR_CODE_TYPE_TRANSPORT_VERSION_NEGOTIATION,
IDLE_CLOSE = NGTCP2_CONNECTION_CLOSE_ERROR_CODE_TYPE_TRANSPORT_IDLE_CLOSE,
};

static constexpr error_code QUIC_ERROR_TYPE_TRANSPORT =
NGTCP2_CONNECTION_CLOSE_ERROR_CODE_TYPE_TRANSPORT;
static constexpr error_code QUIC_ERROR_TYPE_APPLICATION =
NGTCP2_CONNECTION_CLOSE_ERROR_CODE_TYPE_APPLICATION;

explicit QuicError(const std::string_view reason = "");
explicit QuicError(const ngtcp2_connection_close_error* ptr);
explicit QuicError(const ngtcp2_connection_close_error& error);

Type type() const;
error_code code() const;
const std::string_view reason() const;
uint64_t frame_type() const;

operator const ngtcp2_connection_close_error&() const;
operator const ngtcp2_connection_close_error*() const;

// Returns false if the QuicError uses a no_error code with type
// transport or application.
operator bool() const;

bool operator==(const QuicError& other) const;
bool operator!=(const QuicError& other) const;

void MemoryInfo(MemoryTracker* tracker) const override;
SET_MEMORY_INFO_NAME(QuicError)
SET_SELF_SIZE(QuicError)

std::string ToString() const;
v8::MaybeLocal<v8::Value> ToV8Value(Environment* env) const;

static QuicError ForTransport(error_code code,
const std::string_view reason = "");
static QuicError ForApplication(error_code code,
const std::string_view reason = "");
static QuicError ForVersionNegotiation(const std::string_view reason = "");
static QuicError ForIdleClose(const std::string_view reason = "");
static QuicError ForNgtcp2Error(int code, const std::string_view reason = "");
static QuicError ForTlsAlert(int code, const std::string_view reason = "");

static QuicError FromConnectionClose(ngtcp2_conn* session);

static QuicError TRANSPORT_NO_ERROR;
static QuicError APPLICATION_NO_ERROR;
static QuicError VERSION_NEGOTIATION;
static QuicError IDLE_CLOSE;
static QuicError INTERNAL_ERROR;

private:
const uint8_t* reason_c_str() const;

std::string reason_;
ngtcp2_connection_close_error error_ = ngtcp2_connection_close_error();
const ngtcp2_connection_close_error* ptr_ = nullptr;
};

} // namespace quic
} // namespace node

#endif // HAVE_OPENSSL && NODE_OPENSSL_HAS_QUIC
#endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS

0 comments on commit 5f8aef4

Please sign in to comment.