diff --git a/packages/vite/src/node/__tests__/utils.spec.ts b/packages/vite/src/node/__tests__/utils.spec.ts index f0875f28ba4711..6ffb5db8b486d8 100644 --- a/packages/vite/src/node/__tests__/utils.spec.ts +++ b/packages/vite/src/node/__tests__/utils.spec.ts @@ -173,6 +173,7 @@ describe('extractHostnamesFromSubjectAltName', () => { ['DNS:localhost, DNS:foo.localhost', ['localhost', 'foo.localhost']], ['DNS:*.localhost', ['vite.localhost']], ['DNS:[::1]', []], // [::1] is skipped + ['DNS:*.192.168.0.152, DNS:192.168.0.152', ['192.168.0.152']], // *.192.168.0.152 is skipped ['othername:"foo,bar", DNS:localhost', ['localhost']], // handle quoted correctly ] as const diff --git a/packages/vite/src/node/utils.ts b/packages/vite/src/node/utils.ts index 088702dfdd3693..53606cccf33c45 100644 --- a/packages/vite/src/node/utils.ts +++ b/packages/vite/src/node/utils.ts @@ -1,5 +1,6 @@ import fs from 'node:fs' import os from 'node:os' +import net from 'node:net' import path from 'node:path' import { exec } from 'node:child_process' import crypto from 'node:crypto' @@ -1083,8 +1084,13 @@ export function extractHostnamesFromSubjectAltName( } remaining = remaining.slice(/* for , */ 1).trimStart() - // [::1] might be included but skip it as it's already included as a local address - if (name === 'DNS' && value !== '[::1]') { + if ( + name === 'DNS' && + // [::1] might be included but skip it as it's already included as a local address + value !== '[::1]' && + // skip *.IPv4 addresses, which is invalid + !(value.startsWith('*.') && net.isIPv4(value.slice(2))) + ) { hostnames.push(value.replace('*', 'vite')) } }