From 958fbfedb61631228d49ad8b3e6e36aa8f21c6b1 Mon Sep 17 00:00:00 2001
From: Andrew Dolgov <noreply@fakecake.org>
Date: Fri, 14 Dec 2018 14:55:36 +0300
Subject: [PATCH] rssutils: check if returned data is in gzip format before
 trying to decode it

---
 classes/rssutils.php | 22 +++++++++++++++++-----
 1 file changed, 17 insertions(+), 5 deletions(-)

diff --git a/classes/rssutils.php b/classes/rssutils.php
index 750222c80..ea57e6466 100755
--- a/classes/rssutils.php
+++ b/classes/rssutils.php
@@ -259,9 +259,13 @@ class RSSUtils {
 				global $fetch_curl_used;
 
 				if (!$fetch_curl_used) {
-					$tmp = @gzdecode($feed_data);
+					$is_gzipped = RSSUtils::is_gzipped($feed_data);
 
-					if ($tmp) $feed_data = $tmp;
+					if ($is_gzipped) {
+						$tmp = @gzdecode($feed_data);
+
+						if ($tmp) $feed_data = $tmp;
+					}
 				}
 
 				$feed_data = trim($feed_data);
@@ -433,9 +437,15 @@ class RSSUtils {
 			global $fetch_curl_used;
 
 			if (!$fetch_curl_used) {
-				$tmp = @gzdecode($feed_data);
+				$is_gzipped = RSSUtils::is_gzipped($feed_data);
+
+				Debug::log("is_gzipped: $is_gzipped", Debug::$LOG_VERBOSE);
 
-				if ($tmp) $feed_data = $tmp;
+				if ($is_gzipped) {
+					$tmp = @gzdecode($feed_data);
+
+					if ($tmp) $feed_data = $tmp;
+				}
 			}
 
 			$feed_data = trim($feed_data);
@@ -1602,6 +1612,8 @@ class RSSUtils {
 		}
 	}
 
-
+	private static function is_gzipped($feed_data) {
+		return mb_strpos($feed_data, "\x1f" . "\x8b" . "\x08", 0, "US-ASCII") === 0;
+	}
 
 }
-- 
GitLab