Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
59 changes: 47 additions & 12 deletions INCHI-1-SRC/INCHI_API/demos/inchi_main/src/aux2atom.h
Original file line number Diff line number Diff line change
Expand Up @@ -1488,22 +1488,41 @@ int INChITo_Atom( INCHI_IOSTREAM *inp_molfile, MOL_COORD **szCoord,
}
bypass_end_of_INChI_plain:
/* cleanup */
if (num_atoms == INCHI_INP_ERROR_RET && atom_stereo0D)
if (num_atoms == INCHI_INP_ERROR_RET || num_atoms == INCHI_INP_FATAL_RET)
{
if (stereo0D && *stereo0D == atom_stereo0D)
if (atom_stereo0D) /* djb-rwth: fixing coverity CID #500395 */
{
*stereo0D = NULL;
*num_stereo0D = 0;
if (stereo0D && *stereo0D == atom_stereo0D)
{
*stereo0D = NULL;
*num_stereo0D = 0;
}
FreeInchi_Stereo0D(&atom_stereo0D);
}
FreeInchi_Stereo0D( &atom_stereo0D );

#if ( defined(TARGET_API_LIB) || defined(TARGET_EXE_USING_API) )
if (atom) /* djb-rwth: fixing coverity CID #499615 */
{
inchi_free(atom);
atom = NULL;
}

if (pszCoord) /* djb-rwth: fixing coverity CID #500397 */
{
inchi_free(pszCoord);
pszCoord = NULL;
}
#endif
}

while (bTooLongLine &&
0 < inchi_ios_getsTab1( szLine, sizeof( szLine ) - 1, inp_molfile, &bTooLongLine ))
{
;
}

#if ( defined(TARGET_API_LIB) || defined(TARGET_EXE_USING_API) )
/* cleanup */
/* cleanup
if (!*at)
{
if (atom)
Expand All @@ -1516,7 +1535,7 @@ int INChITo_Atom( INCHI_IOSTREAM *inp_molfile, MOL_COORD **szCoord,
inchi_free( pszCoord );
pszCoord = NULL;
}
}
}*/
#endif

return num_atoms;
Expand Down Expand Up @@ -2709,15 +2728,31 @@ int INChITo_Atom( INCHI_IOSTREAM *inp_molfile, MOL_COORD **szCoord,
}
bypass_end_of_INChI:
/* cleanup */
if (num_atoms == INCHI_INP_ERROR_RET && atom_stereo0D)
if (num_atoms == INCHI_INP_ERROR_RET || num_atoms == INCHI_INP_FATAL_RET)
{
if (stereo0D && *stereo0D == atom_stereo0D)
if (atom_stereo0D) /* djb-rwth: fixing coverity CID #500395 */
{
*stereo0D = NULL;
*num_stereo0D = 0;
if (stereo0D && *stereo0D == atom_stereo0D)
{
*stereo0D = NULL;
*num_stereo0D = 0;
}
FreeInchi_Stereo0D(&atom_stereo0D);
}

if (atom) /* djb-rwth: fixing coverity CID #499615 */
{
inchi_free(atom);
atom = NULL;
}

if (pszCoord) /* djb-rwth: fixing coverity CID #500397 */
{
inchi_free(pszCoord);
pszCoord = NULL;
}
FreeInchi_Stereo0D( &atom_stereo0D );
}

