svnno****@sourc*****
svnno****@sourc*****
2011年 9月 14日 (水) 03:38:53 JST
Revision: 4631 http://sourceforge.jp/projects/ttssh2/svn/view?view=rev&revision=4631 Author: doda Date: 2011-09-14 03:38:52 +0900 (Wed, 14 Sep 2011) Log Message: ----------- ・配列の宣言時、要素数の上限チェックを行うようにした。 ・配列用のメモリが確保できなかった場合のエラーメッセージを分けた。 Modified Paths: -------------- trunk/teraterm/ttpmacro/ttl.c trunk/teraterm/ttpmacro/ttmparse.c trunk/teraterm/ttpmacro/ttmparse.h -------------- next part -------------- Modified: trunk/teraterm/ttpmacro/ttl.c =================================================================== --- trunk/teraterm/ttpmacro/ttl.c 2011-09-13 15:56:41 UTC (rev 4630) +++ trunk/teraterm/ttpmacro/ttl.c 2011-09-13 18:38:52 UTC (rev 4631) @@ -721,12 +721,10 @@ if (Err!=0) return Err; if (type == RsvIntDim) { - if (!NewIntAryVar(Name, size)) - Err = ErrTooManyVar; + Err = NewIntAryVar(Name, size); } - else { - if (!NewStrAryVar(Name, size)) - Err = ErrTooManyVar; + else { // type == RsvStrDim + Err = NewStrAryVar(Name, size); } return Err; } Modified: trunk/teraterm/ttpmacro/ttmparse.c =================================================================== --- trunk/teraterm/ttpmacro/ttmparse.c 2011-09-13 15:56:41 UTC (rev 4630) +++ trunk/teraterm/ttpmacro/ttmparse.c 2011-09-13 18:38:52 UTC (rev 4631) @@ -106,6 +106,7 @@ case ErrCloseComment: strncpy_s(Msg, sizeof(Msg),"\"*/\" expected.", _TRUNCATE); break; case ErrOutOfRange: strncpy_s(Msg, sizeof(Msg), "Index out of range.", _TRUNCATE); break; case ErrCloseBracket: strncpy_s(Msg, sizeof(Msg), "\"]\" expected.", _TRUNCATE); break; + case ErrFewMemory: strncpy_s(Msg, sizeof(Msg), "Can't allocate memory.", _TRUNCATE); break; } i = OpenErrDlg(Msg,LineBuff); @@ -852,34 +853,36 @@ return TRUE; } -BOOL NewIntAryVar(PCHAR Name, int size) +int NewIntAryVar(PCHAR Name, int size) { long P; - if (IntAryVarCount >= MaxNumOfIntAryVar) return FALSE; + if (IntAryVarCount >= MaxNumOfIntAryVar) return ErrTooManyVar; + if (size <= 0 || size > 65536) return ErrOutOfRange; - if ((IntAryVal[IntAryVarCount].val = calloc(size, sizeof(int))) == NULL) return FALSE; + if ((IntAryVal[IntAryVarCount].val = calloc(size, sizeof(int))) == NULL) return ErrFewMemory; IntAryVal[IntAryVarCount].size = size; P = (IntAryVarIdOff + IntAryVarCount) * MaxNameLen; strncpy_s(&NameBuff[P], MaxNameLen, Name, _TRUNCATE); IntAryVarCount++; - return TRUE; + return 0; } -BOOL NewStrAryVar(PCHAR Name, int size) +int NewStrAryVar(PCHAR Name, int size) { long P; - if (StrAryVarCount >= MaxNumOfStrAryVar) return FALSE; + if (StrAryVarCount >= MaxNumOfStrAryVar) return ErrTooManyVar; + if (size <= 0 || size > 65536) return ErrOutOfRange; - if ((StrAryVal[StrAryVarCount].val = calloc(size, sizeof(TStrVal))) == NULL) return FALSE; + if ((StrAryVal[StrAryVarCount].val = calloc(size, sizeof(TStrVal))) == NULL) return ErrFewMemory; StrAryVal[StrAryVarCount].size = size; P = (StrAryVarIdOff + StrAryVarCount) * MaxNameLen; strncpy_s(&NameBuff[P], MaxNameLen, Name, _TRUNCATE); StrAryVarCount++; - return TRUE; + return 0; } BOOL NewLabVar(PCHAR Name, BINT InitVal, WORD ILevel) Modified: trunk/teraterm/ttpmacro/ttmparse.h =================================================================== --- trunk/teraterm/ttpmacro/ttmparse.h 2011-09-13 15:56:41 UTC (rev 4630) +++ trunk/teraterm/ttpmacro/ttmparse.h 2011-09-13 18:38:52 UTC (rev 4631) @@ -36,6 +36,7 @@ #define ErrCloseComment 16 #define ErrOutOfRange 17 #define ErrCloseBracket 18 +#define ErrFewMemory 19 #define TypUnknown 0 #define TypInteger 1 @@ -280,8 +281,8 @@ BOOL NewIntVar(PCHAR Name, int InitVal); BOOL NewStrVar(PCHAR Name, PCHAR InitVal); BOOL NewLabVar(PCHAR Name, BINT InitVal, WORD ILevel); -BOOL NewIntAryVar(PCHAR Name, int size); -BOOL NewStrAryVar(PCHAR Name, int size); +int NewIntAryVar(PCHAR Name, int size); +int NewStrAryVar(PCHAR Name, int size); void DelLabVar(WORD ILevel); void CopyLabel(WORD ILabel, BINT far *Ptr, LPWORD Level); BOOL GetExpression(LPWORD ValType, int far *Val, LPWORD Err);