mirror of
https://github.com/misskey-dev/misskey.git
synced 2026-03-20 19:20:41 +00:00
fix(frontend): 意図せず参照渡しになり得る箇所をdeepCloneするように修正 (#17207)
現状は(おそらく)問題は起きていないが今後問題が発現するシチュエーションが出てくる可能性がある
This commit is contained in:
@@ -82,8 +82,10 @@ export class Pizzax<T extends StateDef> {
|
||||
this.r = {} as ReactiveState<T>;
|
||||
|
||||
for (const [k, v] of Object.entries(def) as [keyof T, T[keyof T]['default']][]) {
|
||||
this.s[k] = v.default;
|
||||
this.r[k] = ref(v.default);
|
||||
// 参照渡しになるのを防ぐためclone
|
||||
const defaultValue = deepClone(v.default);
|
||||
this.s[k] = defaultValue;
|
||||
this.r[k] = ref(defaultValue);
|
||||
}
|
||||
|
||||
this.ready = this.init();
|
||||
@@ -120,7 +122,8 @@ export class Pizzax<T extends StateDef> {
|
||||
} else if (v.where === 'deviceAccount' && Object.prototype.hasOwnProperty.call(deviceAccountState, k)) {
|
||||
this.r[k].value = this.s[k] = this.mergeState<T[keyof T]['default']>(deviceAccountState[k], v.default);
|
||||
} else {
|
||||
this.r[k].value = this.s[k] = v.default;
|
||||
// 参照渡しになるのを防ぐためclone
|
||||
this.r[k].value = this.s[k] = deepClone(v.default);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -148,7 +151,8 @@ export class Pizzax<T extends StateDef> {
|
||||
this.r[k].value = this.s[k] = (kvs as Partial<T>)[k];
|
||||
cache[k] = (kvs as Partial<T>)[k];
|
||||
} else {
|
||||
this.r[k].value = this.s[k] = v.default;
|
||||
// 参照渡しになるのを防ぐためclone
|
||||
this.r[k].value = this.s[k] = deepClone(v.default);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -218,8 +222,10 @@ export class Pizzax<T extends StateDef> {
|
||||
}
|
||||
|
||||
public reset(key: keyof T) {
|
||||
this.set(key, this.def[key].default);
|
||||
return this.def[key].default;
|
||||
// 参照渡しになるのを防ぐためclone
|
||||
const defaultValue = deepClone(this.def[key].default);
|
||||
this.set(key, defaultValue);
|
||||
return defaultValue;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -14,6 +14,7 @@ import { copyToClipboard } from '@/utility/copy-to-clipboard.js';
|
||||
import { i18n } from '@/i18n.js';
|
||||
import * as os from '@/os.js';
|
||||
import { deepEqual } from '@/utility/deep-equal.js';
|
||||
import { deepClone } from '@/utility/clone.js';
|
||||
|
||||
// NOTE: 明示的な設定値のひとつとして null もあり得るため、設定が存在しないかどうかを判定する目的で null で比較したり ?? を使ってはいけない
|
||||
|
||||
@@ -122,7 +123,8 @@ export function getInitialPrefValue<K extends keyof PREF>(k: K): ValueOf<K> {
|
||||
if (typeof _default === 'function') { // factory
|
||||
return _default() as ValueOf<K>;
|
||||
} else {
|
||||
return _default as unknown as ValueOf<K>;
|
||||
// 参照渡しになるのを防ぐためclone
|
||||
return deepClone(_default as unknown as ValueOf<K>);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user