---
generated_at: 2026-02-22 12:00:00
metrics:
  claims_total: 105
  claims_with_evidence: 101
  claims_without_evidence: 4
confidence_derived: 0.96
---

# 根拠レポート：src-net 単体テストケース一覧

## 本レポートについて

### 目的
本レポートは、生成された設計書・ドキュメントの信頼性を検証し、人間レビュアーが効率的にレビューできるようにすることを目的としています。

### チェック方法
以下の観点でドキュメントの内容（Claim：主張）を検証しています：

1. **根拠の有無確認**：各主張に対して、ソースコード・既存設計書・要件定義書などの根拠（Evidence）が存在するか
2. **根拠との整合性**：主張の内容が根拠と矛盾していないか
3. **網羅性**：参照すべき情報源を適切にカバーしているか

### 信頼度スコアの算出
- **confidence_derived** = 根拠あり件数 / 総主張件数
- 状態「○」：根拠あり、「△」：根拠不足または要確認

### 本レポートの使い方
1. まず「サマリー」で全体の信頼度と優先レビュー項目を確認
2. 「Claims と根拠の対応」で △ の項目を重点的にレビュー
3. 「不足情報」で補完が必要な情報源を確認

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.96**
  - 根拠あり：101 / 105、根拠なし：4
- 優先レビュー（高）
  1. **C-069 (UT-NET-069)**：Punycodeオーバーフロー条件の具体的入力値が推測に基づく
  2. **C-078 (UT-NET-078)**：バッファ不足時の戻り値がUV_EINVALであることの直接的確認が困難
  3. **C-102 (UT-NET-102)**：malloc失敗のシミュレーション方法がソースから直接読み取れない
  4. **C-105 (UT-NET-105)**：マルチバイト途中切断の挙動がソースコードの複雑な分岐に依存

## 2) 参照した情報（Evidence一覧）
> ここに「実在するもの」だけ列挙。抽出フェーズで付けたIDをそのまま出す。

- E-01: `src/inet.c` - uv_inet_ntop関数定義（35-45行目）
- E-02: `src/inet.c` - inet_ntop4関数定義（48-59行目）
- E-03: `src/inet.c` - inet_ntop6関数定義（62-143行目）
- E-04: `src/inet.c` - uv_inet_pton関数定義（146-172行目）
- E-05: `src/inet.c` - inet_pton4関数定義（175-211行目）
- E-06: `src/inet.c` - inet_pton6関数定義（214-298行目）
- E-07: `src/idna.c` - uv__wtf8_decode1関数定義（28-68行目）
- E-08: `src/idna.c` - uv__utf8_decode1_slow関数定義（71-135行目）
- E-09: `src/idna.c` - uv__utf8_decode1関数定義（138-149行目）
- E-10: `src/idna.c` - uv__idna_toascii_label関数定義（152-315行目）
- E-11: `src/idna.c` - uv__idna_toascii関数定義（318-367行目）
- E-12: `src/idna.c` - uv_wtf8_length_as_utf16関数定義（370-384行目）
- E-13: `src/idna.c` - uv_wtf8_to_utf16関数定義（387-409行目）
- E-14: `src/idna.c` - uv__get_surrogate_value関数定義（412-424行目）
- E-15: `src/idna.c` - uv_utf16_length_as_wtf8関数定義（427-457行目）
- E-16: `src/idna.c` - uv_utf16_to_wtf8関数定義（460-560行目）
- E-17: `src/idna.h` - 公開API宣言（23行目、29行目）
- E-18: `src/inet.c` - マクロ定義 UV__INET_ADDRSTRLEN=16, UV__INET6_ADDRSTRLEN=46（25-26行目）

