From 4269315d8fd35986efbdbcd92c6201ac2e0dee92 Mon Sep 17 00:00:00 2001
From: Michael Vogel <ike@pirati.ca>
Date: Thu, 20 Oct 2016 06:04:11 +0000
Subject: [PATCH] Bugfix: probing failed when a profile was hidden

---
 include/Probe.php | 57 +++++++++++++++++++++++++----------------------
 1 file changed, 30 insertions(+), 27 deletions(-)

diff --git a/include/Probe.php b/include/Probe.php
index a245ef250f..d266a384e6 100644
--- a/include/Probe.php
+++ b/include/Probe.php
@@ -661,8 +661,12 @@ class Probe {
 	 */
 	private function poll_hcard($hcard, $data, $dfrn = false) {
 
+		$content = fetch_url($hcard);
+		if (!$content)
+			return false;
+
 		$doc = new DOMDocument();
-		if (!@$doc->loadHTMLFile($hcard))
+		if (!@$doc->loadHTML($content))
 			return false;
 
 		$xpath = new DomXPath($doc);
@@ -671,40 +675,39 @@ class Probe {
 		if (!is_object($vcards))
 			return false;
 
-		if ($vcards->length == 0)
-			return false;
+		if ($vcards->length > 0) {
+			$vcard = $vcards->item(0);
 
-		$vcard = $vcards->item(0);
+			// We have to discard the guid from the hcard in favour of the guid from lrdd
+			// Reason: Hubzilla doesn't use the value "uid" in the hcard like Diaspora does.
+			$search = $xpath->query("//*[contains(concat(' ', @class, ' '), ' uid ')]", $vcard); // */
+			if (($search->length > 0) AND ($data["guid"] == ""))
+				$data["guid"] = $search->item(0)->nodeValue;
 
-		// We have to discard the guid from the hcard in favour of the guid from lrdd
-		// Reason: Hubzilla doesn't use the value "uid" in the hcard like Diaspora does.
-		$search = $xpath->query("//*[contains(concat(' ', @class, ' '), ' uid ')]", $vcard); // */
-		if (($search->length > 0) AND ($data["guid"] == ""))
-			$data["guid"] = $search->item(0)->nodeValue;
+			$search = $xpath->query("//*[contains(concat(' ', @class, ' '), ' nickname ')]", $vcard); // */
+			if ($search->length > 0)
+				$data["nick"] = $search->item(0)->nodeValue;
 
-		$search = $xpath->query("//*[contains(concat(' ', @class, ' '), ' nickname ')]", $vcard); // */
-		if ($search->length > 0)
-			$data["nick"] = $search->item(0)->nodeValue;
+			$search = $xpath->query("//*[contains(concat(' ', @class, ' '), ' fn ')]", $vcard); // */
+			if ($search->length > 0)
+				$data["name"] = $search->item(0)->nodeValue;
 
-		$search = $xpath->query("//*[contains(concat(' ', @class, ' '), ' fn ')]", $vcard); // */
-		if ($search->length > 0)
-			$data["name"] = $search->item(0)->nodeValue;
+			$search = $xpath->query("//*[contains(concat(' ', @class, ' '), ' searchable ')]", $vcard); // */
+			if ($search->length > 0)
+				$data["searchable"] = $search->item(0)->nodeValue;
 
-		$search = $xpath->query("//*[contains(concat(' ', @class, ' '), ' searchable ')]", $vcard); // */
-		if ($search->length > 0)
-			$data["searchable"] = $search->item(0)->nodeValue;
+			$search = $xpath->query("//*[contains(concat(' ', @class, ' '), ' key ')]", $vcard); // */
+			if ($search->length > 0) {
+				$data["pubkey"] = $search->item(0)->nodeValue;
+				if (strstr($data["pubkey"], 'RSA '))
+					$data["pubkey"] = rsatopem($data["pubkey"]);
+			}
 
-		$search = $xpath->query("//*[contains(concat(' ', @class, ' '), ' key ')]", $vcard); // */
-		if ($search->length > 0) {
-			$data["pubkey"] = $search->item(0)->nodeValue;
-			if (strstr($data["pubkey"], 'RSA '))
-				$data["pubkey"] = rsatopem($data["pubkey"]);
+			$search = $xpath->query("//*[@id='pod_location']", $vcard); // */
+			if ($search->length > 0)
+				$data["baseurl"] = trim($search->item(0)->nodeValue, "/");
 		}
 
-		$search = $xpath->query("//*[@id='pod_location']", $vcard); // */
-		if ($search->length > 0)
-			$data["baseurl"] = trim($search->item(0)->nodeValue, "/");
-
 		$avatar = array();
 		$photos = $xpath->query("//*[contains(concat(' ', @class, ' '), ' photo ') or contains(concat(' ', @class, ' '), ' avatar ')]", $vcard); // */
 		foreach ($photos AS $photo) {