ΠΠΎΠΌΠΏΠ°Π½ΠΈΡ 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
