From a0a8e7be0fec6c3dbcd9ad8b4bab974c5e421983 Mon Sep 17 00:00:00 2001 From: jim1_lin Date: Fri, 26 Feb 2016 16:39:27 +0800 Subject: [PATCH 1/5] add invalid __type check --- spec/ParseObject.spec.js | 5 +++++ src/Schema.js | 46 +++++++++++++++++++++++++--------------- 2 files changed, 34 insertions(+), 17 deletions(-) diff --git a/spec/ParseObject.spec.js b/spec/ParseObject.spec.js index 5d8996559b..10a44e9f6d 100644 --- a/spec/ParseObject.spec.js +++ b/spec/ParseObject.spec.js @@ -335,6 +335,11 @@ describe('Parse.Object testing', () => { 'Item should not be updated with invalid key.'); item.save({ "foo^bar": "baz" }).then(fail, done); }); + + it("invalid __type", function(done) { + var item = new Parse.Object("Item"); + item.save({ "foo": {__type: "IvalidName"} }).then(fail, done); + }); it("simple field deletion", function(done) { var simple = new Parse.Object("SimpleObject"); diff --git a/src/Schema.js b/src/Schema.js index a202c7e36f..df96da53ea 100644 --- a/src/Schema.js +++ b/src/Schema.js @@ -620,7 +620,7 @@ Schema.prototype.validateRequiredColumns = function(className, object, query) { if (!columns || columns.length == 0) { return Promise.resolve(this); } - + var missingColumns = columns.filter(function(column){ if (query && query.objectId) { if (object[column] && typeof object[column] === "object") { @@ -630,15 +630,15 @@ Schema.prototype.validateRequiredColumns = function(className, object, query) { // Not trying to do anything there return false; } - return !object[column] + return !object[column] }); - + if (missingColumns.length > 0) { throw new Parse.Error( Parse.Error.INCORRECT_TYPE, missingColumns[0]+' is required.'); } - + return Promise.resolve(this); } @@ -725,19 +725,31 @@ function getObjectType(obj) { if (obj instanceof Array) { return 'array'; } - if (obj.__type === 'Pointer' && obj.className) { - return '*' + obj.className; - } - if (obj.__type === 'File' && obj.name) { - return 'file'; - } - if (obj.__type === 'Date' && obj.iso) { - return 'date'; - } - if (obj.__type == 'GeoPoint' && - obj.latitude != null && - obj.longitude != null) { - return 'geopoint'; + if (obj.__type){ + switch(obj.__type) { + case 'Pointer' : + if(obj.className) { + return '*' + obj.className; + } + break; + case 'File' : + if(obj.url && obj.name) { + return 'file'; + } + break; + case 'Date' : + if(obj.iso) { + return 'date'; + } + break; + case 'GeoPoint' : + if(obj.latitude != null && obj.longitude != null) { + return 'geopoint'; + } + break; + default : + throw new Parse.Error(Parse.Error.INCORRECT_TYPE, 'invalid type: ' + obj.__type); + } } if (obj['$ne']) { return getObjectType(obj['$ne']); From 93824c4d86d6af4bd86ee9f412845a61d8b5ae82 Mon Sep 17 00:00:00 2001 From: jim1_lin Date: Fri, 26 Feb 2016 17:23:40 +0800 Subject: [PATCH 2/5] Add check of special type --- src/Schema.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/Schema.js b/src/Schema.js index df96da53ea..664c60adb8 100644 --- a/src/Schema.js +++ b/src/Schema.js @@ -730,21 +730,30 @@ function getObjectType(obj) { case 'Pointer' : if(obj.className) { return '*' + obj.className; + } else { + throw new Parse.Error(Parse.Error.INVALID_POINTER, JSON.stringify(obj) + " is not a valid Pointer"); } break; case 'File' : if(obj.url && obj.name) { return 'file'; + } else { + let msg = obj.name? JSON.stringify(obj) + " is not a valid File" : "File has no name"; + throw new Parse.Error(Parse.Error.INCORRECT_TYPE, msg); } break; case 'Date' : if(obj.iso) { return 'date'; + } else { + throw new Parse.Error(Parse.Error.INCORRECT_TYPE, JSON.stringify(obj) + " is not a valid Date"); } break; case 'GeoPoint' : if(obj.latitude != null && obj.longitude != null) { return 'geopoint'; + } else { + throw new Parse.Error(Parse.Error.INCORRECT_TYPE, JSON.stringify(obj) + " is not a valid GeoPoint"); } break; default : From f8dd5f740e14892f186ecdc3f82b37f0e96d1aa8 Mon Sep 17 00:00:00 2001 From: jim1_lin Date: Fri, 26 Feb 2016 18:40:53 +0800 Subject: [PATCH 3/5] add Bytes to check --- src/Schema.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/Schema.js b/src/Schema.js index 664c60adb8..3808822727 100644 --- a/src/Schema.js +++ b/src/Schema.js @@ -756,6 +756,11 @@ function getObjectType(obj) { throw new Parse.Error(Parse.Error.INCORRECT_TYPE, JSON.stringify(obj) + " is not a valid GeoPoint"); } break; + case 'Bytes' : + if(!obj.base64) { + throw new Parse.Error(Parse.Error.INCORRECT_TYPE, 'Bytes type has no base64 field: ' + JSON.stringify(obj)); + } + break; default : throw new Parse.Error(Parse.Error.INCORRECT_TYPE, 'invalid type: ' + obj.__type); } From fd3ab845c8b0d2ba062933764a960bf85574dc2e Mon Sep 17 00:00:00 2001 From: Jim Lin Date: Sat, 27 Feb 2016 16:05:55 +0800 Subject: [PATCH 4/5] url can & should be constructed during read --- .DS_Store | Bin 0 -> 8196 bytes src/Schema.js | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 .DS_Store diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..a15ba0c2fa3d0d3e557f72123e01ea9fdacc6d8b GIT binary patch literal 8196 zcmeHMOK=oL818TLV8)DO5)(+4O|cTJh_wYFfdoXz<^chLVvD>1S!Q=eGCG-wJF^=! zMpND_MN4^zT3UMWAU;k!^x}boWywV)2eH(HmL9Q64&ue~@99|{3AtI3DyFxl|L*_M zk8i%7uI^=wp)0SiWvq@dCeg#CT0z-u61VebPKpGYQj(x}=8k79CquR0Gvjl-Lq&){ zh(L%yh(L%yh`^nI0PWd4N%QRc!W!lw0wDr-B?A2W5T}RBWFV)7^gkVx`9}bf{0QJD zDyzIeG9JieAg6^S3nhq9k|Gqr5d$Ke^zpzi8OUiNML0un_(0Gzf)fh--l_e#@6M1E zGR#8+LIma_z?V-6b6JjMGZQzT-!0Sinw!5zq@=X0e32yI!+(|XV|}B}M4zX5dACc; z?e}Y@Ze)UTO7ljG<$lMpu9vmUplM8`)tYX{_B7KrayNw@7&2|$ndoxzw(h3Y+EmUc zkatS6jX~2jGp1#FPfIfYrPaF0$(Hr&6Y-YzmZ?O1vc0`I5ntEZHZ>(l^-ZlEJBRGa zW5-XNeB;!cXT)?7d@@+otm&V$94yeoJ%sTR=Nbsj;vz`Lm$dIR({N;$y8-EE1S18&*-$QKJyuabd_#4=U7(C zaZTRL$gpP|@wjb{X?UOO0B|`-cpJfb8n7TJQqPbba)=m5HK6+)gXFhHkIk^f6x!=~t3=vfyT_&q% zr2{%OyW7#ZkM3Kd_0i>$w4dv{a|Y!?t*nTylvPdYcWL~hi6&*0th#dllk`?aXhK;n zsk%I1X&J*3s<{)QyUMNsh@cc@sKzqH(12BFK`Yjy4V%z| zt?0#e?8YF5FoJzJ1QSod!Wi;+4$os6FXD9^!wHG~%Huj>cdS8KUL?tE@(d7TjUy6Y66&HE-+M)DC8wV%iE2}9 zl|;)!jrdh15nIj4ua*d_PikFO%Y?N}*}xZqS}LrYl+B#-YPqmBD4nvbGEr%YRmlGZ zProLX{z4qR%Km2mpd1yb!~Mj}HQ0y_B+*UG+=e|!VK4eHfP+XwLk2qW(#ANRf{SM{ z<@56eyo8tW3SPx)cnfdi9lVS8@F7m)BYc8$IFHZpIWFKLX7JN2rtU0qR7m`MgQ-j#%{Hz_P x=MX(SaldIH{SeA-xd@>8^*;=$94A*ElMLjvkffos;1>bm{vYoDKJ)JG>|btH7wZ53 literal 0 HcmV?d00001 diff --git a/src/Schema.js b/src/Schema.js index 3808822727..781c0b662a 100644 --- a/src/Schema.js +++ b/src/Schema.js @@ -737,7 +737,7 @@ function getObjectType(obj) { case 'File' : if(obj.url && obj.name) { return 'file'; - } else { + } else if(!obj.url){ let msg = obj.name? JSON.stringify(obj) + " is not a valid File" : "File has no name"; throw new Parse.Error(Parse.Error.INCORRECT_TYPE, msg); } From ef1f3c0945c20527e82726313c6f706aa2a00551 Mon Sep 17 00:00:00 2001 From: Jim Lin Date: Sat, 27 Feb 2016 17:00:52 +0800 Subject: [PATCH 5/5] Fix bug to __type checking --- src/Schema.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Schema.js b/src/Schema.js index 781c0b662a..e6ec375498 100644 --- a/src/Schema.js +++ b/src/Schema.js @@ -735,9 +735,9 @@ function getObjectType(obj) { } break; case 'File' : - if(obj.url && obj.name) { + if(obj.name) { return 'file'; - } else if(!obj.url){ + } else { let msg = obj.name? JSON.stringify(obj) + " is not a valid File" : "File has no name"; throw new Parse.Error(Parse.Error.INCORRECT_TYPE, msg); }