DO NOT MERGE Sync extras bundle comparison can throw NPE am: 7d7a2254bc

am: cb937cbc6a

* commit 'cb937cbc6ae8a026a90ce524fd74a01e7d48726b':
  DO NOT MERGE Sync extras bundle comparison can throw NPE
This commit is contained in:
Matthew Williams
2015-10-20 20:52:55 +00:00
committed by android-build-merger
3 changed files with 71 additions and 3 deletions

View File

@@ -21,6 +21,8 @@ import android.os.Bundle;
import android.os.Parcel;
import android.accounts.Account;
import java.util.Objects;
/**
* Value type that contains information about a periodic sync.
*/
@@ -144,7 +146,9 @@ public class PeriodicSync implements Parcelable {
if (!b2.containsKey(key)) {
return false;
}
if (!b1.get(key).equals(b2.get(key))) {
// Null check. According to ContentResolver#validateSyncExtrasBundle null-valued keys
// are allowed in the bundle.
if (!Objects.equals(b1.get(key), b2.get(key))) {
return false;
}
}

View File

@@ -104,6 +104,7 @@ import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Random;
import java.util.Set;
@@ -3370,7 +3371,7 @@ public class SyncManager {
if (!smaller.containsKey(key)) {
return false;
}
if (!bigger.get(key).equals(smaller.get(key))) {
if (!Objects.equals(bigger.get(key), smaller.get(key))) {
return false;
}
}
@@ -3378,7 +3379,6 @@ public class SyncManager {
}
/**
* TODO: Get rid of this when we separate sync settings extras from dev specified extras.
* @return true if the provided key is used by the SyncManager in scheduling the sync.
*/
private static boolean isSyncSetting(String key) {

View File

@@ -0,0 +1,64 @@
package com.android.server.content;
import android.os.Bundle;
import junit.framework.TestCase;
public class SyncManagerTest extends TestCase {
final String KEY_1 = "key_1";
final String KEY_2 = "key_2";
public void testSyncExtrasEquals_WithNull() throws Exception {
Bundle b1 = new Bundle();
Bundle b2 = new Bundle();
b1.putString(KEY_1, null);
b2.putString(KEY_1, null);
assertTrue("Null extra not properly compared between bundles.",
SyncManager.syncExtrasEquals(b1, b2, false /* don't care about system extras */));
}
public void testSyncExtrasEqualsBigger_WithNull() throws Exception {
Bundle b1 = new Bundle();
Bundle b2 = new Bundle();
b1.putString(KEY_1, null);
b2.putString(KEY_1, null);
b1.putString(KEY_2, "bla");
b2.putString(KEY_2, "bla");
assertTrue("Extras not properly compared between bundles.",
SyncManager.syncExtrasEquals(b1, b2, false /* don't care about system extras */));
}
public void testSyncExtrasEqualsFails_differentValues() throws Exception {
Bundle b1 = new Bundle();
Bundle b2 = new Bundle();
b1.putString(KEY_1, null);
b2.putString(KEY_1, null);
b1.putString(KEY_2, "bla");
b2.putString(KEY_2, "ble"); // different key
assertFalse("Extras considered equal when they are different.",
SyncManager.syncExtrasEquals(b1, b2, false /* don't care about system extras */));
}
public void testSyncExtrasEqualsFails_differentNulls() throws Exception {
Bundle b1 = new Bundle();
Bundle b2 = new Bundle();
b1.putString(KEY_1, null);
b2.putString(KEY_1, "bla"); // different key
b1.putString(KEY_2, "ble");
b2.putString(KEY_2, "ble");
assertFalse("Extras considered equal when they are different.",
SyncManager.syncExtrasEquals(b1, b2, false /* don't care about system extras */));
}
}