Revision: 8705 https://osdn.net/projects/ttssh2/scm/svn/commits/8705 Author: zmatsuo Date: 2020-04-12 00:56:16 +0900 (Sun, 12 Apr 2020) Log Message: ----------- StrVarPtr() の戻り値を char * から const char * に変更 - StrVarPtr() で得たポインタを直接操作しないようにした - 従来は MaxStrLen byte の領域が保証されていた - 文字列が可変長となったため領域は可変長 - 新たな文字列を作成した後、SetStrVal() で再設定するようにした - 型を変更して警告やエラーが出る部分を修正した Modified Paths: -------------- trunk/teraterm/ttpmacro/ttl.cpp trunk/teraterm/ttpmacro/ttl.h trunk/teraterm/ttpmacro/ttl_gui.cpp trunk/teraterm/ttpmacro/ttmdde.c trunk/teraterm/ttpmacro/ttmdde.h trunk/teraterm/ttpmacro/ttmenc.c trunk/teraterm/ttpmacro/ttmenc.h trunk/teraterm/ttpmacro/ttmparse.c trunk/teraterm/ttpmacro/ttmparse.h -------------- next part -------------- Modified: trunk/teraterm/ttpmacro/ttl.cpp =================================================================== --- trunk/teraterm/ttpmacro/ttl.cpp 2020-04-11 15:56:06 UTC (rev 8704) +++ trunk/teraterm/ttpmacro/ttl.cpp 2020-04-11 15:56:16 UTC (rev 8705) @@ -2385,7 +2385,7 @@ char Temp[512]; WORD Err; TVarId VarId; - PCHAR VarStr; + const char *VarStr; int result = 0; /* failure */ Err = 0; @@ -2470,7 +2470,9 @@ return Err; } - result = GetSpecialFolder(StrVarPtr(VarId), sizeof(TStrVal), type); + char folder[MaxStrLen]; + result = GetSpecialFolder(folder, sizeof(folder), type); + SetStrVal(VarId, folder); SetResult(result); return Err; @@ -2483,7 +2485,7 @@ TStrVal Str1, Str2, tzStr; time_t time1; struct tm *ptm; - char *format; + const char *format; BOOL set_result; const char *tz = NULL; char tz_copy[128]; @@ -3610,7 +3612,7 @@ * src \x82Ɋ܂܂\xEA\x82\xE9 0x01 \x82\xF0 0x01 0x02 \x82ɒu\x82\xAB\x8A\xB7\x82\xA6\x82\xC4 dst \x82ɃR\x83s\x81[\x82\xB7\x82\xE9\x81B * TStrVal \x82ɂ\xCD 0x00 \x82\xAA\x8A܂܂\xEA\x82鎖\x82\xAA\x96\xB3\x82\xA2(\x8FI\x92[\x82Ƌ\xE6\x95ʂł\xAB\x82Ȃ\xA2)\x82̂\xC5 0x00 \x82͍l\x97\xB6\x82\xB7\x82\xE9\x95K\x97v\x82Ȃ\xB5\x81B */ -static void AddBroadcastString(char *dst, int dstlen, char *src) +static void AddBroadcastString(char *dst, int dstlen, const char *src) { int i; @@ -4390,7 +4392,11 @@ Err = ErrSyntax; if (Err!=0) return Err; - strncat_s(StrVarPtr(VarId),MaxStrLen,Str,_TRUNCATE); + char dest[MaxStrLen]; + const char *src = StrVarPtr(VarId); + strcpy_s(dest, MaxStrLen, src); + strncat_s(dest, MaxStrLen, Str, _TRUNCATE); + SetStrVal(VarId, dest); return Err; } @@ -4414,8 +4420,10 @@ SrcLen = strlen(Str)-From+1; if (Len > SrcLen) Len = SrcLen; if (Len < 0) Len = 0; - memcpy(StrVarPtr(VarId),&(Str[From-1]),Len); - StrVarPtr(VarId)[Len] = 0; + char dest[MaxStrLen]; + memcpy(dest,&(Str[From-1]),Len); + dest[Len] = 0; + SetStrVal(VarId, dest); return Err; } @@ -4531,7 +4539,9 @@ Err = ErrSyntax; if (Err!=0) return Err; - srcptr = StrVarPtr(VarId); + char dest[MaxStrLen]; + strcpy_s(dest, sizeof(dest), StrVarPtr(VarId)); + srcptr = dest; srclen = strlen(srcptr); if (Index <= 0 || Index > srclen+1) { Err = ErrSyntax; @@ -4543,6 +4553,7 @@ if (Err!=0) return Err; insert_string(srcptr, Index, Str); + SetStrVal(VarId, dest); return Err; } @@ -4597,7 +4608,9 @@ Err = ErrSyntax; if (Err!=0) return Err; - srcptr = StrVarPtr(VarId); + char dest[MaxStrLen]; + strcpy_s(dest, sizeof(dest), StrVarPtr(VarId)); + srcptr = dest; srclen = strlen(srcptr); if (Len <=0 || Index <= 0 || (Index-1 + Len) > srclen) { Err = ErrSyntax; @@ -4605,6 +4618,7 @@ if (Err!=0) return Err; remove_string(srcptr, Index, Len); + SetStrVal(VarId, dest); return Err; } @@ -4616,7 +4630,8 @@ TStrVal oldstr; TStrVal newstr; TStrVal tmpstr; - char *srcptr, *matchptr; + const char *srcptr; + const char *matchptr; char *p; int srclen, oldlen, matchlen; int pos, ret; @@ -4670,9 +4685,11 @@ goto error; } - strncpy_s(srcptr, MaxStrLen, tmpstr, pos + ret); - strncat_s(srcptr, MaxStrLen, newstr, _TRUNCATE); - strncat_s(srcptr, MaxStrLen, tmpstr + pos + ret + matchlen, _TRUNCATE); + char dest[MaxStrLen]; + strncpy_s(dest, sizeof(dest), tmpstr, pos + ret); + strncat_s(dest, sizeof(dest), newstr, _TRUNCATE); + strncat_s(dest, sizeof(dest), tmpstr + pos + ret + matchlen, _TRUNCATE); + SetStrVal(VarId, dest); result = 1; @@ -4703,7 +4720,10 @@ SetStrVal(VarId, srcstr); } else { // strspecial strvar - RestoreNewLine(StrVarPtr(VarId)); + char dest[MaxStrLen]; + strcpy_s(dest, sizeof(dest), StrVarPtr(VarId)); + RestoreNewLine(dest); + SetStrVal(VarId, dest); } return Err; @@ -4727,7 +4747,9 @@ Err = ErrSyntax; if (Err!=0) return Err; - srcptr = StrVarPtr(VarId); + char dest[MaxStrLen]; + strcpy_s(dest, sizeof(dest), StrVarPtr(VarId)); + srcptr = dest; srclen = strlen(srcptr); // \x8D폜\x82\xB7\x82镶\x8E\x9A\x82̃e\x81[\x83u\x83\x8B\x82\xF0\x8D\xEC\x82\xE9\x81B @@ -4760,6 +4782,7 @@ // \x8E\x9F\x82ɁA\x90擪\x82\xA9\x82\xE7\x8D\xED\x82\xE9\x81B remove_string(srcptr, 1, start); + SetStrVal(VarId, dest); return Err; } @@ -4889,7 +4912,8 @@ int srclen; int i; BOOL ary = FALSE; - char *srcptr, *p; + char *srcptr; + const char *p; Err = 0; GetStrVar(&VarId,&Err); @@ -4919,7 +4943,9 @@ if (!ary && (maxvar < 1 || maxvar > MAXVARNUM) ) return ErrSyntax; - srcptr = StrVarPtr(VarId); + char dest[MaxStrLen]; + strcpy_s(dest, sizeof(dest), StrVarPtr(VarId)); + srcptr = dest; srclen = strlen(srcptr); srcptr[0] = '\0'; @@ -4940,6 +4966,7 @@ } } } + SetStrVal(VarId, dest); return Err; #undef MAXVARNUM @@ -4986,7 +5013,7 @@ i++; } - strncpy_s(StrVarPtr(VarId), MaxStrLen, Str, _TRUNCATE); + SetStrVal(VarId, Str); return Err; } @@ -5016,7 +5043,7 @@ i++; } - strncpy_s(StrVarPtr(VarId), MaxStrLen, Str, _TRUNCATE); + SetStrVal(VarId, Str); return Err; } @@ -5977,10 +6004,9 @@ case TypString: if (StrConst) SetStrVal(VarId,Str); - else - // StrVarPtr \x82̕Ԃ\xE8\x92l\x82\xAA TStrVal \x82̃|\x83C\x83\x93\x83^\x82ł\xA0\x82邱\x82Ƃ\xF0\x8A\xFA\x91҂\xB5\x82ăT\x83C\x83Y\x82\xF0\x8CŒ\xE8 - // (2007.6.23 maya) - strncpy_s(StrVarPtr(VarId),MaxStrLen,StrVarPtr((TVarId)Val),_TRUNCATE); + else { + SetStrVal(VarId, StrVarPtr((TVarId)Val)); + } break; default: Err = ErrSyntax; @@ -6052,12 +6078,12 @@ // \x90\xB3\x8BK\x95\\x8C\xBB\x82ŃO\x83\x8B\x81[\x83v\x83}\x83b\x83`\x82\xB5\x82\xBD\x95\xB6\x8E\x9A\x97\xF1\x82\xF0\x8BL\x98^\x82\xB7\x82\xE9 // (2005.10.15 yutaka) -void SetGroupMatchStr(int no, PCHAR Str) +void SetGroupMatchStr(int no, const char *Str) { WORD VarType; TVarId VarId; char buf[128]; - char *p; + const char *p; if (Str == NULL) p = ""; Modified: trunk/teraterm/ttpmacro/ttl.h =================================================================== --- trunk/teraterm/ttpmacro/ttl.h 2020-04-11 15:56:06 UTC (rev 8704) +++ trunk/teraterm/ttpmacro/ttl.h 2020-04-11 15:56:16 UTC (rev 8705) @@ -48,7 +48,7 @@ void EndTTL(); void Exec(); void SetMatchStr(PCHAR Str); -void SetGroupMatchStr(int no, PCHAR Str); +void SetGroupMatchStr(int no, const char *Str); void SetInputStr(const char *Str); void SetResult(int ResultCode); BOOL CheckTimeout(); Modified: trunk/teraterm/ttpmacro/ttl_gui.cpp =================================================================== --- trunk/teraterm/ttpmacro/ttl_gui.cpp 2020-04-11 15:56:06 UTC (rev 8704) +++ trunk/teraterm/ttpmacro/ttl_gui.cpp 2020-04-11 15:56:16 UTC (rev 8705) @@ -184,8 +184,7 @@ } char *filenameU8 = ToU8W(filename); - char *dest = StrVarPtr(VarId); - strcpy(dest, filenameU8); + SetStrVal(VarId, filenameU8); free(filenameU8); SetResult(ret); @@ -285,9 +284,9 @@ if (CheckVar("inputstr",&ValType,&VarId) && (ValType==TypString)) { wchar_t input_string[MaxStrLen]; OpenInpDlg(input_string,wc::fromUtf8(Str1),wc::fromUtf8(Str2),wc::fromUtf8(Str3),Paswd); - char *output = StrVarPtr(VarId); - size_t str_len = MaxStrLen; - WideCharToUTF8(input_string, NULL, output, &str_len); + char *u8 = ToU8W(input_string); + SetStrVal(VarId, u8); + free(u8); } return Err; } Modified: trunk/teraterm/ttpmacro/ttmdde.c =================================================================== --- trunk/teraterm/ttpmacro/ttmdde.c 2020-04-11 15:56:06 UTC (rev 8704) +++ trunk/teraterm/ttpmacro/ttmdde.c 2020-04-11 15:56:16 UTC (rev 8705) @@ -360,7 +360,7 @@ } } -void DDEOut(PCHAR B) +void DDEOut(const char *B) { while (*B) { if (OutLen >= OutBufSize - 1) @@ -473,7 +473,7 @@ RegexActionType = REGEX_NONE; // regex disabled } -void SetWait(int Index, PCHAR Str) +void SetWait(int Index, const char *Str) { if (PWaitStr[Index-1]) free(PWaitStr[Index-1]); Modified: trunk/teraterm/ttpmacro/ttmdde.h =================================================================== --- trunk/teraterm/ttpmacro/ttmdde.h 2020-04-11 15:56:06 UTC (rev 8704) +++ trunk/teraterm/ttpmacro/ttmdde.h 2020-04-11 15:56:16 UTC (rev 8705) @@ -39,12 +39,12 @@ BOOL InitDDE(HWND HWin); void EndDDE(); void DDEOut1Byte(BYTE B); -void DDEOut(PCHAR B); +void DDEOut(const char *B); void DDESend(); PCHAR GetRecvLnBuff(); void FlushRecv(); void ClearWait(); -void SetWait(int Index, PCHAR Str); +void SetWait(int Index, const char *Str); void ClearWaitN(); void SetWaitN(int Len); int CmpWait(int Index, PCHAR Str); Modified: trunk/teraterm/ttpmacro/ttmenc.c =================================================================== --- trunk/teraterm/ttpmacro/ttmenc.c 2020-04-11 15:56:06 UTC (rev 8704) +++ trunk/teraterm/ttpmacro/ttmenc.c 2020-04-11 15:56:16 UTC (rev 8705) @@ -33,7 +33,7 @@ #include <stdlib.h> #include <string.h> -BOOL EncSeparate(PCHAR Str, int far *i, LPBYTE b) +BOOL EncSeparate(const char *Str, int far *i, LPBYTE b) { int cptr, bptr; unsigned int d; @@ -81,7 +81,7 @@ return d; } -void Encrypt(PCHAR InStr, PCHAR OutStr) +void Encrypt(const char *InStr, PCHAR OutStr) { int i, j; BYTE b, r, r2; Modified: trunk/teraterm/ttpmacro/ttmenc.h =================================================================== --- trunk/teraterm/ttpmacro/ttmenc.h 2020-04-11 15:56:06 UTC (rev 8704) +++ trunk/teraterm/ttpmacro/ttmenc.h 2020-04-11 15:56:16 UTC (rev 8705) @@ -33,7 +33,7 @@ extern "C" { #endif -void Encrypt(PCHAR InStr, PCHAR OutStr); +void Encrypt(const char *InStr, PCHAR OutStr); void Decrypt(PCHAR InStr, PCHAR OutStr); #ifdef __cplusplus Modified: trunk/teraterm/ttpmacro/ttmparse.c =================================================================== --- trunk/teraterm/ttpmacro/ttmparse.c 2020-04-11 15:56:06 UTC (rev 8704) +++ trunk/teraterm/ttpmacro/ttmparse.c 2020-04-11 15:56:16 UTC (rev 8705) @@ -1004,7 +1004,7 @@ #endif } -BOOL NewStrVar(const char *Name, PCHAR InitVal) +BOOL NewStrVar(const char *Name, const char *InitVal) { #if 0 long P; @@ -2003,7 +2003,7 @@ #endif } -PCHAR StrVarPtr(TVarId VarId) +const char *StrVarPtr(TVarId VarId) { #if 0 if (VarId >> 16) { @@ -2156,7 +2156,7 @@ } } -void GetAryVarByName(PVarId VarId, PCHAR Name, WORD VarType, LPWORD Err) +void GetAryVarByName(PVarId VarId, const char *Name, WORD VarType, LPWORD Err) { WORD typ; Modified: trunk/teraterm/ttpmacro/ttmparse.h =================================================================== --- trunk/teraterm/ttpmacro/ttmparse.h 2020-04-11 15:56:06 UTC (rev 8704) +++ trunk/teraterm/ttpmacro/ttmparse.h 2020-04-11 15:56:16 UTC (rev 8705) @@ -332,7 +332,7 @@ BOOL GetString(PCHAR Str, LPWORD Err); BOOL CheckVar(const char *Name, LPWORD VarType, PVarId VarId); BOOL NewIntVar(const char *Name, int InitVal); -BOOL NewStrVar(const char *Name, PCHAR InitVal); +BOOL NewStrVar(const char *Name, const char *InitVal); BOOL NewLabVar(const char *Name, BINT InitVal, WORD ILevel); int NewIntAryVar(const char *Name, int size); int NewStrAryVar(const char *Name, int size); @@ -347,13 +347,13 @@ void GetStrVal2(PCHAR Str, LPWORD Err, BOOL AutoConversion); void GetStrVar(PVarId VarId, LPWORD Err); void SetStrVal(TVarId VarId, const char *Str); -PCHAR StrVarPtr(TVarId VarId); +const char *StrVarPtr(TVarId VarId); void GetVarType(LPWORD ValType, int far *Val, LPWORD Err); TVarId GetIntVarFromArray(TVarId VarId, int Index, LPWORD Err); TVarId GetStrVarFromArray(TVarId VarId, int Index, LPWORD Err); BOOL GetIndex(int *Index, LPWORD Err); void GetAryVar(PVarId VarId, WORD VarType, LPWORD Err); -void GetAryVarByName(PVarId VarId, PCHAR Name, WORD VarType, LPWORD Err); +void GetAryVarByName(PVarId VarId, const char *Name, WORD VarType, LPWORD Err); void SetIntValInArray(TVarId VarId, int Index, int Val, LPWORD Err); void SetStrValInArray(TVarId VarId, int Index, PCHAR Str, LPWORD Err); int GetIntAryVarSize(TVarId VarId);