diff --git a/chrome/content/zotero/xpcom/data/item.js b/chrome/content/zotero/xpcom/data/item.js index 5bfb1f8b31..d7e940257b 100644 --- a/chrome/content/zotero/xpcom/data/item.js +++ b/chrome/content/zotero/xpcom/data/item.js @@ -3819,12 +3819,18 @@ Zotero.Item.prototype.fromJSON = function (json) { // Item fields default: let fieldID = Zotero.ItemFields.getID(field); + if (!fieldID) { + Zotero.logError("Discarding unknown JSON field " + field + " for item " + + this.libraryKey); + continue; + } isValidForType[field] = Zotero.ItemFields.isValidForType( Zotero.ItemFields.getFieldIDFromTypeAndBase(itemTypeID, fieldID) || fieldID, this.itemTypeID ); if (!isValidForType[field]) { - Zotero.logError("Discarding unknown JSON field " + field + " for item " + this.libraryKey); + Zotero.logError("Discarding invalid field " + field + " for type " + itemTypeID + + " for item " + this.libraryKey); continue; } this.setField(field, json[field]); diff --git a/test/tests/itemTest.js b/test/tests/itemTest.js index 74b1346959..ae69311b08 100644 --- a/test/tests/itemTest.js +++ b/test/tests/itemTest.js @@ -966,6 +966,17 @@ describe("Zotero.Item", function () { }) describe("#fromJSON()", function () { + it("should ignore unknown fields", function* () { + var json = { + itemType: "journalArticle", + title: "Test", + foo: "Invalid" + }; + var item = new Zotero.Item; + item.fromJSON(json); + assert.equal(item.getField('title'), 'Test'); + }) + it("should accept ISO 8601 dates", function* () { var json = { itemType: "journalArticle",