рдФрд░ рдлрд┐рд░ рд╕реЗ рдПрдореНрдмреЗрдбреЗрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ: Embox рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдмрдЧ рдвреВрдВрдв рд░рд╣реЗ рд╣реИрдВ

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

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

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

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

рдЦреИрд░, рдПрдВрдмреЗрдбреЗрдб рдкрддреНрд░рд┐рдХрд╛ рдХреЗ рд▓рд┐рдП рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХрд╛ рдирдпрд╛ рдореБрджреНрджрд╛ рдкрд░рд┐рдкрдХреНрд╡ рд╣реЛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЗ рд╕рд╛рдордиреЗ рд╣реИред рджреЗрдЦрдиреЗ рдХрд╛ рдордЬрд╝рд╛ рд▓реЗрдВ!

рд╡рд┐рд╢реНрд▓реЗрд╖рдг


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

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

рд╡рд┐рдзрд╛рдирд╕рднрд╛ рд╕реБрдЪрд╛рд░реВ рд░реВрдк рд╕реЗ рдЪрд▓реАред рдЕрдм рдПрдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред рдбреЗрдмрд┐рдпрди рд╕рдорд░реНрдерд┐рдд рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд▓рд┐рдирдХреНрд╕-рдЖрдзрд╛рд░рд┐рдд рд╕рд┐рд╕реНрдЯрдореЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рд▓рд┐рдирдХреНрд╕ рдХреЗ рддрд╣рдд рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░реАрдХрд╛ рдЯреНрд░реЗрд╕ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдирд╛ рд╣реИред рдпрд╣ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдореЛрдб рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рдПрдХрддреНрд░ рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЖрдк рдПрдХ рдХреНрд▓рд┐рдХ рдХреЗ рд╕рд╛рде рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╢реБрд░реВ рдХрд░ рд╕рдХреЗрдВред рдореБрдЭреЗ рдмрд╕ рдЗрддрдирд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:

1) рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдбрд╛рдЙрдирд▓реЛрдб рдФрд░ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдирд╛;

2) рдПрдордмреЙрдХреНрд╕ рдХреЗ рд╕рд╛рде рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЬрд╛рдХрд░ рдФрд░ рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ рдЯрд╛рдЗрдк рдХрд░рдХреЗ рдЕрд╕реЗрдВрдмрд▓реА рдЯреНрд░реИрдХрд┐рдВрдЧ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ

pvs-studio-analyzer analyze -- make

3) рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдВ:

pvs-studio-analyzer analyze -o /path/to/output.log

4) рдХрдЪреНрдЪреА рд░рд┐рдкреЛрд░реНрдЯ рдХреЛ рдЖрдкрдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдХрд┐рд╕реА рднреА рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдмрджрд▓реЗрдВред рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЙрдкрдпреЛрдЧрд┐рддрд╛ PlogConverter рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЖрдк рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд░рд┐рдкреЛрд░реНрдЯ рдХреЛ рдЯрд╛рд╕реНрдХрд▓рд┐рд╕реНрдЯ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдХрдорд╛рди (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, QtCreator рдореЗрдВ) рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА:

plog-converter -t tasklist -o /path/to/output.tasks /path/to/project

рд╕рдм! рдЗрди рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдореЗрдВ рдореБрдЭреЗ 15 рдорд┐рдирдЯ рд╕реЗ рдЕрдзрд┐рдХ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рд▓рдЧрд╛ред рд░рд┐рдкреЛрд░реНрдЯ рддреИрдпрд╛рд░ рд╣реИ, рдЕрдм рдЖрдк рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдЦреИрд░, рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ :)

рдЕрдЬреАрдм рд╕рд╛ рдЪрдХреНрд░


рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рджреНрд╡рд╛рд░рд╛ рдкрд╛рдИ рдЧрдИ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд▓реВрдк рдХреЗ рджреМрд░рд╛рди рдЕрдЬреАрдм рдереА:

