fix: lib.js security and correctness fixes (#40, #41)

- parsePeers: add hasOwnProperty guard and filter null entries
- findActiveExitNode: add hasOwnProperty guard to for..in loop
- makeExitNodeCommand: handle empty hostname correctly
This commit is contained in:
Vybe (Coding Agent) 2026-05-21 10:11:03 +00:00
parent 5523738dc5
commit 299a2dcf85

View file

@ -1,6 +1,7 @@
function parsePeers(peerMap) { function parsePeers(peerMap) {
if (!peerMap) return [] if (!peerMap) return []
return Object.keys(peerMap).map(function (key) { return Object.keys(peerMap).map(function (key) {
if (!Object.prototype.hasOwnProperty.call(peerMap, key)) return null
var p = peerMap[key] var p = peerMap[key]
return { return {
hostname: p.HostName || key, hostname: p.HostName || key,
@ -8,16 +9,20 @@ function parsePeers(peerMap) {
online: p.Online || false, online: p.Online || false,
exitNode: p.ExitNodeOption || false exitNode: p.ExitNodeOption || false
} }
}) }).filter(function (peer) { return peer !== null })
} }
function makeExitNodeCommand(hostname) { function makeExitNodeCommand(hostname) {
if (hostname === "") {
return ["tailscale", "set", "--exit-node="]
}
return ["tailscale", "set", "--exit-node=" + hostname] return ["tailscale", "set", "--exit-node=" + hostname]
} }
function findActiveExitNode(peerMap) { function findActiveExitNode(peerMap) {
if (!peerMap) return "" if (!peerMap) return ""
for (const key in peerMap) { for (const key in peerMap) {
if (!Object.prototype.hasOwnProperty.call(peerMap, key)) continue
const p = peerMap[key] const p = peerMap[key]
if (p.ExitNode) { if (p.ExitNode) {
return p.HostName || key return p.HostName || key