From 20f5f336b3cdfde690abe88455797f7a5801e0a2 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Tue, 23 Feb 2010 21:31:15 -0800 Subject: [PATCH] mds: fix sessionmap decoding There's a session count value encoded, but it's a meaningless upper bound. Stop decoding when we hit the end of the buffer instead. --- src/mds/SessionMap.cc | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/mds/SessionMap.cc b/src/mds/SessionMap.cc index d6a2293250345..95805f2a9af86 100644 --- a/src/mds/SessionMap.cc +++ b/src/mds/SessionMap.cc @@ -141,8 +141,12 @@ void SessionMap::_save_finish(version_t v) void SessionMap::encode(bufferlist& bl) { ::encode(version, bl); + + // this is a meaningless upper bound, because we don't include all + // sessions below. it can be ignored by decode(). __u32 n = session_map.size(); ::encode(n, bl); + for (hash_map::iterator p = session_map.begin(); p != session_map.end(); ++p) @@ -159,9 +163,12 @@ void SessionMap::decode(bufferlist::iterator& p) utime_t now = g_clock.now(); ::decode(version, p); + + // this is a meaningless upper bound. can be ignored. __u32 n; ::decode(n, p); - while (n--) { + + while (n-- && !p.end()) { Session *s = new Session; s->decode(p); session_map[s->inst.name] = s; -- 2.39.5