From 2189c63e353e400a4c2e3ac84b96c007d2766e54 Mon Sep 17 00:00:00 2001 From: Radoslaw Zarzynski Date: Wed, 30 Nov 2016 21:58:30 +0100 Subject: [PATCH] rgw: add the check for Content-Length in BulkUpload. Signed-off-by: Radoslaw Zarzynski --- src/rgw/rgw_op.cc | 4 ++++ src/rgw/rgw_rest_swift.cc | 18 ++++++++++++------ 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/rgw/rgw_op.cc b/src/rgw/rgw_op.cc index 72bfefb4fe81..9d770394fadb 100644 --- a/src/rgw/rgw_op.cc +++ b/src/rgw/rgw_op.cc @@ -5928,6 +5928,10 @@ void RGWBulkUploadOp::execute() /* Create an instance of stream-abstracting class. Having this indirection * allows for easy introduction of decompressors like gzip and bzip2. */ auto stream = create_stream(); + if (! stream) { + return; + } + auto status = rgw::tar::StatusIndicator::create(); do { op_ret = stream->get_exactly(rgw::tar::BLOCK_SIZE, buffer); diff --git a/src/rgw/rgw_rest_swift.cc b/src/rgw/rgw_rest_swift.cc index d02d4afc2925..44aec1e73477 100644 --- a/src/rgw/rgw_rest_swift.cc +++ b/src/rgw/rgw_rest_swift.cc @@ -1430,8 +1430,8 @@ RGWBulkUploadOp_ObjStore_SWIFT::create_stream() req_state* const s; public: - SwiftStreamGetter(req_state* const s) - : conlen(atoll(s->length)), + SwiftStreamGetter(req_state* const s, const size_t conlen) + : conlen(conlen), curpos(0), s(s) { } @@ -1477,10 +1477,16 @@ RGWBulkUploadOp_ObjStore_SWIFT::create_stream() } }; - // FIXME: lack of conlen - ldout(s->cct, 20) << "bulk upload: create_stream for length=" - << s->length << dendl; - return std::unique_ptr(new SwiftStreamGetter(s)); + if (! s->length) { + op_ret = -EINVAL; + return nullptr; + } else { + ldout(s->cct, 20) << "bulk upload: create_stream for length=" + << s->length << dendl; + + const size_t conlen = atoll(s->length); + return std::unique_ptr(new SwiftStreamGetter(s, conlen)); + } } void RGWBulkUploadOp_ObjStore_SWIFT::send_response() -- 2.47.3