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