From 034f1550a91aab44ef20be71cc70d76479067548 Mon Sep 17 00:00:00 2001
From: Gary Allan <github@gallan.co.uk>
Date: Fri, 24 Mar 2023 21:35:42 +0000
Subject: [PATCH] php8: Compatibility fixes.

Fixes #3798
---
 .../import-export/import-ipaddr-check.php     | 12 ++++++---
 app/subnets/addresses/print-address-table.php | 25 ++++++++++---------
 app/subnets/subnet-details/subnet-details.php |  2 +-
 functions/php-excel-reader/excel_reader2.php  | 12 ++++++---
 4 files changed, 31 insertions(+), 20 deletions(-)

diff --git a/app/admin/import-export/import-ipaddr-check.php b/app/admin/import-export/import-ipaddr-check.php
index 74506425..498fe71f 100644
--- a/app/admin/import-export/import-ipaddr-check.php
+++ b/app/admin/import-export/import-ipaddr-check.php
@@ -67,6 +67,10 @@ foreach ($all_sections as $section) {
 	foreach ($section_subnets as $subnet) {
 		$subnet = (array) $subnet;
 
+		# NULL vrfId?
+		if (!is_numeric($subnet['vrfId']))
+			$subnet['vrfId'] = 0;
+
 		# ignore folders
 		if($subnet['isFolder']) { continue; }
 
@@ -109,7 +113,7 @@ if ($devices!==false) {
 }
 
 $rows = "";
-$counters = array();
+$counters = ["add" => 0, "edit" => 0, "skip" => 0, "error" => 0];
 $ndata = array(); # store new addresses in a similar format with edata for easier processing
 
 # check the fields
@@ -284,14 +288,16 @@ foreach ($data as &$cdata) {
 		}
 	}
 
-	$cdata['msg'].= $msg;
+	$cdata['msg'] = isset($cdata['msg']) ? $cdata['msg'] . $msg : $msg;
 	$cdata['action'] = $action;
 	$counters[$action]++;
 
 	$cdata['subnet'] = $cdata['subnet']."/".$cdata['mask'];
 
 	$rows.="<tr class='".$colors[$action]."'><td><i class='fa ".$icons[$action]."' rel='tooltip' data-placement='bottom' title='"._($msg)."'></i></td>";
-	foreach ($expfields as $cfield) { $rows.= "<td>".$cdata[$cfield]."</td>"; }
+	foreach ($expfields as $cfield) {
+		$rows .= "<td>" . (isset($cdata[$cfield]) ? escape_input($cdata[$cfield]) : "") . "</td>";
+	}
 	$rows.= "<td>"._($cdata['msg'])."</td></tr>";
 
 }
diff --git a/app/subnets/addresses/print-address-table.php b/app/subnets/addresses/print-address-table.php
index 4daf9521..b10b3398 100644
--- a/app/subnets/addresses/print-address-table.php
+++ b/app/subnets/addresses/print-address-table.php
@@ -123,7 +123,7 @@ $statuses = pf_explode(";", $User->settings->pingStatus);
 # Set $zone
 if(in_array('firewallAddressObject', $selected_ip_fields)) {
 	# class
-	if(!is_object($Zones)) $Zones = new FirewallZones ($Database);
+	if (!isset($Zones)) $Zones = new FirewallZones($Database);
 	$zone = $Zones->get_zone_subnet_info($subnet['id']);
 } else {
 	$zone = false;
@@ -448,17 +448,18 @@ else {
 	        		else 												{ print "<td class='narrow'></td>"; }
 	        	}
 
-	        	# print device
-	        	if(in_array('switch', $selected_ip_fields) && $User->get_module_permissions ("devices")>=User::ACCESS_R) {
-		        	# get device details
-		        	$device = (array) $Tools->fetch_object("devices", "id", $addresses[$n]->switch);
-		        	# set rack
-		        	if ($User->settings->enableRACK=="1" && $User->get_module_permissions ("racks")>=User::ACCESS_RW) {
-		        	$rack = $device['rack']>0 ? "<i class='btn btn-default btn-xs fa fa-server showRackPopup' data-rackid='$device[rack]' data-deviceid='$device[id]'></i>" : "";
-																		  print "<td class='hidden-xs hidden-sm hidden-md'>$rack <a href='".create_link("tools","devices",@$device['id'])."'>". @$device['hostname'] ."</a></td>";
-					}
-					else {
-						print "<td class='hidden-xs hidden-sm hidden-md'> <a href='".create_link("tools","devices",@$device['id'])."'>". @$device['hostname'] ."</a></td>";
+				# print device
+				if (in_array('switch', $selected_ip_fields) && $User->get_module_permissions("devices") >= User::ACCESS_R) {
+					# get device details
+					$device = $Tools->fetch_object("devices", "id", $addresses[$n]->switch);
+					if (is_object($device)) {
+						$rack = "";
+						if ($User->settings->enableRACK == "1" && $User->get_module_permissions("racks") >= User::ACCESS_R && $device['rack'] > 0) {
+							$rack = "<i class='btn btn-default btn-xs fa fa-server showRackPopup' data-rackid='" . $device->rack . "' data-deviceid='" . $device->id . "'></i>";
+						}
+						print "<td class='hidden-xs hidden-sm hidden-md'>$rack<a href='" . create_link("tools", "devices", $device->id) . "'>" . escape_input($device->hostname) . "</a></td>";
+					} else {
+						print "<td class='hidden-xs hidden-sm hidden-md'></td>";
 					}
 				}
 
diff --git a/app/subnets/subnet-details/subnet-details.php b/app/subnets/subnet-details/subnet-details.php
index 89f4ca4c..90180c16 100755
--- a/app/subnets/subnet-details/subnet-details.php
+++ b/app/subnets/subnet-details/subnet-details.php
@@ -226,7 +226,7 @@ else {
 			if (is_object($device)) {
 				# rack
 				if ($User->settings->enableRACK=="1" && !is_blank($device->rack) && $User->get_module_permissions ("racks")>=User::ACCESS_RW) {
-					if (!is_object($Racks)) $Racks = new phpipam_rack ($Database);
+					if (!isset($Racks)) $Racks = new phpipam_rack($Database);
 					$Racks->add_rack_start_print($device);
 					$rack = $Tools->fetch_object("racks", "id", $device->rack);
 					$rack_text = !is_object($rack) ? "" : "<br><span class='badge badge1 badge5' style='padding-top:4px;'>$rack->name / "._('Position').": $device->rack_start_print "._("Size").": $device->rack_size U <i class='btn btn-default btn-xs fa fa-server showRackPopup' data-rackId='$rack->id' data-deviceId='$device->id'></i></span>";
diff --git a/functions/php-excel-reader/excel_reader2.php b/functions/php-excel-reader/excel_reader2.php
index cf988550..eb50e9b4 100755
--- a/functions/php-excel-reader/excel_reader2.php
+++ b/functions/php-excel-reader/excel_reader2.php
@@ -92,7 +92,8 @@ function v($data,$pos) {
 	return ord($data[$pos]) | ord($data[$pos+1])<<8;
 }
 
-class OLERead {
+#[AllowDynamicProperties]
+class OLERead extends stdClass {
 	var $data = '';
 	function __construct(){	}
 
@@ -309,7 +310,8 @@ define('SPREADSHEET_EXCEL_READER_DEF_NUM_FORMAT',	"%s");
 /*
 * Main Class
 */
-class Spreadsheet_Excel_Reader {
+#[AllowDynamicProperties]
+class Spreadsheet_Excel_Reader extends stdClass {
 
 	// MK: Added to make data retrieval easier
 	var $colnames = array();
@@ -542,7 +544,7 @@ class Spreadsheet_Excel_Reader {
 		}
 		return null;
 	}
-	function fontProperty($row,$col,$sheet=0,$prop) {
+	function fontProperty($row,$col,$sheet=0,$prop=null) {
 		$font = $this->fontRecord($row,$col,$sheet);
 		if ($font!=null) {
 			return $font[$prop];
@@ -919,7 +921,7 @@ class Spreadsheet_Excel_Reader {
 			$this->setOutputEncoding($outputEncoding);
 		}
 		for ($i=1; $i<245; $i++) {
-			$name = strtolower(( (($i-1)/26>=1)?chr(($i-1)/26+64):'') . chr(($i-1)%26+65));
+			$name = strtolower(((($i - 1) / 26 >= 1) ? chr(intval(($i - 1) / 26) + 64) : '') . chr(($i - 1) % 26 + 65));
 			$this->colnames[$name] = $i;
 			$this->colindexes[$i] = $name;
 		}
@@ -1338,6 +1340,8 @@ class Spreadsheet_Excel_Reader {
 			return -2;
 		}
 		$spos += $length + 4;
+		$previousRow = null;
+		$previousCol = null;
 		while($cont) {
 			$lowcode = ord($data[$spos]);
 			if ($lowcode == SPREADSHEET_EXCEL_READER_TYPE_EOF) break;
-- 
GitLab