if (!memcmp( szLine, sStructHdrXmlEnd, sizeof( sStructHdrXmlEnd ) - 1 ))
num_struct--;
if (!memcmp( szLine, sStructHdrXml, sizeof( sStructHdrXml ) - 1 ))
Expand Down
35 changes: 25 additions & 10 deletions INCHI-1-SRC/INCHI_API/libinchi/src/inchi_dll_b.c
Original file line number Diff line number Diff line change
Expand Up @@ -1492,7 +1492,7 @@ int InchiToInchiAtom( INCHI_IOSTREAM *inp_file,
{
*err = -2; /* Program error */
TREAT_ERR( *err, 0, "Program error interpreting InChI aux" );
num_atoms = 0;
num_atoms = INCHI_INP_FATAL_RET;
goto bypass_end_of_INChI_plain; /* no structure */
}
}
Expand Down Expand Up @@ -1792,14 +1792,29 @@ int InchiToInchiAtom( INCHI_IOSTREAM *inp_file,
bypass_end_of_INChI_plain:

/* cleanup */
if (num_atoms == INCHI_INP_ERROR_RET && atom_stereo0D)
if (num_atoms == INCHI_INP_ERROR_RET || num_atoms == INCHI_INP_FATAL_RET)
{
if (stereo0D && *stereo0D == atom_stereo0D)
if (atom_stereo0D) /* djb-rwth: fixing coverity CID #500395 */
{
*stereo0D = NULL;
*num_stereo0D = 0;
if (stereo0D && *stereo0D == atom_stereo0D)
{
*stereo0D = NULL;
*num_stereo0D = 0;
}
FreeInchi_Stereo0D(&atom_stereo0D);
}

if (atom) /* djb-rwth: fixing coverity CID #499615 */
{
inchi_free(atom);
atom = NULL;
}

if (pszCoord) /* djb-rwth: fixing coverity CID #500397 */
{
inchi_free(pszCoord);
pszCoord = NULL;
}
FreeInchi_Stereo0D( &atom_stereo0D );
}

while (bTooLongLine &&
Expand All @@ -1809,20 +1824,20 @@ int InchiToInchiAtom( INCHI_IOSTREAM *inp_file,
}


/* cleanup */
if (at && !*at) /* djb-rwth: fixing a NULL pointer dereference */
/* cleanup
if (at && !*at)
{
if (atom)
{
inchi_free( atom );
atom = NULL;

}
if (pszCoord)
{
inchi_free( pszCoord );
pszCoord = NULL;
}
}
}*/

return num_atoms;
}
Expand Down
2 changes: 1 addition & 1 deletion INCHI-1-SRC/INCHI_API/libinchi/src/ixa/ixa_read_inchi.c
Original file line number Diff line number Diff line change
Expand Up @@ -211,7 +211,7 @@ void INCHI_DECL IXA_MOL_ReadInChI( IXA_STATUS_HANDLE hStatus,
IXA_MOL_Clear( hStatus, hMolecule );
if (IXA_STATUS_HasError( hStatus ))
{
goto cleanup;
return; /* djb-rwth: fixing coverity CID #500398 */
}

input.szInChI = (char*) pInChI;
Expand Down
155 changes: 80 additions & 75 deletions INCHI-1-SRC/INCHI_BASE/src/ichiprt2.c
Original file line number Diff line number Diff line change
Expand Up @@ -1370,48 +1370,47 @@ int MakeCRVString( ORIG_INFO *OrigInfo,
if (len >= 2047) /* djb-rwth: fixing coverity CID #499515 */
{
len = 2047;
szValue[len] = '\0';
goto early_break;
}
else if (len < 0) /* djb-rwth: fixing coverity CID #500400 */
{
len = 0;
goto early_break;
}
else
{
szValue[len++] = '.';
szValue[len] = '.';
len++;
}
}
switch (OrigInfo[k].cRadical)
if (len >= 2047) /* djb-rwth: fixing coverity CID #499515 */
{
case 1:
if (len >= 2047) /* djb-rwth: fixing coverity CID #499515 */
{
len = 2047;
szValue[len] = '\0';
}
else
{
szValue[len++] = 'd';
}
break;
case 2:
if (len >= 2047) /* djb-rwth: fixing coverity CID #499515 */
{
len = 2047;
szValue[len] = '\0';
}
else
{
szValue[len++] = 't';
}
break;
default:
if (len >= 2047) /* djb-rwth: fixing coverity CID #499515 */
{
len = 2047;
szValue[len] = '\0';
}
else
{
szValue[len++] = 'u';
}
break;
len = 2047;
goto early_break;
}
else if (len < 0) /* djb-rwth: fixing coverity CID #500382 */
{
len = 0;
goto early_break;
}
else
{
switch (OrigInfo[k].cRadical)
{
case 1:
/* djb-rwth: fixing coverity CID #499515 -- false positive, len tested for overflow */
szValue[len] = 'd';
len++;
break;
case 2:
szValue[len] = 't';
len++;
break;
default:
szValue[len] = 'u';
len++;
break;
}
}
}
/* valence */
Expand All @@ -1422,11 +1421,17 @@ int MakeCRVString( ORIG_INFO *OrigInfo,
if (len >= 2047) /* djb-rwth: fixing coverity CID #499515 */
{
len = 2047;
szValue[len] = '\0';
goto early_break;
}
else if (len < 0) /* djb-rwth: fixing coverity CID #500382 */
{
len = 0;
goto early_break;
}
else
{
szValue[len++] = '.';
szValue[len] = '.';
len++;
}
}
len += MakeDecNumber( szValue + len, ( int )sizeof( szValue ) - len, NULL, OrigInfo[k].cUnusualValence );
Expand Down Expand Up @@ -1459,42 +1464,34 @@ int MakeCRVString( ORIG_INFO *OrigInfo,
}
/* radical */
if (OrigInfo[k].cRadical)
{
switch (OrigInfo[k].cRadical)
{
if (len >= 2047) /* djb-rwth: fixing coverity CID #499515 */
{
case 1:
if (len >= 2047) /* djb-rwth: fixing coverity CID #499515 */
{
len = 2047;
szValue[len] = '\0';
}
else
{
szValue[len++] = 'd'; /* djb-rwth: GCC 14 false positive */
}
break;
case 2:
if (len >= 2047) /* djb-rwth: fixing coverity CID #499515 */
{
len = 2047;
szValue[len] = '\0';
}
else
{
szValue[len++] = 't';
}
break;
default:
if (len >= 2047) /* djb-rwth: fixing coverity CID #499515 */
{
len = 2047;
szValue[len] = '\0';
}
else
{
szValue[len++] = 'u';
}
break;
len = 2047;
goto early_break;
}
else if (len < 0) /* djb-rwth: fixing coverity CID #500382 */
{
len = 0;
goto early_break;
}
else
{
switch (OrigInfo[k].cRadical)
{
case 1:
szValue[len] = 'd'; /* djb-rwth: GCC 14 false positive */
len++;
break;
case 2:
szValue[len] = 't';
len++;
break;
default:
szValue[len] = 'u';
len++;
break;
}
}
}
/* valence */
Expand All @@ -1505,11 +1502,17 @@ int MakeCRVString( ORIG_INFO *OrigInfo,
if (len >= 2047) /* djb-rwth: fixing coverity CID #499515 */
{
len = 2047;
szValue[len] = '\0';
goto early_break;
}
else if (len < 0) /* djb-rwth: fixing coverity CID #500382 */
{
len = 0;
goto early_break;
}
else
{
szValue[len++] = '.';
szValue[len] = '.';
len++;
}
}
len += MakeDecNumber(szValue + len, (int)sizeof(szValue) - len, NULL, OrigInfo[k].cUnusualValence);
Expand All @@ -1520,6 +1523,8 @@ int MakeCRVString( ORIG_INFO *OrigInfo,
{
len = 0;
}

early_break:
if (len)
{
szValue[len] = '\0';
Expand Down
Loading