{
wxASSERT(dsn.Length() < sizeof(Dsn));
- wxStrcpy(Dsn,dsn);
+ wxStrncpy(Dsn, dsn, sizeof(Dsn)-1);
+ Dsn[sizeof(Dsn)-1] = 0; // Prevent buffer overrun
} // wxDbConnectInf::SetDsn()
void wxDbConnectInf::SetUserID(const wxString &uid)
{
wxASSERT(uid.Length() < sizeof(Uid));
- wxStrcpy(Uid, uid);
+ wxStrncpy(Uid, uid, sizeof(Uid)-1);
+ Uid[sizeof(Uid)-1] = 0; // Prevent buffer overrun
} // wxDbConnectInf::SetUserID()
{
wxASSERT(password.Length() < sizeof(AuthStr));
- wxStrcpy(AuthStr, password);
+ wxStrncpy(AuthStr, password, sizeof(AuthStr)-1);
+ AuthStr[sizeof(AuthStr)-1] = 0; // Prevent buffer overrun
} // wxDbConnectInf::SetPassword()
void wxDbConnectInf::SetConnectionStr(const wxString &connectStr)
useConnectionStr = wxStrlen(connectStr) > 0;
- wxStrcpy(ConnectionStr, connectStr);
+ wxStrncpy(ConnectionStr, connectStr, sizeof(ConnectionStr)-1);
+ ConnectionStr[sizeof(ConnectionStr)-1] = 0; // Prevent buffer overrun
} // wxDbConnectInf::SetConnectionStr()
pLast--;
}
- wxStrcpy(errorList[pLast], errMsg);
+ wxStrncpy(errorList[pLast], errMsg, DB_MAX_ERROR_MSG_LEN);
+ errorList[pLast][DB_MAX_ERROR_MSG_LEN] = 0;
if (SQLState.Length())
if ((dbStatus = TranslateSqlState(SQLState)) != DB_ERR_FUNCTION_SEQUENCE_ERROR)
SDWORD Sdword;
wxDbColInf* pColInf = new wxDbColInf[noCols];
- //fill in column information (name, datatype)
+ // Fill in column information (name, datatype)
for (colNum = 0; colNum < noCols; colNum++)
{
if (SQLColAttributes(hstmt, (UWORD)(colNum+1), SQL_COLUMN_NAME,
}
wxStrncpy(pColInf[colNum].colName, name, DB_MAX_COLUMN_NAME_LEN);
+ pColInf[colNum].colName[DB_MAX_COLUMN_NAME_LEN] = 0; // Prevent buffer overrun
if (SQLColAttributes(hstmt, (UWORD)(colNum+1), SQL_COLUMN_TYPE,
NULL, 0, &Sword, &Sdword) != SQL_SUCCESS)
for (i=0; i<noCols; i++)
{ // Find the Column name
if (!wxStrcmp(colInf[i].colName, szPkCol)) // We have found the Column, store the Information
- wxStrcpy(colInf[i].PkTableName, tempStr.c_str()); // Name of the Tables where this Primary Key is used as a Foreign Key
+ {
+ wxStrncpy(colInf[i].PkTableName, tempStr.c_str(), DB_MAX_TABLE_NAME_LEN); // Name of the Tables where this Primary Key is used as a Foreign Key
+ colInf[i].PkTableName[DB_MAX_TABLE_NAME_LEN] = 0; // Prevent buffer overrun
+ }
}
} // if
if (!wxStrcmp(colInf[i].colName,szFkCol)) // We have found the (Foreign Key) Column
{
colInf[i].FkCol = iKeySeq; // Which Foreign Key is this (first, second usw.) ?
- wxStrcpy(colInf[i].FkTableName,szPkTable); // Name of the Table where this Foriegn is the Primary Key
+ wxStrncpy(colInf[i].FkTableName, szFkTable, DB_MAX_TABLE_NAME_LEN); // Name of the Table where this Foriegn is the Primary Key
+ colInf[i].FkTableName[DB_MAX_TABLE_NAME_LEN] = 0; // Prevent buffer overrun
} // if
} // for
} // if
if (!colInf)
break;
// Mark the end of the array
- wxStrcpy(colInf[noCols].tableName,wxEmptyString);
- wxStrcpy(colInf[noCols].colName,wxEmptyString);
+ wxStrcpy(colInf[noCols].tableName, wxEmptyString);
+ wxStrcpy(colInf[noCols].colName, wxEmptyString);
colInf[noCols].sqlDataType = 0;
}
// Loop through each table name
// Mark the end of the array
wxStrcpy(colInf[noCols].tableName, wxEmptyString);
wxStrcpy(colInf[noCols].colName, wxEmptyString);
- colInf[noCols].sqlDataType = 0;
+ colInf[noCols].sqlDataType = 0;
}
TableName = tableName;
// Mark the end of the array
wxStrcpy(colInf[noCols].tableName, wxEmptyString);
wxStrcpy(colInf[noCols].colName, wxEmptyString);
- colInf[noCols].sqlDataType = 0;
+ colInf[noCols].sqlDataType = 0;
// Merge ...
int offset = 0;
if (pDb->errorList[i])
{
msg.Append(pDb->errorList[i]);
- if (wxStrcmp(pDb->errorList[i],wxT("")) != 0)
+ if (wxStrcmp(pDb->errorList[i], wxEmptyString)) != 0)
msg.Append(wxT("\n"));
// Clear the errmsg buffer so the next error will not
// end up showing the previous error that have occurred
- wxStrcpy(pDb->errorList[i],wxT(""));
+ wxStrcpy(pDb->errorList[i], wxEmptyString);
}
}
msg += wxT("\n");