int main(int argc, char **argv) {
  ....

  while (dp.skip != 0 ) {
    n_read = read(ifd, tbuf, dp.bs);
    if (n_read < 0) {
      err = -errno;
      goto out_cmd;
    }
    if (n_read == 0) {
      goto out_cmd;
    }

    dp.skip --;
  } while (dp.skip != 0);       // <=

  do {
    n_read = read(ifd, tbuf, dp.bs);
    if (n_read < 0) {
      err = -errno;
      break;
    }

    if (n_read == 0) {
      break;
    }

    ....

    dp.count --;
  } while (dp.count != 0);
  ....
}

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА : V715 'рдЬрдмрдХрд┐' рдСрдкрд░реЗрдЯрд░ рдХреЗ рдкрд╛рд╕ рдЦрд╛рд▓реА рд╢рд░реАрд░ рд╣реИред рд╕рдВрджрд┐рдЧреНрдз рдкреИрдЯрд░реНрди рдХрд╛ рдкрддрд╛ рдЪрд▓рд╛: 'рдЬрдмрдХрд┐ (рдПрдХреНрд╕рдк)) {...} (dp.skip! = 0);')ред dd.c 225 hm

ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЬреАрдм рд▓реВрдкред рдЬрдмрдХрд┐ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ (dp.skip! = 0) рджреЛ рдмрд╛рд░ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдПрдХ рдмрд╛рд░ рд▓реВрдк рдХреЗ рдареАрдХ рдКрдкрд░, рдФрд░ рдЙрд╕рдХреЗ рдареАрдХ рдиреАрдЪреЗ рджреВрд╕рд░рд╛ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЕрдм рдпреЗ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЪрдХреНрд░ рд╣реИрдВ: рдПрдХ рдореЗрдВ рдШреБрдВрдШрд░рд╛рд▓реЗ рдмреНрд░реЗрд╕рд┐рдЬрд╝ рдХреЗ рднрд╛рд╡ рд╣реИрдВ, рдФрд░ рджреВрд╕рд░рд╛ рдЦрд╛рд▓реА рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рджреВрд╕рд░рд╛ рдЪрдХреНрд░ рдХрднреА рднреА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдиреАрдЪреЗ рдПрдХ рдРрд╕рд╛ рд╣реА рд╣реИ ... рдЬрдмрдХрд┐ рд▓реВрдк рдПрдХ рд╕рдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рд╛рде рд╣реИ, рдЬреЛ рдореБрдЭреЗ рд╕реЛрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ: рдЕрдЬреАрдм рд▓реВрдк рдореВрд▓ рд░реВрдк рд╕реЗ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдерд╛ ... рдЬрдмрдХрд┐, рд▓реЗрдХрд┐рди рдХреБрдЫ рдЧрд▓рдд рдерд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрдЪреНрдЪ рд╕рдВрднрд╛рд╡рдирд╛ рд╡рд╛рд▓реЗ рдХреЛрдб рдХреЗ рдЗрд╕ рдЯреБрдХрдбрд╝реЗ рдореЗрдВ рддрд╛рд░реНрдХрд┐рдХ рддреНрд░реБрдЯрд┐ рд╣реИред

рд╕реНрдореНрд░рддрд┐ рд╕реЗ рд░рд┐рд╕рд╛рд╡


рд╣рд╛рдВ, рдЙрдирдХреЗ рдмрд┐рдирд╛ рдирд╣реАрдВред

int krename(const char *oldpath, const char *newpath) {
  
  char *newpatharg, *oldpatharg;

  ....

  oldpatharg =
    calloc(strlen(oldpath) + diritemlen + 2, sizeof(char));
  newpatharg =
    calloc(strlen(newpath) + diritemlen + 2, sizeof(char));
  if (NULL == oldpatharg || NULL == newpatharg) {
    SET_ERRNO(ENOMEM);
    return -1;
  }

  ....
}

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА:

  • V773 The function was exited without releasing the 'newpatharg' pointer. A memory leak is possible. kfsop.c 611
  • V773 The function was exited without releasing the 'oldpatharg' pointer. A memory leak is possible. kfsop.c 611

рдлрд╝рдВрдХреНрд╢рди рд╕реНрдерд╛рдиреАрдп рд╡реИрд░рд┐рдПрдмрд▓ newpatharg рдФрд░ oldpatharg рдХреЛ рдЕрдкрдиреЗ рдЕрдВрджрд░ рдмрдирд╛рддрд╛ рд╣реИ ред рдЗрди рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХреЛ рдХреЙрд▓реЙрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдЖрд╡рдВрдЯрд┐рдд рдирдП рдореЗрдореЛрд░реА рд╕реНрдерд╛рдиреЛрдВ рдХреЗ рдкрддреЗ рджрд┐рдП рдЧрдП рд╣реИрдВ ред рдпрджрд┐ рд╕реНрдореГрддрд┐ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рддреЗ рд╕рдордп рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдХреЙрд▓реЛрдХ рдПрдХ рдЕрд╢рдХреНрдд рд╕реВрдЪрдХ рджреЗрддрд╛ рд╣реИред

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

рд╕реНрдореГрддрд┐ рд░рд┐рд╕рд╛рд╡ рдХрд╛ рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг рдереЛрдбрд╝рд╛ рдЙрдЬреНрдЬрд╡рд▓ рд╣реИ:

