changelog: Fixed handling manifest without default remote

Changelog package previously crashed if no remote attribute was present in the remote tag. This is now handled.

BUG=b/160901711
TEST=unittests, run local

Change-Id: Iae809b49a7b8289bc5e969b7c45b9cd3f9d629d1
diff --git a/src/pkg/changelog/changelog.go b/src/pkg/changelog/changelog.go
index b3a1f0a..3b6c686 100644
--- a/src/pkg/changelog/changelog.go
+++ b/src/pkg/changelog/changelog.go
@@ -134,7 +134,9 @@
 	// Extract the "name", "remote", and "revision" attributes from each project tag.
 	// Some projects do not have a "remote" attribute.
 	// If this is the case, they should use the default remoteURL.
-	remoteMap[""] = remoteMap[root.SelectElement("default").SelectAttr("remote").Value]
+	if root.SelectElement("default").SelectAttr("remote") != nil {
+		remoteMap[""] = remoteMap[root.SelectElement("default").SelectAttr("remote").Value]
+	}
 	repos := make(map[string]*repo)
 	for _, project := range root.SelectElements("project") {
 		repos[project.SelectAttr("name").Value] = &repo{
diff --git a/src/pkg/changelog/changelog_test.go b/src/pkg/changelog/changelog_test.go
index edb3936..86b6423 100644
--- a/src/pkg/changelog/changelog_test.go
+++ b/src/pkg/changelog/changelog_test.go
@@ -113,6 +113,16 @@
 		t.Errorf("Changelog failed, expected error, got nil")
 	}
 
+	// Test manifest with remote urls specified and no default URL
+	additions, removals, err = Changelog(httpClient, "1.0.0", "2.0.0", cosInstance, defaultManifestRepo, -1)
+	if additions == nil {
+		t.Errorf("Changelog failed, expected additions, got nil")
+	} else if removals == nil {
+		t.Errorf("Changelog failed, expected removals, got nil")
+	} else if err != nil {
+		t.Errorf("Changelog failed, expected no error, got %v", err)
+	}
+
 	// Test 1 build number difference with only 1 repo change between them
 	// Ensure that commits are correctly inserted in proper order
 	// Check that changelog metadata correctly populated