luci-base: properly handle undefined IPv6 local-address information
authorJo-Philipp Wich <jo@mein.io>
Fri, 2 Mar 2018 13:42:52 +0000 (14:42 +0100)
committerJo-Philipp Wich <jo@mein.io>
Fri, 2 Mar 2018 13:42:52 +0000 (14:42 +0100)
If IPv6 prefix assignment is disabled, the "local-address" structure
might exist, but be empty which causes the adress formatting in the
network model class to bail out.

Verify the completeness of the "local-address" structure before using
it in order to avoid runtime errors.

Fixes #1657.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
modules/luci-base/luasrc/model/network.lua

index 3521c6d57a3fc935ae9d76c349567ed04e302943..c8ec5364edb6ab0e3a247114ab6a0e5eb6160018 100644 (file)
@@ -1001,7 +1001,10 @@ function protocol.ip6addrs(self)
 
        if type(addrs) == "table" then
                for n, addr in ipairs(addrs) do
-                       if type(addr["local-address"]) == "table" then
+                       if type(addr["local-address"]) == "table" and
+                          type(addr["local-address"].mask) == "number" and
+                          type(addr["local-address"].address) == "string"
+                       then
                                rv[#rv+1] = "%s/%d" %{
                                        addr["local-address"].address,
                                        addr["local-address"].mask