static int block_dev_test(....) {
  int8_t *read_buf, *write_buf;
  
  ....

  read_buf = malloc(blk_sz * m_blocks);
  write_buf = malloc(blk_sz * m_blocks);

  if (read_buf == NULL || write_buf == NULL) {
    printf("Failed to allocate memory for buffer!\n");

    if (read_buf != NULL) {
      free(read_buf);
    }

    if (write_buf != NULL) {
      free(write_buf);
    }

    return -ENOMEM;
  }

  if (s_block >= blocks) {
    printf("Starting block should be less than number of blocks\n");
    return -EINVAL;            // <=
  }

  ....
}

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА:

  • V773 The function was exited without releasing the 'read_buf' pointer. A memory leak is possible. block_dev_test.c 195
  • V773 The function was exited without releasing the 'write_buf' pointer. A memory leak is possible. block_dev_test.c 195

рдпрд╣рд╛рдВ, рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдЯреАрдХрддрд╛ рджрд┐рдЦрд╛рдИ рд╣реИ рдФрд░ рдЙрд╕ рдорд╛рдорд▓реЗ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕реНрдореГрддрд┐ рдХрд╛ рдХреЗрд╡рд▓ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рдерд╛ред рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд ... рдФрд░ рд╕рдЪрдореБрдЪ рдЕрдЧрд▓реА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ рдПрдХ рдФрд░ рдЧрд▓рддреА рд╣реБрдИред

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

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

рдЗрд╢рд╛рд░рд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ


рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддреНрд░реБрдЯрд┐ рдХреЛрдб рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдФрд░ рд╕рд░рд▓ рд╣реИ:

static int scsi_write(struct block_dev *bdev, char *buffer,
                      size_t count, blkno_t blkno) {
  struct scsi_dev *sdev;
  int blksize;

  ....

  sdev = bdev->privdata;
  blksize = sdev->blk_size; // <=

  if (!sdev) {              // <=
    return -ENODEV;
  }

  ....
}

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V595 'sdev' рдкреЙрдЗрдВрдЯрд░ рдХреЛ nullptr рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 116, 118. scsi_disk.c 116 NULL рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХрд┐рдП рдЬрд╛рдиреЗ рд╕реЗ рдареАрдХ рдкрд╣рд▓реЗ sdev

рдкреЙрдЗрдВрдЯрд░ рдХреЛ dereferenced рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдорд╛рдирдирд╛ тАЛтАЛрддрд░реНрдХрд╕рдВрдЧрдд рд╣реИ рдХрд┐ рдпрджрд┐ рдХрд┐рд╕реА рдиреЗ рдРрд╕рд╛ рдЪреЗрдХ рд▓рд┐рдЦрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╕реВрдЪрдХ рд╢реВрдиреНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдмреНрд▓реЙрдХреЗрдЬ = sdev-> blk_size рдореЗрдВ рдЕрд╢рдХреНрдд рдкреЙрдЗрдВрдЯрд░ рдХреА рд╕рдВрднрд╛рд╡рд┐рдд рдбреАрдлреНрд░реЗрдВрдирд┐рдВрдЧ рд╣реИ ред

рддреНрд░реБрдЯрд┐ рдпрд╣ рд╣реИ рдХрд┐ рдЪреЗрдХ рд╡рд╣рд╛рдВ рд╕реНрдерд┐рдд рдирд╣реАрдВ рд╣реИ рдЬрд╣рд╛рдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ " sdev = bdev-> privdata; " рд▓рд╛рдЗрди рдХреЗ рдмрд╛рдж рдЖрдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛ , рд▓реЗрдХрд┐рди рд▓рд╛рдЗрди рд╕реЗ рдкрд╣рд▓реЗ " blksize = sdev-> blk_size; "ред рддрдм рд╢реВрдиреНрдп рдкрддреЗ рдХреА рд╕рдВрднрд╛рд╡рд┐рдд рдЕрдкреАрд▓ рд╕реЗ рдмрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рдерд╛ред

PVS-Studio рдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдореЗрдВ рджреЛ рдФрд░ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдкрд╛рдИрдВ:

void xdrrec_create(....)
{
  char *buff;

  ....

  buff = (char *)malloc(sendsz + recvsz);
  assert(buff != NULL);

  ....

  xs->extra.rec.in_base = xs->extra.rec.in_curr = buff;
  xs->extra.rec.in_boundry 
    = xs->extra.rec.in_base + recvsz;                    // <=

  ....
  xs->extra.rec.out_base
    = xs->extra.rec.out_hdr = buff + recvsz;             // <= 
  xs->extra.rec.out_curr 
    = xs->extra.rec.out_hdr + sizeof(union xdrrec_hdr);

  ....
}

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА:

  • V769 'xs-> extra.rec.in_base' рдкреЙрдЗрдВрдЯрд░ рдореЗрдВ 'xs-> extra.rec.in_base + recvsz' рдХрд╛ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди nullptr рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдРрд╕реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдореВрд▓реНрдп рд╕рдВрд╡реЗрджрдирд╣реАрди рд╣реЛрдЧрд╛ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 56, 48. xdr_rec.c 56
  • V769 'рдмрдлрд╝ + рд░рд┐рдХрд╡реЗрдЬрд╝' рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдореЗрдВ 'рдмрдлрд╝рд░' рдкреЙрдЗрдВрдЯрд░ рдХреЛ nullptr рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдРрд╕реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдореВрд▓реНрдп рд╕рдВрд╡реЗрджрдирд╣реАрди рд╣реЛрдЧрд╛ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 61, 48. xdr_rec.c 61

