Skip to content

Commit 73ff338

Browse files
committed
C++: Add CStringT tests.
1 parent ba0ba15 commit 73ff338

File tree

3 files changed

+529
-0
lines changed

3 files changed

+529
-0
lines changed

cpp/ql/test/library-tests/dataflow/taint-tests/atl.cpp

Lines changed: 201 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1009,3 +1009,204 @@ void test_CSimpleStringT() {
10091009

10101010
sink(s1[0]); // $ ir
10111011
}
1012+
1013+
template<typename T>
1014+
struct MakeOther {};
1015+
1016+
template<>
1017+
struct MakeOther<char> {
1018+
using other_t = wchar_t;
1019+
};
1020+
1021+
template<>
1022+
struct MakeOther<wchar_t> {
1023+
using other_t = char;
1024+
};
1025+
1026+
template<typename BaseType>
1027+
struct CStringT : public CSimpleStringT<BaseType> {
1028+
using XCHAR = BaseType; // simplified
1029+
using YCHAR = typename MakeOther<BaseType>::other_t; // simplified
1030+
using PCXSTR = typename CSimpleStringT<BaseType>::PCXSTR;
1031+
using PXSTR = typename CSimpleStringT<BaseType>::PXSTR;
1032+
CStringT() throw();
1033+
1034+
CStringT(IAtlStringMgr* pStringMgr) throw();
1035+
CStringT(const VARIANT& varSrc);
1036+
CStringT(const VARIANT& varSrc, IAtlStringMgr* pStringMgr);
1037+
CStringT(const CStringT& strSrc);
1038+
CStringT(const CSimpleStringT<BaseType>& strSrc);
1039+
CStringT(const XCHAR* pszSrc);
1040+
CStringT(const YCHAR* pszSrc);
1041+
CStringT(LPCSTR pszSrc, IAtlStringMgr* pStringMgr);
1042+
CStringT(LPCWSTR pszSrc, IAtlStringMgr* pStringMgr);
1043+
CStringT(const unsigned char* pszSrc);
1044+
CStringT(char* pszSrc);
1045+
CStringT(unsigned char* pszSrc);
1046+
CStringT(wchar_t* pszSrc);
1047+
CStringT(const unsigned char* pszSrc, IAtlStringMgr* pStringMgr);
1048+
CStringT(char ch, int nLength = 1);
1049+
CStringT(wchar_t ch, int nLength = 1);
1050+
CStringT(const XCHAR* pch, int nLength);
1051+
CStringT(const YCHAR* pch, int nLength);
1052+
CStringT(const XCHAR* pch, int nLength, IAtlStringMgr* pStringMgr);
1053+
CStringT(const YCHAR* pch, int nLength, IAtlStringMgr* pStringMgr);
1054+
1055+
operator CSimpleStringT<BaseType> &();
1056+
1057+
~CStringT() throw();
1058+
1059+
BSTR AllocSysString() const;
1060+
void AppendFormat(PCXSTR pszFormat, ...);
1061+
void AppendFormat(UINT nFormatID, ...);
1062+
int Delete(int iIndex, int nCount = 1);
1063+
int Find(PCXSTR pszSub, int iStart=0) const throw();
1064+
int Find(XCHAR ch, int iStart=0) const throw();
1065+
int FindOneOf(PCXSTR pszCharSet) const throw();
1066+
void Format(UINT nFormatID, ...);
1067+
void Format(PCXSTR pszFormat, ...);
1068+
BOOL GetEnvironmentVariable(PCXSTR pszVar);
1069+
int Insert(int iIndex, PCXSTR psz);
1070+
int Insert(int iIndex, XCHAR ch);
1071+
CStringT Left(int nCount) const;
1072+
BOOL LoadString(HINSTANCE hInstance, UINT nID, WORD wLanguageID);
1073+
BOOL LoadString(HINSTANCE hInstance, UINT nID);
1074+
BOOL LoadString(UINT nID);
1075+
CStringT& MakeLower();
1076+
CStringT& MakeReverse();
1077+
CStringT& MakeUpper();
1078+
CStringT Mid(int iFirst, int nCount) const;
1079+
CStringT Mid(int iFirst) const;
1080+
int Replace(PCXSTR pszOld, PCXSTR pszNew);
1081+
int Replace(XCHAR chOld, XCHAR chNew);
1082+
CStringT Right(int nCount) const;
1083+
BSTR SetSysString(BSTR* pbstr) const;
1084+
CStringT SpanExcluding(PCXSTR pszCharSet) const;
1085+
CStringT SpanIncluding(PCXSTR pszCharSet) const;
1086+
CStringT Tokenize(PCXSTR pszTokens, int& iStart) const;
1087+
CStringT& Trim(XCHAR chTarget);
1088+
CStringT& Trim(PCXSTR pszTargets);
1089+
CStringT& Trim();
1090+
CStringT& TrimLeft(XCHAR chTarget);
1091+
CStringT& TrimLeft(PCXSTR pszTargets);
1092+
CStringT& TrimLeft();
1093+
CStringT& TrimRight(XCHAR chTarget);
1094+
CStringT& TrimRight(PCXSTR pszTargets);
1095+
CStringT& TrimRight();
1096+
};
1097+
1098+
void test_CStringT() {
1099+
VARIANT v = source<VARIANT>();
1100+
1101+
CStringT<char> s1(v);
1102+
sink(s1.GetString()); // $ ir
1103+
1104+
CStringT<char> s2(v, nullptr);
1105+
sink(s2.GetString()); // $ MISSING: ir
1106+
1107+
CStringT<char> s3(s2);
1108+
sink(s3.GetString()); // $ MISSING: ir
1109+
1110+
char* x = indirect_source<char>();
1111+
CStringT<char> s4(x);
1112+
sink(s4.GetString()); // $ ir
1113+
1114+
wchar_t* y = indirect_source<wchar_t>();
1115+
CStringT<wchar_t> s5(y);
1116+
sink(s5.GetString()); // $ ir
1117+
1118+
CStringT<char> s6(x, nullptr);
1119+
sink(s6.GetString()); // $ MISSING: ir
1120+
1121+
CStringT<wchar_t> s7(y, nullptr);
1122+
sink(s7.GetString()); // $ MISSING: ir
1123+
1124+
unsigned char* ucs = indirect_source<unsigned char>();
1125+
CStringT<char> s8(ucs);
1126+
sink(s8.GetString()); // $ ir
1127+
1128+
char c = source<char>();
1129+
CStringT<char> s9(c);
1130+
sink(s9.GetString()); // $ ir
1131+
1132+
wchar_t wc = source<wchar_t>();
1133+
CStringT<wchar_t> s10(wc);
1134+
sink(s10.GetString()); // $ ir
1135+
1136+
sink(&s1); // $ ast ir
1137+
1138+
auto bstr = s1.AllocSysString();
1139+
sink(bstr); // $ MISSING: ir
1140+
1141+
CStringT<char> s11;
1142+
s11.AppendFormat("%d", source<int>());
1143+
sink(s11.GetString()); // $ MISSING: ir
1144+
1145+
CStringT<char> s12;
1146+
s12.AppendFormat(indirect_source<char>());
1147+
sink(s12.GetString()); // $ MISSING: ir
1148+
1149+
CStringT<char> s13;
1150+
s13.AppendFormat(source<UINT>());
1151+
sink(s13.GetString()); // $ MISSING: ir
1152+
1153+
CStringT<char> s14;
1154+
s14.AppendFormat(42, source<char>());
1155+
sink(s14.GetString()); // $ MISSING: ir
1156+
1157+
CStringT<char> s15;
1158+
s15.AppendFormat(42, source<char>());
1159+
sink(s15.GetString()); // $ MISSING: ir
1160+
1161+
CStringT<char> s16;
1162+
s16.AppendFormat("%s", indirect_source<char>());
1163+
1164+
CStringT<char> s17;
1165+
s17.Insert(0, x);
1166+
sink(s17.GetString()); // $ MISSING: ir
1167+
1168+
CStringT<char> s18;
1169+
s18.Insert(0, source<char>());
1170+
sink(s18.GetString()); // $ MISSING: ir
1171+
1172+
sink(s1.Left(42).GetString()); // $ MISSING: ir
1173+
1174+
CStringT<char> s20;
1175+
s20.LoadString(source<UINT>());
1176+
sink(s20.GetString()); // $ MISSING: ir
1177+
1178+
sink(s1.MakeLower().GetString()); // $ MISSING: ir
1179+
sink(s1.MakeReverse().GetString()); // $ MISSING: ir
1180+
sink(s1.MakeUpper().GetString()); // $ MISSING: ir
1181+
sink(s1.Mid(0, 42).GetString()); // $ MISSING: ir
1182+
1183+
CStringT<char> s21;
1184+
s21.Replace("abc", x);
1185+
sink(s21.GetString()); // $ MISSING: ir
1186+
1187+
CStringT<char> s22;
1188+
s22.Replace('\n', source<char>());
1189+
sink(s22.GetString()); // $ MISSING: ir
1190+
1191+
sink(s2.Right(42).GetString()); // $ MISSING: ir
1192+
1193+
BSTR bstr2;
1194+
s1.SetSysString(&bstr2);
1195+
sink(bstr2); // $ ast MISSING: ir
1196+
1197+
sink(s1.SpanExcluding("abc").GetString()); // $ MISSING: ir
1198+
sink(s1.SpanIncluding("abc").GetString()); // $ MISSING: ir
1199+
1200+
int start = 0;
1201+
sink(s1.Tokenize("abc", start).GetString()); // $ MISSING: ir
1202+
1203+
sink(s1.Trim('a').GetString()); // $ MISSING: ir
1204+
sink(s1.Trim("abc").GetString()); // $ MISSING: ir
1205+
sink(s1.Trim().GetString()); // $ MISSING: ir
1206+
sink(s1.TrimLeft('a').GetString()); // $ MISSING: ir
1207+
sink(s1.TrimLeft("abc").GetString()); // $ MISSING: ir
1208+
sink(s1.TrimLeft().GetString()); // $ MISSING: ir
1209+
sink(s1.TrimRight('a').GetString()); // $ MISSING: ir
1210+
sink(s1.TrimRight("abc").GetString()); // $ MISSING: ir
1211+
sink(s1.TrimRight().GetString()); // $ MISSING: ir
1212+
}

0 commit comments

Comments
 (0)