Corrected two potentially fatal errors: (1) Code doing the PDK_PATH
and HOME substitution in filenames needs to watch for a NULL cd_file, and (2) The routine that removes the (UNNAMED) cell when another cell is loaded needs to NULL the boxRootDef pointer or else it ends up pointing to deallocated memory.
This commit is contained in:
parent
56c0620417
commit
0dcc9c6ca7
|
|
@ -273,6 +273,7 @@ DBCellDelete(cellname, force)
|
|||
}
|
||||
celldef->cd_parents = (CellUse *)NULL;
|
||||
|
||||
DBWResetBox(celldef);
|
||||
result = DBCellDeleteDef(celldef);
|
||||
|
||||
if (result == FALSE)
|
||||
|
|
@ -282,8 +283,6 @@ DBCellDelete(cellname, force)
|
|||
return result;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* ----------------------------------------------------------------------------
|
||||
*
|
||||
|
|
|
|||
|
|
@ -3494,7 +3494,9 @@ DBPathSubstitute(pathstart, cstring, cellDef)
|
|||
|
||||
char *homedir = getenv("HOME");
|
||||
|
||||
if (!strncmp(cellDef->cd_file, homedir, strlen(homedir))
|
||||
if (cellDef->cd_file == NULL)
|
||||
sprintf(cstring, "%s", pathstart);
|
||||
else if (!strncmp(cellDef->cd_file, homedir, strlen(homedir))
|
||||
&& (*(cellDef->cd_file + strlen(homedir)) == '/'))
|
||||
sprintf(cstring, "~%s", cellDef->cd_file + strlen(homedir));
|
||||
else
|
||||
|
|
|
|||
|
|
@ -790,6 +790,31 @@ DBWSetBox(rootDef, rect)
|
|||
dbwRecordBoxArea(FALSE);
|
||||
}
|
||||
|
||||
/*
|
||||
* ----------------------------------------------------------------------------
|
||||
* DBWResetBox() ---
|
||||
*
|
||||
* Make sure that boxRootDef is set to NULL if it is equal to the
|
||||
* specified CellDef. This is used by the cell delete function to
|
||||
* make sure that if an edit cell is deleted, the boxRootDef is not
|
||||
* pointing to an invalid area of memory.
|
||||
*
|
||||
* Results:
|
||||
* None.
|
||||
*
|
||||
* Side effects:
|
||||
* Global variable boxRootDef may be set to NULL.
|
||||
*
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
void
|
||||
DBWResetBox(CellDef *def)
|
||||
{
|
||||
if (def == boxRootDef)
|
||||
boxRootDef = NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* ----------------------------------------------------------------------------
|
||||
* ToolMoveBox --
|
||||
|
|
|
|||
|
|
@ -189,6 +189,7 @@ extern void ToolMoveBox(), ToolMoveCorner();
|
|||
extern int ToolGetCorner();
|
||||
extern void DBWloadWindow(), DBWxloadWindow();
|
||||
extern void DBWSetBox();
|
||||
extern void DBWResetBox();
|
||||
extern void DBWUndoOldEdit();
|
||||
extern void DBWUndoNewEdit();
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue