luci-mod-status: routes: prevent null error if the commands don't resolve
authorPaul Donald <[email protected]>
Tue, 21 Oct 2025 23:22:04 +0000 (01:22 +0200)
committerPaul Donald <[email protected]>
Tue, 21 Oct 2025 23:22:04 +0000 (01:22 +0200)
Closes #8026

Signed-off-by: Paul Donald <[email protected]>
modules/luci-mod-status/htdocs/luci-static/resources/view/status/routes.js

index 6b249a0fbe8760568451aedeb1984936d939481c..7c7668110ae9f9f429d08ee666347276009d7307 100644 (file)
@@ -39,12 +39,12 @@ return view.extend({
        load() {
                return Promise.all([
                        callNetworkInterfaceDump(),
-                       L.resolveDefault(fs.exec('/sbin/ip', [ '-4', 'neigh', 'show' ]), {}),
-                       L.resolveDefault(fs.exec('/sbin/ip', [ '-4', 'route', 'show', 'table', 'all' ]), {}),
-                       L.resolveDefault(fs.exec('/sbin/ip', [ '-4', 'rule', 'show' ]), {}),
-                       L.resolveDefault(fs.exec('/sbin/ip', [ '-6', 'neigh', 'show' ]), {}),
-                       L.resolveDefault(fs.exec('/sbin/ip', [ '-6', 'route', 'show', 'table', 'all' ]), {}),
-                       L.resolveDefault(fs.exec('/sbin/ip', [ '-6', 'rule', 'show' ]), {}),
+                       L.resolveDefault(fs.exec('/sbin/ip', [ '-4', 'neigh', 'show' ]), { stdout: '' }),
+                       L.resolveDefault(fs.exec('/sbin/ip', [ '-4', 'route', 'show', 'table', 'all' ]), { stdout: '' }),
+                       L.resolveDefault(fs.exec('/sbin/ip', [ '-4', 'rule', 'show' ]), { stdout: '' }),
+                       L.resolveDefault(fs.exec('/sbin/ip', [ '-6', 'neigh', 'show' ]), { stdout: '' }),
+                       L.resolveDefault(fs.exec('/sbin/ip', [ '-6', 'route', 'show', 'table', 'all' ]), { stdout: '' }),
+                       L.resolveDefault(fs.exec('/sbin/ip', [ '-6', 'rule', 'show' ]), { stdout: '' }),
                        L.hasSystemFeature('ufpd') ? callUfpList() : null
                ]);
        },
@@ -81,6 +81,7 @@ return view.extend({
        },
 
        parseNeighbs(nbs, macs, networks, v6) {
+               if (!nbs) return [];
                const res = [];
 
                for (const line of nbs.trim().split(/\n/)) {
@@ -115,6 +116,7 @@ return view.extend({
        },
 
        parseRoutes(routes, networks, v6) {
+               if (!routes) return [];
                const res = [];
 
                for (const line of routes.trim().split(/\n/)) {
@@ -145,7 +147,7 @@ return view.extend({
                return res;
        },
 
-       parseRules: rules => rules.trim().split('\n').map(l => {
+       parseRules: rules => rules?.trim()?.split('\n')?.map(l => {
                const [, prio=null, rule=null] = l.match(/^(\d+):\s+(.+)$/) || [];
                return [prio, rule];
        }),