fix(server): validate detected Tailscale addresses

This commit is contained in:
Jinwoo-H
2026-08-12 22:45:01 -04:00
committed by Jinwoo-H
parent 536daf9106
commit c56d1bac6b
2 changed files with 13 additions and 2 deletions
@@ -23,4 +23,14 @@ describe('discoverServerPairingAddress', () => {
source: 'loopback'
})
})
it.each(['999.999.999.999', '256.0.0.1', '01.2.3.4'])(
'stays on loopback for invalid Tailscale IPv4 output %s',
async (address) => {
await expect(discoverServerPairingAddress(undefined, async () => address)).resolves.toEqual({
address: '127.0.0.1',
source: 'loopback'
})
}
)
})
+3 -2
View File
@@ -1,4 +1,5 @@
import { execFile } from 'node:child_process'
import { isIPv4 } from 'node:net'
const TAILSCALE_ADDRESS_TIMEOUT_MS = 1_500
@@ -10,7 +11,7 @@ export async function discoverServerPairingAddress(
return { address: explicitAddress, source: 'explicit' }
}
const tailscaleAddress = await readTailscaleAddress()
return tailscaleAddress
return tailscaleAddress && isIPv4(tailscaleAddress)
? { address: tailscaleAddress, source: 'tailscale' }
: { address: '127.0.0.1', source: 'loopback' }
}
@@ -27,7 +28,7 @@ function readTailscaleIpv4(): Promise<string | null> {
return
}
const address = stdout.trim().split(/\s+/)[0]
resolve(/^\d{1,3}(?:\.\d{1,3}){3}$/.test(address ?? '') ? address : null)
resolve(address ?? null)
}
)
})