Buf рд╕реВрдЪрдХ рдХреЗ рд╕рд╛рде рдЖрд░рдВрдн рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддрд╛ malloc , рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рдЕрдкрдиреЗ рдореВрд▓реНрдп рдЕрдиреНрдп рд╕рдВрдХреЗрдд рдкреНрд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдореЗрдВ рдкреНрд░рдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореЙрд▓реЙрдХ рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдирд▓ рд╕реВрдЪрдХ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рд╣рдореЗрд╢рд╛ рдЬрд╛рдВрдЪрдирд╛ рдЪрд╛рд╣рд┐рдПред рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣рд╛рдБ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдПрдХ рд╣реИ рдЬрд╝реЛрд░ рдЬрд╛рдБрдЪ buf рдХреЗ рд▓рд┐рдП рд╢реВрдиреНрдп рд╣реИ, рдФрд░ рд╕рдм рдХреБрдЫ рдареАрдХ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

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

рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЕрдВрдХрдЧрдгрд┐рддреАрдп рдСрдкрд░реЗрд╢рди рдореЗрдВ рдЧрд▓рдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдСрдкрд░реЗрд╢рди рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╡рд╣ рд╣реИ рдЬреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╣рдореЗрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪреЗрддрд╛рд╡рдиреА рджреЗрддрд╛ рд╣реИред

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

рд╕рд░рдгрд┐рдпреЛрдВ рдХрд╛ рдЧрд▓рдд рд╕рдВрдЪрд╛рд▓рди


рдирд┐рдореНрди рддреНрд░реБрдЯрд┐ рдЕрдВрддрд┐рдо рд╕реЗ рдкрд╣рд▓реЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рдорд╛рди рд╣реИ:


int fat_read_filename(struct fat_file_info *fi,
                      void *p_scratch,
                      char *name) {
  int offt = 1;

  ....

  offt = strlen(name);
  while (name[offt - 1] == ' ' && offt > 0) { // <=
    name[--offt] = '\0';
  }
  log_debug("name(%s)", name);

  return DFS_OK;
}

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА: V781 'рдСрдлреНрдЯ' рд╕реВрдЪрдХрд╛рдВрдХ рдХреЗ рдореВрд▓реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИред рд╢рд╛рдпрдж рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓реЙрдЬрд┐рдХ рдореЗрдВ рдХреЛрдИ рдЧрд▓рддреА рд╣реИред fat_common.c 1813

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

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

рд╕рдВрджреЗрд╣рд╛рд╕реНрдкрдж рд╕реНрдерд┐рддрд┐


рдФрд░ рдЙрдирдХреЗ рдмрд┐рдирд╛ рдХрд╣рд╛рдБ? рд╣рдо рд╣рд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рд╕реЗ рдРрд╕реА рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдкрд╛рддреЗ рд╣реИрдВ рдЬрд┐рдирдХреА рд╣рдо рдЬрд╛рдБрдЪ рдХрд░рддреЗ рд╣реИрдВред

int index_descriptor_cloexec_set(int fd, int cloexec) {
  struct idesc_table *it;

  it = task_resource_idesc_table(task_self());
  assert(it);

  if (cloexec | FD_CLOEXEC) {
    idesc_cloexec_set(it->idesc_table[fd]);
  } else {
    idesc_cloexec_clear(it->idesc_table[fd]);
  }
  return 0;
}

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V617 рд╕реНрдерд┐рддрд┐ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред '0x0010' рдХрд╛ рддрд░реНрдХ '|' рдмрд┐рдЯрд╡рд╛рдЗрдЬрд╝ рдСрдкрд░реЗрд╢рди рдореЗрдВ рдПрдХ рдЧреИрд░-рд╢реВрдиреНрдп рдорд╛рди рд╣реЛрддрд╛ рд╣реИред index_descriptor.c 55

рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рддреНрд░реБрдЯрд┐ рдХреНрдпрд╛ рд╣реИ, FD_CLOEXEC рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рджреЗрдЦреЗрдВ :