## 3) Claims と根拠の対応（レビューの主戦場）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-001 | AF_INETでIPv4アドレスが文字列に変換される | E-01 (switch AF_INET, 37-38行目) | ○ |
| C-002 | AF_INET6でIPv6アドレスが文字列に変換される | E-01 (switch AF_INET6, 39-40行目) | ○ |
| C-003 | サポート外AFでUV_EAFNOSUPPORTが返る | E-01 (default, 42行目) | ○ |
| C-004 | IPv4アドレス0.0.0.0が正しく変換される | E-02 (snprintfフォーマット, 49-53行目) | ○ |
| C-005 | IPv4アドレス255.255.255.255が正しく変換される | E-02 (snprintfフォーマット, 49-53行目) | ○ |
| C-006 | バッファサイズ不足でUV_ENOSPCが返る（ntop4） | E-02 (54-56行目, l >= size条件) | ○ |
| C-007 | バッファサイズがちょうど足りる場合に変換成功 | E-02 (54行目, l < size条件) | ○ |
| C-008 | 全ゼロIPv6が::に変換される | E-03 (best検出ロジック, 87-106行目) | ○ |
| C-009 | ::1が正しく変換される | E-03 (ゼロラン省略, 114-119行目) | ○ |
| C-010 | IPv4マップドIPv6が正しく変換される | E-03 (IPv4埋め込み判定, 124-131行目) | ○ |
| C-011 | 最長ゼロランが省略される | E-03 (best.len比較, 95-96行目) | ○ |
| C-012 | バッファサイズ不足でUV_ENOSPCが返る（ntop6） | E-03 (139-140行目) | ○ |
| C-013 | ゼロラン長が2未満の場合省略されない | E-03 (105-106行目, best.len < 2条件) | ○ |
| C-014 | AF_INETでIPv4文字列がバイナリに変換される | E-04 (switch AF_INET, 151-152行目) | ○ |
| C-015 | AF_INET6でIPv6文字列がバイナリに変換される | E-04 (switch AF_INET6, 153-167行目) | ○ |
| C-016 | srcがNULLでUV_EINVALが返る | E-04 (147-148行目, NULLチェック) | ○ |
| C-017 | dstがNULLでUV_EINVALが返る | E-04 (147-148行目, NULLチェック) | ○ |
| C-018 | サポート外AFでUV_EAFNOSUPPORTが返る（pton） | E-04 (default, 168-169行目) | ○ |
| C-019 | スコープID(%付き)が正しく処理される | E-04 (158-165行目, strchr '%'ロジック) | ○ |
| C-020 | スコープID部分が長すぎる場合UV_EINVALが返る | E-04 (161-162行目, UV__INET6_ADDRSTRLEN-1超過) | ○ |
| C-021 | 有効なIPv4文字列がバイナリに変換される | E-05 (175-211行目) | ○ |
| C-022 | 0.0.0.0がバイナリに変換される | E-05 (全オクテット0) | ○ |
| C-023 | 255.255.255.255がバイナリに変換される | E-05 (nw <= 255条件, 191行目) | ○ |
| C-024 | 先頭ゼロでUV_EINVALが返る | E-05 (189-190行目, saw_digit && *tp==0) | ○ |
| C-025 | 256以上でUV_EINVALが返る | E-05 (191-192行目, nw > 255) | ○ |
| C-026 | オクテット4未満でUV_EINVALが返る | E-05 (207-208行目, octets < 4) | ○ |
| C-027 | オクテット5以上でUV_EINVALが返る | E-05 (195-196行目, ++octets > 4) | ○ |
| C-028 | 非数字文字でUV_EINVALが返る | E-05 (204-205行目, else return UV_EINVAL) | ○ |
| C-029 | 空文字列でUV_EINVALが返る | E-05 (207-208行目, octets < 4) | ○ |
| C-030 | 連続ドットでUV_EINVALが返る | E-05 (199行目, ch=='.' && saw_digit条件) | ○ |
| C-031 | 末尾ドットでUV_EINVALが返る | E-05 (195-196行目, octets > 4) | ○ |
| C-032 | フルフォーマットIPv6が変換される | E-06 (232-271行目) | ○ |
| C-033 | ::省略形式が正しく展開される | E-06 (278-293行目, colonp展開) | ○ |
| C-034 | 先頭::が正しく変換される | E-06 (226-228行目, Leading ::処理) | ○ |
| C-035 | 末尾::が正しく変換される | E-06 (278-293行目, colonp処理) | ○ |
| C-036 | IPv4-mapped形式が正しく変換される | E-06 (262-268行目, inet_pton4呼出) | ○ |
| C-037 | 全ゼロ::が正しく変換される | E-06 (226-228行目, ::のみの場合) | ○ |
| C-038 | 大文字16進数が正しく変換される | E-06 (235-236行目, xdigits_u使用) | ○ |
| C-039 | ::が2回以上でUV_EINVALが返る | E-06 (247-248行目, if colonp) | ○ |
| C-040 | 16進数5桁以上でUV_EINVALが返る | E-06 (240-241行目, seen_xdigits > 4) | ○ |
| C-041 | 先頭コロン1つでUV_EINVALが返る | E-06 (227-228行目, *++src != ':') | ○ |
| C-042 | 末尾コロン1つでUV_EINVALが返る | E-06 (251-253行目, *src == '\0') | ○ |
| C-043 | グループ数8超過でUV_EINVALが返る | E-06 (254-255行目, tp + sizeof > endp) | ○ |
| C-044 | 不正文字でUV_EINVALが返る | E-06 (270行目, return UV_EINVAL) | ○ |
| C-045 | ASCII文字が正しくデコードされる | E-07 (36-37行目, b1 <= 0x7F) | ○ |
| C-046 | 2バイトUTF-8が正しくデコードされる | E-07 (46-47行目, b1 <= 0xDF) | ○ |
| C-047 | 3バイトUTF-8が正しくデコードされる | E-07 (53-54行目, b1 <= 0xEF) | ○ |
| C-048 | 4バイトUTF-8が正しくデコードされる | E-07 (60-63行目, b1 <= 0xF4) | ○ |
| C-049 | 不正継続バイト先頭で-1が返る | E-07 (38-39行目, b1 < 0xC2) | ○ |
| C-050 | 2バイト目不正で-1が返る | E-07 (43-44行目, (b2 & 0xC0) != 0x80) | ○ |
| C-051 | 3バイト目不正で-1が返る | E-07 (50-51行目, (b3 & 0xC0) != 0x80) | ○ |
| C-052 | 4バイト目不正で-1が返る | E-07 (57-58行目, (b4 & 0xC0) != 0x80) | ○ |
| C-053 | U+10FFFFが正しくデコードされる | E-07 (62-63行目, code_point <= 0x10FFFF) | ○ |
| C-054 | U+10FFFF超過で-1が返る | E-07 (62-63行目, 0x10FFFF超過時) | ○ |
| C-055 | 2バイトシーケンスがslow関数で正しくデコード | E-08 (103-111行目, a > 0xBF) | ○ |
| C-056 | 3バイトシーケンスがslow関数で正しくデコード | E-08 (93-101行目, a > 0xDF) | ○ |
| C-057 | 4バイトシーケンスがslow関数で正しくデコード | E-08 (83-91行目, a > 0xEF) | ○ |
| C-058 | 0xF7超過で-1が返る | E-08 (79-80行目, a > 0xF7) | ○ |
| C-059 | バッファ不足で-1が返る | E-08 (113-114行目, case 0) | ○ |
| C-060 | オーバーロングシーケンスで-1が返る | E-08 (125-126行目, a < min) | ○ |
| C-061 | サロゲートペア範囲で-1が返る | E-08 (131-132行目, D800-DFFF) | ○ |
| C-062 | U+10FFFF超過で-1が返る(slow) | E-08 (128-129行目, a > 0x10FFFF) | ○ |
| C-063 | ASCII文字が直接返される | E-09 (143-146行目, a < 128) | ○ |
| C-064 | マルチバイトでslow関数に委譲される | E-09 (148行目, uv__utf8_decode1_slow呼出) | ○ |
| C-065 | ASCIIラベルがそのまま出力される | E-10 (190-215行目, todo==0時) | ○ |
| C-066 | 非ASCIIラベルがPunycodeに変換される | E-10 (190-194行目, xn--プレフィクス) | ○ |
| C-067 | 不正UTF-8でUV_EINVALが返る | E-10 (180-181行目, c == UINT_MAX) | ○ |
| C-068 | バッファ不足時の安全な動作 | E-10 (191-194行目, *d < de条件チェック) | ○ |
| C-069 | Punycodeオーバーフローで UV_E2BIG | E-10 (243-244行目, delta overflow) | △ |
| C-070 | ASCIIドメイン名がそのまま出力される | E-11 (318-367行目) | ○ |
| C-071 | 国際化ドメイン名がPunycodeに変換される | E-11 (344行目, uv__idna_toascii_label呼出) | ○ |
| C-072 | ドット区切りが正しく処理される | E-11 (338行目, c != '.') | ○ |
| C-073 | 全角ドット(U+FF0E)が区切りとして処理される | E-11 (340行目, c != 0xFF0E) | ○ |
| C-074 | Unicode句点(U+3002)が区切りとして処理される | E-11 (339行目, c != 0x3002) | ○ |
| C-075 | 半角句点(U+FF61)が区切りとして処理される | E-11 (341行目, c != 0xFF61) | ○ |
| C-076 | 空文字列入力でUV_EINVALが返る | E-11 (325-326行目, s == se) | ○ |
| C-077 | 不正UTF-8入力でUV_EINVALが返る | E-11 (335-336行目, c == UINT_MAX) | ○ |
| C-078 | バッファが一杯の場合UV_EINVALが返る | E-11 (362-363行目, d >= de) | △ |
| C-079 | ASCII文字列のUTF-16長が正しく計算される | E-12 (370-384行目) | ○ |
| C-080 | BMP文字が1ユニットとしてカウントされる | E-12 (380行目, code_point <= 0xFFFF) | ○ |
| C-081 | 補助面文字が2ユニットとしてカウントされる | E-12 (378-379行目, code_point > 0xFFFF) | ○ |
| C-082 | 不正WTF-8入力で-1が返る | E-12 (376-377行目, code_point < 0) | ○ |
| C-083 | 空文字列で1が返る | E-12 (374-381行目, do-whileループ) | ○ |
| C-084 | ASCII文字列がUTF-16に変換される | E-13 (387-409行目) | ○ |
| C-085 | BMP文字がUTF-16に変換される | E-13 (401-403行目) | ○ |
| C-086 | 補助面文字がサロゲートペアに変換される | E-13 (396-400行目) | ○ |
| C-087 | BMP値がそのまま返される | E-14 (417-423行目) | ○ |
| C-088 | 有効なサロゲートペアがデコードされる | E-14 (418-421行目) | ○ |
| C-089 | 孤立高サロゲートがそのまま返される | E-14 (418行目, w_source_len != 1条件) | ○ |
| C-090 | 不正ペアでそのまま返される | E-14 (420行目, next範囲チェック) | ○ |
| C-091 | ASCII文字列のWTF-8長が正しく計算される | E-15 (439-440行目, code_point < 0x80) | ○ |
| C-092 | 2バイトUTF-8長が正しく計算される | E-15 (441-442行目, code_point < 0x800) | ○ |
| C-093 | 3バイトUTF-8長が正しく計算される | E-15 (443-444行目, code_point < 0x10000) | ○ |
| C-094 | サロゲートペアが4バイトとして計算される | E-15 (445-450行目) | ○ |
| C-095 | 空配列で0が返る | E-15 (433行目, while w_source_len条件) | ○ |
| C-096 | NUL終端モードで正しく計算される | E-15 (437-438行目, w_source_len < 0 && code_point == 0) | ○ |
| C-097 | ASCII文字列がWTF-8に変換される | E-16 (504-505行目, code_point < 0x80) | ○ |
| C-098 | BMP文字がWTF-8に変換される | E-16 (511-518行目, code_point < 0x10000) | ○ |
| C-099 | サロゲートペアが4バイトWTF-8に変換される | E-16 (519-534行目) | ○ |
| C-100 | target_ptrがNULLの場合長さのみ計算される | E-16 (481-482行目, target_ptr == NULL) | ○ |
| C-101 | *target_ptrがNULLの場合メモリ割り当て | E-16 (484-489行目, uv__malloc) | ○ |
| C-102 | malloc失敗時UV_ENOMEMが返る | E-16 (486-488行目, target == NULL) | △ |
| C-103 | バッファ不足でUV_ENOBUFSが返る | E-16 (553-556行目, w_source_len条件) | ○ |
| C-104 | NUL終端モードで正しく変換される | E-16 (500-502行目, w_source_len < 0 && code_point == 0) | ○ |
| C-105 | マルチバイト途中切断の処理 | E-16 (508-529行目, target == target_end) | △ |

