Выпуск ControlFlag 1.0, инструмСнта для выявлСния ошибок Π² ΠΊΠΎΠ΄Π΅ Π½Π° языкС Π‘ΠΈ

Компания Intel ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π»Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅Π»ΠΈΠ· инструмСнтария ControlFlag 1.0, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅Π³ΠΎ Π²Ρ‹ΡΠ²Π»ΡΡ‚ΡŒ ошибки ΠΈ Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΈ Π² исходных тСкстах, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ систСму машинного обучСния, Π½Π°Ρ‚Ρ€Π΅Π½ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ Π½Π° большом ΠΎΠ±ΡŠΡ‘ΠΌΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠΎΠ΄Π°. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Ρ… статичСских Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ², ControlFlag Π½Π΅ примСняСт Π³ΠΎΡ‚ΠΎΠ²Ρ‹Ρ… ΠΏΡ€Π°Π²ΠΈΠ», Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΠΏΡ€Π΅Π΄ΡƒΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ всС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹, Π° отталкиваСтся ΠΎΡ‚ статистики использования всСвозмоТных языковых конструкций Π² большом числС ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ². Код ControlFlag написан Π½Π° языкС Π‘++ ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ MIT.

БистСма обучаСтся ΠΏΡƒΡ‚Ρ‘ΠΌ построСния статистичСской ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈΠΌΠ΅ΡŽΡ‰Π΅Π³ΠΎΡΡ массива ΠΊΠΎΠ΄Π° ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π² GitHub ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Ρ… рСпозиториях. На стадии обучСния систСма опрСдСляСт Ρ‚ΠΈΠΏΠΎΠ²Ρ‹Π΅ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ построСния конструкций Π² ΠΊΠΎΠ΄Π΅ ΠΈ строит синтаксичСскоС Π΄Π΅Ρ€Π΅Π²ΠΎ связСй ΠΌΠ΅ΠΆΠ΄Ρƒ этими шаблонами, ΠΎΡ‚Ρ€Π°ΠΆΠ°ΡŽΡ‰Π΅Π΅ ΠΏΠΎΡ‚ΠΎΠΊ выполнСния ΠΊΠΎΠ΄Π° Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. Π’ ΠΈΡ‚ΠΎΠ³Π΅ формируСтся эталонноС Π΄Π΅Ρ€Π΅Π²ΠΎ принятия Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ, ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‰Π΅Π΅ ΠΎΠΏΡ‹Ρ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ всСх ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… исходных тСкстов. Для провСряСмого ΠΊΠΎΠ΄Π° выполняСтся ΠΏΠΎΡ…ΠΎΠΆΠΈΠΉ процСсс опрСдСлСния шаблонов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ²Π΅Ρ€ΡΡŽΡ‚ΡΡ с эталонным Π΄Π΅Ρ€Π΅Π²ΠΎΠΌ принятия Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ. Π‘ΠΎΠ»ΡŒΡˆΠΈΠ΅ расхоТдСния с сосСдними вСтвями ΡΠ²ΠΈΠ΄Π΅Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΡƒΡŽΡ‚ ΠΎ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΈ Π² провСряСмом шаблонС.

Выпуск ControlFlag 1.0, инструмСнта для выявлСния ошибок Π² ΠΊΠΎΠ΄Π΅ Π½Π° языкС Π‘ΠΈ

Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° возмоТностСй ControlFlag Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ Π±Ρ‹Π» ΠΏΡ€ΠΎΠ²Π΅Π΄Ρ‘Π½ Π°Π½Π°Π»ΠΈΠ· исходных тСкстов ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² OpenSSL ΠΈ cURL:

  • Π’ OpenSSL Π±Ρ‹Π»ΠΈ выявлСны Π°Π½ΠΎΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ конструкции «(s1 == NULL) ∧ (s2 == NULL)» ΠΈ «(s1 == NULL) | (s2 == NULL)» , Π½Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΌΡƒ ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ «(s1 == NULL) || (s2 == NULL)». Π’ ΠΊΠΎΠ΄Π΅ Ρ‚Π°ΠΊΠΆΠ΅ Π±Ρ‹Π»ΠΈ выявлСны Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΈ Π² выраТСниях «(-2 == rv)» (минус Π±Ρ‹Π» ΠΎΠΏΠ΅Ρ‡Π°Ρ‚ΠΊΠΎΠΉ) ΠΈ «BIO_puts(bp, «:») <= 0)» (Π² контСкстС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹Ρ‚ΡŒ «== 0»).
  • Π’ cURL выявлСна нСзамСчСнная статичСскими Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ ошибка ΠΏΡ€ΠΈ использовании элСмСнта структуры «s->keepon», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠΌΠ΅Π» числовой Ρ‚ΠΈΠΏ, Π½ΠΎ сравнивался с Π±ΡƒΠ»Π΅Π²Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ TRUE.

Из особСнностСй вСрсии ControlFlag 1.0 отмСчаСтся полная ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Ρ‚ΠΈΠΏΠΎΠ²Ρ‹Ρ… шаблонов для языка Π‘ΠΈ ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ выявлСния Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΉ Π² условных выраТСниях «if». НапримСр, ΠΏΡ€ΠΈ Π°Π½Π°Π»ΠΈΠ·Π΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π° ΠΊΠΎΠ΄Π° «if (x = 7) y = x;» систСма ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ «if» для сравнСния числовых Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ конструкция «ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ == число», поэтому с большой Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒΡŽ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ «ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ = число» Π² Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ «if» Π²Ρ‹Π·Π²Π°Π½ΠΎ ΠΎΠΏΠ΅Ρ‡Π°Ρ‚ΠΊΠΎΠΉ. Π’ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚Π΅ прСдоставляСтся сцСнарий, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ΡΡ Π² GitHub Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ Π½Π° языкС Π‘ΠΈ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… для построСния ΠΌΠΎΠ΄Π΅Π»ΠΈ. Π’Π°ΠΊΠΆΠ΅ доступны ΡƒΠΆΠ΅ Π³ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ сразу ΠΏΡ€ΠΈΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ ΠΊ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ ΠΊΠΎΠ΄Π°.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