Documentation
¶
Overview ¶
injection_named_exists.go — разбор: доказательство способности упасть, НАЗВАННОЕ пробой, обязано существовать (#2479).
───────────────────────────────────────────────────────────────────────────── ПРЕДМЕТ
Проба, чья шапка говорит «способность упасть доказана инъекцией — такой-то файл», делает утверждение о ДЕРЕВЕ. Утверждение это не компилируется и никем не сверяется: файл переименовали, унесли вместе с рефакторингом либо не написали вовсе — а шапка продолжает обещать доказательство. Гейт, потерявший способность краснеть, на чистом дереве выглядит РОВНО ТАК ЖЕ, как исправный, поэтому обещание доказательства читается как само доказательство.
Замер, из которого разбор выведен: на ревизии заведения упоминаний в комментариях было 122, не резолвилось ОДНО — шапка гейта осей адреса называла файл, которого в дереве не было с первого её дня.
───────────────────────────────────────────────────────────────────────────── У ЭТОГО РАЗБОРА ЕСТЬ БЛИЗНЕЦ В ПЛАТФОРМЕ — И ЭТО НАЗВАНО, А НЕ УМОЛЧАНО
Тот же разбор, поднятый до корня МОНОРЕПО, живёт в `tools/injectionproofgate` (задача #2519): этот обходит корень своего модуля и о платформе не высказывается — в самостоятельном клоне службы монорепо нет вовсе. Обещания соседних модулей платформы этому модулю не принадлежат.
Свести обе реализации в одну сегодня НЕЛЬЗЯ: модуль службы пинит платформу псевдоверсией, поэтому импортировать пакет, которого в пинованной ревизии ещё нет, он не может. Предикат сведения: пин указывает на ревизию, где тот пакет существует; до этого две реализации об одном предмете живут рядом осознанно.
───────────────────────────────────────────────────────────────────────────── СУДЯТСЯ КОММЕНТАРИИ, И ЭТО РЕШЕНИЕ, А НЕ УПРОЩЕНИЕ
Координата доказательства пишется ПРОЗОЙ — это её законное место, и разбор читает разобранные группы комментариев, а не сырой текст файла. Строковые литералы намеренно НЕ судятся: в них живут синтетические имена, которые инъекции кладут во временные каталоги, и дерева они не называют вовсе. Судить их значило бы краснеть на чужой фикстуре — то есть на собственном доказательстве.
Величина «в строках» всё равно печатается переписью: молчание о целом виде вхождений неотличимо от их отсутствия.
───────────────────────────────────────────────────────────────────────────── ЗАКОННЫХ ФОРМ КООРДИНАТЫ ТРИ, И РАСПОЗНАВАТЕЛЬ ЗНАЕТ ВСЕ ТРИ
Форма, о которой он не знает, даёт не красное и не зелёное, а МОЛЧАНИЕ. Измерено на этом дереве: наивный резолвер («имя рядом с называющим») дал 4 непопадания из 138, и все четыре оказались ЗАКОННЫМИ формами, а не находками.
СОСЕД `<имя>_injection_test.go` — файл в каталоге называющего;
ПО МОДУЛЮ то же имя, но доказательство лежит в ДРУГОМ пакете модуля
(проба одного пакета ссылается на инъекцию соседнего);
КООРДИНАТОЙ `internal/<пакет>/<имя>_injection_test.go` — путь от корня
МОДУЛЯ службы, а не от корня монорепо: в самостоятельном клоне
приставки `services/iam/` нет, и счёт от неё указывал бы наружу
дерева.
Имя в примерах — ОБРАЗЕЦ с угловыми скобками, а не координата, и это не подгонка текста под инструмент: координата, названная в прозе, есть утверждение о дереве, и выдуманная — ложное. Разбор судит объявленные координаты, поэтому пример обязан не выглядеть ею.
Index ¶
- func AuditNamedInjections(root string) ([]InjectionFinding, InjectionCensus, error)
- func ScanFixedRefusalTexts(root string, files []string) (RefusalTextCensus, []RefusalTextFinding, error)
- type DeleteRevokeCensus
- type InjectionCensus
- type InjectionFinding
- type RefusalTextCensus
- type RefusalTextFinding
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func AuditNamedInjections ¶
func AuditNamedInjections(root string) ([]InjectionFinding, InjectionCensus, error)
AuditNamedInjections обходит дерево модуля от root и возвращает находки с переписью.
Обращения к пробе здесь нет намеренно: разбор, роняющий её изнутри, инъекции не поддаётся — синтетическому дереву некуда было бы подать вход.
func ScanFixedRefusalTexts ¶
func ScanFixedRefusalTexts(root string, files []string) (RefusalTextCensus, []RefusalTextFinding, error)
ScanFixedRefusalTexts разбирает названные файлы и называет конструкции статуса на полосах чужой причины, чей текст не доказан фиксированным.
root служит только для печати координат. Пустой обход ошибкой ЗДЕСЬ не объявляется: пустоту судит вызывающий — у гейта дерева и у пробы инъекции законные пороги пустоты разные.
Types ¶
type DeleteRevokeCensus ¶
type DeleteRevokeCensus struct {
Dirs int // каталогов под api/ осмотрено
Files int // не-тестовых файлов Go разобрано
EmitCalls int // вызовов EmitReconcileEvent найдено
OwnTyped int // каталогов, у которых выведен СВОЙ тип
WithDeleteGo int // из них несущих delete.go
Population int // судимых каталогов (свой тип И delete.go)
Satisfying int // из них эмитирующих отзыв своего типа
}
DeleteRevokeCensus — перепись одного обхода. Печатается ВСЕГДА: «ноль находок» обязано быть отличимо от «ноль прочитанного».
func ScanDeleteRevokeProducers ¶
func ScanDeleteRevokeProducers(apiDir string) (DeleteRevokeCensus, []string, error)
ScanDeleteRevokeProducers обходит каталоги use-case под apiDir и называет те, у которых путь снятия собственного объекта остался без производителя отзыва.
Возвращает перепись, находки (по одной на каталог, в порядке имён — отказ на одном и том же дереве читается одинаково от прогона к прогону) и ошибку обхода. Пустой обход ошибкой ЗДЕСЬ не объявляется: пустоту судит вызывающий, потому что у гейта дерева и у пробы инъекции законные пороги пустоты разные.
func (DeleteRevokeCensus) String ¶
func (c DeleteRevokeCensus) String() string
type InjectionCensus ¶
type InjectionCensus struct {
// GoFiles — исходников модуля разобрано.
GoFiles int
// NamingFiles / InComments — файлов, называющих доказательство, и самих
// упоминаний В КОММЕНТАРИЯХ (судимая полоса).
NamingFiles int
InComments int
// InStrings — упоминаний в строковых литералах (полоса НЕ судимая; названа,
// чтобы её отсутствие в вердикте не приняли за отсутствие вхождений).
InStrings int
// Resolved — из судимых упоминаний нашли свой файл.
Resolved int
}
InjectionCensus — объём осмотренного. Печатается ВСЕГДА: «ноль находок» обязано быть отличимо от «ноль прочитанного».
type InjectionFinding ¶
type InjectionFinding struct {
NamedBy string // координата называющего, от корня обхода
Coordinate string // что названо
}
InjectionFinding — упоминание, у которого нет предмета.
type RefusalTextCensus ¶
type RefusalTextCensus struct {
Files int // файлов Go (не-тестовых) разобрано
Constructions int // конструкций статуса найдено всего
Population int // из них на полосах чужой причины (код назван синтаксически)
Fixed int // из них с доказуемо фиксированным текстом
CodeNotLiteral int // конструкций с ВЫЧИСЛЯЕМЫМ кодом — вне популяции (слепая зона)
Constants int // пакетных строковых констант проиндексировано
}
RefusalTextCensus — перепись одного обхода. Печатается ВСЕГДА: «ноль находок» обязано быть отличимо от «ноль прочитанного».
func (RefusalTextCensus) String ¶
func (c RefusalTextCensus) String() string