From: Radoslaw Zarzynski Date: Wed, 30 Nov 2016 20:58:30 +0000 (+0100) Subject: rgw: add the check for Content-Length in BulkUpload. X-Git-Tag: v12.0.2~214^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F12243%2Fhead;p=ceph.git rgw: add the check for Content-Length in BulkUpload. Signed-off-by: Radoslaw Zarzynski --- 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()