]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
revert parse() support for buffer::list
authorJesse F. Williamson <jfw@ibm.com>
Sat, 15 Feb 2025 18:47:36 +0000 (10:47 -0800)
committerJesse F. Williamson <jfw@ibm.com>
Mon, 17 Mar 2025 17:41:27 +0000 (10:41 -0700)
This is why we can't have nice things.

Signed-off-by: Jesse F. Williamson <jfw@ibm.com>
14 files changed:
src/common/ceph_json.h
src/rgw/rgw_auth_keystone.cc
src/rgw/rgw_keystone.cc
src/rgw/rgw_metadata.cc
src/rgw/rgw_op.cc
src/rgw/rgw_op.h
src/rgw/rgw_opa.cc
src/rgw/rgw_period_puller.cc
src/rgw/rgw_policy_s3.cc
src/rgw/rgw_rest.h
src/rgw/rgw_rest_conn.h
src/rgw/rgw_rest_role.cc
src/rgw/rgw_rest_sts.cc
src/test/common/test_json_formatter.cc

index 643ab7d34cd4689d391403234523764191d5ae0a..00d015fa555e2ce3371efbc56b7b70bbfc6827b2 100644 (file)
@@ -32,8 +32,6 @@
 #include <include/types.h>
 #include <include/ceph_fs.h>
 
-#include "include/buffer.h"
-
 #include "common/ceph_time.h"
 
 #include <fmt/format.h>
@@ -283,8 +281,6 @@ public:
               : false;
   }
 
-  bool parse(ceph::buffer::list& bl) { return parse(std::string_view { bl.c_str(), bl.length() }); }
-
   // operate on a data file:
   bool parse(const char *file_name);
 
@@ -301,7 +297,7 @@ public:
   JSONParser parser;
 
   JSONDecoder(ceph::buffer::list& bl) {
-    if (!parser.parse(bl))
+    if (!parser.parse(bl.c_str(), bl.length()))
       throw JSONDecoder::err("failed to parse JSON input");
   }
 
