On 12/05/17 09:34, lrnzo via Dev wrote:
vielleicht war ich da doch etwas vorschnell ...
root@FF-OS-Martinistr-84:~# ffnw-banner /usr/bin/lua: /usr/sbin/ffnw-banner:40: attempt to index local 't' (a nil value) stack traceback: /usr/sbin/ffnw-banner:40: in main chunk [C]: ?
zeile 40 in /usr/sbin/ffnw-banner habe ich mal mit -> markiert:
local i=t:get('hoodselector','hoodselector','hood') local t=t:get('hoodselector','hoodselector','hoodfile') if i~=nil and t~=nil then local t=h(t) if t~=nil then local t=r(t,i) -> e["hoodname"]=t.name end end
Der Code ist soweit syntaktisch korrekt und funktionsfähig. Das Problem ist der zugriff auf t.name welches zuvor nicht geprüft wird.
im lua code von ffnw-banner scheint hier das Problem zu liegen:
local hoodbssid = uci:get('hoodselector', 'hoodselector', 'hood') local hoodfile = uci:get('hoodselector', 'hoodselector', 'hoodfile') if hoodbssid ~= nil and hoodfile ~= nil then local jhood = readHoodfile(hoodfile) if jhood ~= nil then local hood = gethoodByBssid(jhood, hoodbssid) infoHeader["hoodname"] = hood.name end end
Der Grund für das auftreten des Fehlers könnte sein das eine hood keinen nahmen besitzt. Eine andere Variante ist das readHoodfile aus einem mir noch nicht bekannten Grund eine leere Tabelle zurück liefert und die variable hood durch die folge Funktion als nil definiert wird.
Ich denke eine Lösung wäre eine explizite Prüfung der variable hood auf nil. Die beste Variante ist wahrscheinlich eine Prüfung auf eine leere Tabelle innerhalb der readHoodfile Funktion. Allerdings kann ich nicht sagen ob alle folge Bedingungen damit abgedeckt sind.
Das Banner muss sowie so noch überarbeitet werden da es immer noch openWRT anstelle von Lede zeigt.
ich habe ja nicht viel Ahnung, aber für mich sieht es so aus, als sei im minifyten lua das Symbol 't' doppel belegt. Einmal mit 'uci' und einmal mit 'hoodfile'. Darf das? Weiter unten wird 't' auch noch mit 'jhood' belegt, aber das könnte wieder in Ordnung sein, da es innerhalb eines if-statement als lokale Variable gesetzt wird.
Das darf so. Der Minifyer defined variablen die ab einen bestimmten Punkt keinen nutzen mehr aufweisen. quasi eine Schatten Definition. Ist von der Lesbarkeit eher kontraproduktiv spart aber zusätzliche bytes, was ja der Sinn des Minifyers ist.
Jedenfalls, ich komme wahrscheinlich erst am Wochenende dazu den Fehler zu beheben, fahlst mir niemand zuvorkommt :P
Schöne Grüße Tarek