From dc21d8e920b0c0af05133c15f3bf568f3730c3ff Mon Sep 17 00:00:00 2001 From: "Javier M. Mellid" Date: Wed, 21 Oct 2015 16:04:14 +0200 Subject: [PATCH] rgw: add explicit success/error paths in RGWGetObj::execute() Fixes: #12352 Signed-off-by: Javier M. Mellid --- src/rgw/rgw_op.cc | 5 ++++- src/rgw/rgw_op.h | 1 + src/rgw/rgw_rest_s3.cc | 6 ++++++ src/rgw/rgw_rest_s3.h | 1 + src/rgw/rgw_rest_swift.cc | 6 ++++++ src/rgw/rgw_rest_swift.h | 1 + 6 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/rgw/rgw_op.cc b/src/rgw/rgw_op.cc index e05ad976e4e4..ca41a25ad983 100644 --- a/src/rgw/rgw_op.cc +++ b/src/rgw/rgw_op.cc @@ -1017,8 +1017,11 @@ void RGWGetObj::execute() goto done_err; } -done_err: send_response_data(bl, 0, 0); + return; + +done_err: + send_response_data_error(); } int RGWGetObj::init_common() diff --git a/src/rgw/rgw_op.h b/src/rgw/rgw_op.h index 0cdca94b4a29..635457302cb7 100644 --- a/src/rgw/rgw_op.h +++ b/src/rgw/rgw_op.h @@ -177,6 +177,7 @@ public: int get_data_cb(bufferlist& bl, off_t ofs, off_t len); virtual int get_params() = 0; + virtual int send_response_data_error() = 0; virtual int send_response_data(bufferlist& bl, off_t ofs, off_t len) = 0; virtual const string name() { return "get_obj"; } diff --git a/src/rgw/rgw_rest_s3.cc b/src/rgw/rgw_rest_s3.cc index 487f1b114e09..3388c75b8a8e 100644 --- a/src/rgw/rgw_rest_s3.cc +++ b/src/rgw/rgw_rest_s3.cc @@ -72,6 +72,12 @@ static struct response_attr_param resp_attr_params[] = { {NULL, NULL}, }; +int RGWGetObj_ObjStore_S3::send_response_data_error() +{ + bufferlist bl; + return send_response_data(bl, 0 , 0); +} + int RGWGetObj_ObjStore_S3::send_response_data(bufferlist& bl, off_t bl_ofs, off_t bl_len) { const char *content_type = NULL; diff --git a/src/rgw/rgw_rest_s3.h b/src/rgw/rgw_rest_s3.h index 5db03dadc950..5aa52d5585c9 100644 --- a/src/rgw/rgw_rest_s3.h +++ b/src/rgw/rgw_rest_s3.h @@ -21,6 +21,7 @@ public: RGWGetObj_ObjStore_S3() {} ~RGWGetObj_ObjStore_S3() {} + int send_response_data_error(); int send_response_data(bufferlist& bl, off_t ofs, off_t len); }; diff --git a/src/rgw/rgw_rest_swift.cc b/src/rgw/rgw_rest_swift.cc index 64bb36c58b21..2e61fcb558fa 100644 --- a/src/rgw/rgw_rest_swift.cc +++ b/src/rgw/rgw_rest_swift.cc @@ -849,6 +849,12 @@ int RGWGetObj_ObjStore_SWIFT::get_params() return RGWGetObj_ObjStore::get_params(); } +int RGWGetObj_ObjStore_SWIFT::send_response_data_error() +{ + bufferlist bl; + return send_response_data(bl, 0, 0); +} + int RGWGetObj_ObjStore_SWIFT::send_response_data(bufferlist& bl, off_t bl_ofs, off_t bl_len) { string content_type; diff --git a/src/rgw/rgw_rest_swift.h b/src/rgw/rgw_rest_swift.h index 1311dadb29d1..b254164a5bda 100644 --- a/src/rgw/rgw_rest_swift.h +++ b/src/rgw/rgw_rest_swift.h @@ -14,6 +14,7 @@ public: ~RGWGetObj_ObjStore_SWIFT() {} int get_params(); + int send_response_data_error(); int send_response_data(bufferlist& bl, off_t ofs, off_t len); bool need_object_expiration() { return true; } }; -- 2.47.3