рдПрдВрдмреЗрдбреЗрдб рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рдЖрджреЗрд╢ рд╕реЗ: рдЕрдореЗрдЬрд╝реЕрди рдлреНрд░реАрдЖрд░рдЯреАрдУрдПрд╕ рдореЗрдВ рдмрдЧ рдХреА рддрд▓рд╛рд╢ рд╣реИ

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

рдЪрд┐рддреНрд░ 3

рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рд╛


рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЖрдкрдХреЛ рдЬрд╛рдБрдЪ рдХреА рдЧрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ "рдбреИрдб" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рдмрддрд╛рдКрдВрдЧрд╛ - рдлреНрд░реАрдЖрд░рдЯреАрдУрдПрд╕ (рдЖрдк рдпрд╣рд╛рдБ рд╕реНрд░реЛрдд рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ)ред рдЬреИрд╕рд╛ рдХрд┐ рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рдХрд╣рддрд╛ рд╣реИ, 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 рдХреА рд╡рд┐рд░рд╛рд╕рдд рд╕рд┐рд░реНрдл рд╕рд╛рдл рдмрдиреА рд╣реБрдИ рд╣реИ, рд▓реЗрдХрд┐рди рдирдП рд╕рдВрд╢реЛрдзрди рдХрд╛рдлреА рджрд┐рд▓рдЪрд╕реНрдк рдирд┐рдХрд▓реЗред

рдХреБрдЫ рдЬрдЧрд╣реЛрдВ рдкрд░, рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рддрд░реНрдХ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд┐рдпрд╛ рдЧрдпрд╛, рдХрд╣реАрдВ рди рдХрд╣реАрдВ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдХреБрдЫ рд╕реНрдерд╛рдиреЛрдВ рдкрд░, рдХреЛрдб рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдХрд╛рд░рдг рдмрди рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд╣реАрдВ рди рдХрд╣реАрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдмрд╕ рдЙрд╕ рддреНрд░реБрдЯрд┐ рдкреИрдЯрд░реНрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рдирд╣реАрдВ рдерд╛ рдЬреЛ рдЙрд╕рдиреЗ рдмрдирд╛рдпрд╛ рдерд╛ред рдореБрдЭреЗ рдХреБрдЫ рдЧрдВрднреАрд░ рд╕рдВрднрд╛рд╡рд┐рдд рдХрдордЬреЛрд░рд┐рдпрд╛рдВ рднреА рдорд┐рд▓реАрдВред

рдХреБрдЫ рдореИрдВрдиреЗ рдкрд░рд┐рдЪрдп рдХреЗ рд╕рд╛рде рджреЗрд░ рдХрд░ рджреАред рдЪрд▓реЛ рдХреАрдбрд╝реЗ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ!

рдХрд╛рд░реНрдпрдХреНрд░рдо рддрд░реНрдХ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди


рдЖрдЗрдП рд╕рдорд╕реНрдпрд╛ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░реЗрдВ, рдЬреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдареАрдХ рд╕реЗ рдирд╣реАрдВ рдЪрд▓рддрд╛ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдЙрдореНрдореАрдж рд╣реИред рдкрд╣рд▓реА рдРрд╕реА рдЬрдЧрд╣ рдПрдХ рд╕рд░рдгреА рдХреЗ рд╕рд╛рде рд╕рдВрджрд┐рдЧреНрдз рдХрд╛рдо рд╣реЛрдЧреА:

/** * @brief Pool of request and associated response buffers, * handles, and configurations. */ static _requestPool_t _requestPool = { 0 }; .... static int _scheduleAsyncRequest(int reqIndex, uint32_t currentRange) { .... /* Set the user private data to use in the asynchronous callback context. */ _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; 

рдирд┐рдореНрди рддреНрд░реБрдЯрд┐ рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рдЗрд╕рдХреА рд╕рдВрдкреВрд░реНрдгрддрд╛ рдореЗрдВ рджреВрдВрдЧрд╛:

 /* Return true if the string " pcString" is found * inside the token pxTok in JSON file pcJson. */ 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 ], // <= pcString, ulStringSize ) == 0 ) { xStatus = pdTRUE; } } } return xStatus; } 

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; .... /* Get the response from the response queue. */ IotMutex_Lock(&(pHttpsConnection->connectionMutex)); pQItem = IotDeQueue_PeekHead(&(pHttpsConnection->respQ)); IotMutex_Unlock(&(pHttpsConnection->connectionMutex)); /* If the receive callback is invoked * and there is no response expected, * then this a violation of the HTTP/1.1 protocol. */ if (pQItem == NULL) { IotLogError(....); fatalDisconnect = true; status = IOT_HTTPS_NETWORK_ERROR; goto iotCleanup; } .... iotCleanup : /* Report errors back to the application. */ 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) /* @[declare_linear_containers_list_double_peekhead] */ { 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; /* The 4th byte contains the length of the R component */ uint8_t ucSigComponentLength = pxMbedSignature[ 3 ]; // <= if( ( pxSignaturePKCS == NULL ) || ( pxMbedSignature == NULL ) ) { xReturn = FAILURE; } .... } 

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 рджреЗрдЦреЗрдВ)ред

