From 3b9fbcfee299eaa855158d9a7eeef18845613ea6 Mon Sep 17 00:00:00 2001 From: Yehuda Sadeh Date: Fri, 12 Aug 2011 13:21:47 -0700 Subject: [PATCH] rgw: handle zero and invalid max_keys --- src/rgw/rgw_op.cc | 12 +++++++++++- src/rgw/rgw_rados.cc | 2 +- src/rgw/rgw_rest_s3.cc | 4 +--- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/rgw/rgw_op.cc b/src/rgw/rgw_op.cc index 3c3c6e57130e9..c0fd7214a51bf 100644 --- a/src/rgw/rgw_op.cc +++ b/src/rgw/rgw_op.cc @@ -379,7 +379,17 @@ void RGWListBucket::execute() marker = s->args.get("marker"); max_keys = s->args.get(limit_opt_name); if (!max_keys.empty()) { - max = atoi(max_keys.c_str()); + const char *srcptr = max_keys.c_str(); + char *endptr; + max = strtol(max_keys.c_str(), &endptr, 10); + if (endptr) { + while (*endptr && isspace(*endptr)) // ignore white space + endptr++; + if (*endptr) { + ret = -EINVAL; + goto done; + } + } } else { max = default_max; } diff --git a/src/rgw/rgw_rados.cc b/src/rgw/rgw_rados.cc index c0fed5833b6ee..1d8f7fe6866c2 100644 --- a/src/rgw/rgw_rados.cc +++ b/src/rgw/rgw_rados.cc @@ -237,7 +237,7 @@ int RGWRados::list_objects(string& id, string& bucket, int max, string& prefix, result.clear(); int i; - for (i=0; ifirst; string key = p->second; diff --git a/src/rgw/rgw_rest_s3.cc b/src/rgw/rgw_rest_s3.cc index cbce411c4efe0..cedeaa415a093 100644 --- a/src/rgw/rgw_rest_s3.cc +++ b/src/rgw/rgw_rest_s3.cc @@ -131,9 +131,7 @@ void RGWListBucket_REST_S3::send_response() s->formatter->dump_format("Prefix", prefix.c_str()); if (!marker.empty()) s->formatter->dump_format("Marker", marker.c_str()); - if (!max_keys.empty()) { - s->formatter->dump_format("MaxKeys", max_keys.c_str()); - } + s->formatter->dump_int("MaxKeys", max); if (!delimiter.empty()) s->formatter->dump_format("Delimiter", delimiter.c_str()); -- 2.39.5