Fix bug where Keybase extraData gets lost when SKS wins the search race.

This commit is contained in:
Tim Bray 2014-09-25 02:30:52 -07:00
parent 999094934a
commit 6d70e1bfd1

View File

@ -59,6 +59,8 @@ public class ImportKeysList extends ArrayList<ImportKeysListEntry> {
// being a little anal about the ArrayList#addAll contract here // being a little anal about the ArrayList#addAll contract here
private boolean mergeDupes(ImportKeysListEntry incoming, ImportKeysListEntry existing) { private boolean mergeDupes(ImportKeysListEntry incoming, ImportKeysListEntry existing) {
boolean modified = false; boolean modified = false;
// if any source thinks its expired/revoked, it is
if (incoming.isRevoked()) { if (incoming.isRevoked()) {
existing.setRevoked(true); existing.setRevoked(true);
modified = true; modified = true;
@ -67,8 +69,16 @@ public class ImportKeysList extends ArrayList<ImportKeysListEntry> {
existing.setExpired(true); existing.setExpired(true);
modified = true; modified = true;
} }
// were going to want to try to fetch the key from everywhere we found it, so remember
// all the origins
for (String origin : incoming.getOrigins()) { for (String origin : incoming.getOrigins()) {
existing.addOrigin(origin); existing.addOrigin(origin);
// to work properly, Keybase-sourced entries need to pass along the extra
if (KeybaseKeyserver.ORIGIN.equals(origin)) {
existing.setExtraData(incoming.getExtraData());
}
} }
ArrayList<String> incomingIDs = incoming.getUserIds(); ArrayList<String> incomingIDs = incoming.getUserIds();
ArrayList<String> existingIDs = existing.getUserIds(); ArrayList<String> existingIDs = existing.getUserIds();