Skip to content

枚举溢出? #534

@haojiubujian0

Description

@haojiubujian0

我在windows下测试,xqc_frame_type_bit_t枚举类型会报警告发生截断,特别是枚举值 XQC_FRAME_BIT_REPAIR_SYMBOL = 1ULL << 32XQC_FRAME_BIT_NUM = 1ULL << 33。在经过demo测试后,二者确实都会溢出,实际使用时即使强转为uint64_t也无效;同样的,位运算也会失败。

from src/transport/xqc_frame.h
typedef enum {
    XQC_FRAME_PADDING,
    XQC_FRAME_PING,
    XQC_FRAME_ACK,
    XQC_FRAME_RESET_STREAM,
    XQC_FRAME_STOP_SENDING,
    XQC_FRAME_CRYPTO,
    XQC_FRAME_NEW_TOKEN,
    XQC_FRAME_STREAM,
    XQC_FRAME_MAX_DATA,
    XQC_FRAME_MAX_STREAM_DATA,
    XQC_FRAME_MAX_STREAMS,
    XQC_FRAME_DATA_BLOCKED,
    XQC_FRAME_STREAM_DATA_BLOCKED,
    XQC_FRAME_STREAMS_BLOCKED,
    XQC_FRAME_NEW_CONNECTION_ID,
    XQC_FRAME_RETIRE_CONNECTION_ID,
    XQC_FRAME_PATH_CHALLENGE,
    XQC_FRAME_PATH_RESPONSE,
    XQC_FRAME_CONNECTION_CLOSE,
    XQC_FRAME_HANDSHAKE_DONE,
    XQC_FRAME_ACK_MP,
    XQC_FRAME_PATH_ABANDON,
    XQC_FRAME_PATH_STATUS,
    XQC_FRAME_PATH_STANDBY,
    XQC_FRAME_PATH_AVAILABLE,
    XQC_FRAME_MP_NEW_CONNECTION_ID,
    XQC_FRAME_MP_RETIRE_CONNECTION_ID,
    XQC_FRAME_MAX_PATH_ID,
    XQC_FRAME_PATH_FROZEN,
    XQC_FRAME_DATAGRAM,
    XQC_FRAME_Extension,
    XQC_FRAME_SID,
    XQC_FRAME_REPAIR_SYMBOL,
    XQC_FRAME_NUM,
} xqc_frame_type_t;

typedef enum {
    XQC_FRAME_BIT_PADDING               = 1ULL << XQC_FRAME_PADDING,
    XQC_FRAME_BIT_PING                  = 1ULL << XQC_FRAME_PING,
    XQC_FRAME_BIT_ACK                   = 1ULL << XQC_FRAME_ACK,
    XQC_FRAME_BIT_RESET_STREAM          = 1ULL << XQC_FRAME_RESET_STREAM,
    XQC_FRAME_BIT_STOP_SENDING          = 1ULL << XQC_FRAME_STOP_SENDING,
    XQC_FRAME_BIT_CRYPTO                = 1ULL << XQC_FRAME_CRYPTO,
    XQC_FRAME_BIT_NEW_TOKEN             = 1ULL << XQC_FRAME_NEW_TOKEN,
    XQC_FRAME_BIT_STREAM                = 1ULL << XQC_FRAME_STREAM,
    XQC_FRAME_BIT_MAX_DATA              = 1ULL << XQC_FRAME_MAX_DATA,
    XQC_FRAME_BIT_MAX_STREAM_DATA       = 1ULL << XQC_FRAME_MAX_STREAM_DATA,
    XQC_FRAME_BIT_MAX_STREAMS           = 1ULL << XQC_FRAME_MAX_STREAMS,
    XQC_FRAME_BIT_DATA_BLOCKED          = 1ULL << XQC_FRAME_DATA_BLOCKED,
    XQC_FRAME_BIT_STREAM_DATA_BLOCKED   = 1ULL << XQC_FRAME_STREAM_DATA_BLOCKED,
    XQC_FRAME_BIT_STREAMS_BLOCKED       = 1ULL << XQC_FRAME_STREAMS_BLOCKED,
    XQC_FRAME_BIT_NEW_CONNECTION_ID     = 1ULL << XQC_FRAME_NEW_CONNECTION_ID,
    XQC_FRAME_BIT_RETIRE_CONNECTION_ID  = 1ULL << XQC_FRAME_RETIRE_CONNECTION_ID,
    XQC_FRAME_BIT_PATH_CHALLENGE        = 1ULL << XQC_FRAME_PATH_CHALLENGE,
    XQC_FRAME_BIT_PATH_RESPONSE         = 1ULL << XQC_FRAME_PATH_RESPONSE,
    XQC_FRAME_BIT_CONNECTION_CLOSE      = 1ULL << XQC_FRAME_CONNECTION_CLOSE,
    XQC_FRAME_BIT_HANDSHAKE_DONE        = 1ULL << XQC_FRAME_HANDSHAKE_DONE,
    XQC_FRAME_BIT_ACK_MP                = 1ULL << XQC_FRAME_ACK_MP,
    XQC_FRAME_BIT_PATH_ABANDON          = 1ULL << XQC_FRAME_PATH_ABANDON,
    XQC_FRAME_BIT_PATH_STATUS           = 1ULL << XQC_FRAME_PATH_STATUS,
    XQC_FRAME_BIT_PATH_STANDBY          = 1ULL << XQC_FRAME_PATH_STANDBY,
    XQC_FRAME_BIT_PATH_AVAILABLE        = 1ULL << XQC_FRAME_PATH_AVAILABLE,
    XQC_FRAME_BIT_MP_NEW_CONNECTION_ID  = 1ULL << XQC_FRAME_MP_NEW_CONNECTION_ID,
    XQC_FRAME_BIT_MP_RETIRE_CONNECTION_ID = 1ULL << XQC_FRAME_MP_RETIRE_CONNECTION_ID,
    XQC_FRAME_BIT_MAX_PATH_ID           = 1ULL << XQC_FRAME_MAX_PATH_ID,
    XQC_FRAME_BIT_PATH_FROZEN           = 1ULL << XQC_FRAME_PATH_FROZEN,
    XQC_FRAME_BIT_DATAGRAM              = 1ULL << XQC_FRAME_DATAGRAM,
    XQC_FRAME_BIT_Extension             = 1ULL << XQC_FRAME_Extension,
    XQC_FRAME_BIT_SID                   = 1ULL << XQC_FRAME_SID,
    XQC_FRAME_BIT_REPAIR_SYMBOL         = 1ULL << XQC_FRAME_REPAIR_SYMBOL,
    XQC_FRAME_BIT_NUM                   = 1ULL << XQC_FRAME_NUM,
} xqc_frame_type_bit_t;

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions