]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
class: don't return nonexisting method
authorYehuda Sadeh <yehuda@hq.newdream.net>
Wed, 20 May 2009 18:16:22 +0000 (11:16 -0700)
committerYehuda Sadeh <yehuda@hq.newdream.net>
Wed, 20 May 2009 20:36:12 +0000 (13:36 -0700)
src/common/ClassHandler.cc
src/librados.cc

index 5043f391f9ad0845efe1d15797e1df2647ecf3b4..0b6d443cf656f1c488ec8264596de7ab05c47130 100644 (file)
@@ -134,8 +134,12 @@ ClassHandler::ClassMethod *ClassHandler::ClassData::register_method(const char *
 
 ClassHandler::ClassMethod *ClassHandler::ClassData::get_method(const char *mname)
 {
-  ClassHandler::ClassMethod *method = &methods_map[mname];
-  return method;
+   map<string, ClassHandler::ClassMethod>::iterator iter = methods_map.find(mname);
+
+  if (iter == methods_map.end())
+    return NULL;
+
+  return &(iter->second);
 }
 
 void ClassHandler::ClassData::unregister_method(ClassHandler::ClassMethod *method)
index 80ce5f9ac25fabd031f434c1373d3f0fa0dff75e..e0a2092698771d4cc4617e631ec64729c86f8dee 100644 (file)
@@ -239,6 +239,9 @@ int RadosClient::exec(int pool, object_t& oid, const char *cls, const char *meth
 
   lock.Unlock();
 
+  if (outbl.length() < out_len)
+    out_len = outbl.length();
+
   if (out_len)
     memcpy(buf, outbl.c_str(), out_len);
 
@@ -269,6 +272,9 @@ int RadosClient::read(int pool, object_t& oid, char *buf, off_t off, size_t len)
 
   lock.Unlock();
 
+  if (bl.length() < len)
+    len = bl.length();
+
   if (len)
     memcpy(buf, bl.c_str(), len);