diff options
author | Yehuda Sadeh <yehuda@hq.newdream.net> | 2012-01-12 16:39:30 -0800 |
---|---|---|
committer | Yehuda Sadeh <yehuda@hq.newdream.net> | 2012-01-12 16:39:30 -0800 |
commit | 8ceb388396d02daefe53e3bdb68c08b4855ceaf7 (patch) | |
tree | 68f052df63a40a9b231a7a4e8c21fc25377f6f00 /src/objclass | |
parent | 05d8ecbe1cea8d7c7bd33f9b53f4cbf06b2c4e61 (diff) | |
download | ceph-8ceb388396d02daefe53e3bdb68c08b4855ceaf7.tar.gz |
rgw: wrap cls_cxx_map_* with try/catch around decoding
Diffstat (limited to 'src/objclass')
-rw-r--r-- | src/objclass/class_api.cc | 36 |
1 files changed, 22 insertions, 14 deletions
diff --git a/src/objclass/class_api.cc b/src/objclass/class_api.cc index 11d3e0c966d..3645b23a8dc 100644 --- a/src/objclass/class_api.cc +++ b/src/objclass/class_api.cc @@ -274,9 +274,13 @@ int cls_cxx_map_read_header(cls_method_context_t hctx, bufferlist *outbl) if (ret < 0) return ret; - //decode and return the header - bufferlist::iterator map_iter = full_map.begin(); - ::decode(*outbl, map_iter); + try { + //decode and return the header + bufferlist::iterator map_iter = full_map.begin(); + ::decode(*outbl, map_iter); + } catch (buffer::error& e) { + return -EINVAL; + } return 0; } int cls_cxx_map_read_key(cls_method_context_t hctx, string key, bufferlist *outbl) @@ -296,18 +300,22 @@ int cls_cxx_map_read_key(cls_method_context_t hctx, string key, bufferlist *outb bufferlist next_val; __u32 nkeys; bufferlist::iterator map_iter = full_map.begin(); - ::decode(header, map_iter); - ::decode(nkeys, map_iter); - while (nkeys) { - ::decode(next_key, map_iter); - ::decode(next_val, map_iter); - if (next_key == key) { - *outbl = next_val; - return 0; + try { + ::decode(header, map_iter); + ::decode(nkeys, map_iter); + while (nkeys) { + ::decode(next_key, map_iter); + ::decode(next_val, map_iter); + if (next_key == key) { + *outbl = next_val; + return 0; + } + if (next_key > key) + return -ENOENT; + --nkeys; } - if (next_key > key) - return -ENOENT; - --nkeys; + } catch (buffer::error& e) { + return -EINVAL; } return -ENOENT; } |