From: David J. <d_j...@us...> - 2001-02-18 22:16:35
|
Update of /cvsroot/firebird/interclient/20/dev/interserver In directory usw-pr-cvs1:/tmp/cvs-serv24600 Modified Files: IB_Catalog.cpp IB_Catalog.h NetTCP.cpp Log Message: Modified to make windows compilation more likely and removed buffer overflow problem Index: IB_Catalog.cpp =================================================================== RCS file: /cvsroot/firebird/interclient/20/dev/interserver/IB_Catalog.cpp,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** IB_Catalog.cpp 2001/02/06 15:26:45 1.2 --- IB_Catalog.cpp 2001/02/18 22:17:27 1.3 *************** *** 81,84 **** --- 81,89 ---- IB_Catalog::decimalName__ = "DECIMAL"; + const char* const + IB_Catalog::spaces = " "; //31 spaces, max identifier length + + + // CJL-IB6 -- end *************** *** 328,331 **** --- 333,341 ---- IB_STRING column) { + if (strlen(pattern) > 2 * 31) { //this would have every char an escaped wildcard + throw new IB_SQLException (IB_SQLException::engine__default_0__, + IB_SQLException::invalidArgumentException__); //not a very informative message + } + if (strcmp(pattern, "%") == 0) { //all tables requested, leave out name condition *************** *** 347,363 **** // sprintf(target, ! "%s || '%s' like '%s%s%%' escape '\\' and ", ! column, ! spaces, ! pattern, ! spaces); } } //david jencks 1-25-2001 rewritten IB_Statement* IB_Catalog::getProcedures (const IB_STRING procedureNamePattern) { ! char nameCondition[128]; ConstructNameCondition(procedureNamePattern, nameCondition, "RDB$PROCEDURE_NAME"); --- 357,377 ---- // sprintf(target, ! "%s || '%s' like '%s%s%%' escape '\\' and ", //31 chars + insertions ! column, // <=31 chars, supplied by us ! spaces, //31 ! pattern, //legal is <= 2 * 31: every char is escaped wildcard ! spaces); //31 ! //total is 5*31 + 31 = 186 } } + #define maxConditionBufferLength 186 //see calculation above. + + //david jencks 1-25-2001 rewritten IB_Statement* IB_Catalog::getProcedures (const IB_STRING procedureNamePattern) { ! char nameCondition[maxConditionBufferLength]; ConstructNameCondition(procedureNamePattern, nameCondition, "RDB$PROCEDURE_NAME"); *************** *** 385,392 **** ! char procedureNameCondition[128]; ConstructNameCondition(procedureNamePattern, procedureNameCondition, "P.RDB$PROCEDURE_NAME"); ! char parameterNameCondition[128]; ConstructNameCondition(columnNamePattern, parameterNameCondition, "PP.RDB$PARAMETER_NAME"); --- 399,406 ---- ! char procedureNameCondition[maxConditionBufferLength]; ConstructNameCondition(procedureNamePattern, procedureNameCondition, "P.RDB$PROCEDURE_NAME"); ! char parameterNameCondition[maxConditionBufferLength]; ConstructNameCondition(columnNamePattern, parameterNameCondition, "PP.RDB$PARAMETER_NAME"); *************** *** 438,442 **** //these will be handled by the exact match form if all wildcards are escaped. ! char nameCondition[128]; ConstructNameCondition(tableNamePattern, nameCondition, "RDB$RELATION_NAME"); --- 452,456 ---- //these will be handled by the exact match form if all wildcards are escaped. ! char nameCondition[maxConditionBufferLength]; ConstructNameCondition(tableNamePattern, nameCondition, "RDB$RELATION_NAME"); *************** *** 545,554 **** //heavily modified by david jencks 1-25-2001 to remove ridiculous SQL - char tableNameCondition[128]; ConstructNameCondition(tableNamePattern, tableNameCondition, "RF.RDB$RELATION_NAME"); - ! char columnNameCondition[128]; ConstructNameCondition(columnNamePattern, columnNameCondition, "RF.RDB$FIELD_NAME"); --- 559,567 ---- //heavily modified by david jencks 1-25-2001 to remove ridiculous SQL + char tableNameCondition[maxConditionBufferLength]; ConstructNameCondition(tableNamePattern, tableNameCondition, "RF.RDB$RELATION_NAME"); ! char columnNameCondition[maxConditionBufferLength]; ConstructNameCondition(columnNamePattern, columnNameCondition, "RF.RDB$FIELD_NAME"); *************** *** 570,574 **** " RDB$RELATION_FIELDS RF," " RDB$FIELDS F " ! "where %s%s" " RF.RDB$FIELD_SOURCE = F.RDB$FIELD_NAME " "order by 1, 10", --- 583,587 ---- " RDB$RELATION_FIELDS RF," " RDB$FIELDS F " ! "where \n%s\n%s\n" " RF.RDB$FIELD_SOURCE = F.RDB$FIELD_NAME " "order by 1, 10", *************** *** 585,589 **** { ! char columnNameCondition[128]; ConstructNameCondition(columnNamePattern, columnNameCondition, "RF.RDB$FIELD_NAME"); --- 598,602 ---- { ! char columnNameCondition[maxConditionBufferLength]; ConstructNameCondition(columnNamePattern, columnNameCondition, "RF.RDB$FIELD_NAME"); *************** *** 620,624 **** { ! char tableNameCondition[128]; ConstructNameCondition(tableNamePattern, tableNameCondition, "RDB$RELATION_NAME"); --- 633,637 ---- { ! char tableNameCondition[maxConditionBufferLength]; ConstructNameCondition(tableNamePattern, tableNameCondition, "RDB$RELATION_NAME"); Index: IB_Catalog.h =================================================================== RCS file: /cvsroot/firebird/interclient/20/dev/interserver/IB_Catalog.h,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** IB_Catalog.h 2001/02/06 15:29:25 1.2 --- IB_Catalog.h 2001/02/18 22:17:27 1.3 *************** *** 277,281 **** //david jencks 1-24-2001 ! static const char* const spaces = " "; IB_Statement* createStatement (); --- 277,281 ---- //david jencks 1-24-2001 ! static const char* const spaces; IB_Statement* createStatement (); Index: NetTCP.cpp =================================================================== RCS file: /cvsroot/firebird/interclient/20/dev/interserver/NetTCP.cpp,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** NetTCP.cpp 2001/02/06 15:38:22 1.2 --- NetTCP.cpp 2001/02/18 22:17:27 1.3 *************** *** 145,148 **** --- 145,151 ---- //david jencks 1-19-2001 begin // int clilen, on; + #ifndef socklen_t //problem on ms compiler + #define socklen_t size_t //problem on rhlinux 7, socklen_t is uint, size_t is int + #endif int on; socklen_t clilen; |