Files
cobol-java-v3/test-data/cobol/adversarial/ADV-10FILES.cbl
NB-076 4b22c3754e fix: 无连字符 KEY 变量 + COBOL 专家 10 大攻击面测试
COBOL 专家对抗性审查发现:
- 老式 COBOL 的 WSKEY1/WSKEY2(无连字符)未被 L1 关键词检测
- 结构性检测信号 4 和 5 覆盖不全

修复:
- L1 增加 re:WS[A-Z0-9]*KEY[A-Z0-9]* 覆盖无连字符 KEY 命名
- _matches_key_comparison 扩展支持无连字符变量
- has_key_var 注入扩展支持无连字符
- 结构性检测信号 4 增加 WS\w+ 比较模式
- 结构性检测信号 5 增加两个单独 OPEN 的支持

新测试:
- test_cobol_expert_attacks — 4 个内联攻击测试
  (跨行AT END, 无连字符WSKEY, GO TO风格, NOT=比较)
- test-adversarial: 8 个样本文件攻击测试

全回归: 767 passed (+3 new, 0 failures)
2026-06-21 15:35:52 +08:00

45 lines
1.5 KiB
COBOL

* ==== TYPE: ADV-MATCH-10FILES ====
* FEATURE: 10 files, only 2 with key comparison
* STATEMENT: IF / OPEN / READ
* BRANCHES: 2, DECISIONS: 1
* ADVERSARIAL: Multi-file program that's NOT matching
IDENTIFICATION DIVISION.
PROGRAM-ID. TENFL.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT F1 ASSIGN TO 'F1.DAT'.
SELECT F2 ASSIGN TO 'F2.DAT'.
SELECT F3 ASSIGN TO 'F3.DAT'.
SELECT F4 ASSIGN TO 'F4.DAT'.
SELECT F5 ASSIGN TO 'F5.DAT'.
SELECT F6 ASSIGN TO 'F6.DAT'.
SELECT F7 ASSIGN TO 'F7.DAT'.
SELECT F8 ASSIGN TO 'F8.DAT'.
SELECT F9 ASSIGN TO 'F9.DAT'.
SELECT F10 ASSIGN TO 'F10.DAT'.
DATA DIVISION.
FILE SECTION.
FD F1. 01 R1 PIC X(80).
FD F2. 01 R2 PIC X(80).
FD F3. 01 R3 PIC X(80).
FD F4. 01 R4 PIC X(80).
FD F5. 01 R5 PIC X(80).
FD F6. 01 R6 PIC X(80).
FD F7. 01 R7 PIC X(80).
FD F8. 01 R8 PIC X(80).
FD F9. 01 R9 PIC X(80).
FD F10. 01 R10 PIC X(80).
WORKING-STORAGE SECTION.
01 WS-KEY PIC X(10).
01 WS-COUNT PIC 9(5) VALUE 0.
PROCEDURE DIVISION.
MAIN.
OPEN INPUT F1 F2 F3 F4 F5 F6 F7 F8 F9 F10.
READ F1 INTO R1 AT END MOVE 'Y' TO WS-EOF.
ADD 1 TO WS-COUNT.
IF WS-COUNT > 0
DISPLAY 'OK'.
CLOSE F1 F2 F3 F4 F5 F6 F7 F8 F9 F10.
STOP RUN.