Bug 1592288 - Handle bad data in WebExt API message handling; r=mkmelin a=jorgk
--- a/mail/components/extensions/parent/ext-mail.js
+++ b/mail/components/extensions/parent/ext-mail.js
@@ -1495,18 +1495,23 @@ var messageListTracker = {
},
_getNextPage(messageList) {
let messageCount = Services.prefs.getIntPref(
"extensions.webextensions.messagesPerPage",
100
);
let page = [];
- for (let i = 0; i < messageCount && messageList.hasMoreElements(); i++) {
- page.push(messageList.getNext().QueryInterface(Ci.nsIMsgDBHdr));
+ let i = 0;
+ while (i < messageCount && messageList.hasMoreElements()) {
+ let next = messageList.getNext();
+ if (next) {
+ page.push(next.QueryInterface(Ci.nsIMsgDBHdr));
+ i++;
+ }
}
return page;
},
};
class MessageManager {
constructor(extension) {
this.extension = extension;
--- a/mail/components/extensions/parent/ext-messages.js
+++ b/mail/components/extensions/parent/ext-messages.js
@@ -192,17 +192,19 @@ this.messages = class extends ExtensionA
let collectionArray = await new Promise(resolve => {
query.getCollection({
onItemsAdded(items, collection) {},
onItemsModified(items, collection) {},
onItemsRemoved(items, collection) {},
onQueryCompleted(collection) {
resolve(
- collection.items.map(glodaMsg => glodaMsg.folderMessage)
+ collection.items
+ .map(glodaMsg => glodaMsg.folderMessage)
+ .filter(Boolean)
);
},
});
});
if (queryInfo.unread !== null) {
collectionArray = collectionArray.filter(
msg => msg.isRead == !queryInfo.unread