TGViewer
Бестиарий программирования Бестиарий программирования @programming_tales · 1.14K subscribers
Post #465 364
Старайтесь не писать строки кода, которые не помещаются на экран (часть 1 из 2)

Встретили баг, который одновременно демонстрирует, как "код-колбаса" притягивает ошибку, эффект последний строки и проблему неудачного copy-paste.

Мы не только реализуем в PVS-Studio новые диагностические правила, но и постепенно дорабатываем старые. Например, недавно в C#-анализаторе мы улучшили одну из самых старых диагностик — V3001, научив её корректнее определять случаи, когда дополнительные скобки ни на что не влияют. Результат — выявление новых багов, с одним из которых мы сейчас вас познакомим.

Ошибка найдена в проекте Space Engineers, который входит в базу проектов для регрессионного тестирования нашего анализатора. Мы используем старую зафиксированную версию проекта, так как нам нужно анализировать отличие работы анализатора на одном и том же коде. Но если заглянуть в свежую версию исходного кода, то можно обнаружить, что ошибка по-прежнему присутствует. См. функцию Contains в BoundingBox.cs.

Видите ошибку? Думаю, нет.

А всё почему? Потому, что не надо писать такие длинные нечитаемые строки кода. В них очень легко допустить ошибку, что, собственно, и произошло. Отформатирую и сокращу код.
return (double)this.Min.X + (double)num > (double)sphere.Center.X ||
(double)sphere.Center.X > (double)this.Max.X - (double)num ||
((double)this.Max.X - (double)this.Min.X <= (double)num ||
(double)this.Min.Y + (double)num > (double)sphere.Center.Y) ||
((double)sphere.Center.Y > (double)this.Max.Y - (double)num ||
(double)this.Max.Y - (double)this.Min.Y <= (double)num ||
((double)this.Min.Z + (double)num > (double)sphere.Center.Z ||
(double)sphere.Center.Z > (double)this.Max.Z - (double)num)) ||
(double)this.Max.X - (double)this.Min.X <= (double)num ?
ContainmentType.Intersects : ContainmentType.Contains;


Стало лучше, но всё равно надо постараться, чтобы заметить ошибку. Пока попробуйте найти, а я сейчас подготовлю второй пост с пояснением.
  • 👍 3
More from @programming_tales
  1. Oct 7, 2026Напоминаю, что мы подготовили подборку материалов и вебинаров по теме процессов разработки…
  2. Oct 2, 2026Запись вебинара: Go vet не поможет... Как сделать свой анализатор кода для Go?
  3. Oct 2, 2026В целях нетворкинга и просто так приглашаю коннектиться в TenChat — что-то типа LinkedIn.…
  4. Sep 29, 2026Сегодня коллега демонстрирует, как визуально проявляют себя баги в Java коде: Нашёл ошибки…
  5. Sep 29, 2026photo post
  6. Sep 28, 2026На днях выступал с докладом на форуме "Безопасность транспортных средств", организованном…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →