]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: fail if parts not specified on complete-multipart-upload 4407/head
authorYehuda Sadeh <yehuda@redhat.com>
Mon, 20 Apr 2015 21:47:16 +0000 (14:47 -0700)
committerYehuda Sadeh <yehuda@redhat.com>
Mon, 20 Apr 2015 21:47:16 +0000 (14:47 -0700)
Fixes: #11435
A complete multipart upload should not succeed if parts were not
specified. Also, adjust return codes.

Signed-off-by: Yehuda Sadeh <yehuda@redhat.com>
src/rgw/rgw_common.h
src/rgw/rgw_http_errors.h
src/rgw/rgw_op.cc

index a26d96e7c0fe26ea0d2a49f7fc00d15f943ef00e..a1ae4d975f2bac16f2751a89bd6cfd26ecd3808c 100644 (file)
@@ -145,6 +145,7 @@ using ceph::crypto::MD5;
 #define ERR_QUOTA_EXCEEDED       2026
 #define ERR_SIGNATURE_NO_MATCH   2027
 #define ERR_INVALID_ACCESS_KEY   2028
+#define ERR_MALFORMED_XML        2029
 #define ERR_USER_SUSPENDED       2100
 #define ERR_INTERNAL_ERROR       2200
 
index 7850807b6024b68f4ba6e0acc2f03692f477b399..78776f46339bcc97873ab02db131c5786495d22a 100644 (file)
@@ -34,6 +34,7 @@ const static struct rgw_http_errors RGW_HTTP_ERRORS[] = {
     { ERR_TOO_LARGE, 400, "EntityTooLarge" },
     { ERR_TOO_SMALL, 400, "EntityTooSmall" },
     { ERR_TOO_MANY_BUCKETS, 400, "TooManyBuckets" },
+    { ERR_MALFORMED_XML, 400, "MalformedXML" },
     { ERR_LENGTH_REQUIRED, 411, "MissingContentLength" },
     { EACCES, 403, "AccessDenied" },
     { EPERM, 403, "AccessDenied" },
index 1ab9049f0844a322ad486eb761fb448353ac426f..23a7debb595e3eab9e82f2aa3a39a0bf3984a910 100644 (file)
@@ -2968,24 +2968,24 @@ void RGWCompleteMultipart::execute()
     return;
   }
 
-  if (!data) {
-    ret = -EINVAL;
+  if (!data || !len) {
+    ret = -ERR_MALFORMED_XML;
     return;
   }
 
   if (!parser.init()) {
-    ret = -EINVAL;
+    ret = -EIO;
     return;
   }
 
   if (!parser.parse(data, len, 1)) {
-    ret = -EINVAL;
+    ret = -ERR_MALFORMED_XML;
     return;
   }
 
   parts = static_cast<RGWMultiCompleteUpload *>(parser.find_first("CompleteMultipartUpload"));
-  if (!parts) {
-    ret = -EINVAL;
+  if (!parts || parts->parts.size() == 0) {
+    ret = -ERR_MALFORMED_XML;
     return;
   }