From 45de0a49f329c18579a633e4e03256002e707399 Mon Sep 17 00:00:00 2001
From: Cameron <e107inc@gmail.com>
Date: Sun, 22 Jul 2018 13:03:06 -0700
Subject: [PATCH] PHP Notice removal

---
 thumb.php | 61 ++++++++++++++++++++++++++++++++++++++++++++-----------
 1 file changed, 49 insertions(+), 12 deletions(-)

diff --git a/thumb.php b/thumb.php
index 3be6d39f1..b863bce59 100755
--- a/thumb.php
+++ b/thumb.php
@@ -24,19 +24,42 @@
 
 define('e107_INIT', true);
 
-// error_reporting(E_ALL);
 
-function thumbErrorHandler()
+function thumbExceptionHandler(Exception $exception)
 {
 	http_response_code(500);
-	echo "Fatal Thumbnail Error";
+	echo "Fatal Thumbnail Error\n";
+	echo $exception->getMessage();
 
 }
 
-set_exception_handler('thumbErrorHandler'); // disable to troubleshoot.
+function thumbErrorHandler($errno, $errstr, $errfile, $errline)
+{
+
+	switch($errno)
+	{
+		case E_USER_ERROR:
+			echo "<b>My ERROR</b> [$errno] $errstr<br />\n";
+			echo "  Fatal error on line $errline in file $errfile";
+			echo ", PHP " . PHP_VERSION . " (" . PHP_OS . ")<br />\n";
+			echo "Aborting...<br />\n";
+			thumbExceptionHandler(new Exception);
+			exit(1);
+			break;
+
+		default:
+			return;
+	}
+
+}
+
+set_exception_handler('thumbExceptionHandler'); // disable to troubleshoot.
+set_error_handler("thumbErrorHandler"); // disable to troubleshoot.
+
+// error_reporting(0); // suppress all errors or image will be corrupted.
+
 
 
-error_reporting(0); // suppress all errors or image will be corrupted.
 ini_set('gd.jpeg_ignore_warning', 1);
 //require_once './e107_handlers/benchmark.php';
 //$bench = new e_benchmark();
@@ -96,13 +119,22 @@ class e_thumbpage
 		// initial path
 		$self = realpath(dirname(__FILE__));
 
+		$e_ROOT = $self."/";
+
+		if ((substr($e_ROOT,-1) !== '/') && (substr($e_ROOT,-1) !== '\\') )
+		{
+			$e_ROOT .= DIRECTORY_SEPARATOR;  // Should function correctly on both windows and Linux now.
+		}
+
+		define('e_ROOT', $e_ROOT);
+
 		$mySQLdefaultdb = '';
 		$HANDLERS_DIRECTORY = '';
 		$mySQLprefix = '';
 
 		// Config
 
-		include($self.'/e107_config.php');
+		include($self.DIRECTORY_SEPARATOR.'e107_config.php');
 
 		// support early include feature
 		if(isset($CLASS2_INCLUDE) && !empty($CLASS2_INCLUDE))
@@ -113,12 +145,17 @@ class e_thumbpage
 
 		ob_end_clean(); // Precaution - clearout utf-8 BOM or any other garbage in e107_config.php
 
-		$tmp = $self.'/'.$HANDLERS_DIRECTORY;
+		if(empty($HANDLERS_DIRECTORY))
+		{
+			$HANDLERS_DIRECTORY = 'e107_handlers/'; // quick fix for CLI Unit test.
+		}
+
+		$tmp = $self.DIRECTORY_SEPARATOR.$HANDLERS_DIRECTORY;
 
 		//Core functions - now API independent
-		@require($tmp.'/core_functions.php');
+		@require($tmp.DIRECTORY_SEPARATOR.'core_functions.php');
 		//e107 class
-		@require($tmp.'/e107_class.php');
+		@require($tmp.DIRECTORY_SEPARATOR.'e107_class.php');
 
 		$e107_paths = compact(
 			'ADMIN_DIRECTORY',
@@ -151,12 +188,12 @@ class e_thumbpage
 		$e107->file_path = $e107->fix_windows_paths($self)."/";
 		$e107->set_base_path();
 		$e107->set_request(false);
-		$e107->set_urls(false); //todo check if this is still required after the 'prepare' issue is fixed.
+	//	$e107->set_urls(false); //todo check if this is still required after the 'prepare' issue is fixed.
 		unset($tmp, $self);
-	
+		$e107->set_urls(false);
 		// basic Admin area detection - required for proper path parsing
 		define('ADMIN', strpos(e_SELF, ($e107->getFolder('admin')) !== false || strpos(e_PAGE, 'admin') !== false));
-		$e107->set_urls(false);
+
 		// Next function call maintains behavior identical to before; might not be needed
 		//  See https://github.com/e107inc/e107/issues/3033
 		$e107->set_urls_deferred();