рд╣рд░ рдХреЛрдИ рдЬреЛ рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд░рддрд╛ рд╣реИ, рд╡рд╣ рд╢рд╛рдпрдж рдлреНрд░реАрдЖрд░рдЯреАрдУрдПрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирддрд╛ рд╣реИ, рдпрд╛ рдХрдо рд╕реЗ рдХрдо рдЗрд╕ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реБрдирд╛ рд╣реИред рдЕрдореЗрдЬрд╝реЕрди рд▓реЛрдЧреЛрдВ рдиреЗ рдПрдбрдмреНрд▓реНрдпреВрдПрд╕ рдЗрдВрдЯрд░рдиреЗрдЯ рдСрдлрд╝ рдерд┐рдВрдЧреНрд╕ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ - рдпрд╣ рд╣реИ рдХрд┐ рдЕрдореЗрдЬрд╝реЕрди рдлреНрд░реАрдЖрд░рдЯреАрдУрдПрд╕ рдХреИрд╕реЗ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ред рд╣рдо, рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдореЗрд▓ рдореЗрдВ рдФрд░ рд▓реЗрдЦреЛрдВ рдХреЗ рдиреАрдЪреЗ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдЗрди рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЧрдпрд╛ рдерд╛ред рдЦреИрд░, рдЖрдкрдиреЗ рдкреВрдЫрд╛ - рд╣рдордиреЗ рдХрд┐рдпрд╛ред рдпрд╣ рдХреНрдпрд╛ рдЖрдпрд╛ - рдкрд░ рдкрдврд╝реЗрдВ

рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рд╛
рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЖрдкрдХреЛ рдЬрд╛рдБрдЪ рдХреА рдЧрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ "рдбреИрдб" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рдмрддрд╛рдКрдВрдЧрд╛ - рдлреНрд░реАрдЖрд░рдЯреАрдУрдПрд╕ (рдЖрдк
рдпрд╣рд╛рдБ рд╕реНрд░реЛрдд рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ)ред рдЬреИрд╕рд╛ рдХрд┐ рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рдХрд╣рддрд╛ рд╣реИ, FreeRTOS рдПрдореНрдмреЗрдбреЗрдб рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдПрдХ рдорд▓реНрдЯреА-рдЯрд╛рд╕реНрдХрд┐рдВрдЧ рд░рд┐рдпрд▓-рдЯрд╛рдЗрдо рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рд╣реИред
рдпрд╣ рдЕрдЪреНрдЫреА рдкреБрд░рд╛рдиреА рд╕реА рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛, рдЬреЛ рдЖрд╢реНрдЪрд░реНрдп рдХреА рдмрд╛рдд рдирд╣реАрдВ рд╣реИ - рдЗрд╕ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░реНрд╕ рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП: рдХрдо рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдкрд╛рд╡рд░, рдереЛрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рд░реИрдо, рдФрд░ рдЗрд╕реА рддрд░рд╣ред рд╕реА рднрд╛рд╖рд╛ рдЖрдкрдХреЛ рдирд┐рдореНрди рд╕реНрддрд░ рдкрд░ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдЙрдЪреНрдЪ рдкреНрд░рджрд░реНрд╢рди рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдРрд╕реЗ рдУрдПрд╕ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЙрдкрдпреБрдХреНрдд рд╣реИред
рдЕрдм рдЕрдореЗрдЬрд╝реЕрди рдкрд░ рд╡рд╛рдкрд╕, рдЬреЛ рдЕрднреА рднреА рдирд╣реАрдВ рдмреИрдарддрд╛ рд╣реИ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдЖрд╢рд╛рдЬрдирдХ рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдореЗрдЬрд╝реЕрди рдЕрдореЗрдЬрд╝реЕрди рд▓рдореНрдмрд░рдмрд╛рд░реНрдб рдЧреЗрдо рдПрдПрдП рдЗрдВрдЬрди рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рд╣рдордиреЗ
рдкрд░реАрдХреНрд╖рдг рднреА рдХрд┐рдпрд╛ ред
рдРрд╕рд╛ рд╣реА рдПрдХ рдХреНрд╖реЗрддреНрд░ рдЗрдВрдЯрд░рдиреЗрдЯ рдСрдл рдерд┐рдВрдЧреНрд╕ (рдЗрдВрдЯрд░рдиреЗрдЯ рдСрдл рдерд┐рдВрдЧреНрд╕, IoT) рд╣реИред рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрдореЗрдЬрд╝реЕрди рдиреЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ - рдФрд░ рдЙрдиреНрд╣реЛрдВрдиреЗ рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдлреНрд░реАрдЖрд░рдЯреАрдУрдПрд╕ рдХрд░реНрдиреЗрд▓ рд▓рд┐рдпрд╛ред
рдкрд░рд┐рдгрд╛рдореА рдкреНрд░рдгрд╛рд▓реА - Amazon FreeRTOS - рдХреЛ "AWS IoT Core рдпрд╛ AWS IoT Greengrass" рдЬреИрд╕реЗ Amazon Web Services рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЬреБрдбрд╝рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛
рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб рдЧрд┐рддреБрдм рдкрд░
рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИред
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рдпрд╣ рдЬрд╛рдВрдЪ рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдХреНрдпрд╛ рдлреНрд░реАрдЖрд░рдЯреАрдУрдПрд╕ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реИрдВ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдЕрдореЗрдЬрд╝реЕрди рд╕реЗ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рд╕реНрдерд┐рд░ рдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХрд┐рддрдирд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИред
рдХреИрд╕рд╛ рдерд╛ рдЪреЗрдХ
рдПрдХ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рддреНрд░реБрдЯрд┐ рдЦреЛрдЬ рдЙрдкрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЛрдб рдХреА рдЬрд╛рдВрдЪ рдХреА рдЧрдИ рдереА: рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд╕реНрдЯреИрдЯрд┐рдХ рдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдХред рдпрд╣ C, C ++, C # рдФрд░ Java рдореЗрдВ рд▓рд┐рдЦреЗ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИред
рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ - рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдпрдХреАрди рд╣реЛрдЧрд╛ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рд╣реИрдВ рдФрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕рд╛рде рд╕рдм рдХреБрдЫ рдХреНрд░рдо рдореЗрдВ рд╣реИред рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рдВрдХрд▓рди рдирд┐рдЧрд░рд╛рдиреА рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред рдореИрдВрдиреЗ рджреГрд╢реНрдп рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧ-рдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд┐рдпрд╛ - рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИ рдХрд┐ рджреЛрдиреЛрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╛рдЗрд▓реЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИ рдЬреЛ рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рддрд╣рдд рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИред
рдореЗрд░реЗ рд▓рд┐рдП рдЬреЛ рдХреБрдЫ рднреА рдЖрд╡рд╢реНрдпрдХ рдерд╛, рд╡рд╣ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдирд╛ рдерд╛ рдХрд┐ рд╕рддреНрдпрд╛рдкрди рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рдм рдХреБрдЫ рдерд╛ред рдЕрдЧрд▓рд╛, рдореИрдВрдиреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдФрд░ рд╡реЙрдЗрд▓рд╛ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛! - рдореЗрд░реЗ рд╕рд╛рдордиреЗ рдПрдХ рд░реЗрдбреАрдореЗрдб рдПрдирд╛рд▓рд╛рдЗрдЬрд░ рд░рд┐рдкреЛрд░реНрдЯ рд╣реИред
рдЗрди рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рддреГрддреАрдп-рдкрдХреНрд╖ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рднреА рд╣реЛ рд╕рдХрддреА рд╣реИрдВ, рдФрд░ рд╡реЗ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рднреА рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВрдиреЗ рдЙрдиреНрд╣реЗрдВ рдХрдерди рдХреА рд╢реБрджреНрдзрддрд╛ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╕реЗ рдмрд╛рд╣рд░ рд░рдЦрд╛ред
рдЗрд╕рд▓рд┐рдП, рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд░рд┐рдкреЛрд░реНрдЯ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛рддреА рд╣реИрдВ, рджрд┐рд▓рдЪрд╕реНрдк рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд▓рд┐рдЦреА рдЬрд╛рддреА рд╣реИрдВред рдпрд╣ рдЙрдирдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдкрд░ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ!
FreeRTOS рдХреЛ рдХреНрдпрд╛ рдЫреБрдкрд╛рддрд╛ рд╣реИ
рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдореБрдЭреЗ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд▓реЗрдЦ рд▓рд┐рдЦрдиреЗ рдХреА рдЙрдореНрдореАрдж рдереА: рдкреНрд░рддреНрдпреЗрдХ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдПред рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рдХреЛ рд░рдЧрдбрд╝ рджрд┐рдпрд╛, рдлреНрд░реАрдЖрд░рдЯреАрдУрдПрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдЕрдЪреНрдЫрд╛ рд▓реЗрдЦ рд▓рд┐рдЦрдиреЗ рдХреА рддреИрдпрд╛рд░реА рдХреАред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд░рд╕рджрд╛рд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ (рдЬреИрд╕реЗ
рд╕реАрдбрдмреНрд▓реНрдпреВрдИ -457 ) рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЙрддреНрд╕реБрдХрддрд╛ рд╕реЗ рдХреБрдЫ рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЛ рджреЗрдЦрд╛, рдФрд░ ... рдФрд░ рдХреБрдЫ рднреА рдирд╣реАрдВред рдореБрдЭреЗ рдХреЛрдИ рджрд┐рд▓рдЪрд╕реНрдк рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рдорд┐рд▓реАред
рдХрдИ рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдБ рдЬреЛ рдХрд┐ рдЬрд╛рд░реА рдХрд┐рдП рдЧрдП рд╡рд┐рд╢реНрд▓реЗрд╖рдХ FreeRTOS рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдирд╣реАрдВ рдереАрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣ рдХреА рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдореЗрдВ 64-рдмрд┐рдЯ рдХрдорд┐рдпрд╛рдВ рдереАрдВ рдЬреИрд╕реЗ рдХрд┐
size_t рдХреЛ
uint32_t рдореЗрдВ рдбрд╛рд▓рдирд╛ ред рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдлреНрд░реАрдЖрд░рдЯреАрдУрдПрд╕ рдХреЛ 32 рдмрд┐рдЯреНрд╕ рд╕реЗ рдЕрдзрд┐рдХ рдХреЗ рдкреЙрдЗрдВрдЯрд░ рдЖрдХрд╛рд░ рд╡рд╛рд▓реЗ рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдореИрдВрдиреЗ рд╕рднреА
рд╡реА 1027 рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЛ рдЕрд╕рдВрдмрдВрдзрд┐рдд рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ
рд╕рдВрдХреЗрддрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдмреАрдЪ
рдЬрд╛рддрд┐рдпреЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд
рдЪреЗрдХреЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХреАред рдпрджрд┐ Reducible рд╕рдВрд░рдЪрдирд╛рдУрдВ рдореЗрдВ рдПрдХ рд╣реА рд╕рдВрд░реЗрдЦрдг рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдРрд╕реА рдХрд╛рд╕реНрдЯ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реИред рдФрд░ рдореБрдЭреЗ рдПрдХ рднреА рдЦрддрд░рдирд╛рдХ рдХрд▓рд╛рдХрд╛рд░ рдирд╣реАрдВ рдорд┐рд▓рд╛!
рдЕрдиреНрдп рд╕рднреА рд╕рдВрджрд┐рдЧреНрдз рд╕реНрдерд╛рди рдпрд╛ рддреЛ рдХреЛрдбрд┐рдВрдЧ рд╢реИрд▓реА рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдереЗ, рдпрд╛ рдпрд╣ рдмрддрд╛рддреЗ рд╣реБрдП рдПрдХ рдЯрд┐рдкреНрдкрдгреА рд╕реЗ рд▓реИрд╕ рдереЗ рдХрд┐ рдпрд╣ рдпрд╣рд╛рдБ рдХреНрдпреЛрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдпрд╣ рдПрдХ рдЧрд▓рддреА рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реИред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореИрдВ FreeRTOS рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рддреБрдо рд▓реЛрдЧ рд╕рдЪрдореБрдЪ рдорд╣рд╛рди рд╣реЛ! рд╣рдо рд▓рдЧрднрдЧ рд╕реНрд╡рдЪреНрдЫ рдФрд░ рдЙрдЪреНрдЪ рдЧреБрдгрд╡рддреНрддрд╛ рд╡рд╛рд▓реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдХрднреА рдирд╣реАрдВ рдорд┐рд▓реЗред рдФрд░ рдореИрдВ рд╕рд╛рдл, рд╕реБрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдФрд░ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкреНрд░рд▓реЗрдЦрд┐рдд рдХреЛрдб рдкрдврд╝рдХрд░ рдмрд╣реБрдд рдЦреБрд╢ рд╣реБрдЖред рдЖрдкрдХреЛ рд╕рд▓рд╛рдоред
рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдЙрд╕ рджрд┐рди рдХреЛрдИ рджрд┐рд▓рдЪрд╕реНрдк рдЧрд▓рддреА рдирд╣реАрдВ рдорд┐рд▓реА, рдореИрдВ рд╕рдордЭ рдЧрдпрд╛ рдХрд┐ рдореИрдВ рд╡рд╣рд╛рдВ рдирд╣реАрдВ рд░реБрдХреВрдВрдЧрд╛ред рдореИрдВ рджреГрдврд╝ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХреЗ рд╕рд╛рде рдШрд░ рдЬрд╛ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдЕрдореЗрдЬрд╝реЕрди рд╕реЗ 100% рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рдорд┐рд▓реЗрдЧрд╛, рдФрд░ рдХрд▓ рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдПрдХрддреНрд░ рдХрд░реВрдВрдЧрд╛ред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рд╢рд╛рдпрдж рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛ рдерд╛, рдореИрдВ рд╕рд╣реА рдерд╛ред
Amazon FreeRTOS рдХреЛ рдХреНрдпрд╛ рдЫреБрдкрд╛рддрд╛ рд╣реИ
рдЕрдореЗрдЬрд╝реЕрди рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдХрд▓рд╛ ... рдЗрд╕реЗ рд╣рд▓реНрдХреЗ рдврдВрдЧ рд╕реЗ, рдереЛрдбрд╝рд╛ рдЦрд░рд╛рдм рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред FreeRTOS рдХреА рд╡рд┐рд░рд╛рд╕рдд рд╕рд┐рд░реНрдл рд╕рд╛рдл рдмрдиреА рд╣реБрдИ рд╣реИ, рд▓реЗрдХрд┐рди рдирдП рд╕рдВрд╢реЛрдзрди рдХрд╛рдлреА рджрд┐рд▓рдЪрд╕реНрдк рдирд┐рдХрд▓реЗред
рдХреБрдЫ рдЬрдЧрд╣реЛрдВ рдкрд░, рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рддрд░реНрдХ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд┐рдпрд╛ рдЧрдпрд╛, рдХрд╣реАрдВ рди рдХрд╣реАрдВ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдХреБрдЫ рд╕реНрдерд╛рдиреЛрдВ рдкрд░, рдХреЛрдб рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдХрд╛рд░рдг рдмрди рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд╣реАрдВ рди рдХрд╣реАрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдмрд╕ рдЙрд╕ рддреНрд░реБрдЯрд┐ рдкреИрдЯрд░реНрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рдирд╣реАрдВ рдерд╛ рдЬреЛ рдЙрд╕рдиреЗ рдмрдирд╛рдпрд╛ рдерд╛ред рдореБрдЭреЗ рдХреБрдЫ рдЧрдВрднреАрд░ рд╕рдВрднрд╛рд╡рд┐рдд рдХрдордЬреЛрд░рд┐рдпрд╛рдВ рднреА рдорд┐рд▓реАрдВред
рдХреБрдЫ рдореИрдВрдиреЗ рдкрд░рд┐рдЪрдп рдХреЗ рд╕рд╛рде рджреЗрд░ рдХрд░ рджреАред рдЪрд▓реЛ рдХреАрдбрд╝реЗ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ!
рдХрд╛рд░реНрдпрдХреНрд░рдо рддрд░реНрдХ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди
рдЖрдЗрдП рд╕рдорд╕реНрдпрд╛ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░реЗрдВ, рдЬреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдареАрдХ рд╕реЗ рдирд╣реАрдВ рдЪрд▓рддрд╛ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдЙрдореНрдореАрдж рд╣реИред рдкрд╣рд▓реА рдРрд╕реА рдЬрдЧрд╣ рдПрдХ рд╕рд░рдгреА рдХреЗ рд╕рд╛рде рд╕рдВрджрд┐рдЧреНрдз рдХрд╛рдо рд╣реЛрдЧреА:
static _requestPool_t _requestPool = { 0 }; .... static int _scheduleAsyncRequest(int reqIndex, uint32_t currentRange) { .... _requestPool.pRequestDatas[reqIndex].pConnHandle = &_connHandle; _requestPool.pRequestDatas[reqIndex].pConnConfig = &_connConfig; _requestPool.pRequestDatas[reqIndex].reqNum = reqIndex; _requestPool.pRequestDatas[reqIndex].currRange = currentRange; _requestPool.pRequestDatas[reqIndex].currDownloaded = 0; _requestPool.pRequestDatas[reqIndex].numReqBytes = numReqBytes; .... _requestPool.pRequestDatas->scheduled = true; .... }
PVS-Studio рдиреЗ рдЗрд╕ рдХреЛрдб рдХреЗ рд▓рд┐рдП рджреЛ рдЪреЗрддрд╛рд╡рдиреА рдЬрд╛рд░реА рдХреА:
- V619 рд╕рд░рдгреА '_requestPool.pRequestDatas' рдХреЛ рдПрдХрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рд╕реВрдЪрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред iot_demo_https_s3_download_async.c 973
- V574 '_requestPool.pRequestDatas' рдкреЙрдЗрдВрдЯрд░ рдПрдХ рд╕рд░рдгреА рдХреЗ рд░реВрдк рдореЗрдВ рдФрд░ рдПрдХрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдкреЙрдЗрдВрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 931, 973ред iot_demo_https_s3_download_async.c 973
рдмрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореБрдЭреЗ рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рдирд╛ рд╣реИ: рд╕рд░рдгреА рдХрд╛ рдирд╛рдо рдЗрд╕рдХреЗ рдкрд╣рд▓реЗ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдХреЗрддрдХ рд╣реИред рдпрд╣реА рд╣реИ, рдЕрдЧрд░
_requestPool.pRequestDatas рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреА рдПрдХ рд╕рд░рдгреА рд╣реИ, рддреЛ
_requestPool.pRequestDatas [i] .scheduled рд╕рд░рдгреА рдХреЗ
i- th рд╕рдВрд░рдЪрдирд╛ рдХреЗ
рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕рджрд╕реНрдп рддрдХ рдкрд╣реБрдВрдЪ рд╣реИред рдФрд░ рдпрджрд┐ рдЖрдк
_requestPool.pRequestDatas-> рд╢реЗрдбреНрдпреВрд▓ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдХрд╛ рдЕрд░реНрде рд╣реЛрдЧрд╛, рд╕рд░рдгреА рдХреА рдкрд╣рд▓реА рд╕рдВрд░рдЪрдирд╛ рдХреЗ
рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕рджрд╕реНрдп рддрдХ рдкрд╣реБрдВрдЪред
рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рдореЗрдВ рдРрд╕рд╛ рд╣реА рд╣реЛрддрд╛ рд╣реИред рдЕрдВрддрд┐рдо рдкрдВрдХреНрддрд┐ рд╣рдореЗрд╢рд╛ рд╕рд░рдгреА рдХреА рдкрд╣рд▓реА рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рджрд╕реНрдп рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдорд╛рди рдХреЛ рдмрджрд▓рддреА рд╣реИред рдЕрдкрдиреЗ рдЖрдк рд╕реЗ, рдпрд╣ рдХреЙрд▓ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдВрджрд┐рдЧреНрдз рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рд╕реНрдерд┐рддрд┐ рдФрд░ рднреА рд╕реНрдкрд╖реНрдЯ рд╣реИ: рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкреВрд░реЗ рд╢рд░реАрд░ рдореЗрдВ,
_requestPool.pRequestDatas рд╕рд░рдгреА
рдХреЛ рдЗрдВрдбреЗрдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛
рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдХреЗрд╡рд▓ рдЕрдВрдд рдореЗрдВ рдЗрдВрдбреЗрдХреНрд╕рд┐рдВрдЧ рдСрдкрд░реЗрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рднреВрд▓ рдЧрдпрд╛ рдерд╛ред
рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕рдордЭрд╛, рдЕрдВрддрд┐рдо рдкрдВрдХреНрддрд┐ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдиреА рдЪрд╛рд╣рд┐рдП:
_requestPool.pRequestDatas[reqIndex].scheduled = true;
рдирд┐рдореНрди рддреНрд░реБрдЯрд┐ рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рдЗрд╕рдХреА рд╕рдВрдкреВрд░реНрдгрддрд╛ рдореЗрдВ рджреВрдВрдЧрд╛:
static BaseType_t prvGGDJsoneq( const char * pcJson, const jsmntok_t * const pxTok, const char * pcString ) { uint32_t ulStringSize = ( uint32_t ) pxTok->end - ( uint32_t ) pxTok->start; BaseType_t xStatus = pdFALSE; if( pxTok->type == JSMN_STRING ) { if( ( uint32_t ) strlen( pcString ) == ulStringSize ) { if( ( int16_t ) strncmp( &pcJson[ pxTok->start ],
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V642 [CWE-197] 'strncmp' рдлрдВрдХреНрд╢рди рд░рд┐рдЬрд▓реНрдЯ рдХреЛ 'рд╢реЙрд░реНрдЯ' рдЯрд╛рдЗрдк рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЗ рдЕрдВрджрд░ рд╕реЗрд╡ рдХрд░рдирд╛ рдЕрдиреБрдЪрд┐рдд рд╣реИред рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдЯреНрд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рддрд░реНрдХ рдХреЛ рддреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред aws_greengrass_discovery.c 637
рдЖрдЗрдП strncmp рдлрд╝рдВрдХреНрд╢рди рдкрд░рд┐рднрд╛рд╖рд╛ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ:
int strncmp( const char *lhs, const char *rhs, size_t count );
рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдкреНрд░рдХрд╛рд░
int рдХрд╛ рдкрд░рд┐рдгрд╛рдо, рдЬрд┐рд╕рдХрд╛ рдЖрдХрд╛рд░ 32 рдмрд┐рдЯ рд╣реИ, рдХреЛ
int16_t рдкреНрд░рдХрд╛рд░ рдХреЗ рдПрдХ рдЪрд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ "рд╕рдВрдХреАрд░реНрдг" рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рд╕рд╛рде, рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп рдХреЗ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдЯ рдЦреЛ рдЬрд╛рдПрдВрдЧреЗред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐
strncmp рдлрд╝рдВрдХреНрд╢рди
0x00010000 рджреЗрддрд╛ рд╣реИ, рддреЛ рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рджреМрд░рд╛рди рдПрдХ
рдЦреЛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рд╕реНрдерд┐рддрд┐ рд╕рдВрддреБрд╖реНрдЯ рд╣реЛ рдЬрд╛рдПрдЧреАред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрд▓рд╛рдХрд╛рд░реЛрдВ рдХреЛ рдПрдХ рд╣рд╛рд▓рдд рдореЗрдВ рджреЗрдЦрдирд╛ рдЕрдЬреАрдм рд╣реИред рдЕрдЧрд░ рдЖрдк рд╢реВрдиреНрдп рдХреЗ рд╕рд╛рде рд╕рд╛рдорд╛рдиреНрдп
int рдХреА рддреБрд▓рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддреЛ рднреА рдРрд╕рд╛ рдХреНрдпреЛрдВ рдХрд░реЗрдВ? рджреВрд╕рд░реА рдУрд░, рдпрджрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╕рдЪреЗрдд рд░реВрдк рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрднреА-рдХрднреА
рд╕рдЪ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛
рд╣реИ , рднрд▓реЗ рд╣реА рдпрд╣ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рддреЛ рдЗрд╕ рдЯреНрд░рд┐рдХреА рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдЯрд┐рдкреНрдкрдгреА рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ? рд▓реЗрдХрд┐рди рдлрд┐рд░ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдмреБрдХрдорд╛рд░реНрдХ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЧрд▓рддреА рд╣реИред рдЖрдкрдХреЛ рдХреНрдпрд╛ рд▓рдЧрддрд╛ рд╣реИ?
рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдФрд░ рд╕рдВрдХреЗрдд
рдЕрдм рдПрдХ рдмрдбрд╝рд╛ рдЙрджрд╛рд╣рд░рдг рд╣реЛрдЧрд╛ред рдпрд╣ рдПрдХ рдЕрд╢рдХреНрдд рдкреЙрдЗрдВрдЯрд░ рдХреА рд╕рдВрднрд╛рд╡рд┐рдд рдбреЗрд░реЗрдлреЗрд░рд┐рдВрдЧ рдХреЛ рдЫреБрдкрд╛рддрд╛ рд╣реИ:
static void _networkReceiveCallback(....) { IotHttpsReturnCode_t status = IOT_HTTPS_OK; _httpsResponse_t* pCurrentHttpsResponse = NULL; IotLink_t* pQItem = NULL; .... IotMutex_Lock(&(pHttpsConnection->connectionMutex)); pQItem = IotDeQueue_PeekHead(&(pHttpsConnection->respQ)); IotMutex_Unlock(&(pHttpsConnection->connectionMutex)); if (pQItem == NULL) { IotLogError(....); fatalDisconnect = true; status = IOT_HTTPS_NETWORK_ERROR; goto iotCleanup; } .... iotCleanup : if (status != IOT_HTTPS_OK) { if ( pCurrentHttpsResponse->isAsync && pCurrentHttpsResponse->pCallbacks->errorCallback) { pCurrentHttpsResponse->pCallbacks->errorCallback(....); } pCurrentHttpsResponse->syncStatus = status; } .... }
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V522 [CWE-690] рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рдирд▓ рдкреЙрдЗрдВрдЯрд░ 'pCurrentHttpsResponse' рдХреА рдбреАрдлреНрд░реЗрдВрд╕рд┐рдВрдЧ рд╣реЛ рд╕рдХрддреА рд╣реИред iot_https_client.c 1184
рд╕рдорд╕реНрдпрд╛ dereferences рдмрд╣реБрдд рдиреАрдЪреЗ рд╣реИрдВ
рдЕрдЧрд░ ред рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣рд╛рдВ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИред
рдлрд╝рдВрдХреНрд╢рди рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ,
pCurrentHttpsResponse рдФрд░
pQItem рд╡реИрд░рд┐рдПрдмрд▓ NULL рдХреЗ рд▓рд┐рдП рдЖрд░рдВрднреАрдХреГрдд
рд╣реЛрддреЗ рд╣реИрдВ , рдФрд░
рд╕реНрдЯреЗрдЯрд╕ рд╡реИрд░рд┐рдПрдмрд▓
IOT_HTTPS_OK тАЛтАЛрдХреЗ рд▓рд┐рдП
рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛
рдЬрд╛рддрд╛ рд╣реИ , рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рдЖрд╕рд╛рдиреА рд╕реЗ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рдЗрд╕рдХреЗ рдмрд╛рдж,
pQItem рдХреЛ IotDeQueue_PeekHead рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рд▓реМрдЯрд╛рдпрд╛ рдЧрдпрд╛ рдорд╛рди рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рджреЛрдЧреБрдиреА рдХрдиреЗрдХреНрдЯреЗрдб рдХрддрд╛рд░ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рд▓реМрдЯрд╛рддрд╛ рд╣реИред
рдпрджрд┐ рдХрддрд╛рд░ рдЦрд╛рд▓реА рд╣реИ рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛? рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ,
IotDeQueue_PeekHead рдлрд╝рдВрдХреНрд╢рди
NULL рд▓реМрдЯреЗрдЧрд╛:
static inline IotLink_t* IotDeQueue_PeekHead (const IotDeQueue_t* const pQueue) { return IotListDouble_PeekHead(pQueue); } .... static inline IotLink_t* IotListDouble_PeekHead (const IotListDouble_t* const pList) { IotLink_t* pHead = NULL; if (pList != NULL) { if (IotListDouble_IsEmpty(pList) == false) { pHead = pList->pNext; } } return pHead; }
рдЗрд╕рдХреЗ рдмрд╛рдж, рд╕реНрдерд┐рддрд┐
pQItem == NULL рд╕рдВрддреБрд╖реНрдЯ рд╣реИ, рдФрд░ рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╡рд╛рд╣
рдЧреЛрдЯреЛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдмреЙрдбреА рдХреЗ рдирд┐рдЪрд▓реЗ рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ
рдкрд╣реБрдВрдЪрддрд╛ рд╣реИред рдЗрд╕ рд╕рдордп рддрдХ,
pCurrentHttpsResponse рд╕реВрдЪрдХ рд╢реВрдиреНрдп рд░рд╣реЗрдЧрд╛, рдФрд░
рд╕реНрдерд┐рддрд┐ IOT_HTTPS_OK тАЛтАЛрдХреЗ рдмрд░рд╛рдмрд░ рдирд╣реАрдВ
рд╣реЛрдЧреА ред рдирддреАрдЬрддрди, рд╣рдо рдЙрд╕ рдмрд╣реБрдд рд╣реА рд╢рд╛рдЦрд╛ рдореЗрдВ рдЧрд┐рд░ рдЬрд╛рдПрдВрдЧреЗ
рдЕрдЧрд░ , рдФрд░ ... рд╡реНрдпрд╛рдкрдХ! рдЗрд╕ рдбреЗрд░реЗрдлреНрд░реЗрдВрд╕рд┐рдВрдЧ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдЖрдк рд╕реНрд╡рдпрдВ рдЬрд╛рдирддреЗ рд╣реИрдВред
рдареАрдХ рд╣реИред рдпрд╣ рдереЛрдбрд╝рд╛ рдЕрд▓рдВрдХреГрдд рдЙрджрд╛рд╣рд░рдг рдерд╛ред рдЕрдм рдореИрдВ рдЖрдкрдХреЗ рдзреНрдпрд╛рди рдореЗрдВ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдФрд░ рд╕рдордЭ рдореЗрдВ рдЖрдиреЗ рд╡рд╛рд▓реА рдХреНрд╖рдорддрд╛ рдХреЛ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдпрд╛ рд╣реВрдБ:
int PKI_mbedTLSSignatureToPkcs11Signature (uint8_t * pxSignaturePKCS, uint8_t * pxMbedSignature ) { int xReturn = 0; uint8_t * pxNextLength; uint8_t ucSigComponentLength = pxMbedSignature[ 3 ];
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V595 [CWE-476] 'pxMbedSignature' рдкреЙрдЗрдВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕реЗ nullptr рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 52, 54. iot_pki_utils.c 52
рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ
uint8_t рдкрд░ рджреЛ рдкреЙрдЗрдВрдЯрд░реНрд╕ рдорд┐рд▓рддреЗ рд╣реИрдВред рджреЛрдиреЛрдВ рдмрд┐рдВрджреБрдУрдВ рдХреЛ
NULL рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪрд╛ рдЬрд╛рддрд╛
рд╣реИ , рдЬреЛ рдЕрдЪреНрдЫрд╛ рдЕрднреНрдпрд╛рд╕ рд╣реИ - рдРрд╕реА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдкрд░ рддреБрд░рдВрдд рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рд▓реЗрдХрд┐рди рдпрд╣рд╛рдБ рдмреБрд░рд╛ рднрд╛рдЧреНрдп рд╣реИ: рд╕рдордп
pxMbedSignature рджреНрд╡рд╛рд░рд╛ рдЬрд╛рдБрдЪ рдХреА рд╣реИ, рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рд╕реЗ рдКрдкрд░ рдПрдХ рдкрдВрдХреНрддрд┐ dereferenced рдЬрд╛рдПрдЧрд╛ред рдЯрд╛-DAA!
рд╕рдЯреНрдЯрд╛ рдХреЛрдб рдХрд╛ рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг:
CK_RV vAppendSHA256AlgorithmIdentifierSequence ( uint8_t * x32ByteHashedMessage, uint8_t * x51ByteHashOidBuffer ) { CK_RV xResult = CKR_OK; uint8_t xOidSequence[] = pkcs11STUFF_APPENDED_TO_RSA_SIG; if( ( x32ByteHashedMessage == NULL ) || ( x51ByteHashOidBuffer == NULL ) ) { xResult = CKR_ARGUMENTS_BAD; } memcpy( x51ByteHashOidBuffer, xOidSequence, sizeof( xOidSequence ) ); memcpy( &x51ByteHashOidBuffer[ sizeof( xOidSequence ) ], x32ByteHashedMessage, 32 ); return xResult; }
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА:- V1004 [CWE-628] 'x51ByteHashOidBuffer' рдкреЙрдЗрдВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрд╢рдХреНрдд рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ nullptr рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЬрд╛рдБрдЪ рд▓рд╛рдЗрдиреЗрдВ: 275, 280. iot_pkcs11.c 280
- V1004 [CWE-628] nullptr рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж 'x32ByteHashedMessage' рдкреЙрдЗрдВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 275, 281. iot_pkcs11.c 281
рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЪреЗрддрд╛рд╡рдиреА рджреЗрддрд╛ рд╣реИ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛ рдкреЙрдЗрдВрдЯрд░реНрд╕ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ
NULL рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛
рд╣реИ ред рджрд░рдЕрд╕рд▓, рддрд░реНрдХреЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА
NULL рд╣реЛ рдЬрд╛рддрд╛
рд╣реИ , рддреЛ рдХреЛрдИ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИ, рд╕рд┐рд╡рд╛рдп
xResult рдХреЗ рд▓рд┐рдЦрдиреЗ рдХреЗред рдХреЛрдб рдХрд╛ рдпрд╣ рдЯреБрдХрдбрд╝рд╛ рд▓рдЧрддрд╛ рд╣реИ: "рд╣рд╛рдБ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рддрд░реНрдХ рдЦрд░рд╛рдм рд╣реЛ рдЧрдП рд╣реИрдВред рдЬрдм рдЖрдк рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЗрд╕реЗ рд▓рд┐рдЦрддреЗ рд░рд╣реЗрдВрдЧреЗред
рдирд┐рдЪрд▓рд╛ рд░реЗрдЦрд╛:
NULL рдХреЛ
рдореЗрдорд╕реАрдкреА рдореЗрдВ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕рд╕реЗ рдХреНрдпрд╛ рдЖ рд╕рдХрддрд╛ рд╣реИ? рдореВрд▓реНрдпреЛрдВ рдХреА рдирдХрд▓ рдХрд╣рд╛рдВ рдХреА рдЬрд╛рдПрдЧреА рдФрд░ рдХреМрди рд╕реА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдирд╛ рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдорд╛рдирдХ
рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреА рдХреЙрд▓ рд╕реЗ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛрддрд╛ рд╣реИ (рдкреИрд░рд╛рдЧреНрд░рд╛рдл 1 рджреЗрдЦреЗрдВ)ред
рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд░рд┐рдкреЛрд░реНрдЯ рдореЗрдВ рдЕрднреА рднреА рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХреЗ рд╕рд╛рде рдЧрд▓рдд рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдЙрджрд╛рд╣рд░рдг рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЬреЛ рдореБрдЭреЗ рдЕрдореЗрдЬрд╝реЕрди рдлреНрд░реАрдЖрд░рдЯреАрдУрдПрд╕ рдореЗрдВ рдорд┐рд▓реЗ рдереЗ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрдкрд░реЛрдХреНрдд рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдЖрдкрдХреЛ рдРрд╕реА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИрдВред рдХреБрдЫ рдирдпрд╛ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред
рд╕рддреНрдп! = рез
рдореБрдЭреЗ рдорд┐рд▓реА рдХрдИ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдПрдХ рдкреИрдЯрд░реНрди рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдереАрдВ, рдЬреЛ рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЕрдХреНрд╕рд░ рднреВрд▓ рдЬрд╛рддреА рд╣реИрдВред
рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐
рдмреВрд▓ рдкреНрд░рдХрд╛рд░ (C ++ рд╕реЗ)
BOOL рдкреНрд░рдХрд╛рд░ (рдЖрдорддреМрд░ рдкрд░ C рдореЗрдВ рдкреНрд░рдпреБрдХреНрдд) рд╕реЗ рдЕрд▓рдЧ рд╣реИред рдкрд╣рд▓рд╛ рдХреЗрд╡рд▓
рд╕рд╣реА рдпрд╛
рдЧрд▓рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ ред рджреВрд╕рд░рд╛ рдХреБрдЫ рдкреВрд░реНрдгрд╛рдВрдХ рдкреНрд░рдХрд╛рд░ (
int ,
long , рдЗрддреНрдпрд╛рджрд┐) рдХрд╛ рдПрдХ рдкреНрд░рдХрд╛рд░ рд╣реИред рдЙрд╕рдХреЗ рд▓рд┐рдП, "рдЕрд╕рддреНрдп" рдорд╛рди
0 рд╣реИ , рдФрд░ "рд╕рддреНрдп" рд╢реВрдиреНрдп рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреЛрдИ рднреА рдореВрд▓реНрдп рд╣реИред
рдЪреВрдВрдХрд┐ рд╕реА рдореЗрдВ рдХреЛрдИ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдмреВрд▓рд┐рдпрди рдкреНрд░рдХрд╛рд░ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрди рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЛ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
#define FALSE 0 #define TRUE 1
рдЕрдм рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
int mbedtls_hardware_poll(void* data, unsigned char* output, size_t len, size_t* olen) { int lStatus = MBEDTLS_ERR_ENTROPY_SOURCE_FAILED; HCRYPTPROV hProv = 0; (void)data; if (TRUE == CryptAcquireContextA( &hProv, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT)) { if (TRUE == CryptGenRandom(hProv, len, output)) { lStatus = 0; *olen = len; } CryptReleaseContext(hProv, 0); } return lStatus; }
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА:- V676 [CWE-253] TRUE рдХреЗ рд╕рд╛рде BOOL рдкреНрд░рдХрд╛рд░ рдХреЗ рдЪрд░ рдХреА рддреБрд▓рдирд╛ рдХрд░рдирд╛ рдЧрд▓рдд рд╣реИред aws_entropy_hardware_poll.c 48
- V676 [CWE-253] TRUE рдХреЗ рд╕рд╛рде BOOL рдкреНрд░рдХрд╛рд░ рдХреЗ рдЪрд░ рдХреА рддреБрд▓рдирд╛ рдХрд░рдирд╛ рдЧрд▓рдд рд╣реИред рд╕рд╣реА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реИ: 'FALSE! = CryptGenRandom (hProv, len, output)'ред aws_entropy_hardware_poll.c 51
рдПрдХ рдЧрд▓рддреА рдорд┐рд▓реА? рдФрд░ рдпрд╣ рд╣реИ :) рдХрд╛рд░реНрдп
CryptAcquireContextA рдФрд░
CryptGenRandom wincrypt.h рд╣реИрдбрд░ рд╕реЗ рдорд╛рдирдХ рдХрд╛рд░реНрдп рд╣реИрдВред рдпрджрд┐ рд╕рдлрд▓ рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рд╡реЗ рдПрдХ рдЧреИрд░-рдорд╛рди рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред рдореИрдВ рдЬреЛрд░ рджреЗрддрд╛ рд╣реВрдВ -
рдЧреИрд░ -
рд╢реВрдиреНрдп ред рддреЛ, рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ, рдпрд╣ рд╢реВрдиреНрдп рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреЛрдИ рднреА рдореВрд▓реНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:
1 ,
314 ,
42 ,
420 ред
рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдиреЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪрд╛ рдерд╛, рдФрд░ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдкреНрд░рд╛рдкреНрдд рдореВрд▓реНрдпреЛрдВ рдХреА рдПрдХрддрд╛ рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдХреА рдЬрд╛рддреА рд╣реИред
рдХрд┐рд╕ рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рд╕рд╛рде рд╕реНрдерд┐рддрд┐
TRUE == CryptGenRandom (....) рдкреВрд░реА рдирд╣реАрдВ рд╣реБрдИ рд╣реИ? рдХрд╣рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐
CryptGenRandom рдЕрдиреНрдп рдореВрд▓реНрдпреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдмрд╛рд░ рдПрдХ рдЗрдХрд╛рдИ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдФрд░ рд╢рд╛рдпрдж рдпрд╣ рд╣рдореЗрд╢рд╛ рдХреЗрд╡рд▓ рдПрдХ рд░рд┐рдЯрд░реНрди рджреЗрддрд╛ рд╣реИред рд╣рдо рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдирд╣реАрдВ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВ: рдЗрд╕ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд┐рдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд╢реНрд╡рд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреА рдЖрдВрдЦреЛрдВ рд╕реЗ рдЫрд┐рдкрд╛ рд╣реБрдЖ рд╣реИ :)
рдпрд╣ рдпрд╛рдж рд░рдЦрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдРрд╕реА рддреБрд▓рдирд╛ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдЦрддрд░рдирд╛рдХ рд╣реИред рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп:
if (TRUE == GetBOOL())
рдПрдХ рд╕реБрд░рдХреНрд╖рд┐рдд рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
if (FALSE != GetBOOL())
рдЕрдиреБрдХреВрд▓рди рдХреЗ рдореБрджреНрджреЗ
рдзреАрдореА рдЧрддрд┐ рд╕реЗ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдирд┐рд░реНрдорд╛рдгреЛрдВ рдХреЗ рд╕рд╛рде рдХрдИ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдБ рдЬреБрдбрд╝реА рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
int _IotHttpsDemo_GetS3ObjectFileSize(....) { .... pFileSizeStr = strstr(contentRangeValStr, "/"); .... }
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V817 рдпрд╣ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдмрдЬрд╛рдп '/' рд╡рд░реНрдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рд╣реИред iot_demo_https_common.c 205
рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдФрд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ, рдпрд╣ рдирд╣реАрдВ рд╣реИ? рдпрд╣рд╛рдВ
рд╕реНрдЯреНрд░реИрд╕реНрдЯ рдлрдВрдХреНрд╢рди рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рд╕рд┐рд░реНрдл рдПрдХ рдХреИрд░реЗрдХреНрдЯрд░ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдпрд╣ рджреЛрд╣рд░реЗ рдХреЛрдЯреНрд╕ рдореЗрдВ рд╕рдВрд▓рдЧреНрди рд╣реИ)ред
рдЗрд╕ рдЬрдЧрд╣ рдХреЛ
рд╕реНрдЯреНрд░реИрдЪ рдХреЗ рд╕рд╛рде
рд╕реНрдЯреНрд░реИрд╕ рдХреЛ рдмрджрд▓рдХрд░ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
int _IotHttpsDemo_GetS3ObjectFileSize(....) { .... pFileSizeStr = strchr(contentRangeValStr, '/'); .... }
рдлрд┐рд░ рдЦреЛрдЬ рдереЛрдбрд╝реА рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧреАред рдПрдХ рддрд┐рдкрд╣рд┐рдпрд╛, рд▓реЗрдХрд┐рди рдЕрдЪреНрдЫрд╛ рд╣реИред
рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрдиреБрдХреВрд▓рди, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЕрдЪреНрдЫреЗ рд╣реИрдВ, рдФрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдиреЗ рдПрдХ рдФрд░ рд╕реНрдерд╛рди рдкрд╛рдпрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдзреНрдпрд╛рди рд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
void vRunOTAUpdateDemo(void) { .... for (; ; ) { .... xConnectInfo.cleanSession = true; xConnectInfo.clientIdentifierLength = (uint16_t)strlen(clientcredentialIOT_THING_NAME); xConnectInfo.pClientIdentifier = clientcredentialIOT_THING_NAME; .... } }
рдЪреЗрддрд╛рд╡рдиреА PVS-Studio: V814 рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдХрдореАред рд▓реВрдк рдХреЗ рд╢рд░реАрд░ рдХреЗ рдЕрдВрджрд░ 'рд╕реНрдЯреНрд░реИрд▓реЗрди' рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрдИ рдмрд╛рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рдерд╛ред aws_iot_ota_update_demo.c 235
рд╣рдореНрдордо ... рд▓реВрдк рдХреЗ рдЕрдВрджрд░, рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкрд░,
рд╕реНрдЯреНрд░рд▓реЗрди рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рд░ рдПрдХ рд╣реА рдкрдВрдХреНрддрд┐ рдХреА рд▓рдВрдмрд╛рдИ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдХреБрд╢рд▓ рдСрдкрд░реЗрд╢рди рдирд╣реАрдВ :)
рдЪрд▓рд┐рдП рдПрдХ рдирдЬрд╝рд░
рдбрд╛рд▓рддреЗ рд╣реИрдВ clientcredentialIOT_THING_NAME рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдкрд░:
#define clientcredentialIOT_THING_NAME ""
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдпрд╣рд╛рдВ рдЕрдкрдиреЗ рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╛ рдирд╛рдо рджрд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдпрд╣ рдЦрд╛рд▓реА рд╣реИ, рдФрд░ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд╣рд╛рдВ рдХреБрдЫ рд▓рдВрдмрд╛ рдФрд░ рд╕реБрдВрджрд░ рдирд╛рдо рджрд░реНрдЬ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЕрдкрдиреЗ рджрд┐рдорд╛рдЧ рдХреА рдЙрдкрдЬ "
рдж рдкреИрд╢рдиреЗрдЯ рдФрд░ рдкрд░рд┐рд╖реНрдХреГрдд рдХреЙрдлреА рдорд╢реАрди BarBarista-N061E рдЕрдВрддрд┐рдо рд╕рдВрд╕реНрдХрд░рдг " рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдкрд╕рдВрдж
рдХрд░реВрдВрдЧрд╛ ред рдХреНрдпрд╛ рдЖрдк рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЕрдЧрд░ рдореЗрд░реА рд╕реБрдВрджрд░ рдХреЙрдлреА рдорд╢реАрди рдереЛрдбрд╝рд╛ рдзреАрдорд╛ рдХрд╛рдо рдХрд░рдиреЗ рд▓рдЧреЗ рддреЛ рдореЗрд░рд╛ рдЖрд╢реНрдЪрд░реНрдп рдХреНрдпрд╛ рд╣реЛрдЧрд╛? рд╡рд┐рдХрд╛рд░!
рддреНрд░реБрдЯрд┐ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП,
рд╕реНрдЯреНрд░реЙрдкрд▓ рдХреЛ рд▓реВрдк рдмреЙрдбреА рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЖрдЦрд┐рд░рдХрд╛рд░, рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЪрд▓рдиреЗ рдХреЗ рджреМрд░рд╛рди рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╛ рдирд╛рдо рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИред Ehhh, рдпрд╣рд╛рдБ C ++ рд╕реЗ
constexpr рд╣реЛрдЧрд╛ ...
рдареАрдХ рд╣реИ, рдареАрдХ рд╣реИ, рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ: рдпрд╣рд╛рдВ рдореИрдВ рдереЛрдбрд╝рд╛ рдореЛрдЯрд╛ рд╣реЛ рдЧрдпрд╛ рдерд╛ред рдЬреИрд╕рд╛ рдХрд┐ рдореЗрд░реЗ рд╕рд╣рдпреЛрдЧреА рдЖрдВрджреНрд░реЗрдИ рдХрд╛рд░рдкреЛрд╡ рдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рдЖрдзреБрдирд┐рдХ рд╕рдВрдХрд▓рдХ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐
рд╕реНрдЯреНрд░рд▓реЗрди рдХреНрдпрд╛
рд╣реИ рдФрд░ рдЙрдиреНрд╣реЛрдВрдиреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рджреЗрдЦрд╛ рдХрд┐ рдХреИрд╕реЗ рд╡реЗ рдмрд╛рдЗрдирд░реА рдХреЛрдб рдореЗрдВ рдПрдХ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдпрджрд┐ рд╡реЗ рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рд▓рдВрдмрд╛рдИ рдирд╣реАрдВ рдмрджрд▓ рд╕рдХрддреА рд╣реИред рдЗрд╕рд▓рд┐рдП рдПрдХ рдЙрдЪреНрдЪ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рд░рд┐рд▓реАрдЬрд╝ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдмрд┐рд▓реНрдб рдореЛрдб рдореЗрдВ, рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓рдВрдмрд╛рдИ рдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЧрдгрдирд╛ рдХреЗ рдмрдЬрд╛рдп, рдкрд╣рд▓реЗ рд╕реЗ рдЧрдгрдирд╛ рдХреА рдЧрдИ рдорд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рд╣рдореЗрд╢рд╛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреЛрдб рд▓рд┐рдЦрдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЕрднреНрдпрд╛рд╕ рдирд╣реАрдВ рд╣реИред
MISRA рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╢рдмреНрдж
PVS-Studio рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗ рдкрд╛рд╕ рдирд┐рдпрдореЛрдВ рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рд╕рдореВрд╣ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ MISRA C рдФрд░ MISRA C ++ рдорд╛рдирдХреЛрдВ рдХреЗ рдЕрдиреБрдкрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдХреЛрдб рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпреЗ рдорд╛рдирдХ рдХреНрдпрд╛ рд╣реИрдВ?
MISRA рдЕрддреНрдпрдзрд┐рдХ рдЙрддреНрддрд░рджрд╛рдпреА рдПрдореНрдмреЗрдбреЗрдб рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдХреЛрдбрд┐рдВрдЧ рдорд╛рдирдХ рд╣реИред рдЗрд╕рдореЗрдВ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдФрд░ рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдЦреНрдд рдирд┐рдпрдореЛрдВ рдФрд░ рджрд┐рд╢рд╛рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╢рд╛рдорд┐рд▓ рд╣реИред рдЗрдирдореЗрдВ рд╕реЗ рдХрд╛рдлреА рдХреБрдЫ рдирд┐рдпрдо рд╣реИрдВ, рдФрд░ рдЙрдирдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рди рдХреЗрд╡рд▓ рдЧрдВрднреАрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЦрддреНрдо рдХрд░рдирд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рд╡рд┐рднрд┐рдиреНрди "рдХреЛрдб рдЧрдВрдз" рдХреЗ рд╕рд╛рде-рд╕рд╛рде рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рдФрд░ рдкрдардиреАрдп рдХреЛрдб рд▓рд┐рдЦрдирд╛ рднреА рд╣реИред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, MISRA рдорд╛рдирдХ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рд╕реЗ рди рдХреЗрд╡рд▓ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдФрд░ рдХрдордЬреЛрд░рд┐рдпреЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓рддреА рд╣реИ, рдмрд▓реНрдХрд┐ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░реВрдк рд╕реЗ - рдХрд╛рдлреА! - рдПрдХ рдореМрдЬреВрджрд╛ рдХреЛрдб рдореЗрдВ рдЙрдирдХреА рдШрдЯрдирд╛ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рдХрдоред
MISRA рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдпрд░реЛрд╕реНрдкреЗрд╕, рдЪрд┐рдХрд┐рддреНрд╕рд╛, рдореЛрдЯрд░ рд╡рд╛рд╣рди рдФрд░ рд╕реИрдиреНрдп рдЙрджреНрдпреЛрдЧреЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдЬрд╣рд╛рдВ рдорд╛рдирд╡ рдЬреАрд╡рди рдПрдореНрдмреЗрдбреЗрдб рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред
рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдЕрдореЗрдЬрд╝рди рдлреНрд░реАрдЖрд░рдЯреАрдУрдПрд╕ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЗрд╕ рдорд╛рдирдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ, рдФрд░ рдЕрдзрд┐рдХрд╛рдВрд╢ рднрд╛рдЧ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рд╕рд╣реА рд╣реИ: рдпрджрд┐ рдЖрдк рдПрдореНрдмреЗрдбреЗрдб рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реНрдпрд╛рдкрдХ-рдЖрдзрд╛рд░рд┐рдд рдУрдПрд╕ рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдирд╛ рдЪрд╛рд╣рд┐рдПред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореБрдЭреЗ MISRA рдорд╛рдирдХ рдХреЗ рдХреБрдЫ рдЙрд▓реНрд▓рдВрдШрди рджрд┐рдЦрд╛рдИ рджрд┐рдПред рдореИрдВ рдпрд╣рд╛рдВ рдирд┐рдпрдореЛрдВ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рджреВрдВрдЧрд╛ рдЬреИрд╕реЗ рдХрд┐ "рд╕рдВрдШ рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ" рдпрд╛ "рдПрдХ рд╕рдорд╛рд░реЛрд╣ рдореЗрдВ рд╢рд░реАрд░ рдХреЗ рдЕрдВрдд рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд░рд┐рдЯрд░реНрди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП" - рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╡реЗ рд╢рд╛рдирджрд╛рд░ рдирд╣реАрдВ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рдореАрд╕рд╛ рдирд┐рдпрдоред рдореИрдВ рдЖрдкрдХреЛ рдЙрди рдЙрд▓реНрд▓рдВрдШрдиреЛрдВ рдХрд╛ рдмреЗрд╣рддрд░ рдЙрджрд╛рд╣рд░рдг рджреЗрддрд╛ рд╣реВрдВ рдЬреЛ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдЧрдВрднреАрд░ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХрд╛ рдХрд╛рд░рдг рдмрди рд╕рдХрддреЗ рд╣реИрдВред
рдореИрдХреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ:
#define FreeRTOS_ms_to_tick(ms) ( ( ms * configTICK_RATE_HZ + 500 ) / 1000 )
#define SOCKETS_htonl( ulIn ) ( ( uint32_t ) \ ( ( ( ulIn & 0xFF ) << 24 ) | ( ( ulIn & 0xFF00 ) << 8 ) \ | ( ( ulIn & 0xFF0000 ) >> 8 ) | ( ( ulIn & 0xFF000000 ) >> 24 ) ) )
#define LEFT_ROTATE( x, c ) ( ( x << c ) | ( x >> ( 32 - c ) ) )
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА:- V2546 [MISRA C 20.7] рдореИрдХреНрд░реЛ рдФрд░ рдЙрд╕рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдХреЛрд╖реНрдардХ рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред 'FreeRTOS_ms_to_tick' рдореИрдХреНрд░реЛ рдХреЗ 'ms' рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред FreeRTOS_IP.h 201
- V2546 [MISRA C 20.7] рдореИрдХреНрд░реЛ рдФрд░ рдЙрд╕рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдХреЛрд╖реНрдардХ рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред 'SOCKETS_htonl' рдореИрдХреНрд░реЛ рдХреЗ 'ulIn' рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред iot_secure_sockets.h 512
- V2546 [MISRA C 20.7] рдореИрдХреНрд░реЛ рдФрд░ рдЙрд╕рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдХреЛрд╖реНрдардХ рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред 'LEFT_ROTATE' рдореИрдХреНрд░реЛ рдХреЗ рдирд┐рд░реАрдХреНрд╖рдг рдкреИрд░рд╛рдореАрдЯрд░ 'x', 'c' рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред iot_device_metrics.c 90
рд╣рд╛рдВ, рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рдЖрдкрдиреЗ рд╕реЛрдЪрд╛ рдерд╛ред рдЗрди рдореИрдХреНрд░реЛрдЬрд╝ рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛрд╖реНрдардХ рдореЗрдВ рдирд╣реАрдВ рд▓рд┐рдкрдЯреЗ рд╣реИрдВред рдЕрдЧрд░ рдХреЛрдИ рдЧрд▓рддреА рд╕реЗ рдХреБрдЫ рдРрд╕рд╛ рд▓рд┐рдЦ тАЛтАЛрджреЗрддрд╛ рд╣реИ
val = LEFT_ROTATE(A[i] | 1, B);
рддрдм рдРрд╕рд╛ "рдХреЙрд▓" рдореИрдХреНрд░реЛ рдЦреБрд▓реЗрдЧрд╛:
val = ( ( A[i] | 1 << B ) | ( A[i] | 1 >> ( 32 - B ) ) );
рд╕рдВрдЪрд╛рд▓рди рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдПрдВ рдпрд╛рдж рд░рдЦреЗрдВ? рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рдмрд┐рдЯрд╡рд╛рдЗрдЬрд╝ рд╢рд┐рдлреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рдмрд┐рдЯрд╡рд╛рдЗрдЬрд╝ "рдпрд╛" рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рддрд░реНрдХ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг: рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдЕрдЧрд░ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди "
x + y " рдХреЛ
FreeRTOS_ms_to_tick рдореИрдХреНрд░реЛ рдХреЛ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ? MISRA рдХрд╛ рдПрдХ рдореБрдЦреНрдп рд▓рдХреНрд╖реНрдп рдРрд╕реА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреА рдШрдЯрдирд╛ рдХреЛ рд░реЛрдХрдирд╛ рд╣реИред
рдХрд┐рд╕реА рдХреЛ рдЖрдкрддреНрддрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИ: "рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдРрд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╣реИрдВ рдЬреЛ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ, рддреЛ рдХреЛрдИ рднреА рдорд╛рдирдХ рдЖрдкрдХреЛ рдирд╣реАрдВ рдмрдЪрд╛рдПрдЧрд╛!" рдФрд░ рдореИрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рд╣рдордд рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рднреА рд▓реЛрдЧ рд╣реИрдВ, рдФрд░ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдХрд┐рддрдирд╛ рдЕрдиреБрднрд╡реА рд╣реИ, рд╡рд╣ рднреА рдердХ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдХрд╛рд░реНрдп рджрд┐рд╡рд╕ рдХреЗ рдЕрдВрдд рдореЗрдВ рдЧрд▓рддреА рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдХрд╛рд░рдг рд╣реИ рдХрд┐ MISRA рджреГрдврд╝рддрд╛ рд╕реЗ рдорд╛рдирдХ рдХреЗ рдЕрдиреБрдкрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдорд╛рдиреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░рддрд╛ рд╣реИред
рдореИрдВ Amazon FreeRTOS рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреА рдУрд░ рдореБрдбрд╝рддрд╛ рд╣реВрдВ: рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдиреЗ 12 рдФрд░ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдореИрдХреНрд░реЛрдЬрд╝ рдкрд╛рдП, рдЗрд╕рд▓рд┐рдП рдЖрдк рдЗрд╕рдХреЗ рд╕рд╛рде рдЕрдзрд┐рдХ рд╕рд╛рд╡рдзрд╛рди рд░рд╣рддреЗ рд╣реИрдВ :)
рдПрдХ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк MISRA рдЙрд▓реНрд▓рдВрдШрди:
static void _responseCompleteCallback(void* pPrivData, IotHttpsResponseHandle_t respHandle, IotHttpsReturnCode_t rc, uint16_t status) { bool* pUploadSuccess = (bool*)pPrivData; if (status == IOT_HTTPS_STATUS_OK) { *pUploadSuccess = true; } else { *pUploadSuccess = false; } IotSemaphore_Post(&(_uploadFinishedSem)); }
рдХреНрдпрд╛ рдЖрдк рд╕реНрд╡рдпрдВ рддреНрд░реБрдЯрд┐ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ?
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V2537 [MISRA C 2.7] рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЕрдкреНрд░рдпреБрдХреНрдд рдкреИрд░рд╛рдореАрдЯрд░ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ: 'рдЖрд░рд╕реА'ред iot_demo_https_s3_upload_async.c 234
рдПрдХ рдХрд░реАрдм рджреЗрдЦреЛ: рдлрд╝рдВрдХреНрд╢рди рдмреЙрдбреА рдореЗрдВ рдХрд╣реАрдВ рднреА
рдЖрд░рд╕реА рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдлрд╝рдВрдХреНрд╢рди рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд┐рд╕реА рдЕрдиреНрдп рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд░рд┐рдЯрд░реНрди рдХреЛрдб рд╣реИ, рдФрд░ рдпрд╣ рдПрдХ рддреНрд░реБрдЯрд┐ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗ рд╕рдХрддрд╛ рд╣реИред рдлрд┐рд░ рдЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ? рдпрд╣рд╛рдБ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХреБрдЫ рдЧрдбрд╝рдмрдбрд╝ рд╣реИред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдРрд╕реА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рдмрд┐рдирд╛ рднреА, рдЕрдкреНрд░рдпреБрдХреНрдд рдкреИрд░рд╛рдореАрдЯрд░ рдЕрдХреНрд╕рд░ рдЯреВрдЯреЗ рд╣реБрдП рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓реЙрдЬрд┐рдХ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддреЗ рд╣реИрдВред рдЕрдиреНрдпрдерд╛, рдлрд╝рдВрдХреНрд╢рди рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдореЗрдВ рдЙрдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ?
рдпрд╣рд╛рдВ рдореИрдВрдиреЗ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдлрд╝рдВрдХреНрд╢рди рджрд┐рдпрд╛ рд╣реИ рдЬреЛ рд▓реЗрдЦ рдореЗрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЕрдиреБрдХреВрд▓ рд╣реИред рдЙрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореБрдЭреЗ 10 рдФрд░ рдЕрдкреНрд░рдпреБрдХреНрдд рдкреИрд░рд╛рдореАрдЯрд░ рдорд┐рд▓реЗред рдЙрдирдореЗрдВ рд╕реЗ рдХрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрдбрд╝реЗ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдвреВрдВрдврдирд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рдХрд╛рдо рдирд╣реАрдВ рд╣реИред
рдпрд╣ рд╕рдВрджрд┐рдЧреНрдз рд╣реИ рдХрд┐ рд╡реЗ рдкрд╣рд▓реЗ рдирд╣реАрдВ рдкрд╛рдП рдЧрдП рдереЗред рджрд░рдЕрд╕рд▓, рдХрдВрдкрд╛рдЗрд▓рд░ рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдХрд╛ рдЖрд╕рд╛рдиреА рд╕реЗ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдирд┐рд╖реНрдХрд░реНрд╖
рдпреЗ рд╕рднреА рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рджреНрд╡рд╛рд░рд╛ рдкрд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рдорд╕реНрдпрд╛ рдХреНрд╖реЗрддреНрд░ рдирд╣реАрдВ рдереЗ, рд▓реЗрдХрд┐рди рд▓реЗрдЦ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд╛рдлреА рдмрдбрд╝рд╛ рдерд╛ред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдЕрдореЗрдЬрд╝рди рдлреНрд░реАрдЖрд░рдЯреАрдУрдПрд╕ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреБрдЫ рдХрдорд┐рдпреЛрдВ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗ, рдФрд░ рд╢рд╛рдпрдж
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЛ рднреА рдЕрдкрдиреЗ рджрдо
рдкрд░ рдЖрдЬрд╝рдорд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЗрд╕ рддрд░рд╣, рдЪреЗрддрд╛рд╡рдиреА рдХреЛ рдЕрдзрд┐рдХ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЕрдзреНрдпрдпрди рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛, рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЯреЗрдХреНрд╕реНрдЯ рд░рд┐рдкреЛрд░реНрдЯ рдХреЛ рджреЗрдЦрдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред
рд╣рдорд╛рд░реЗ рд▓реЗрдЦ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдЕрдЧрд▓реЗ рдЕрдВрдХ рдореЗрдВ рдорд┐рд▓рддреЗ рд╣реИрдВ: D
PS рдпрд╣ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рд╣реБрдЖ рдХрд┐ рдпрд╣ рд▓реЗрдЦ 31 рдЕрдХреНрдЯреВрдмрд░ рдХреЛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕рд▓рд┐рдП, рдореИрдВ рд╣рд░ рдХрд┐рд╕реА рдХреЛ рдПрдХ рдЦреБрд╢ рд╣реЗрд▓реЛрд╡реАрди рдЪрд╛рд╣рддрд╛ рд╣реВрдВ!

рдпрджрд┐ рдЖрдк рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдЕрдВрдЧреНрд░реЗрдЬреА рдмреЛрд▓рдиреЗ рд╡рд╛рд▓реЗ рджрд░реНрд╢рдХреЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдЕрдиреБрд╡рд╛рдж рдХреЗ рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ: рдЬреЙрд░реНрдЬ рдЧреНрд░рд┐рдмрдХреЛрд╡ред
рдПрдВрдмреЗрдбреЗрдб рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рдЕрдиреБрд░реЛрдз рдкрд░: рдЕрдореЗрдЬрд╝реЕрди рдлреНрд░реАрдЖрд░рдЯреАрдУрдПрд╕ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ ред