mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-04-05 18:16:23 +03:00
0024716: OSD_Path - remove excessive validity checks and allow non-ascii strings
First commit. Update for new IR
This commit is contained in:
parent
cca0f261aa
commit
30d33e7141
@ -128,12 +128,11 @@ raises ConstructionError, NullObject, OSDError, NumericError, ProgramError
|
||||
is static;
|
||||
---Purpose: Returns system dependent path resolving logical symbols.
|
||||
|
||||
IsValid (me ; aDependentName : AsciiString; aSysType : SysType=OSD_Default)
|
||||
returns Boolean is static;
|
||||
---Purpose: Returns TRUE if <aDependentName> is valid for this SysType.
|
||||
IsValid (myclass ; theDependentName : AsciiString; theSysType : SysType = OSD_Default)
|
||||
returns Boolean;
|
||||
---Purpose: Returns TRUE if <theDependentName> is valid for this SysType.
|
||||
---Level: Public
|
||||
|
||||
|
||||
UpTrek (me : in out) is static;
|
||||
---Purpose: This removes the last directory name in <aTrek>
|
||||
-- and returns result.
|
||||
@ -281,5 +280,5 @@ raises ConstructionError, NullObject, OSDError, NumericError, ProgramError
|
||||
myName : AsciiString;
|
||||
myExtension : AsciiString;
|
||||
myUNCFlag : Boolean ;
|
||||
SysDep : SysType; -- To allow system specific use
|
||||
mySysDep : SysType; -- To allow system specific use
|
||||
end Path from OSD;
|
||||
|
@ -12,14 +12,7 @@
|
||||
// Alternatively, this file may be used under the terms of Open CASCADE
|
||||
// commercial license or contractual agreement.
|
||||
|
||||
#ifndef WNT
|
||||
|
||||
#include <Standard_NumericError.hxx>
|
||||
#include <Standard_NullObject.hxx>
|
||||
#include <Standard_ProgramError.hxx>
|
||||
#include <Standard_ConstructionError.hxx>
|
||||
#include <OSD_Path.ixx>
|
||||
#include <OSD_WhoAmI.hxx>
|
||||
|
||||
static OSD_SysType whereAmI(){
|
||||
#if defined(__digital__) || defined(__FreeBSD__) || defined(SUNOS) || defined(__APPLE__)
|
||||
@ -34,7 +27,7 @@ static OSD_SysType whereAmI(){
|
||||
#elif defined(OS2)
|
||||
return OSD_WindowsNT;
|
||||
}
|
||||
#elif defined(WIN32)
|
||||
#elif defined(_WIN32) || defined(__WIN32__)
|
||||
return OSD_WindowsNT;
|
||||
}
|
||||
#elif defined(__CYGWIN32_) || defined(__MINGW32__)
|
||||
@ -61,10 +54,16 @@ static OSD_SysType whereAmI(){
|
||||
}
|
||||
#endif
|
||||
|
||||
#if !(defined(_WIN32) || defined(__WIN32__))
|
||||
|
||||
#include <Standard_NumericError.hxx>
|
||||
#include <Standard_NullObject.hxx>
|
||||
#include <Standard_ProgramError.hxx>
|
||||
#include <Standard_ConstructionError.hxx>
|
||||
#include <OSD_WhoAmI.hxx>
|
||||
|
||||
OSD_Path::OSD_Path(){
|
||||
SysDep = whereAmI();
|
||||
mySysDep = whereAmI();
|
||||
}
|
||||
|
||||
static void VmsExtract(const TCollection_AsciiString& what,
|
||||
@ -331,16 +330,13 @@ static void MacExtract(const TCollection_AsciiString& what,
|
||||
OSD_Path::OSD_Path(const TCollection_AsciiString& aDependentName,
|
||||
const OSD_SysType aSysType){
|
||||
|
||||
SysDep = whereAmI();
|
||||
|
||||
if (!IsValid(aDependentName,aSysType))
|
||||
Standard_ProgramError::Raise("OSD_Path::OSD_Path : Invalid dependent name");
|
||||
mySysDep = whereAmI();
|
||||
|
||||
OSD_SysType todo;
|
||||
// Standard_Integer i,l;
|
||||
|
||||
if (aSysType == OSD_Default) {
|
||||
todo = SysDep;
|
||||
todo = mySysDep;
|
||||
} else {
|
||||
todo = aSysType;
|
||||
}
|
||||
@ -381,7 +377,7 @@ OSD_Path::OSD_Path(const TCollection_AsciiString& Nod,
|
||||
const TCollection_AsciiString& Nam,
|
||||
const TCollection_AsciiString& ext){
|
||||
|
||||
SysDep = whereAmI();
|
||||
mySysDep = whereAmI();
|
||||
|
||||
SetValues ( Nod, UsrNm, Passwd, Dsk, Trk, Nam, ext);
|
||||
|
||||
@ -437,111 +433,6 @@ void OSD_Path::SetValues(const TCollection_AsciiString& Nod,
|
||||
myExtension = ext;
|
||||
}
|
||||
|
||||
|
||||
static Standard_Boolean Analyse_VMS(const TCollection_AsciiString& name){
|
||||
if (name.Search("/") != -1)
|
||||
return(Standard_False);
|
||||
if (name.Search("@") != -1)
|
||||
return(Standard_False);
|
||||
if (name.Search("\\") != -1)
|
||||
return(Standard_False);
|
||||
|
||||
|
||||
return Standard_True;
|
||||
}
|
||||
|
||||
static Standard_Boolean Analyse_DOS(const TCollection_AsciiString& name){
|
||||
|
||||
// if (name.Search("$") != -1)
|
||||
// return(Standard_False);
|
||||
// if (name.Search(" ") != -1)
|
||||
// return(Standard_False);
|
||||
|
||||
if (name.Search("/") != -1)
|
||||
return(Standard_False);
|
||||
if (name.Search(":") != -1)
|
||||
return(Standard_False);
|
||||
if (name.Search("*") != -1)
|
||||
return(Standard_False);
|
||||
if (name.Search("?") != -1)
|
||||
return(Standard_False);
|
||||
if (name.Search(".") != name.SearchFromEnd("."))
|
||||
return(Standard_False);
|
||||
if (name.Search("\"") != -1)
|
||||
return(Standard_False);
|
||||
if (name.Search("<") != -1)
|
||||
return(Standard_False);
|
||||
if (name.Search(">") != -1)
|
||||
return(Standard_False);
|
||||
if (name.Search("|") != -1)
|
||||
return(Standard_False);
|
||||
|
||||
return Standard_True;
|
||||
// Rajouter les tests sur les noms de 8 caracteres au maximum et
|
||||
// l'extension de 3 caracteres.
|
||||
}
|
||||
|
||||
static Standard_Boolean Analyse_MACOS(const TCollection_AsciiString& name){
|
||||
Standard_Integer i = name.Search(":");
|
||||
Standard_Integer l = name.Length();
|
||||
|
||||
if (i == -1)
|
||||
if (l > 31)
|
||||
return(Standard_False);
|
||||
else
|
||||
return(Standard_True);
|
||||
else
|
||||
return(Standard_True);
|
||||
}
|
||||
|
||||
static Standard_Boolean Analyse_UNIX(const TCollection_AsciiString& /*name*/)
|
||||
{
|
||||
// if (name.Search("$") != -1) Unix filename can have a "$" (LD)
|
||||
// return(Standard_False);
|
||||
|
||||
// all characters are allowed in UNIX file name, except null '\0' and slash '/'
|
||||
|
||||
// if (name.Search("[") != -1)
|
||||
// return(Standard_False);
|
||||
// if (name.Search("]") != -1)
|
||||
// return(Standard_False);
|
||||
// if (name.Search("\\") != -1)
|
||||
// return(Standard_False);
|
||||
// if (name.Search(" ") != -1)
|
||||
// return(Standard_False);
|
||||
|
||||
return(Standard_True);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Standard_Boolean OSD_Path::IsValid(const TCollection_AsciiString& aDependentName,
|
||||
const OSD_SysType aSysType)const{
|
||||
if (aDependentName.Length()==0) return(Standard_True);
|
||||
if (!aDependentName.IsAscii()) return(Standard_False);
|
||||
|
||||
OSD_SysType provSys;
|
||||
if (aSysType == OSD_Default) provSys = SysDep;
|
||||
else provSys = aSysType;
|
||||
|
||||
switch (provSys){
|
||||
case OSD_VMS:
|
||||
return(Analyse_VMS(aDependentName));
|
||||
case OSD_OS2:
|
||||
case OSD_WindowsNT:
|
||||
return(Analyse_DOS(aDependentName));
|
||||
case OSD_MacOs:
|
||||
return(Analyse_MACOS(aDependentName));
|
||||
default:
|
||||
return(Analyse_UNIX(aDependentName));
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void OSD_Path::UpTrek(){
|
||||
Standard_Integer length=TrekLength();
|
||||
|
||||
@ -747,7 +638,7 @@ TCollection_AsciiString pDisk;
|
||||
OSD_SysType pType;
|
||||
|
||||
if (aType == OSD_Default) {
|
||||
pType = SysDep;
|
||||
pType = mySysDep;
|
||||
} else {
|
||||
pType = aType;
|
||||
}
|
||||
@ -1008,10 +899,9 @@ void OSD_Path::SetExtension(const TCollection_AsciiString& aName){
|
||||
#else
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
//------------------- Windows NT sources for OSD_Path -------------------
|
||||
//------------------- Windows sources for OSD_Path -------------------
|
||||
//------------------------------------------------------------------------
|
||||
|
||||
#include <OSD_Path.hxx>
|
||||
#include <Standard_ProgramError.hxx>
|
||||
|
||||
#include <windows.h>
|
||||
@ -1031,7 +921,7 @@ OSD_Path :: OSD_Path (
|
||||
const OSD_SysType aSysType
|
||||
) :
|
||||
myUNCFlag(Standard_False),
|
||||
SysDep(OSD_WindowsNT)
|
||||
mySysDep(OSD_WindowsNT)
|
||||
{
|
||||
|
||||
Standard_Integer i, j, len;
|
||||
@ -1098,7 +988,7 @@ OSD_Path :: OSD_Path (
|
||||
const TCollection_AsciiString& anExtension
|
||||
) :
|
||||
myUNCFlag(Standard_False),
|
||||
SysDep(OSD_WindowsNT)
|
||||
mySysDep(OSD_WindowsNT)
|
||||
{
|
||||
|
||||
SetValues ( aNode, aUsername, aPassword, aDisk, aTrek, aName, anExtension );
|
||||
@ -1201,17 +1091,6 @@ void OSD_Path :: SystemName (
|
||||
|
||||
} // end OSD_Path :: SystemName
|
||||
|
||||
Standard_Boolean OSD_Path :: IsValid (
|
||||
const TCollection_AsciiString& /*aDependentName*/,
|
||||
const OSD_SysType aSysType
|
||||
) const {
|
||||
|
||||
TEST_RAISE( aSysType, "IsValid" );
|
||||
|
||||
return Standard_True;
|
||||
|
||||
} // end OSD_Path :: IsValid
|
||||
|
||||
void OSD_Path :: UpTrek () {
|
||||
|
||||
Standard_Integer pos = myTrek.SearchFromEnd ( "|" );
|
||||
@ -1566,7 +1445,79 @@ static void __fastcall _remove_dup ( TCollection_AsciiString& str ) {
|
||||
|
||||
} // end _remove_dup
|
||||
|
||||
#endif
|
||||
#endif // Windows sources for OSD_Path
|
||||
|
||||
// =======================================================================
|
||||
// function : Analyse_VMS
|
||||
// purpose :
|
||||
// =======================================================================
|
||||
static Standard_Boolean Analyse_VMS (const TCollection_AsciiString& theName)
|
||||
{
|
||||
if (theName.Search ("/") != -1
|
||||
|| theName.Search ("@") != -1
|
||||
|| theName.Search ("\\") != -1)
|
||||
{
|
||||
return Standard_False;
|
||||
}
|
||||
|
||||
return Standard_True;
|
||||
}
|
||||
|
||||
// =======================================================================
|
||||
// function : Analyse_DOS
|
||||
// purpose :
|
||||
// =======================================================================
|
||||
static Standard_Boolean Analyse_DOS(const TCollection_AsciiString& theName)
|
||||
{
|
||||
if (theName.Search ("/") != -1
|
||||
|| theName.Search (":") != -1
|
||||
|| theName.Search ("*") != -1
|
||||
|| theName.Search ("?") != -1
|
||||
|| theName.Search ("\"") != -1
|
||||
|| theName.Search ("<") != -1
|
||||
|| theName.Search (">") != -1
|
||||
|| theName.Search ("|") != -1)
|
||||
{
|
||||
return Standard_False;
|
||||
}
|
||||
|
||||
return Standard_True;
|
||||
}
|
||||
|
||||
// =======================================================================
|
||||
// function : Analyse_MACOS
|
||||
// purpose :
|
||||
// =======================================================================
|
||||
static Standard_Boolean Analyse_MACOS (const TCollection_AsciiString& theName)
|
||||
{
|
||||
return theName.Search(":") == -1 ? theName.Length() <= 31 : Standard_True;
|
||||
}
|
||||
|
||||
// =======================================================================
|
||||
// function : IsValid
|
||||
// purpose :
|
||||
// =======================================================================
|
||||
Standard_Boolean OSD_Path::IsValid (const TCollection_AsciiString& theDependentName,
|
||||
const OSD_SysType theSysType)
|
||||
{
|
||||
if (theDependentName.Length() == 0)
|
||||
{
|
||||
return Standard_True;
|
||||
}
|
||||
|
||||
switch (theSysType == OSD_Default ? whereAmI() : theSysType)
|
||||
{
|
||||
case OSD_VMS:
|
||||
return Analyse_VMS (theDependentName);
|
||||
case OSD_OS2:
|
||||
case OSD_WindowsNT:
|
||||
return Analyse_DOS (theDependentName);
|
||||
case OSD_MacOs:
|
||||
return Analyse_MACOS (theDependentName);
|
||||
default:
|
||||
return Standard_True;
|
||||
}
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user