From ad0585cbb42d10a9ddbe370636c5b30b1bdd0241 Mon Sep 17 00:00:00 2001
From: Hannu Nyman <hannu.nyman@iki.fi>
Date: Thu, 18 May 2017 12:10:14 +0300
Subject: [PATCH] luci-app-statistics: check that uci config sections exist

A missing or faulty luci_statistics config file may prevent
LuCI access completely already at the login phase as
the statistics config is parsed already then.

The error is like:
  .../statistics/datatree.lua:16: attempt to index upvalue 'sections' (a nil value)

User may be completely locked out of LuCI until he figures out
the need to have a proper luci_statistics config file.

Prevent the error by checking for the existence of
the uci config sections before trying to use values from them.

Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>

(cherry picked from commit d04f667383ec2894a5ecefde7ad9284d07563a67)
---
 .../luasrc/statistics/datatree.lua                 | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

diff --git a/applications/luci-app-statistics/luasrc/statistics/datatree.lua b/applications/luci-app-statistics/luasrc/statistics/datatree.lua
index 806b054cb..5176a19a2 100644
--- a/applications/luci-app-statistics/luasrc/statistics/datatree.lua
+++ b/applications/luci-app-statistics/luasrc/statistics/datatree.lua
@@ -13,9 +13,17 @@ local sections = uci:get_all("luci_statistics")
 Instance = util.class()
 
 function Instance.__init__( self, host )
-	self._host    = host or sections.collectd.Hostname or sys.hostname()
-	self._libdir  = sections.collectd.PluginDir        or "/usr/lib/collectd"
-	self._rrddir  = sections.collectd_rrdtool.DataDir  or "/tmp/rrd"
+	self._host    = host or sys.hostname()
+	self._libdir  = "/usr/lib/collectd"
+	self._rrddir  = "/tmp/rrd"
+
+	if sections and sections.collectd then
+		self._host    = host or sections.collectd.Hostname or sys.hostname()
+		self._libdir  = sections.collectd.PluginDir        or "/usr/lib/collectd"
+	end
+	if sections and sections.collectd_rrdtool then
+		self._rrddir  = sections.collectd_rrdtool.DataDir  or "/tmp/rrd"
+	end
 
 	self._libdir  = self._libdir:gsub("/$","")
 	self._rrddir  = self._rrddir:gsub("/$","")
-- 
2.25.1