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