Fix a nasty bug : fulfill reply data must be copied, not just referenced
This commit is contained in:
		@@ -34,6 +34,12 @@ namespace gourou
 | 
				
			|||||||
    class FulfillmentItem
 | 
					    class FulfillmentItem
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
    public:
 | 
					    public:
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * @brief Main constructor. Not to be called by user
 | 
				
			||||||
 | 
						 *
 | 
				
			||||||
 | 
						 * @param doc   Fulfill reply
 | 
				
			||||||
 | 
						 * @param user  User pointer
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
	FulfillmentItem(pugi::xml_document& doc, User* user);
 | 
						FulfillmentItem(pugi::xml_document& doc, User* user);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
@@ -59,6 +65,7 @@ namespace gourou
 | 
				
			|||||||
	std::string getResource();
 | 
						std::string getResource();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private:
 | 
					    private:
 | 
				
			||||||
 | 
						pugi::xml_document fulfillDoc;
 | 
				
			||||||
	pugi::xml_node metadatas;
 | 
						pugi::xml_node metadatas;
 | 
				
			||||||
	pugi::xml_document rights;
 | 
						pugi::xml_document rights;
 | 
				
			||||||
	std::string downloadURL;
 | 
						std::string downloadURL;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -24,9 +24,11 @@
 | 
				
			|||||||
namespace gourou
 | 
					namespace gourou
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    FulfillmentItem::FulfillmentItem(pugi::xml_document& doc, User* user)
 | 
					    FulfillmentItem::FulfillmentItem(pugi::xml_document& doc, User* user)
 | 
				
			||||||
 | 
						: fulfillDoc()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
	metadatas = doc.select_node("//metadata").node();
 | 
						fulfillDoc.reset(doc); /* We must keep a copy */
 | 
				
			||||||
 | 
						metadatas = fulfillDoc.select_node("//metadata").node();
 | 
				
			||||||
 | 
						
 | 
				
			||||||
	if (!metadatas)
 | 
						if (!metadatas)
 | 
				
			||||||
	    EXCEPTION(FFI_INVALID_FULFILLMENT_DATA, "No metadata tag in document");
 | 
						    EXCEPTION(FFI_INVALID_FULFILLMENT_DATA, "No metadata tag in document");
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
@@ -49,7 +51,7 @@ namespace gourou
 | 
				
			|||||||
	
 | 
						
 | 
				
			||||||
	buildRights(licenseToken, user);
 | 
						buildRights(licenseToken, user);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					   
 | 
				
			||||||
    void FulfillmentItem::buildRights(const pugi::xml_node& licenseToken, User* user)
 | 
					    void FulfillmentItem::buildRights(const pugi::xml_node& licenseToken, User* user)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
	pugi::xml_node decl = rights.append_child(pugi::node_declaration);
 | 
						pugi::xml_node decl = rights.append_child(pugi::node_declaration);
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user