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

Reply via email to