$OpenBSD: patch-src_common_filefn_cpp,v 1.1.1.1 2004/07/16 21:01:35 todd Exp $ --- src/common/filefn.cpp.orig Sun Jun 8 17:58:14 2003 +++ src/common/filefn.cpp Thu Jun 26 11:05:10 2003 @@ -169,6 +169,8 @@ const off_t wxInvalidOffset = (off_t)-1; // macros // ---------------------------------------------------------------------------- +#define min(a, b) (((a) < (b)) ? (a) : (b)) + // we need to translate Mac filenames before passing them to OS functions #define OS_FILENAME(s) (s.fn_str()) @@ -299,8 +301,8 @@ wxString wxPathList::FindValidPath (cons wxStrcpy (wxFileFunctionsBuffer, path); wxChar ch = wxFileFunctionsBuffer[wxStrlen(wxFileFunctionsBuffer)-1]; if (ch != wxT('\\') && ch != wxT('/')) - wxStrcat (wxFileFunctionsBuffer, wxT("/")); - wxStrcat (wxFileFunctionsBuffer, filename); + strlcat (wxFileFunctionsBuffer, wxT("/"), sizeof(wxFileFunctionsBuffer)); + strlcat (wxFileFunctionsBuffer, filename, sizeof(wxFileFunctionsBuffer)); #ifdef __WINDOWS__ wxUnix2DosFilename (wxFileFunctionsBuffer); #endif @@ -479,12 +481,12 @@ wxChar *wxCopyAbsolutePath(const wxStrin wxChar ch = buf[wxStrlen(buf) - 1]; #ifdef __WXMSW__ if (ch != wxT('\\') && ch != wxT('/')) - wxStrcat(buf, wxT("\\")); + strlcat(buf, wxT("\\"), sizeof(buf)); #else if (ch != wxT('/')) - wxStrcat(buf, wxT("/")); + strlcat(buf, wxT("/"), sizeof(buf)); #endif - wxStrcat(buf, wxFileFunctionsBuffer); + strlcat(buf, wxFileFunctionsBuffer, sizeof(buf)); return copystring( wxRealPath(buf) ); } return copystring( wxFileFunctionsBuffer ); @@ -684,12 +686,12 @@ wxContractPath (const wxString& filename if (envname != WXSTRINGCAST NULL && (val = wxGetenv (WXSTRINGCAST envname)) != NULL && (tcp = wxStrstr (dest, val)) != NULL) { - wxStrcpy (wxFileFunctionsBuffer, tcp + wxStrlen (val)); - *tcp++ = wxT('$'); - *tcp++ = wxT('{'); - wxStrcpy (tcp, WXSTRINGCAST envname); - wxStrcat (tcp, wxT("}")); - wxStrcat (tcp, wxFileFunctionsBuffer); + strlcpy(wxFileFunctionsBuffer, dest, min(tcp-dest+1, sizeof(wxFileFunctionsBuffer))); + strlcat(wxFileFunctionsBuffer, wxT("${"), sizeof(wxFileFunctionsBuffer)); + strlcat(wxFileFunctionsBuffer, WXSTRINGCAST envname, sizeof(wxFileFunctionsBuffer)); + strlcat(wxFileFunctionsBuffer, wxT("}"), sizeof(wxFileFunctionsBuffer)); + strlcat(wxFileFunctionsBuffer, tcp + strlen(val), sizeof(wxFileFunctionsBuffer)); + strlcpy(dest, wxFileFunctionsBuffer, sizeof(dest)); } // Handle User's home (ignore root homes!) @@ -698,11 +700,11 @@ wxContractPath (const wxString& filename (len = wxStrlen(val)) > 2 && wxStrncmp(dest, val, len) == 0) { - wxStrcpy(wxFileFunctionsBuffer, wxT("~")); + strlcpy(wxFileFunctionsBuffer, wxT("~"), sizeof(wxFileFunctionsBuffer)); if (user != wxT("")) - wxStrcat(wxFileFunctionsBuffer, (const wxChar*) user); - wxStrcat(wxFileFunctionsBuffer, dest + len); - wxStrcpy (dest, wxFileFunctionsBuffer); + strlcat(wxFileFunctionsBuffer, (const wxChar*) user, sizeof(wxFileFunctionsBuffer)); + strlcat(wxFileFunctionsBuffer, dest + len, sizeof(wxFileFunctionsBuffer)); + strlcpy(dest, wxFileFunctionsBuffer, sizeof(dest)); } return dest; @@ -899,7 +901,7 @@ wxString wxMacFSSpec2MacFilename( const if (theStatus == noErr) { // append file name to path // includes previously prepended path separator - strcat(thePath, theFileName); + strlcat(thePath, theFileName, sizeof(thePath)); } // create path string for return value @@ -947,9 +949,8 @@ void wxMacFilename2FSSpec( const char *p if ( strchr( path , ':' ) == NULL ) { // try whether it is a volume / or a mounted volume - strncpy( sMacFileNameConversion , path , 1000 ) ; - sMacFileNameConversion[998] = 0 ; - strcat( sMacFileNameConversion , ":" ) ; + strlcpy( sMacFileNameConversion , path , sizeof(sMacFileNameConversion)) ; + strlcat( sMacFileNameConversion , ":" , sizeof(sMacFileNameConversion)) ; err = FSpLocationFromFullPath( strlen(sMacFileNameConversion) , sMacFileNameConversion , spec ) ; } else