Об универсальном анализе кода
Зачем SAST?
Ладно, зачем ещё один?
SQL-инъекции в 2к17?!
А языки правда отличаются?
Классика
Сужаем область
Что и как делаем? - 1
Что и как делаем? - 2
Но… - 1
Но… - 2
Но… - 3
Но… - n
Так что в итоге?
Что дальше?
Спасибо!
423.95K
Category: programmingprogramming

Об универсальном анализе кода или «Зачем нам ещё один анализатор, как его можно сделать и куда применять»

1. Об универсальном анализе кода

или
«Зачем нам ещё один анализатор,
как его можно сделать и куда применять»
15.05.2019
Никита Субботин
1

2. Зачем SAST?

15.05.2019
Никита Субботин
2

3. Ладно, зачем ещё один?

15.05.2019
Никита Субботин
3

4. SQL-инъекции в 2к17?!

15.05.2019
Никита Субботин
4

5. А языки правда отличаются?

Java
String query
= "SELECT * FROM user WHERE name = " +
name;
= "SELECT * FROM user WHERE name = " +
name
Python
query
C++
std::string query = "SELECT * FROM user WHERE name = " +
name;
PHP
$query
= "SELECT * FROM user WHERE name = " . $name;
Спойлер: иногда не очень
15.05.2019
Никита Субботин
5

6. Классика

DRY
Don’t Repeat Yourself
KISS
Keep It Simple Stupid
YAGNI
You Ain’t Gonna Need It
15.05.2019
Никита Субботин
6

7.

15.05.2019
Никита Субботин
7

8. Сужаем область

Цель – расширение класса задач модуля PT.PM путем интеграции
подсистемы анализа языка Python.
Почему Python:
• популярный (топы: Tiobe, PYPL, RedMonk)
• простой (КС-грамматика по Хомскому)
• могу, умею, практикую
15.05.2019
Никита Субботин
8

9. Что и как делаем? - 1

Как: ANTLR4 +
репозиторий antrl4-grammars +
документация Python +
официальная грамматика Python
15.05.2019
Никита Субботин
9

10. Что и как делаем? - 2

Как: PT.PM API +
C#-парсер +
руки
15.05.2019
Никита Субботин
10

11. Но… - 1

Источник: https://docs.python.org/3/reference/grammar.html
15.05.2019
Никита Субботин
11

12. Но… - 2

decorated
: decorators (classdef | funcdef | async_funcdef)
<LOTS OF stuff here>
compound_stmt
: if_stmt | while_stmt | for_stmt | try_stmt
| with_stmt | funcdef | classdef
| decorated // added later
| async_stmt // added even later
15.05.2019
Никита Субботин
12

13. Но… - 3

VS.
15.05.2019
Никита Субботин
13

14. Но… - n

• INDENTS & DEDENTS
• Неэффективные алгоритмы
• Мало документации по ANTLR4 в свободном доступе
• Устаревшая документация на PT.PM
• Меняющийся API PT.PM
• И так далее …
15.05.2019
Никита Субботин
14

15. Так что в итоге?

• Полный рефакторинг грамматики
• Порт парсера в C#
• Порт AST в UST
• Полное покрытие грамматики тестами
• Несколько тестов на матчинг шаблонов
15.05.2019
Никита Субботин
15

16. Что дальше?

• Увеличение базы шаблонов
• Рефакторинг кода
• Документация
• Покрытие шаблонов тестами
• Фикс документации Python
15.05.2019
Никита Субботин
16

17. Спасибо!

Никита Субботин
Спасибо!
Github:
inkoit
Telegram: nsubbotin
Mail:
[email protected]
English     Русский Rules