#define FD_CLOEXEC 0x0010

рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдмрд┐рдЯрдХреНрд╡рд╛рдЗрди рдХреЗ рджрд╛рдИрдВ рдУрд░ (cloexec | FD_CLOEXEC) рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ "рдпрд╛" рд╣рдореЗрд╢рд╛ рдПрдХ рдиреЙрдирдЬрд░реЛ рд╕реНрдерд┐рд░рд╛рдВрдХ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдСрдкрд░реЗрд╢рди рдХрд╛ рдирддреАрдЬрд╛ рд╣рдореЗрд╢рд╛ рдПрдХ рдиреЙрдирдЬреЗрд░реЛ рдирдВрдмрд░ рд╣реЛрдЧрд╛ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдпрд╣ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣рдореЗрд╢рд╛ рдЕрдЧрд░ (рд╕рдЪреНрдЪреА) рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдЧреА , рдФрд░ рд╣рдо рд╣рдореЗрд╢рд╛ рдЗрдл-рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреА рдХреЗрд╡рд▓ рддрддреНрдХрд╛рд▓реАрди рд╢рд╛рдЦрд╛ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░реЗрдВрдЧреЗред

рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдЗрд╕ рдореИрдХреНрд░реЛ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ Embox рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдкреВрд░реНрд╡-рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдпрд╣ рд╣рдореЗрд╢рд╛ рд╕рд╣реА рд╕реНрдерд┐рддрд┐ рдЕрдЬреАрдм рд▓рдЧрддреА рд╣реИред рд╢рд╛рдпрдж рд╡реЗ рдпрд╣рд╛рдВ & рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ , рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЛрдВрдиреЗ рдПрдХ рдЯрд╛рдЗрдкреЛ рдмрдирд╛рдпрд╛ред

рдкреВрд░реНрдгрд╛рдВрдХ рд╡рд┐рднрд╛рдЬрди


рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддреНрд░реБрдЯрд┐ рд╕реА рднрд╛рд╖рд╛ рдХреА рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ:

#define SBSIZE    1024

static int ext2fs_format(struct block_dev *bdev, void *priv) {
  size_t dev_bsize;
  float dev_factor;

  ....

  dev_size = block_dev_size(bdev);
  dev_bsize = block_dev_block_size(bdev);
  dev_factor = SBSIZE / dev_bsize;            // <=

  ext2_dflt_sb(&sb, dev_size, dev_factor);
  ext2_dflt_gd(&sb, &gd);

  ....
}

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА : V636 '1024 / dev_bsize' рдХреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ 'int' рдкреНрд░рдХрд╛рд░ рд╕реЗ 'рдлреНрд▓реЛрдЯ' рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдбрд╛рд▓рд╛ рдЧрдпрд╛ рдерд╛ред рдПрдХ рдЖрдВрд╢рд┐рдХ рднрд╛рдЧ рдХреЗ рдиреБрдХрд╕рд╛рди рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдкрд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрд▓рд╛рдХрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдПрдХ рдЙрджрд╛рд╣рд░рдг: рдбрдмрд▓ рдП = (рдбрдмрд▓) (рдПрдХреНрд╕) / рд╡рд╛рдИ ;; ext2.c 777

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

рдХрднреА-рдХрднреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓ рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреА рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реЛрддреА рд╣реИрдВред SBSIZE рд╕реНрдерд┐рд░ рдФрд░ рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ dev_bsize рдореЗрдВ рдкреВрд░реНрдгрд╛рдВрдХ рдкреНрд░рдХрд╛рд░ (рдХреНрд░рдорд╢рдГ, рдФрд░ size_t) рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, SBSIZE / dev_bsize рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИрдкреВрд░реНрдгрд╛рдВрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рднреА рд╣реЛрдЧрд╛ред

рд▓реЗрдХрд┐рди рдПрдХ рдкрд▓ рд░реБрдХрд┐рдПред рдЪрд░ dev_factor рдлреНрд▓реЛрдЯ рдХрд╛ рдкреНрд░рдХрд╛рд░ рд╣реИ ! рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рднрд┐рдиреНрдирд╛рддреНрдордХ рд╡рд┐рднрд╛рдЬрди рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рдереАред рдпрджрд┐ рдЖрдк рдЗрд╕ рдЪрд░ рдХреЗ рдЖрдЧреЗ рдЙрдкрдпреЛрдЧ рдкрд░ рдзреНрдпрд╛рди рджреЗрддреЗ рд╣реИрдВ рддреЛ рдЗрд╕реЗ рдФрд░ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, ext2_dflt_sb рдлрд╝рдВрдХреНрд╢рди , рдЬрд╣рд╛рдВ dev_factor рдХреЛ рддреАрд╕рд░реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ :

static void ext2_dflt_sb(struct ext2sb *sb, size_t dev_size, float dev_factor);

рдЗрд╕реА рдкреНрд░рдХрд╛рд░, рдЕрдиреНрдп рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдЬрд╣рд╛рдВ dev_factor рд╡реИрд░рд┐рдПрдмрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ : рд╕рдм рдХреБрдЫ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдлреНрд▓реЛрдЯрд┐рдВрдЧ-рдкреЙрдЗрдВрдЯ рд╕рдВрдЦреНрдпрд╛ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИред

рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдбрд┐рд╡реАрдЬрди рдСрдкрд░реЗрдВрдб рдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

dev_factor = float(SBSIZE) / dev_bsize;

рдлрд┐рд░ рд╡рд┐рднрд╛рдЬрди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдПрдХ рднрд┐рдиреНрдирд╛рддреНрдордХ рд╕рдВрдЦреНрдпрд╛ рд╣реЛрдЧреАред

рдЕрд╕рддреНрдпрд╛рдкрд┐рдд рдЗрдирдкреБрдЯ


рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддреНрд░реБрдЯрд┐ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдмрд╛рд╣рд░ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдЕрд╕рддреНрдпрд╛рдкрд┐рдд рдбреЗрдЯрд╛ рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдЬреБрдбрд╝реА рд╣реИред

int main(int argc, char **argv) {
  int ret;
  char text[SMTP_TEXT_LEN + 1];

  ....

  if (NULL == fgets(&text[0], sizeof text - 2, /* for \r\n */
      stdin)) { ret = -EIO; goto error; }
    text[strlen(&text[0]) - 1] = '\0'; /* remove \n */    // <=

  ....
}

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V1010 рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рджрд╛рдЧреА рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрдВрдбреЗрдХреНрд╕ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: 'strlen (& text [0])'ред sendmail.c 102

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХреНрдпрд╛ fgets рд░рд┐рдЯрд░реНрди рдореЗрдВ рдХрд╛рд░реНрдп ред рдХрд┐рд╕реА рдкрдВрдХреНрддрд┐ рдХреЗ рд╕рдлрд▓ рдкрдврд╝рдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдлрд╝рдВрдХреНрд╢рди рдЗрд╕ рд░реЗрдЦрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдХреЗрддрдХ рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдкрдврд╝рд╛ рдПрдХ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ, рддреЛ рдЕрдВрдд рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдкрд╣рд▓реЗ рдХрдо рд╕реЗ рдХрдо рдПрдХ рддрддреНрд╡ рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╛ рдПрдХ рдЗрдирдкреБрдЯ рддреНрд░реБрдЯрд┐ рддрдм рд╣реЛрддреА рд╣реИ, fgets рдврдВрдЧ рд╕реЗ рдХрд╛рдо рд░рд┐рдЯрд░реНрди рд╢реВрдиреНрдп ред

рддреЛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ NULL == рдлрд╝рд┐рдЬрд╝ (....) рд╣реИрдпрджрд┐ рдкреНрд░рд╛рдкреНрдд рдЗрдирдкреБрдЯ рд╕рд╣реА рд╣реИ рддреЛ рдЬрд╛рдБрдЪ рдХрд░реЗрдВред рд▓реЗрдХрд┐рди рдПрдХ рдХреИрд╡рд┐рдПрдЯ рд╣реИред рдпрджрд┐ рдЖрдк рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╡рд░реНрдг рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдирд▓ рдЯрд░реНрдорд┐рдирд▓ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ (рдпрд╣ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд┐рдВрдбреЛрдЬ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХреЗ рд▓рд┐рдЧреЗрд╕реА рдореЛрдб рдореЗрдВ Ctrl + 2 рджрдмрд╛рдХрд░), рдлрд╛рд▓реНрдЯ рдлрд╝рдВрдХреНрд╢рди рдЗрд╕реЗ NULL рдХреЛ рд╡рд╛рдкрд╕ рдХрд┐рдП рдмрд┐рдирд╛ рдорд╛рдирддрд╛ рд╣реИ ред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЬрд┐рд╕ рд▓рд╛рдЗрди рдкрд░ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдХреА рдЬрд╛рддреА рд╣реИ, рдЙрд╕рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рддрддреНрд╡ рд╣реЛрдЧрд╛ - ' \ 0 'ред

рдЖрдЧреЗ рдХреНрдпрд╛ рд╣реЛрдЧрд╛? рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рд╕реНрдЯреНрд░реИрд▓реЗрди (рдФрд░ рдЯреЗрдХреНрд╕реНрдЯ [0]) 0 рдкрд░ рд╡рд╛рдкрд╕ рдЖрдПрдЧрд╛ ред рдирддреАрдЬрддрди, рд╣рдореЗрдВ рдПрдХ рдирдХрд╛рд░рд╛рддреНрдордХ рд╕реВрдЪрдХрд╛рдВрдХ рдХреЙрд▓ рдорд┐рд▓рддрд╛ рд╣реИ:

