ΠΠΎΠΌΠΏΠ°Π½ΠΈΡ Intel ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ, ΡΠ²ΡΡΠ·Π°Π½ΠΈ Ρ ΠΈΠ·ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠΊΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡ ControlFlag, Π½Π°ΡΠΎΡΠ΅Π½ ΠΊΡΠΌ ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ° Π·Π° ΠΌΠ°ΡΠΈΠ½Π½ΠΎ ΠΎΠ±ΡΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΡΠΎ Π΄Π° ΠΏΠΎΠ²ΠΈΡΠΈ ΠΊΠ°ΡΠ΅ΡΡΠ²ΠΎΡΠΎ Π½Π° ΠΊΠΎΠ΄Π°. ΠΠΎΠ΄Π³ΠΎΡΠ²Π΅Π½ΠΈΡΡ ΠΎΡ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠΌ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π½Π° Π±Π°Π·Π° Π½Π° ΠΌΠΎΠ΄Π΅Π», ΠΎΠ±ΡΡΠ΅Π½ Π½Π° Π³ΠΎΠ»ΡΠΌ ΠΎΠ±Π΅ΠΌ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°Ρ ΠΊΠΎΠ΄, Π΄Π° ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΠ° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π³ΡΠ΅ΡΠΊΠΈ ΠΈ Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΈ Π² ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΈΡΠ΅ ΡΠ΅ΠΊΡΡΠΎΠ²Π΅, Π½Π°ΠΏΠΈΡΠ°Π½ΠΈ Π½Π° Π²ΠΈΡΠΎΠΊΠΎΠ΅Π·ΠΈΠΊΠΎΠ²ΠΈ Π΅Π·ΠΈΡΠΈ, ΠΊΠ°ΡΠΎ C/C++. Π‘ΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Π΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠ° Π·Π° ΠΎΡΠΊΡΠΈΠ²Π°Π½Π΅ Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π²ΠΈΠ΄ΠΎΠ²Π΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ Π² ΠΊΠΎΠ΄Π°, ΠΎΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π΅ Π½Π° ΡΠΈΠΏΠΎΠ³ΡΠ°ΡΡΠΊΠΈ Π³ΡΠ΅ΡΠΊΠΈ ΠΈ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΈ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΈ ΠΎΡ ΡΠΈΠΏΠΎΠ²Π΅ Π΄ΠΎ ΠΎΡΠΊΡΠΈΡΠΈΡ Π½Π° ΠΏΡΠΎΠΏΡΡΠ½Π°ΡΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π½Π° ΡΡΠΎΠΉΠ½ΠΎΡΡΡΠ° NULL Π² ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ, ΡΠ²ΡΡΠ·Π°Π½ΠΈ Ρ ΠΏΠ°ΠΌΠ΅ΡΡΠ°. ΠΠΎΠ΄ΡΡ Π½Π° ControlFlag Π΅ Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° C++ ΠΈ Π΅ Ρ ΠΎΡΠ²ΠΎΡΠ΅Π½ Π»ΠΈΡΠ΅Π½Π· MIT.
Π‘ΠΈΡΡΠ΅ΠΌΠ°ΡΠ° ΡΠ΅ ΡΠ°ΠΌΠΎΠΎΠ±ΡΡΠ°Π²Π°, ΠΊΠ°ΡΠΎ ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π° ΡΡΠ°ΡΠΈΡΡΠΈΡΠ΅ΡΠΊΠΈ ΠΌΠΎΠ΄Π΅Π» Π½Π° Π½Π°Π»ΠΈΡΠ½ΠΈΡ ΠΌΠ°ΡΠΈΠ² ΠΊΠΎΠ΄ ΠΎΡ ΠΎΡΠΊΡΠΈΡΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΈ, ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°Π½ΠΈ Π² GitHub ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ ΠΏΡΠ±Π»ΠΈΡΠ½ΠΈ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ. ΠΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΎΠ±ΡΡΠ΅Π½ΠΈΠ΅ΡΠΎ ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° ΠΎΠΏΡΠ΅Π΄Π΅Π»Ρ ΡΠΈΠΏΠΈΡΠ½ΠΈ ΡΠ°Π±Π»ΠΎΠ½ΠΈ Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π² ΠΊΠΎΠ΄Π° ΠΈ ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π° ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ½ΠΎ Π΄ΡΡΠ²ΠΎ Π½Π° Π²ΡΡΠ·ΠΊΠΈΡΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ΅Π·ΠΈ ΡΠ°Π±Π»ΠΎΠ½ΠΈ, ΠΎΡΡΠ°Π·ΡΠ²Π°ΡΠΎ ΠΏΠΎΡΠΎΠΊΠ° Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ΄Π° Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ°. Π ΠΊΡΠ°ΠΉΠ½Π° ΡΠΌΠ΅ΡΠΊΠ° ΡΠ΅ ΡΠΎΡΠΌΠΈΡΠ° Π΅ΡΠ°Π»ΠΎΠ½Π½ΠΎ Π΄ΡΡΠ²ΠΎ Π·Π° Π²Π·Π΅ΠΌΠ°Π½Π΅ Π½Π° ΡΠ΅ΡΠ΅Π½ΠΈΡ, ΠΊΠΎΠ΅ΡΠΎ ΠΎΠ±Π΅Π΄ΠΈΠ½ΡΠ²Π° ΠΎΠΏΠΈΡΠ° ΠΎΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π½Π° Π²ΡΠΈΡΠΊΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΈ ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΈ ΡΠ΅ΠΊΡΡΠΎΠ²Π΅.
ΠΠ° ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π°Π½ΠΈΡ ΠΊΠΎΠ΄ ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π° ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ ΠΏΡΠΎΡΠ΅Ρ Π½Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π΅ Π½Π° ΡΠ°Π±Π»ΠΎΠ½ΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΡΡΠ°Π²Π½ΡΠ²Π°Ρ Ρ Π΅ΡΠ°Π»ΠΎΠ½Π½ΠΎΡΠΎ Π΄ΡΡΠ²ΠΎ Π·Π° Π²Π·Π΅ΠΌΠ°Π½Π΅ Π½Π° ΡΠ΅ΡΠ΅Π½ΠΈΡ. ΠΠΎΠ»Π΅ΠΌΠΈΡΠ΅ ΡΠ°Π·Π»ΠΈΠΊΠΈ Ρ Π±Π»ΠΈΠ·ΠΊΠΈΡΠ΅ ΠΊΠ»ΠΎΠ½ΠΈ ΡΠ²ΠΈΠ΄Π΅ΡΠ΅Π»ΡΡΠ²Π°Ρ Π·Π° Π½Π°Π»ΠΈΡΠΈΠ΅ Π½Π° Π°Π½ΠΎΠΌΠ°Π»ΠΈΡ Π² ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π°Π½ΠΈΡ ΡΠ°Π±Π»ΠΎΠ½. Π‘ΠΈΡΡΠ΅ΠΌΠ°ΡΠ° ΡΡΡΠΎ ΡΠ°ΠΊΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π½Π΅ ΡΠ°ΠΌΠΎ Π΄Π° ΠΎΡΠΊΡΠΈΠ΅ Π³ΡΠ΅ΡΠΊΠ° Π² ΡΠ°Π±Π»ΠΎΠ½Π°, Π½ΠΎ ΠΈ Π΄Π° ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈ ΠΊΠΎΡΠ΅ΠΊΡΠΈΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ Π² ΠΊΠΎΠ΄Π° Π½Π° OpenSSL Π±Π΅ΡΠ΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΠ°Π½Π° ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡΡΠ° "(s1 == NULL) β§ (s2 == NULL)", ΠΊΠΎΡΡΠΎ ΠΏΡΠΈΡΡΡΡΠ²Π°ΡΠ΅ Π² ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ½ΠΎΡΠΎ Π΄ΡΡΠ²ΠΎ ΡΠ°ΠΌΠΎ 8 ΠΏΡΡΠΈ, Π΄ΠΎΠΊΠ°ΡΠΎ Π½Π°ΠΉ-Π±Π»ΠΈΠ·ΠΊΠΈΡΡ ΠΊΠ»ΠΎΠ½ Ρ "(s1 == NULL) || (s2 == NULL)" ΡΠ΅ ΡΡΠ΅ΡΠ°ΡΠ΅ ΠΎΠΊΠΎΠ»ΠΎ 7000 ΠΏΡΡΠΈ. Π‘ΠΈΡΡΠ΅ΠΌΠ°ΡΠ° ΡΡΡΠΎ ΡΠ°ΠΊΠ° ΡΠ°Π·ΠΊΡΠΈ Π°Π½ΠΎΠΌΠ°Π»ΠΈΡ "(s1 == NULL) | (s2 == NULL)", ΠΊΠΎΡΡΠΎ ΡΠ΅ ΡΡΠ΅ΡΠ°ΡΠ΅ Π² Π΄ΡΡΠ²ΠΎΡΠΎ 32 ΠΏΡΡΠΈ.

