From 128b88838c993e0074f273a1a2c359cb7929a399 Mon Sep 17 00:00:00 2001 From: Anselme Date: Wed, 8 Mar 2017 18:03:20 +0100 Subject: [PATCH] fixed bad alloc error when loading ASCII vector of references --- src/serializationmanager.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/serializationmanager.cpp b/src/serializationmanager.cpp index 7fa452a..7b4e111 100644 --- a/src/serializationmanager.cpp +++ b/src/serializationmanager.cpp @@ -317,11 +317,10 @@ std::istream& ObjectLoader::loadAscii(std::istream& is) } else if(p->getPropertyType() == AbstractProperty::ARRAY && ((AbstractArrayProperty*)p)->getDataType() == AbstractProperty::REFERENCE) { - std::vector &vecRef = ((ArrayProperty*)p)->getValueRef(); + int nbRef = 0; ss.ignore(1); // [ while(ss.peek() != ']') { - vecRef.push_back(nullptr); if(ss.peek() == '{') { ss.ignore(1); // { @@ -332,7 +331,7 @@ std::istream& ObjectLoader::loadAscii(std::istream& is) id.loadAscii(ss); ss.ignore(1); // } PendingReference ref; - ref.ptr = &(vecRef.back()); + ++nbRef; ref.type = type.getValueRef(); ref.id = id.getValueRef(); m_references.push_back(ref); @@ -341,6 +340,12 @@ std::istream& ObjectLoader::loadAscii(std::istream& is) ss.ignore(6); // "null" if(ss.peek() == ',') ss.ignore(1); // , + + std::vector &vecPtrs = ((ArrayProperty*)p)->getValueRef(); + vecPtrs = std::vector(nbRef, nullptr); + int begin = m_references.size() - nbRef; + for(int i=0; i