## 4) 不足情報（Unknown / Missing）
- **C-069**: Punycodeエンコード中のdeltaオーバーフローを引き起こす具体的な入力値の特定が困難。ソースコード上でオーバーフローチェック（243-244行目: `x > ~delta / y`）は確認できるが、実際にこの条件を満たす入力の構成は複雑。
  - 候補：非常に長い非ASCIIラベル / 大量のUnicodeコードポイントを含むラベル / libuvの既存テストスイート参照
- **C-078**: `d >= de` 条件によりUV_EINVALが返ることはソースで確認できるが、NUL終端書き込み（365行目）がバッファ末尾を超えるケースの具体的境界条件の検証が必要。
  - 候補：バッファサイズ0の場合のテスト / 出力ちょうどバッファサイズと一致する場合のテスト
- **C-102**: `uv__malloc` が失敗する条件をテスト環境で再現する方法がソースコードからは直接読み取れない。モック化やメモリ枯渇シミュレーションが必要。
  - 候補：malloc hookによるシミュレーション / テスト用メモリアロケータ / libuvのテストフレームワーク確認
- **C-105**: `uv_utf16_to_wtf8` 内でマルチバイトUTF-8エンコード途中に `target == target_end` となる場合の分岐が複数箇所にあり（508, 512, 516, 522, 526, 530行目）、具体的な挙動の完全な検証が困難。
  - 候補：各分岐パスごとの個別テスト / バッファサイズを1バイトずつ変化させた網羅テスト

