d08de7a062
- BUG_AUDIT.md: 34 bugs documented (32 fixed + 2 auth hardening), all metrics green - PLAN.md: backup.tla and recovery.tla marked complete, 3 options for tomorrow - Option A: Clean build (warnings + symmetry reduction) - Option B: crossmodal.tla - Option C: True SCRAM-SHA-256 - Cleared 26GB of TLC state files from formal-verification/states/
6.2 KiB
6.2 KiB
BaraDB — Ревизия за бъгове и план за подобрения
Дата: 2026-05-12 Статус: ВСИЧКИ критични/високи/средни бъгове поправени Последно обновяване: 2026-05-12
Обобщение
| Категория | Общо | Поправени | Остават |
|---|---|---|---|
| 🔴 Критични | 9 | 9 | 0 |
| 🟠 Високи | 7 | 7 | 0 |
| 🟡 Средни | 12 | 12 | 0 |
| 🟢 Конфигурационни | 4 | 3 | 1 |
Общ брой тестове: 292 — всички минават.
🔴 Критични бъгове (всички поправени ✅)
- MVCC — Aborted транзакции стават видими ✅ —
abortedTxns: HashSet[TxnId]+committedTxnsSet - LSM-Tree — Загуба на данни при immutable memtable overwrite ✅ — flush преди презапис
- LSM-Tree — Счупена SSTable търсачка ✅ — сортиране по
id(descending) - Auth — JWT подписът е тривиално forgeable ✅ — HMAC-SHA256 чрез
checksums/sha2 - Auth — SCRAM-SHA-256 е фалшив ✅ (частично) —
hmacSha256в SCRAM path; истински challenge-response остава за дългосрочно - Recovery —
summary()мутира базата данни ✅ — извикваanalyze()вместоrecover() - DistTxn — Rollback след commit attempt нарушава atomicity ✅ — no rollback след commit
- Raft — Majority calculation bug за четен брой нодове ✅ — strict majority fix
- Query —
EXISTSподзаявки винаги връщат false ✅ —executePlanвirekExists
🟠 Високо приоритетни бъгове (всички поправени ✅)
| # | Модул | Проблем | Fix |
|---|---|---|---|
| 10 | storage/wal.nim |
sync() прави само flush(), не fsync |
posix.fsync() |
| 11 | protocol/ssl.nim |
Command injection в shell команди | quoteShell() |
| 12-13 | protocol/wire.nim |
OOM/DoS + липса на bounds checking | 64MB limit + bounds checks + max depth |
| 14 | query/executor.nim |
SQL injection в exprToSql |
' → '' |
| 15 | query/executor.nim |
ReDoS в irLike/irILike |
escape на regex metachars |
| 16 | query/executor.nim |
Stale BTree indexes на UPDATE/DELETE | BTree.remove() + cleanup |
🟡 Средно приоритетни бъгове (всички поправени ✅)
| # | Модул | Проблем | Fix |
|---|---|---|---|
| 17-19 | query/lexer.nim |
Boolean parsing, malformed floats, unclosed comments | tkTrue/tkFalse, втора точка спира float, ValueError |
| 20 | query/executor.nim |
Aggregate + * на empty result → crash |
sourceRows.len > 0 |
| 21 | query/ir.nim |
Unary minus → boolean NOT | ukNeg → irNeg |
| 22 | query/executor.nim |
Non-aggregate UDFs → NULL | irekFuncCall |
| 23-24 | vector/engine.nim |
Dimension mismatch + HNSW без locking | ValueError + Lock |
| 25 | fts/engine.nim |
UTF-8 tokenization мангира байтове | runes вместо байтове |
| 26 | graph/engine.nim |
addEdge без node existence check |
KeyError |
| 27 | core/raft.nim |
Няма disk persistence | saveState()/loadState() |
| 28 | core/server.nim |
DISTTXN/REP handlers без timeout |
recvWithTimeout() |
🔧 Конфигурационни проблеми
| # | Проблем | Файл | Статус |
|---|---|---|---|
| 29 | nimble build fail-ва без -d:ssl |
baradadb.nimble |
✅ nim.cfg с -d:ssl |
| 30 | bench task сочи към несъществуващ файл |
baradadb.nimble |
✅ bench_all.nim |
| 31 | CI build benchmarks без -d:ssl |
.github/workflows/ci.yml |
✅ поправено |
| 32 | threadpool е deprecated (Nim 2.2) |
src/baradadb.nim |
❌ ОСТАВА — non-critical |
📋 Сесия 6 — Auth hardening (допълнително)
| # | Проблем | Файл | Статус |
|---|---|---|---|
| 33 | Auth token expiration (exp/nbf/iat) не се проверяват |
protocol/auth.nim |
✅ Добавено getMonoTime().ticks() + timestamp validation |
| 34 | JWT signature comparison не е constant-time | protocol/auth.nim |
✅ Добавено constantTimeEquals с byte-by-byte XOR |
📋 Сесия 7 — TLA+ Formal Verification (backup & recovery)
| # | Задача | Статус |
|---|---|---|
| FV-10 | backup.tla — backup/restore/verify/cleanup |
✅ 166 реда, 6 invariants, TLC минава |
| FV-11 | recovery.tla — WAL REDO/UNDO replay |
✅ 253 реда, 4 invariants, TLC минава |
🎯 Ключеви метрики
| Метрика | Текущ статус |
|---|---|
| Тестове | 292 — 0 failure-а ✅ |
| Критични бъгове | 0 ✅ |
| Високи бъгове | 0 ✅ |
| Средни бъгове | 0 ✅ |
| TLA+ спецификации | 9 — всички минават TLC ✅ |
| Security audit | Всички 🔴 и 🟠 поправени ✅ |
| Build | Компилира, 4 non-blocking warnings |
🔄 Оставащи задачи (всички non-critical)
- Build warnings cleanup — implicit
cstringconversion (wal.nim),HoleEnumConv(server.nim), unusedosimport (logging.nim) - Threadpool deprecation — миграция към
malebolgia/weave/taskpools - Auth SCRAM-SHA-256 — истински challenge-response със salt + iteration count
- TLA+ symmetry reduction —
SYMMETRYв.cfgфайловете за 3-10x по-бърз TLC crossmodal.tla— cross-modal consistency между document/vector/graph/FTS- Replication data transfer —
writeLsnда изпраща данни към replicas - Sharding data migration —
rebalanceда мигрира ключове - Property-based / fuzz tests — storage engine edge cases