The only possibility for a leak there if there is an infinite loop in the
"for". The "for" is ended only when "return" is called right after free.

  If you can show me an actual situation where there is a leak, then we
will try to fix it. But adding a free after the "for" is not a fix.

Best,
Scuri


Em seg, 27 de mai de 2019 às 08:42, Ranier VF <ranier_...@hotmail.com>
escreveu:

> Hi Scuri,
> Acccording to Coverity this is a real bug:
>
> static void iAttribParse(Ihandle *ih, const char* str)
> 1463{
> 1464  char env_buffer[256];
> 1465  char* name=NULL;
> 1466  char* value=NULL;
> 1467  char state = 'a';               /* get attribute */
> 1468  int end = 0;
> 1469
> 1470  env_str = str;
> 1471
>     1. Condition true, taking true branch.
>     7. Condition true, taking true branch.
>     15. Condition true, taking true branch.
> 1472  for (;;)
> 1473  {
>     2. Switch case value 8.
>     8. Switch case value 5.
>     16. Switch case value 5.
> 1474    switch (iAttribToken(env_buffer))
> 1475    {
>     CID 210525: Missing break in switch (MISSING_BREAK) [select issue]
> 1476    case IUPLEX_TK_END:           /* same as IUPLEX_TK_COMMA */
> 1477      end = 1;
> 1478    case IUPLEX_TK_COMMA:
>     3. Condition name, taking false branch.
> 1479      if (name)
> 1480      {
>     CID 210685: Explicit null dereferenced (FORWARD_NULL) [select issue]
> 1481        IupStoreAttribute(ih, name, value);
> 1482        free(name);
> 1483      }
>     4. Condition end, taking false branch.
> 1484      if (end)
> 1485        return;
> 1486      name = value = NULL;
> 1487      state = 'a';
>     5. Breaking from switch.
> 1488      break;
> 1489
> 1490    case IUPLEX_TK_SET:
> 1491      state = 'v';                /* get value */
> 1492      break;
> 1493
> 1494    case IUPLEX_TK_NAME:
>     9. Condition state == 97, taking true branch.
>     17. Condition state == 97, taking true branch.
> 1495      if (state == 'a')
>     10. alloc_fn: Storage is returned from allocation function iupStrDup.
> [show details]
>     11. var_assign: Assigning: name = storage returned from
> iupStrDup(env_buffer).
>     12. Falling through to end of if statement.
>     CID 210676 (#1 of 1): Resource leak (RESOURCE_LEAK)18. overwrite_var:
> Overwriting name in name = iupStrDup(env_buffer) leaks the storage that
> name points to.
> 1496        name = iupStrDup(env_buffer);
> 1497      else
> 1498        value = env_buffer;
>     13. Breaking from switch.
> 1499      break;
> 1500    }
>     6. Jumping back to the beginning of the loop.
>     14. Jumping back to the beginning of the loop.
> 1501  }
> 1502}
>
> Following the "conditions", that can actually occur, var name leaks
> pointer.
> IHMO I really believe fix this.
>
> Best regards,
> Ranier Vilela
> ________________________________________
> De: Antonio Scuri <antonio.sc...@gmail.com>
> Enviado: domingo, 26 de maio de 2019 22:08
> Para: IUP discussion list.
> Assunto: Re: [Iup-users] CID 210676 (#1 of 1): Resource leak
> (RESOURCE_LEAK)
>
> The code you added is an unreachable code. The "for" never ends normally,
> only in the return.
>
> Em sáb, 25 de mai de 2019 às 08:28, Ranier VF <ranier_...@hotmail.com
> <mailto:ranier_...@hotmail.com>> escreveu:
> Hi,
> Fix RESOURCE_LEAK at iup_attrib.c
>
> --- ..\..\a\src\iup_attrib.c    Sat Jan 26 16:02:13 2019
> +++ iup_attrib.c        Sat May 25 08:25:17 2019
> @@ -1499,6 +1499,11 @@
>        break;
>      }
>    }
> +  if (name)
> +  {
> +     IupStoreAttribute(ih, name, value);
> +     free(name);
> +  }
>  }
>
>  Ihandle* IupSetAttributes(Ihandle *ih, const char* str)
>
> Best regards.
> Ranier Vilela_______________________________________________
> Iup-users mailing list
> Iup-users@lists.sourceforge.net<mailto:Iup-users@lists.sourceforge.net>
> https://lists.sourceforge.net/lists/listinfo/iup-users
>
>
> _______________________________________________
> Iup-users mailing list
> Iup-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/iup-users
>
_______________________________________________
Iup-users mailing list
Iup-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/iup-users

Reply via email to