fix(browser): 源 Cookie 的 expires_utc 换算移入 SQL,避开 int64 越界
This commit is contained in:
@@ -306,8 +306,15 @@ async function readSourceCookies(root: string, staging: string): Promise<SourceC
|
|||||||
|
|
||||||
const db = new DatabaseSync(dbFile, { readOnly: true })
|
const db = new DatabaseSync(dbFile, { readOnly: true })
|
||||||
try {
|
try {
|
||||||
|
// expires_utc 是 1601 纪元的微秒 int64(超过 Number.MAX_SAFE_INTEGER,
|
||||||
|
// node:sqlite 裸读直接抛 ERR_OUT_OF_RANGE)——纪元换算放在 SQL 里做:
|
||||||
|
// int64 除法精确,结果秒值 ~4e8 在安全整数范围内
|
||||||
const rows = db
|
const rows = db
|
||||||
.prepare('SELECT host_key, name, value, encrypted_value, path, is_secure, is_httponly, expires_utc, samesite FROM cookies')
|
.prepare(
|
||||||
|
'SELECT host_key, name, value, encrypted_value, path, is_secure, is_httponly, ' +
|
||||||
|
'CASE WHEN expires_utc > 0 THEN expires_utc / 1000000 - 11644473600 ELSE 0 END AS expires_sec, ' +
|
||||||
|
'samesite FROM cookies'
|
||||||
|
)
|
||||||
.all()
|
.all()
|
||||||
const cookies: BrowserCookieSeed[] = []
|
const cookies: BrowserCookieSeed[] = []
|
||||||
let skipped = 0
|
let skipped = 0
|
||||||
@@ -321,7 +328,7 @@ async function readSourceCookies(root: string, staging: string): Promise<SourceC
|
|||||||
path: string
|
path: string
|
||||||
is_secure: number
|
is_secure: number
|
||||||
is_httponly: number
|
is_httponly: number
|
||||||
expires_utc: number
|
expires_sec: number
|
||||||
samesite: number | null
|
samesite: number | null
|
||||||
}
|
}
|
||||||
let value = r.value
|
let value = r.value
|
||||||
@@ -340,7 +347,7 @@ async function readSourceCookies(root: string, staging: string): Promise<SourceC
|
|||||||
path: r.path || '/',
|
path: r.path || '/',
|
||||||
secure: r.is_secure === 1,
|
secure: r.is_secure === 1,
|
||||||
httpOnly: r.is_httponly === 1,
|
httpOnly: r.is_httponly === 1,
|
||||||
...(r.expires_utc > 0 ? { expirationDate: r.expires_utc / 1_000_000 - 11_644_473_600 } : {}),
|
...(r.expires_sec > 0 ? { expirationDate: r.expires_sec } : {}),
|
||||||
...(mapSameSite(r.samesite) ? { sameSite: mapSameSite(r.samesite) } : {})
|
...(mapSameSite(r.samesite) ? { sameSite: mapSameSite(r.samesite) } : {})
|
||||||
})
|
})
|
||||||
} catch {
|
} catch {
|
||||||
|
|||||||
Reference in New Issue
Block a user