fix(sqlite): handle stored objects from older incompatible tl layers

This commit is contained in:
teidesu 2021-05-31 22:56:58 +03:00
parent d70ccaa1ad
commit 6ffb8616e3

View file

@ -116,7 +116,7 @@ interface SqliteEntity {
interface CacheItem { interface CacheItem {
peer: tl.TypeInputPeer peer: tl.TypeInputPeer
full: tl.TypeUser | tl.TypeChat full: tl.TypeUser | tl.TypeChat | null
} }
interface FsmItem { interface FsmItem {
@ -267,11 +267,18 @@ export class SqliteStorage implements ITelegramStorage /*, IStateStorage */ {
// todo: add support for workers (idk if really needed, but still) // todo: add support for workers (idk if really needed, but still)
} }
private _readFullPeer(data: Buffer): tl.TypeUser | tl.TypeChat { private _readFullPeer(data: Buffer): tl.TypeUser | tl.TypeChat | null {
// reuse reader because why not // reuse reader because why not
this._reader.pos = 0 this._reader.pos = 0
this._reader.data = data this._reader.data = data
const obj = this._reader.object() let obj
try {
obj = this._reader.object()
} catch (e) {
// object might be from an older tl layer, in which case
// it should be ignored (i guess?????)
obj = null
}
// remove reference to allow GC-ing // remove reference to allow GC-ing
this._reader.data = EMPTY_BUFFER this._reader.data = EMPTY_BUFFER
return obj return obj