text[ 0 - 1 ] = '\0';

рдирддреАрдЬрддрди, рд╣рдо рдХреЗрд╡рд▓ рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрди рд╕рдорд╛рдкреНрддрд┐ рд╡рд░реНрдг рдкрд╛рд░рд┐рдд рдХрд░рдХреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ "рдкрд▓рдЯ" рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдЕрдЬреАрдм рд╣реИ, рдФрд░ рд╕рдВрднрд╡рддрдГ Embox рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рд╣рдорд▓рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдореЗрд░реЗ рд╕рд╣рдпреЛрдЧреА, рдЬреЛ рдЗрд╕ рдиреИрджрд╛рдирд┐рдХ тАЛтАЛрдирд┐рдпрдо рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣реЗ рдереЗ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ NcFTP рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╣рдорд▓реЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдПрдХ рдиреЛрдЯ рдмрдирд╛рдпрд╛:


рдореИрдВ рдпрд╣ рджреЗрдЦрдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рдЖрдк рдЕрднреА рднреА рдРрд╕реЗ рдЕрд╡рд╕рд░ рдкрд░ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ :)

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЛ рдПрдХ рд╣реА рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рджреЛ рдФрд░ рд╕реНрдерд╛рди рдорд┐рд▓реЗ:

  • V1010 рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рджрд╛рдЧреА рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрдВрдбреЗрдХреНрд╕ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: 'strlen (& [0]) рд╕реЗ'ред sendmail.c 55
  • V1010 рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рджрд╛рдЧреА рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрдВрдбреЗрдХреНрд╕ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: 'strlen (& [рдХреЛ 0])'ред sendmail.c 65

рдорд┐рд╢реНрд░рд╛


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

MISRA рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдорд╛рдирд╡ рдЬреАрд╡рди рдЖрдкрдХреЗ рдПрдореНрдмреЗрдбреЗрдб рд╕рд┐рд╕реНрдЯрдо рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ: рдЪрд┐рдХрд┐рддреНрд╕рд╛, рдореЛрдЯрд░ рд╡рд╛рд╣рди, рд╡рд┐рдорд╛рди рдФрд░ рд╕реИрдиреНрдп рдЙрджреНрдпреЛрдЧреЛрдВ рдореЗрдВред

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рдиреИрджрд╛рдирд┐рдХ тАЛтАЛрдирд┐рдпрдореЛрдВ рдХрд╛ рдПрдХ рд╡реНрдпрд╛рдкрдХ рд╕реЗрдЯ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ MISRA C рдФрд░ MISRA + ++ рдорд╛рдирдХреЛрдВ рдХреЗ рдЕрдиреБрдкрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдХреЛрдб рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдЗрди рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рдореЛрдб рдХреЛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рд╕реЗ рд╣рдо рдПрдореНрдмреЗрдбреЗрдб рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдореИрдВ рдмрд╕ MISRA рдХреЗ рдмрд┐рдирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред

рдпрд╣рд╛рдБ рдореИрдВ рдХреНрдпрд╛ рдЦреЛрдЬрдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛:

/* find and read symlink file */
static int ext2_read_symlink(struct nas *nas,
                             uint32_t parent_inumber,
                             const char **cp) {
  char namebuf[MAXPATHLEN + 1];

  ....

  *cp = namebuf;              // <=
  if (*namebuf != '/') {
    inumber = parent_inumber;
  } else {
    inumber = (uint32_t) EXT2_ROOTINO;
  }
  rc = ext2_read_inode(nas, inumber);

  return rc;
} 

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V2548 [MISRA C 18.6] рд╕реНрдерд╛рдиреАрдп рд╕рд░рдгреА рдХрд╛ рдирд╛рдо 'namebuf' рдЗрд╕ рд╕рд░рдгреА рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдмрд╛рд╣рд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред ext2.c 298

рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдиреЗ рдПрдХ рд╕рдВрджрд┐рдЧреНрдз рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдЬреЛ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдХрд╛рд░рдг рдмрди рд╕рдХрддрд╛ рдерд╛ред

рдЖрдЗрдП рдХреЛрдб рдкрд░ рдПрдХ рдХрд░реАрдм рд╕реЗ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред рдпрд╣рд╛рдБ, namebuf рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕реНрдерд╛рдиреАрдп рджрд╛рдпрд░реЗ рдореЗрдВ рдмрдирд╛рдИ рдЧрдИ рдПрдХ рд╕рд░рдгреА рд╣реИ, рдФрд░ cp рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдкреЙрдЗрдВрдЯрд░ рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

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

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

