void decode(bufferlist::iterator& bl) {
__u8 struct_v;
::decode(struct_v, bl);
- assert(struct_v <= CEPH_PG_POOL_VERSION);
+ if (struct_v > CEPH_PG_POOL_VERSION)
+ throw new buffer::error;
::decode(v, bl);
::decode_nohead(v.num_snaps, snaps, bl);
removed_snaps.decode_nohead(v.num_removed_snap_intervals, bl);
int r = 0;
if (!(createsimple && clobber)) {
r = bl.read_file(fn);
- if (r >= 0)
- osdmap.decode(bl);
+ if (r >= 0) {
+ try {
+ osdmap.decode(bl);
+ }
+ catch (buffer::error *e) {
+ cerr << me << ": error decoding osdmap '" << fn << "'" << std::endl;
+ return -1;
+ }
+ }
}
char buf[80];
if (!createsimple && r < 0) {