From 43f983f30e56615088f1fb6e54aee237dd366a89 Mon Sep 17 00:00:00 2001 From: Davis King Date: Wed, 16 Jan 2013 17:42:35 -0500 Subject: [PATCH] Fixed a bug which could potentially occur when empty std::vector or std::vector were serialized. --- dlib/serialize.h | 12 ++++++++---- dlib/test/serialize.cpp | 8 ++++++++ 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/dlib/serialize.h b/dlib/serialize.h index a954ddb44..d8e4057af 100644 --- a/dlib/serialize.h +++ b/dlib/serialize.h @@ -893,7 +893,8 @@ namespace dlib { const unsigned long size = static_cast(item.size()); serialize(size,out); - out.write(&item[0], item.size()); + if (item.size() != 0) + out.write(&item[0], item.size()); } catch (serialization_error& e) { throw serialization_error(e.info + "\n while serializing object of type std::vector"); } @@ -910,7 +911,8 @@ namespace dlib unsigned long size; deserialize(size,in); item.resize(size); - in.read(&item[0], item.size()); + if (item.size() != 0) + in.read(&item[0], item.size()); } catch (serialization_error& e) { throw serialization_error(e.info + "\n while deserializing object of type std::vector"); } @@ -928,7 +930,8 @@ namespace dlib { const unsigned long size = static_cast(item.size()); serialize(size,out); - out.write((char*)&item[0], item.size()); + if (item.size() != 0) + out.write((char*)&item[0], item.size()); } catch (serialization_error& e) { throw serialization_error(e.info + "\n while serializing object of type std::vector"); } @@ -945,7 +948,8 @@ namespace dlib unsigned long size; deserialize(size,in); item.resize(size); - in.read((char*)&item[0], item.size()); + if (item.size() != 0) + in.read((char*)&item[0], item.size()); } catch (serialization_error& e) { throw serialization_error(e.info + "\n while deserializing object of type std::vector"); } diff --git a/dlib/test/serialize.cpp b/dlib/test/serialize.cpp index 9c502451f..af6da4793 100644 --- a/dlib/test/serialize.cpp +++ b/dlib/test/serialize.cpp @@ -528,6 +528,14 @@ namespace { DLIB_TEST(a[i] == b[i]); } + + std::vector c; + sout.str(""); + dlib::serialize(c, sout); + sin.str(sout.str()); + dlib::deserialize(a, sin); + DLIB_TEST(a.size() == 0); + DLIB_TEST(c.size() == 0); } void test_vector_bool (