[Ttssh2-commit] [4631] ・配列の宣言時、要素数の上限チェックを行うようにした。

Back to archive index

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);



Ttssh2-commit メーリングリストの案内
Back to archive index