ΠΡΠΈ Π°Π½Π°Π»ΠΈΠ·Π° Π½Π° ΡΡΠ°Π³ΠΌΠ΅Π½Ρ ΠΎΡ ΠΊΠΎΠ΄Π° βif (x = 7) y = x;β ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈ, ΡΠ΅ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° βifβ Π·Π° ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Π½Π° ΡΠΈΡΠ»ΠΎΠ²ΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡΡΠ° βΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° == ΡΠΈΡΠ»ΠΎβ, Π·Π°ΡΠΎΠ²Π° Ρ Π³ΠΎΠ»ΡΠΌΠ° Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡ ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ΡΠΎ βΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° = ΡΠΈΡΠ»ΠΎβ Π² ΠΈΠ·ΡΠ°Π·Π° βifβ Π΅ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ ΠΎΡ ΠΏΠ΅ΡΠ°ΡΠ½Π° Π³ΡΠ΅ΡΠΊΠ°. Π’Π°ΠΊΠ°Π²Π° Π³ΡΠ΅ΡΠΊΠ° Π±ΠΈ Π±ΠΈΠ»Π° Π·Π°Π±Π΅Π»ΡΠ·Π°Π½Π° ΠΈ ΠΎΡ ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΠΈΡΠ΅ ΡΡΠ°ΡΠΈΡΠ½ΠΈ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠΈ, Π½ΠΎ Π·Π° ΡΠ°Π·Π»ΠΈΠΊΠ° ΠΎΡ ΡΡΡ ControlFlag Π½Π΅ ΠΏΡΠΈΠ»Π°Π³Π° Π³ΠΎΡΠΎΠ²ΠΈ ΠΏΡΠ°Π²ΠΈΠ»Π°, ΠΏΡΠΈ ΠΊΠΎΠΈΡΠΎ Π΅ ΡΡΡΠ΄Π½ΠΎ Π΄Π° ΡΠ΅ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ΡΡ Π²ΡΠΈΡΠΊΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΈ Π²Π°ΡΠΈΠ°Π½ΡΠΈ, Π° ΡΠ΅ ΠΎΡΠ½ΠΎΠ²Π°Π²Π° Π½Π° ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ°ΡΠ° Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° Π½Π°ΠΉ-ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π² Π³ΠΎΠ»ΡΠΌ Π±ΡΠΎΠΉ ΠΏΡΠΎΠ΅ΠΊΡΠΈ.
ΠΠ°ΡΠΎ Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ControlFlag Π² ΠΈΠ·Ρ
ΠΎΠ΄Π½ΠΈΡΠ΅ ΡΠ΅ΠΊΡΡΠΎΠ²Π΅ Π½Π° ΡΡΠΈΠ»ΠΈΡΠ°ΡΠ° cURL, ΠΊΠΎΡΡΠΎ ΡΠ΅ΡΡΠΎ ΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Ρ ΠΊΠ°ΡΠΎ ΠΏΡΠΈΠΌΠ΅Ρ Π·Π° ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅Π½ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠ΅Π½ ΠΊΠΎΠ΄, Π±Π΅ΡΠ΅ ΡΡΡΠ°Π½ΠΎΠ²Π΅Π½Π° Π½Π΅Π·Π°Π±Π΅Π»ΡΠ·Π°Π½Π° ΠΎΡ ΡΡΠ°ΡΠΈΡΠ½ΠΈΡΠ΅ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠΈ Π³ΡΠ΅ΡΠΊΠ° ΠΏΡΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° Π΅Π»Π΅ΠΌΠ΅Π½ΡΠ° Π½Π° ΡΡΡΡΠΊΡΡΡΠ°ΡΠ° βs->keeponβ, ΠΊΠΎΠΉΡΠΎ ΠΈΠΌΠ°Π» ΡΠΈΡΠ»ΠΎΠ² ΡΠΈΠΏ, Π½ΠΎ ΡΠ΅ ΡΡΠ°Π²Π½ΡΠ²Π°Π» Ρ Π±ΡΠ»Π΅Π²Π°ΡΠ° ΡΡΠΎΠΉΠ½ΠΎΡΡ TRUE. Π ΠΊΠΎΠ΄Π° Π½Π° OpenSSL, ΠΎΡΠ²Π΅Π½ ΡΠΏΠΎΠΌΠ΅Π½Π°ΡΠΈΡ ΠΏΠΎ-Π³ΠΎΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Ρ β(s1 == NULL) β§ (s2 == NULL)β, ΡΡΡΠΎ ΡΠ°ΠΊΠ° Π±ΡΡ
Π° ΠΎΡΠΊΡΠΈΡΠΈ Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΈ Π² ΠΈΠ·ΡΠ°Π·ΠΈΡΠ΅ β(-2 == rv)β (ΠΌΠΈΠ½ΡΡΡΡ Π±Π΅ΡΠ΅ ΠΏΠ΅ΡΠ°ΡΠ½Π° Π³ΡΠ΅ΡΠΊΠ°) ΠΈ βBIO_puts(bp, β:β)β.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru
