Skip to main content

Module text_clone

Module text_clone 

Source

Functions§

crypto_get_random_values 🔒
crypto.getRandomValues(typedArray)。以前は種別を無視して全要素を無条件に & 0xff(0-255)で埋めており、Int16Array/Int32Array/Uint32Array 等 8bit より広い型に対しては本来の値域のごく一部(下位8bitのみ、常に非負)しか 埋められない、実質的にランダム性が大幅に弱まるバグだった。_ta_kind タグから 種別を復元し、コンストラクタ/set/索引代入と同じ TaKind::convert() で 型ごとの正しい値域に変換する。
crypto_random_uuid 🔒
decode_utf16_bytes 🔒
UTF-16(LE/BE)のバイト列を Rust String へデコードする。不正な サロゲートは仕様どおり置換文字(U+FFFD)に置き換える。
deep_clone_value 🔒
structuredClone は仕様上、循環参照(var a={}; a.self=a;)や同一オブジェクトへの 複数参照(構造の共有)を正しく扱う必要がある。以前はそのための「複製済みオブジェクトの 記録」を一切持たず単純な再帰だけだったため、循環参照ではスタックオーバーフロー (この no_std カーネル環境ではクラッシュ/ハングになり得る)に陥っていた。 seen に (元オブジェクト, 複製先オブジェクト) を積みながら辿ることで、複製先の 入れ物を先に作ってから中身を埋める(=自己参照が現れた時点で既に登録済みにする)。
deep_clone_value_depth 🔒
normalize_text_encoding_label 🔒
TextDecoder のラベル正規化(WHATWG Encoding の簡易サブセット)。未知の ラベルは寛容に utf-8 へフォールバックする(この処理系の他のパース系と 同水準の簡略化)。
structured_clone 🔒
structuredClone(value, {transfer: [...]}) の第2引数 transfer が丸ごと 無視されていた。実際のメモリ移動は行わない簡略実装だが、転送対象の ArrayBuffer.detachedtrue にし内部バイト列を破棄することで ArrayBuffer.prototype.transfer() 自身の「二重 transfer はエラー」という 既存チェック(arraybuffer_transfer_impl)とは整合する状態にする (slice()/byteLength 自体が detached を見ない、という既存の簡略化は そのまま踏襲する)。
text_decode 🔒
TextDecoder.prototype.decode()。以前はコンストラクタに渡した encoding ラベル(new TextDecoder('utf-16le') 等)を完全に無視し、常に UTF-8 として デコードしていたバグだった(utf-16 系データを渡しても静かに文字化けする)。 重要: decode(chunk, {stream: true})(ストリーミングデコード。丸ごと 未対応だった。チャンク境界でマルチバイト文字が分断された場合に文字化け させず次回呼び出しへ持ち越す定番パターン)にも対応。this._pending (隠しプロパティ)に前回分の未完了バイトを保持する。UTF-16 系は2バイト 単位のため奇数バイト余りを同様に持ち越す。
text_decoder_ctor 🔒
new TextDecoder(label) が丸ごと引数を無視し常に utf-8 決め打ちだった バグ(詳細は text_decode/normalize_text_encoding_label のコメント参照)。
text_encode 🔒
text_encode_into 🔒
TextEncoder.prototype.encodeInto(source, destination) が丸ごと未対応 だった(encode() は既に対応済みだったが、既存の Uint8Array バッファへ 直接書き込むこちらの性能向けバリアントが欠けていた)。仕様どおり UTF-8 コードポイント境界で打ち切り(マルチバイト文字を途中で分割しない)、 {read, written}read は消費した UTF-16 コード単位数、written は 書き込んだバイト数)を返す。
text_encoder_ctor 🔒
url_create_object_url 🔒
URL.createObjectURL(blob)Blob/File を一意な blob: URL 文字列へ 変換する定番パターン。<img src=URL.createObjectURL(blob)>/ダウンロード リンク生成等で広く使われる)が丸ごと未対応だった。実際の URL 解決 (画像読み込みパイプラインへの配線)までは行わない発行のみの簡略実装だが、 呼び出し自体が TypeError になる致命的な欠落は解消する。既存の crypto.randomUUID() と同じ乱数源で一意な ID を生成する。
url_revoke_object_url 🔒
URL.revokeObjectURL(url)createObjectURL が実際の登録簿を持たない 簡略実装のため、対になる解放側も無害な no-op とする。
utf8_incomplete_trailing_len 🔒
UTF-8 バイト列の末尾が「まだ継続バイトが足りない不完全なマルチバイト シーケンスの途中」かどうかを判定し、その未完了分のバイト数(0なら 末尾は完結している)を返す。TextDecoder.decode(chunk, {stream:true}) が末尾のバイトを次回呼び出しへ持ち越すために使う。