рдЪрд┐рддреНрд░ 2


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

рд╕рддреНрдп! = рез


рдореБрдЭреЗ рдорд┐рд▓реА рдХрдИ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдПрдХ рдкреИрдЯрд░реНрди рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдереАрдВ, рдЬреЛ рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЕрдХреНрд╕рд░ рднреВрд▓ рдЬрд╛рддреА рд╣реИрдВред

рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдмреВрд▓ рдкреНрд░рдХрд╛рд░ (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; /* Unferenced parameter. */ (void)data; /* * This is port-specific for the Windows simulator, * so just use Crypto API. */ 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 рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдкрд░:

 /* * @brief Host name. * * @todo Set this to the unique name of your IoT Thing. */ #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 рдЙрд▓реНрд▓рдВрдШрди:

 /** * @brief Callback for an asynchronous request to notify * that the response is complete. * * @param[in] 0pPrivData - User private data configured * with the HTTPS Client library request configuration. * @param[in] respHandle - Identifier for the current response finished. * @param[in] rc - Return code from the HTTPS Client Library * signaling a possible error. * @param[in] status - The HTTP response status. */ static void _responseCompleteCallback(void* pPrivData, IotHttpsResponseHandle_t respHandle, IotHttpsReturnCode_t rc, uint16_t status) { bool* pUploadSuccess = (bool*)pPrivData; /* When the remote server response with 200 OK, the file was successfully uploaded. */ if (status == IOT_HTTPS_STATUS_OK) { *pUploadSuccess = true; } else { *pUploadSuccess = false; } /* Post to the semaphore that the upload is finished. */ IotSemaphore_Post(&(_uploadFinishedSem)); } 

рдХреНрдпрд╛ рдЖрдк рд╕реНрд╡рдпрдВ рддреНрд░реБрдЯрд┐ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ?

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V2537 [MISRA C 2.7] рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЕрдкреНрд░рдпреБрдХреНрдд рдкреИрд░рд╛рдореАрдЯрд░ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ: 'рдЖрд░рд╕реА'ред iot_demo_https_s3_upload_async.c 234

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

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдРрд╕реА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рдмрд┐рдирд╛ рднреА, рдЕрдкреНрд░рдпреБрдХреНрдд рдкреИрд░рд╛рдореАрдЯрд░ рдЕрдХреНрд╕рд░ рдЯреВрдЯреЗ рд╣реБрдП рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓реЙрдЬрд┐рдХ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддреЗ рд╣реИрдВред рдЕрдиреНрдпрдерд╛, рдлрд╝рдВрдХреНрд╢рди рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдореЗрдВ рдЙрдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ?

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

рдпрд╣ рд╕рдВрджрд┐рдЧреНрдз рд╣реИ рдХрд┐ рд╡реЗ рдкрд╣рд▓реЗ рдирд╣реАрдВ рдкрд╛рдП рдЧрдП рдереЗред рджрд░рдЕрд╕рд▓, рдХрдВрдкрд╛рдЗрд▓рд░ рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдХрд╛ рдЖрд╕рд╛рдиреА рд╕реЗ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдЪрд┐рддреНрд░ 1


рдирд┐рд╖реНрдХрд░реНрд╖


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

рд╣рдорд╛рд░реЗ рд▓реЗрдЦ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдЕрдЧрд▓реЗ рдЕрдВрдХ рдореЗрдВ рдорд┐рд▓рддреЗ рд╣реИрдВ: D

PS рдпрд╣ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рд╣реБрдЖ рдХрд┐ рдпрд╣ рд▓реЗрдЦ 31 рдЕрдХреНрдЯреВрдмрд░ рдХреЛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕рд▓рд┐рдП, рдореИрдВ рд╣рд░ рдХрд┐рд╕реА рдХреЛ рдПрдХ рдЦреБрд╢ рд╣реЗрд▓реЛрд╡реАрди рдЪрд╛рд╣рддрд╛ рд╣реВрдВ!



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

Source: https://habr.com/ru/post/hi473972/


All Articles