From 027388029f3a2b9e15b5552fce4cc01ea308feab Mon Sep 17 00:00:00 2001 From: jmoenig Date: Thu, 10 Oct 2013 11:09:29 +0200 Subject: [PATCH] "sanity check" for cloud-saving mechanism errors if the serialized project data is corrupt and cannot be parsed as XML, addresses #203, #200, #171. I'm hoping that this might provide us a clue whether the corruption is happening in Snap's marshalling or on the backend side --- cloud.js | 20 +++++++++++++++++++- history.txt | 4 ++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/cloud.js b/cloud.js index 480c4f92..9857c673 100644 --- a/cloud.js +++ b/cloud.js @@ -29,7 +29,7 @@ /*global modules, IDE_Morph, SnapSerializer, hex_sha512, alert, nop*/ -modules.cloud = '2013-September-17'; +modules.cloud = '2013-October-10'; // Global stuff @@ -356,6 +356,24 @@ Cloud.prototype.saveProject = function (ide, callBack, errorCall) { ide.serializer.isCollectingMedia = false; ide.serializer.flushMedia(); + // check if serialized data can be parsed back again + try { + ide.serializer.parse(pdata); + } catch (err) { + ide.showMessage('Serialization of program data failed:\n' + err); + throw new Error('Serialization of program data failed:\n' + err); + } + if (media !== null) { + try { + ide.serializer.parse(media); + } catch (err) { + ide.showMessage('Serialization of media failed:\n' + err); + throw new Error('Serialization of media failed:\n' + err); + } + } + ide.serializer.isCollectingMedia = false; + ide.serializer.flushMedia(); + myself.reconnect( function () { myself.callService( diff --git a/history.txt b/history.txt index 4d264120..74520050 100755 --- a/history.txt +++ b/history.txt @@ -1950,3 +1950,7 @@ ______ 131009 ------ * Theads: added a variant for linked lists to the experimental MAP primitive reporter + +131010 +------ +* Cloud: added "sanity check" to cloud-saving mechanism that errors if the serialized project data is corrupt and cannot be parsed as XML, addresses #203, #200, #171