From ad39a334af38e4a5d37e553e8ad81eac4d2cedaa Mon Sep 17 00:00:00 2001
From: Antonio Ospite <ao2@ao2.it>
Date: Thu, 24 Dec 2020 10:10:55 +0100
Subject: [PATCH 1/1] src/Tweeper.php: check http response code and return
 error for error codes

Check http response code from curl and return error for codes greater
than 400.

In particular this covers the case of non-existing accounts on social
media sites as the failure will propagate to the main function which
will exit with a non-zero code.
---
 src/Tweeper.php | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/src/Tweeper.php b/src/Tweeper.php
index 4a32f56..12004cf 100644
--- a/src/Tweeper.php
+++ b/src/Tweeper.php
@@ -111,6 +111,17 @@ class Tweeper {
       }
     } while (curl_errno($ch) == CURLE_OPERATION_TIMEDOUT && ++$attempt < Tweeper::$maxConnectionRetries);
 
+    $response_code = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
+    if (FALSE === $response_code) {
+      trigger_error(curl_error($ch), E_USER_WARNING);
+      return FALSE;
+    }
+
+    if ($response_code >= 400) {
+      trigger_error("HTTP reponse code $response_code", E_USER_WARNING);
+      return FALSE;
+    }
+
     return $ret;
   }
 
@@ -336,6 +347,9 @@ class Tweeper {
     $get_xml_host_method = 'getXml' . Tweeper::toUpperCamelCase($host, '.');
     if (method_exists($this, $get_xml_host_method)) {
       $xml_data = call_user_func_array([$this, $get_xml_host_method], [$html]);
+      if (NULL === $xml_data) {
+        return NULL;
+      }
       $xmlDoc->loadXML($xml_data);
     }
     else {
-- 
2.1.4