index 33bf75bb347423750ee9a81430b139b52e7d803c..7f3bd66a1b95cc0d25e78259403860c1792b8efb 100644 (file)
@@ -546,7 +546,7 @@ auto EC2Engine::get_secret_from_keystone(const DoutPrefixProvider* dpp,
   /* now parse response */
 
   JSONParser parser;
-  if (! parser.parse(token_body_bl)) {
+  if (! parser.parse(token_body_bl.c_str(), token_body_bl.length())) {
     ldpp_dout(dpp, 0) << "Keystone credential parse error: malformed json" << dendl;
     return make_pair(boost::none, -EINVAL);
   }
index aab3b47ba1b820a98757353bf74199ebe7c80353..2767cea06def163ce51b2792a769bad3ec24bc28 100644 (file)
@@ -285,7 +285,7 @@ int TokenEnvelope::parse(const DoutPrefixProvider *dpp,
                          ceph::bufferlist& bl)
 {
   JSONParser parser;
-  if (! parser.parse(bl)) {
+  if (! parser.parse(bl.c_str(), bl.length())) {
     ldpp_dout(dpp, 0) << "Keystone token parse error: malformed json" << dendl;
     return -EINVAL;
   }
index 65ada37dcc06ded38306dc86af2b5bfa2957720a..92b03e41bcdc15a15e7c90399e7ffe716850ec51 100644 (file)
@@ -309,7 +309,7 @@ int RGWMetadataManager::put(string& metadata_key, bufferlist& bl,
   }
 
   JSONParser parser;
-  if (!parser.parse(bl)) {
+  if (!parser.parse(bl.c_str(), bl.length())) {
     return -EINVAL;
   }
 
index 50ed075d7a8ff8b282dc150eab4b2b31b79352f9..a96eb3ef6024fdcfd976a73f939a6daae619b509 100644 (file)
@@ -159,7 +159,7 @@ int rgw_forward_request_to_master(const DoutPrefixProvider* dpp,
   if (ret < 0) {
     return ret;
   }
-  if (jp && !jp->parse(outdata)) {
+  if (jp && !jp->parse(outdata.c_str(), outdata.length())) {
     ldpp_dout(dpp, 0) << "failed parsing response from master zonegroup" << dendl;
     return -EINVAL;
   }
index a0314cf1c3e6d86897820feecf699ad4e63a44f9..cbe441c140bfdf5883812ad6964108a7e367026f 100644 (file)
@@ -158,7 +158,7 @@ int rgw_rest_get_json_input(CephContext *cct, req_state *s, T& out,
 
   JSONParser parser;
 
-  if (!parser.parse(data)) {
+  if (!parser.parse(data.c_str(), data.length())) {
     return -EINVAL;
   }
 
index 93b8693dbdf580444ce88aa676448b4c76f69910..0bda4d62a51add8bd224a9b0a73727d9ea727931 100644 (file)
@@ -79,7 +79,7 @@ int rgw_opa_authorize(RGWOp *& op,
 
   /* check OPA response */
   JSONParser parser;
-  if (!parser.parse(bl)) {
+  if (!parser.parse(bl.c_str(), bl.length())) {
     ldpp_dout(op, 2) << "OPA parse error: malformed json" << dendl;
     return -EINVAL;
   }
index 6a8cca0aedc5d6f56e7a7895f10a9bdf23f0e1f5..ea2f28e567b46dfae0a58dc279519767b66494c9 100644 (file)
@@ -46,7 +46,7 @@ int pull_period(const DoutPrefixProvider *dpp, RGWRESTConn* conn, const std::str
   }
 
   JSONParser parser;
-  r = parser.parse(data);
+  r = parser.parse(data.c_str(), data.length());
   if (r < 0) {
     ldpp_dout(dpp, -1) << "request failed: " << cpp_strerror(-r) << dendl;
     return r;
index f9d324fc36f6c81b413fe9198dd544919dae9329..2919e392b4e8364f4191e620257282fad7934fda 100644 (file)
@@ -248,7 +248,8 @@ int RGWPolicy::from_json(bufferlist& bl, string& err_msg)
 {
   JSONParser parser;
 
-  if (!parser.parse(bl)) {  
+  // JSON coming in for Policies can include the NULL character, which breaks parsing:
+  if (!parser.parse(std::string_view(bl.c_str(), bl.length() - 1))) {
     err_msg = "Malformed JSON";
     dout(0) << "malformed json" << dendl;
     return -EINVAL;
index a5e7bdbf56af92c067152a2a287395453f967619..a302257e428bc33264f5d5f09b1d8fb02ab6447d 100644 (file)
@@ -62,7 +62,7 @@ std::tuple<int, bufferlist > rgw_rest_get_json_input_keep_data(CephContext *cct,
 
   JSONParser parser;
 
-  if (!parser.parse(data)) {
+  if (!parser.parse(data.c_str(), data.length())) {
     return std::make_tuple(-EINVAL, std::move(data));
   }
 
index 13bc607731983d154e2029869a8bf32016ae868b..7abf86a3d3f0932abb6d6a5851c2a0cbf3f707e0 100644 (file)
@@ -17,7 +17,7 @@ template<class T>
 inline int parse_decode_json(T& t, bufferlist& bl)
 {
   JSONParser p;
-  if (!p.parse(bl)) {
+  if (!p.parse(bl.c_str(), bl.length())) {
     return -EINVAL;
   }
 
index 7e924c640ffdd2e8831a017bab5074066c685658..a3733c175cc3c1c0b5d50e9bcef6b2f050883830 100644 (file)
@@ -449,7 +449,7 @@ int RGWModifyRoleTrustPolicy::init_processing(optional_yield y)
   }
 
   JSONParser p;
-  if (!p.parse(trust_policy)) {
+  if (!p.parse(trust_policy.c_str(), trust_policy.length())) {
     ldpp_dout(this, 20) << "ERROR: failed to parse assume role policy doc" << dendl;
     return -ERR_MALFORMED_DOC;
   }
index 7b36511f0e46ce24a4832ca8863b0f6f162081e3..c0c6b5e89acd2c873f41b926ac896f93796ef9ff 100644 (file)
@@ -327,7 +327,7 @@ WebTokenEngine::get_cert_url(const string& iss, const DoutPrefixProvider *dpp, o
   ldpp_dout(dpp, 20) << "JSON Response is: " << openidc_resp.c_str() << dendl;
 
   JSONParser parser;
-  if (parser.parse(openidc_resp)) {
+  if (parser.parse(openidc_resp.c_str(), openidc_resp.length())) {
     JSONObj::data_val val;
     if (parser.get_data("jwks_uri", &val)) {
       cert_url = val.str.c_str();
@@ -364,7 +364,7 @@ WebTokenEngine::validate_signature(const DoutPrefixProvider* dpp, const jwt::dec
     ldpp_dout(dpp, 20) << "JSON Response is: " << cert_resp.c_str() << dendl;
 
     JSONParser parser;
-    if (parser.parse(cert_resp)) {
+    if (parser.parse(cert_resp.c_str(), cert_resp.length())) {
       JSONObj::data_val val;
       if (parser.get_data("keys", &val)) {
         if (val.str[0] == '[') {
index 144a52ef524d02f35a7726817a4480823636eb14..f6de954274b692188fa520e30e36c48b9d476470 100644 (file)
@@ -155,7 +155,7 @@ TEST(formatter, parse_types) {
 
   buffer::list bl;
   bl.append(outstring);
-  EXPECT_TRUE(parser.parse(bl));
+  EXPECT_TRUE(parser.parse(bl.c_str(), bl.length()));
   
   JSONObj *pgstat_obj = parser.find_obj("pg_stats");
   EXPECT_TRUE(pgstat_obj);
@@ -167,7 +167,7 @@ TEST(formatter, parse_types) {
   buffer::list bl;
   bl.append(json_input);
 
-  ASSERT_TRUE(parser.parse(bl));
+  ASSERT_TRUE(parser.parse(bl.c_str(), bl.length()));
 
   JSONObjIter oi = parser.find_first();