From fdbba2281f07439102109b1843ad735c7dde28cb Mon Sep 17 00:00:00 2001
From: cgeek <cem.moreau@gmail.com>
Date: Fri, 24 Feb 2017 11:15:43 +0100
Subject: [PATCH] [fix] #844 Sync generates wrong I_INDEX data

---
 app/lib/dal/fileDAL.js |  2 +-
 app/lib/dup/indexer.js | 32 +++++++++++++++++++-------------
 2 files changed, 20 insertions(+), 14 deletions(-)

diff --git a/app/lib/dal/fileDAL.js b/app/lib/dal/fileDAL.js
index 69d3f83e6..d0993aae0 100644
--- a/app/lib/dal/fileDAL.js
+++ b/app/lib/dal/fileDAL.js
@@ -528,7 +528,7 @@ function FileDAL(params) {
     sindex = sindex.concat(yield indexer.ruleIndexGarbageSmallAccounts(HEAD, sindex, that));
     cindex = cindex.concat(yield indexer.ruleIndexGenCertificationExpiry(HEAD, that));
     mindex = mindex.concat(yield indexer.ruleIndexGenMembershipExpiry(HEAD, that));
-    iindex = iindex.concat(yield indexer.ruleIndexGenExclusionByMembership(HEAD, mindex));
+    iindex = iindex.concat(yield indexer.ruleIndexGenExclusionByMembership(HEAD, mindex, that));
     iindex = iindex.concat(yield indexer.ruleIndexGenExclusionByCertificatons(HEAD, cindex, conf, that));
     mindex = mindex.concat(yield indexer.ruleIndexGenImplicitRevocation(HEAD, that));
     yield indexer.ruleIndexCorrectMembershipExpiryDate(HEAD, mindex, that);
diff --git a/app/lib/dup/indexer.js b/app/lib/dup/indexer.js
index 09f345175..0646912bc 100644
--- a/app/lib/dup/indexer.js
+++ b/app/lib/dup/indexer.js
@@ -1374,16 +1374,19 @@ const indexer = module.exports = {
   }),
 
   // BR_G94
-  ruleIndexGenExclusionByMembership: (HEAD, mindex) => co(function*() {
+  ruleIndexGenExclusionByMembership: (HEAD, mindex, dal) => co(function*() {
     const exclusions = [];
     const memberships = _.filter(mindex, (entry) => entry.expired_on);
     for (const MS of memberships) {
-      exclusions.push({
-        op: 'UPDATE',
-        pub: MS.pub,
-        written_on: [HEAD.number, HEAD.hash].join('-'),
-        kick: true
-      });
+      const idty = yield dal.iindexDAL.getFromPubkey(MS.pub);
+      if (idty.member) {
+        exclusions.push({
+          op: 'UPDATE',
+          pub: MS.pub,
+          written_on: [HEAD.number, HEAD.hash].join('-'),
+          kick: true
+        });
+      }
     }
     return exclusions;
   }),
@@ -1397,12 +1400,15 @@ const indexer = module.exports = {
       const just_received = _.filter(cindex, (c) => c.receiver == CERT.receiver && c.expired_on == 0);
       const non_expired_global = yield dal.cindexDAL.getValidLinksTo(CERT.receiver);
       if ((count(non_expired_global) - count(just_expired) + count(just_received)) < conf.sigQty) {
-        exclusions.push({
-          op: 'UPDATE',
-          pub: CERT.receiver,
-          written_on: [HEAD.number, HEAD.hash].join('-'),
-          kick: true
-        });
+        const idty = yield dal.iindexDAL.getFromPubkey(CERT.receiver);
+        if (idty.member) {
+          exclusions.push({
+            op: 'UPDATE',
+            pub: CERT.receiver,
+            written_on: [HEAD.number, HEAD.hash].join('-'),
+            kick: true
+          });
+        }
       }
     }
     return exclusions;
-- 
GitLab