рдХреЗрд╡рд▓ рдПрдХ "рд▓реЗрдХрд┐рди" рд╣реИ: рдЪреВрдВрдХрд┐ рдирд╛рдореНрдмрдл рд╕реНрдЯреИрдХ рдкрд░ рдЖрд░рдХреНрд╖рд┐рдд рдПрдХ рд╕рд░рдгреА рд╣реИ, рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдкрд░ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрд╛рд╣рд░ рдореМрдЬреВрдж рдПрдХ рд╕реВрдЪрдХ рдореБрдХреНрдд рдореЗрдореЛрд░реА рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдЧрд╛ред

рдЙрд╕ рдкрддреЗ рдкрд░ рдХреНрдпрд╛ рд╣реЛрдЧрд╛? рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рд╕рд░рдгреА рдХреА рд╕рд╛рдордЧреНрд░реА рд╕реНрдореГрддрд┐ рдореЗрдВ рдмрдиреА рд░рд╣реЗрдЧреА, рдпрд╛ рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдХрд╛рд░реНрдпрдХреНрд░рдо рддреБрд░рдВрдд рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдХреБрдЫ рдФрд░ рдХреЗ рд╕рд╛рде рдорд┐рдЯрд╛ рджреЗрдЧрд╛ред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЗрд╕ рддрд░рд╣ рдХреЗ рдкрддреЗ рдкрд░ рдкрд╣реБрдВрдЪрдирд╛ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдорд╛рди рд▓реМрдЯрд╛рдПрдЧрд╛, рдФрд░ рдРрд╕реЗ рдореВрд▓реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдПрдХ рд╕рдХрд▓ рддреНрд░реБрдЯрд┐ рд╣реИред

рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЛ рдПрдХ рд╣реА рдЪреЗрддрд╛рд╡рдиреА рдХреЗ рд╕рд╛рде рдПрдХ рдФрд░ рддреНрд░реБрдЯрд┐ рднреА рдорд┐рд▓реА:

  • V2548 [MISRA C 18.6] рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХрд╛ рдкрддрд╛ 'dst_haddr' рдЗрд╕ рдЪрд░ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдмрд╛рд╣рд░ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред net_tx.c 82

рдЪрд┐рддреНрд░ 6

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


рдореБрдЭреЗ Embox рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдкрд╕рдВрдж рдерд╛ред рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдореИрдВрдиреЗ рд▓реЗрдЦ рдореЗрдВ рдкрд╛рдИ рдЧрдИ рд╕рднреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рдерд╛, рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреА рдХреБрд▓ рд╕рдВрдЦреНрдпрд╛ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдХрдо рдереА, рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛрдб рдЙрдЪреНрдЪ рдЧреБрдгрд╡рддреНрддрд╛ рдХреЗ рд╕рд╛рде рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рд╕рдореБрджрд╛рдп рдХреА рдУрд░ рд╕реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдпреЛрдЧрджрд╛рди рджреЗрдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЖрднрд╛рд░ рд╡реНрдпрдХреНрдд рдХрд░рддрд╛ рд╣реВрдВред рддреБрдо рдорд╣рд╛рди рд╣реЛ!

рдореИрдВ рдЗрд╕ рдЕрд╡рд╕рд░ рдкрд░ рддреБрд▓рд╛ рд╕реЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рд╢реБрднрдХрд╛рдордирд╛рдПрдВ рджреЗрддрд╛ рд╣реВрдВред рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реЛрдЧрд╛ рдХрд┐ рд╕реЗрдВрдЯ рдкреАрдЯрд░реНрд╕рдмрд░реНрдЧ рдореЗрдВ рдЕрднреА рдмрд╣реБрдд рдардВрдб рдирд╣реАрдВ рд╣реИ :)

рдЗрд╕ рдкрд░ рдореЗрд░рд╛ рд▓реЗрдЦ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ред рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЗрд╕реЗ рдкрдврд╝рдиреЗ рдореЗрдВ рдордЬрд╝рд╛ рдЖрдпрд╛, рдФрд░ рдЖрдкрдиреЗ рдЕрдкрдиреЗ рд▓рд┐рдП рдХреБрдЫ рдирдпрд╛ рдкрд╛рдпрд╛ред

рдпрджрд┐ рдЖрдк рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ рдФрд░ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдХреЗ рджреЗрдЦреЗрдВ ред рдЗрд╕рдореЗрдВ 15 рдорд┐рдирдЯ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рдирд╣реАрдВ рд▓рдЧреЗрдЧрд╛ред



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

All Articles