## 5) リスクフラグ（レビュー観点）
- **リスク 0 (低)**: inet.c の IPv4 変換関数群 - ロジックが明確でテストケースの根拠が十分
- **リスク 0 (低)**: inet.c の IPv6 変換関数群 - RFC準拠の実装でテストケースが網羅的
- **リスク 0 (低)**: idna.c の UTF-8 デコード関数群 - 境界条件が明確にソースで確認可能
- **リスク 1 (中)**: idna.c の IDNA/Punycode 変換 - アルゴリズムの複雑さによりオーバーフロー条件の特定が困難
- **リスク 1 (中)**: idna.c の UTF-16/WTF-8 変換 - サロゲートペア処理とバッファ管理の複合条件がある
- **リスク 1 (中)**: uv_utf16_to_wtf8 のメモリ管理 - malloc失敗テストの再現性に課題

## 6) レビュアーチェックリスト（最小）
- [ ] inet_ntop4/inet_ntop6 のバッファサイズ境界テスト（C-006, C-007, C-012）が十分か確認
- [ ] inet_pton4 の先頭ゼロ検出（C-024）がRFC 6943の要件と整合しているか確認
- [ ] inet_pton6 のIPv4-mapped形式テスト（C-036）が::ffff:以外のマッピング形式もカバーしているか確認
- [ ] uv__idna_toascii_label のPunycodeエンコードテスト（C-066）で既知のIDNA 2008テストベクタを使用しているか確認
- [ ] uv__idna_toascii のUnicode区切り文字テスト（C-073, C-074, C-075）が全4種の区切り文字をカバーしているか確認
- [ ] uv_utf16_to_wtf8 のメモリ割り当て失敗テスト（C-102）の再現方法が実行可能か確認
- [ ] サロゲートペア処理（C-088, C-089, C-090）で孤立サロゲートのWTF-8エンコーディングが正しいか確認
