fix: validate LTHashState version to prevent app state crashes

fix: validate LTHashState version to prevent app state crashes
This commit is contained in:
Renato Alcara
2026-02-20 01:19:04 -03:00
committed by GitHub
parent cd8c7d5a16
commit cbe5205dfd
2 changed files with 10 additions and 1 deletions
+3 -1
View File
@@ -40,6 +40,7 @@ import {
extractSyncdPatches, extractSyncdPatches,
generateProfilePicture, generateProfilePicture,
getHistoryMsg, getHistoryMsg,
ensureLTHashStateVersion,
newLTHashState, newLTHashState,
processSyncAction processSyncAction
} from '../Utils' } from '../Utils'
@@ -595,6 +596,7 @@ export const makeChatsSocket = (config: SocketConfig) => {
let state = result[name] let state = result[name]
if (state) { if (state) {
state = ensureLTHashStateVersion(state)
if (typeof initialVersionMap[name] === 'undefined') { if (typeof initialVersionMap[name] === 'undefined') {
initialVersionMap[name] = state.version initialVersionMap[name] = state.version
} }
@@ -935,7 +937,7 @@ export const makeChatsSocket = (config: SocketConfig) => {
await resyncAppState([name], false) await resyncAppState([name], false)
const { [name]: currentSyncVersion } = await authState.keys.get('app-state-sync-version', [name]) const { [name]: currentSyncVersion } = await authState.keys.get('app-state-sync-version', [name])
initial = currentSyncVersion || newLTHashState() initial = currentSyncVersion ? ensureLTHashStateVersion(currentSyncVersion) : newLTHashState()
encodeResult = await encodeSyncdPatch(patchCreate, myAppStateKeyId, initial, getAppStateSyncKey) encodeResult = await encodeSyncdPatch(patchCreate, myAppStateKeyId, initial, getAppStateSyncKey)
const { patch, state } = encodeResult const { patch, state } = encodeResult
+7
View File
@@ -131,6 +131,13 @@ const generatePatchMac = (
export const newLTHashState = (): LTHashState => ({ version: 0, hash: Buffer.alloc(128), indexValueMap: {} }) export const newLTHashState = (): LTHashState => ({ version: 0, hash: Buffer.alloc(128), indexValueMap: {} })
export const ensureLTHashStateVersion = (state: LTHashState): LTHashState => {
if (typeof state.version !== 'number' || isNaN(state.version)) {
state.version = 0
}
return state
}
export const encodeSyncdPatch = async ( export const encodeSyncdPatch = async (
{ type, index, syncAction, apiVersion, operation }: WAPatchCreate, { type, index, syncAction, apiVersion, operation }: WAPatchCreate,
myAppStateKeyId: string, myAppStateKeyId: string,