Files
cobol-java-v3/test-data/cobol/adversarial/ADV-OLD-SCHOOL.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

36 lines
1.2 KiB
COBOL

* ==== TYPE: ADV-MATCH-OLDSCHOOL ====
* FEATURE: Real matching program but uses different
* naming convention (K01-, not WS-)
* STATEMENT: IF / READ / OPEN
* BRANCHES: 2, DECISIONS: 1
* ADVERSARIAL: KEY variables not prefixed WS-
IDENTIFICATION DIVISION.
PROGRAM-ID. KSMTCH.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT FILE-A ASSIGN TO 'FILEA.DAT'.
SELECT FILE-B ASSIGN TO 'FILEB.DAT'.
DATA DIVISION.
FILE SECTION.
FD FILE-A.
01 REC-A PIC X(80).
FD FILE-B.
01 REC-B PIC X(80).
WORKING-STORAGE SECTION.
01 K01-KEY PIC X(10).
01 K02-KEY PIC X(10).
01 WS-EOF1 PIC X VALUE 'N'.
01 WS-EOF2 PIC X VALUE 'N'.
PROCEDURE DIVISION.
MAIN.
OPEN INPUT FILE-A FILE-B.
READ FILE-A INTO REC-A AT END MOVE 'Y' TO WS-EOF1.
READ FILE-B INTO REC-B AT END MOVE 'Y' TO WS-EOF2.
IF K01-KEY = K02-KEY
DISPLAY 'MATCH'
ELSE
DISPLAY 'NO MATCH'.
CLOSE FILE-A FILE-B.
STOP RUN.