Skip to content

附件大小限制问题,当大小大于uint32, 会有问题 #1348

@cstarc

Description

@cstarc

Describe the bug (描述bug)
message RpcMeta {
optional RpcRequestMeta request = 1;
optional RpcResponseMeta response = 2;
optional int32 compress_type = 3;
optional int64 correlation_id = 4;
optional int32 attachment_size = 5;
optional ChunkInfo chunk_info = 6;
optional bytes authentication_data = 7;
optional StreamSettings stream_settings = 8;
}
attachment_size 是int32 ,但附件没有限制大小
ProcessRpcResponse

    // Parse response message iff error code from meta is 0
    butil::IOBuf res_buf;
    **const int res_size** = msg->payload.length();
    butil::IOBuf* res_buf_ptr = &msg->payload;
    if (meta.has_attachment_size()) {
        if (meta.attachment_size() > res_size) {
            cntl->SetFailed(
                ERESPONSE,
                "attachment_size=%d is larger than response_size=%d",
                meta.attachment_size(), res_size);
            break;
        }
        **int att_size** = res_size - meta.attachment_size();
        msg->payload.cutn(&res_buf, att_size);
        res_buf_ptr = &res_buf;
        cntl->response_attachment().swap(msg->payload);
    }

在获取的时候都使用了int,当附件大小大于4G时会有问题。
To Reproduce (复现方法)

Expected behavior (期望行为)

Versions (各种版本)
OS:
Compiler:
brpc:
protobuf:

Additional context/screenshots (更多上下文/截图)

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugthe code does not work as expectedgood first issueGood for newcomers

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions