Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(123)

Side by Side Diff: sandbox/src/policy_low_level_unittest.cc

Issue 113548: Fix a crash in the unittests caused by the fact that the order of... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 11 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "sandbox/src/policy_engine_params.h" 5 #include "sandbox/src/policy_engine_params.h"
6 #include "sandbox/src/policy_engine_processor.h" 6 #include "sandbox/src/policy_engine_processor.h"
7 #include "sandbox/src/policy_low_level.h" 7 #include "sandbox/src/policy_low_level.h"
8 #include "testing/gtest/include/gtest/gtest.h" 8 #include "testing/gtest/include/gtest/gtest.h"
9 9
10 #define POLPARAMS_BEGIN(x) sandbox::ParameterSet x[] = { 10 #define POLPARAMS_BEGIN(x) sandbox::ParameterSet x[] = {
11 #define POLPARAM(p) sandbox::ParamPickerMake(p), 11 #define POLPARAM(p) sandbox::ParamPickerMake(p),
12 #define POLPARAMS_END } 12 #define POLPARAMS_END }
13 13
14 namespace sandbox { 14 namespace sandbox {
15 15
16 bool SetupNtdllImports();
17
16 // Testing that we allow opcode generation on valid string patterns. 18 // Testing that we allow opcode generation on valid string patterns.
17 TEST(PolicyEngineTest, StringPatternsOK) { 19 TEST(PolicyEngineTest, StringPatternsOK) {
20 SetupNtdllImports();
18 PolicyRule pr(ASK_BROKER); 21 PolicyRule pr(ASK_BROKER);
19 EXPECT_TRUE(pr.AddStringMatch(IF, 0, L"c:\\adobe\\ver??\\", CASE_SENSITIVE)); 22 EXPECT_TRUE(pr.AddStringMatch(IF, 0, L"c:\\adobe\\ver??\\", CASE_SENSITIVE));
20 EXPECT_TRUE(pr.AddStringMatch(IF, 0, L"*.tmp", CASE_SENSITIVE)); 23 EXPECT_TRUE(pr.AddStringMatch(IF, 0, L"*.tmp", CASE_SENSITIVE));
21 EXPECT_TRUE(pr.AddStringMatch(IF, 0, L"c:\\*.doc", CASE_SENSITIVE)); 24 EXPECT_TRUE(pr.AddStringMatch(IF, 0, L"c:\\*.doc", CASE_SENSITIVE));
22 EXPECT_TRUE(pr.AddStringMatch(IF, 0, L"c:\\windows\\*", CASE_SENSITIVE)); 25 EXPECT_TRUE(pr.AddStringMatch(IF, 0, L"c:\\windows\\*", CASE_SENSITIVE));
23 EXPECT_TRUE(pr.AddStringMatch(IF, 0, L"d:\\adobe\\acrobat.exe", 26 EXPECT_TRUE(pr.AddStringMatch(IF, 0, L"d:\\adobe\\acrobat.exe",
24 CASE_SENSITIVE)); 27 CASE_SENSITIVE));
25 } 28 }
26 29
27 // Testing that we signal invalid string patterns. 30 // Testing that we signal invalid string patterns.
28 TEST(PolicyEngineTest, StringPatternsBAD) { 31 TEST(PolicyEngineTest, StringPatternsBAD) {
32 SetupNtdllImports();
29 PolicyRule pr(ASK_BROKER); 33 PolicyRule pr(ASK_BROKER);
30 EXPECT_FALSE(pr.AddStringMatch(IF, 0, L"one**two", CASE_SENSITIVE)); 34 EXPECT_FALSE(pr.AddStringMatch(IF, 0, L"one**two", CASE_SENSITIVE));
31 EXPECT_FALSE(pr.AddStringMatch(IF, 0, L"**three", CASE_SENSITIVE)); 35 EXPECT_FALSE(pr.AddStringMatch(IF, 0, L"**three", CASE_SENSITIVE));
32 EXPECT_FALSE(pr.AddStringMatch(IF, 0, L"five?six*?seven", CASE_SENSITIVE)); 36 EXPECT_FALSE(pr.AddStringMatch(IF, 0, L"five?six*?seven", CASE_SENSITIVE));
33 EXPECT_FALSE(pr.AddStringMatch(IF, 0, L"eight?*nine", CASE_SENSITIVE)); 37 EXPECT_FALSE(pr.AddStringMatch(IF, 0, L"eight?*nine", CASE_SENSITIVE));
34 } 38 }
35 39
36 // Helper function to allocate space (on the heap) for policy. 40 // Helper function to allocate space (on the heap) for policy.
37 PolicyGlobal* MakePolicyMemory() { 41 PolicyGlobal* MakePolicyMemory() {
38 const size_t kTotalPolicySz = 4096*8; 42 const size_t kTotalPolicySz = 4096*8;
39 char* mem = new char[kTotalPolicySz]; 43 char* mem = new char[kTotalPolicySz];
40 memset(mem, 0, kTotalPolicySz); 44 memset(mem, 0, kTotalPolicySz);
41 PolicyGlobal* policy = reinterpret_cast<PolicyGlobal*>(mem); 45 PolicyGlobal* policy = reinterpret_cast<PolicyGlobal*>(mem);
42 policy->data_size = kTotalPolicySz - sizeof(PolicyGlobal); 46 policy->data_size = kTotalPolicySz - sizeof(PolicyGlobal);
43 return policy; 47 return policy;
44 } 48 }
45 49
46 // The simplest test using LowLevelPolicy it should test a single opcode which 50 // The simplest test using LowLevelPolicy it should test a single opcode which
47 // does a exact string comparison. 51 // does a exact string comparison.
48 TEST(PolicyEngineTest, SimpleStrMatch) { 52 TEST(PolicyEngineTest, SimpleStrMatch) {
53 SetupNtdllImports();
49 PolicyRule pr(ASK_BROKER); 54 PolicyRule pr(ASK_BROKER);
50 EXPECT_TRUE(pr.AddStringMatch(IF, 0, L"z:\\Directory\\domo.txt", 55 EXPECT_TRUE(pr.AddStringMatch(IF, 0, L"z:\\Directory\\domo.txt",
51 CASE_INSENSITIVE)); 56 CASE_INSENSITIVE));
52 57
53 PolicyGlobal* policy = MakePolicyMemory(); 58 PolicyGlobal* policy = MakePolicyMemory();
54 const uint32 kFakeService = 2; 59 const uint32 kFakeService = 2;
55 60
56 LowLevelPolicy policyGen(policy); 61 LowLevelPolicy policyGen(policy);
57 EXPECT_TRUE(policyGen.AddRule(kFakeService, &pr)); 62 EXPECT_TRUE(policyGen.AddRule(kFakeService, &pr));
58 EXPECT_TRUE(policyGen.Done()); 63 EXPECT_TRUE(policyGen.Done());
(...skipping 12 matching lines...) Expand all
71 EXPECT_EQ(ASK_BROKER, pol_ev.GetAction()); 76 EXPECT_EQ(ASK_BROKER, pol_ev.GetAction());
72 77
73 filename = L"Z:\\Directory\\domo.txt.tmp"; 78 filename = L"Z:\\Directory\\domo.txt.tmp";
74 result = pol_ev.Evaluate(kShortEval, eval_params, _countof(eval_params)); 79 result = pol_ev.Evaluate(kShortEval, eval_params, _countof(eval_params));
75 EXPECT_EQ(NO_POLICY_MATCH, result); 80 EXPECT_EQ(NO_POLICY_MATCH, result);
76 81
77 delete [] reinterpret_cast<char*>(policy); 82 delete [] reinterpret_cast<char*>(policy);
78 } 83 }
79 84
80 TEST(PolicyEngineTest, SimpleIfNotStrMatch) { 85 TEST(PolicyEngineTest, SimpleIfNotStrMatch) {
86 SetupNtdllImports();
81 PolicyRule pr(ASK_BROKER); 87 PolicyRule pr(ASK_BROKER);
82 EXPECT_TRUE(pr.AddStringMatch(IF_NOT, 0, L"c:\\Microsoft\\", 88 EXPECT_TRUE(pr.AddStringMatch(IF_NOT, 0, L"c:\\Microsoft\\",
83 CASE_SENSITIVE)); 89 CASE_SENSITIVE));
84 90
85 PolicyGlobal* policy = MakePolicyMemory(); 91 PolicyGlobal* policy = MakePolicyMemory();
86 const uint32 kFakeService = 2; 92 const uint32 kFakeService = 2;
87 LowLevelPolicy policyGen(policy); 93 LowLevelPolicy policyGen(policy);
88 94
89 EXPECT_TRUE(policyGen.AddRule(kFakeService, &pr)); 95 EXPECT_TRUE(policyGen.AddRule(kFakeService, &pr));
90 EXPECT_TRUE(policyGen.Done()); 96 EXPECT_TRUE(policyGen.Done());
(...skipping 17 matching lines...) Expand all
108 114
109 filename = L"c:\\Microsoft\\domo.txt"; 115 filename = L"c:\\Microsoft\\domo.txt";
110 result = pol_ev.Evaluate(kShortEval, eval_params, _countof(eval_params)); 116 result = pol_ev.Evaluate(kShortEval, eval_params, _countof(eval_params));
111 EXPECT_EQ(POLICY_MATCH, result); 117 EXPECT_EQ(POLICY_MATCH, result);
112 EXPECT_EQ(ASK_BROKER, pol_ev.GetAction()); 118 EXPECT_EQ(ASK_BROKER, pol_ev.GetAction());
113 119
114 delete [] reinterpret_cast<char*>(policy); 120 delete [] reinterpret_cast<char*>(policy);
115 } 121 }
116 122
117 TEST(PolicyEngineTest, SimpleIfNotStrMatchWild1) { 123 TEST(PolicyEngineTest, SimpleIfNotStrMatchWild1) {
124 SetupNtdllImports();
118 PolicyRule pr(ASK_BROKER); 125 PolicyRule pr(ASK_BROKER);
119 EXPECT_TRUE(pr.AddStringMatch(IF_NOT, 0, L"c:\\Microsoft\\*", 126 EXPECT_TRUE(pr.AddStringMatch(IF_NOT, 0, L"c:\\Microsoft\\*",
120 CASE_SENSITIVE)); 127 CASE_SENSITIVE));
121 128
122 PolicyGlobal* policy = MakePolicyMemory(); 129 PolicyGlobal* policy = MakePolicyMemory();
123 const uint32 kFakeService = 3; 130 const uint32 kFakeService = 3;
124 LowLevelPolicy policyGen(policy); 131 LowLevelPolicy policyGen(policy);
125 132
126 EXPECT_TRUE(policyGen.AddRule(kFakeService, &pr)); 133 EXPECT_TRUE(policyGen.AddRule(kFakeService, &pr));
127 EXPECT_TRUE(policyGen.Done()); 134 EXPECT_TRUE(policyGen.Done());
(...skipping 12 matching lines...) Expand all
140 147
141 filename = L"c:\\MicroNerd\\domo.txt"; 148 filename = L"c:\\MicroNerd\\domo.txt";
142 result = pol_ev.Evaluate(kShortEval, eval_params, _countof(eval_params)); 149 result = pol_ev.Evaluate(kShortEval, eval_params, _countof(eval_params));
143 EXPECT_EQ(POLICY_MATCH, result); 150 EXPECT_EQ(POLICY_MATCH, result);
144 EXPECT_EQ(ASK_BROKER, pol_ev.GetAction()); 151 EXPECT_EQ(ASK_BROKER, pol_ev.GetAction());
145 152
146 delete [] reinterpret_cast<char*>(policy); 153 delete [] reinterpret_cast<char*>(policy);
147 } 154 }
148 155
149 TEST(PolicyEngineTest, SimpleIfNotStrMatchWild2) { 156 TEST(PolicyEngineTest, SimpleIfNotStrMatchWild2) {
157 SetupNtdllImports();
150 PolicyRule pr(ASK_BROKER); 158 PolicyRule pr(ASK_BROKER);
151 EXPECT_TRUE(pr.AddStringMatch(IF_NOT, 0, L"c:\\Microsoft\\*.txt", 159 EXPECT_TRUE(pr.AddStringMatch(IF_NOT, 0, L"c:\\Microsoft\\*.txt",
152 CASE_SENSITIVE)); 160 CASE_SENSITIVE));
153 161
154 PolicyGlobal* policy = MakePolicyMemory(); 162 PolicyGlobal* policy = MakePolicyMemory();
155 const uint32 kFakeService = 3; 163 const uint32 kFakeService = 3;
156 LowLevelPolicy policyGen(policy); 164 LowLevelPolicy policyGen(policy);
157 165
158 EXPECT_TRUE(policyGen.AddRule(kFakeService, &pr)); 166 EXPECT_TRUE(policyGen.AddRule(kFakeService, &pr));
159 EXPECT_TRUE(policyGen.Done()); 167 EXPECT_TRUE(policyGen.Done());
(...skipping 17 matching lines...) Expand all
177 185
178 filename = L"c:\\Microsoft\\domo.bmp"; 186 filename = L"c:\\Microsoft\\domo.bmp";
179 result = pol_ev.Evaluate(kShortEval, eval_params, _countof(eval_params)); 187 result = pol_ev.Evaluate(kShortEval, eval_params, _countof(eval_params));
180 EXPECT_EQ(POLICY_MATCH, result); 188 EXPECT_EQ(POLICY_MATCH, result);
181 EXPECT_EQ(ASK_BROKER, pol_ev.GetAction()); 189 EXPECT_EQ(ASK_BROKER, pol_ev.GetAction());
182 190
183 delete [] reinterpret_cast<char*>(policy); 191 delete [] reinterpret_cast<char*>(policy);
184 } 192 }
185 193
186 TEST(PolicyEngineTest, IfNotStrMatchTwoRulesWild1) { 194 TEST(PolicyEngineTest, IfNotStrMatchTwoRulesWild1) {
195 SetupNtdllImports();
187 PolicyRule pr(ASK_BROKER); 196 PolicyRule pr(ASK_BROKER);
188 EXPECT_TRUE(pr.AddStringMatch(IF_NOT, 0, L"c:\\Microsoft\\*", 197 EXPECT_TRUE(pr.AddStringMatch(IF_NOT, 0, L"c:\\Microsoft\\*",
189 CASE_SENSITIVE)); 198 CASE_SENSITIVE));
190 EXPECT_TRUE(pr.AddNumberMatch(IF, 1, 24, EQUAL)); 199 EXPECT_TRUE(pr.AddNumberMatch(IF, 1, 24, EQUAL));
191 200
192 PolicyGlobal* policy = MakePolicyMemory(); 201 PolicyGlobal* policy = MakePolicyMemory();
193 const uint32 kFakeService = 3; 202 const uint32 kFakeService = 3;
194 LowLevelPolicy policyGen(policy); 203 LowLevelPolicy policyGen(policy);
195 204
196 EXPECT_TRUE(policyGen.AddRule(kFakeService, &pr)); 205 EXPECT_TRUE(policyGen.AddRule(kFakeService, &pr));
(...skipping 27 matching lines...) Expand all
224 233
225 filename = L"c:\\Micronesia\\domo.txt"; 234 filename = L"c:\\Micronesia\\domo.txt";
226 access = 42; 235 access = 42;
227 result = pol_ev.Evaluate(kShortEval, eval_params, _countof(eval_params)); 236 result = pol_ev.Evaluate(kShortEval, eval_params, _countof(eval_params));
228 EXPECT_EQ(NO_POLICY_MATCH, result); 237 EXPECT_EQ(NO_POLICY_MATCH, result);
229 238
230 delete [] reinterpret_cast<char*>(policy); 239 delete [] reinterpret_cast<char*>(policy);
231 } 240 }
232 241
233 TEST(PolicyEngineTest, IfNotStrMatchTwoRulesWild2) { 242 TEST(PolicyEngineTest, IfNotStrMatchTwoRulesWild2) {
243 SetupNtdllImports();
234 PolicyRule pr(ASK_BROKER); 244 PolicyRule pr(ASK_BROKER);
235 EXPECT_TRUE(pr.AddNumberMatch(IF, 1, 24, EQUAL)); 245 EXPECT_TRUE(pr.AddNumberMatch(IF, 1, 24, EQUAL));
236 EXPECT_TRUE(pr.AddStringMatch(IF_NOT, 0, L"c:\\GoogleV?\\*.txt", 246 EXPECT_TRUE(pr.AddStringMatch(IF_NOT, 0, L"c:\\GoogleV?\\*.txt",
237 CASE_SENSITIVE)); 247 CASE_SENSITIVE));
238 EXPECT_TRUE(pr.AddNumberMatch(IF, 2, 66, EQUAL)); 248 EXPECT_TRUE(pr.AddNumberMatch(IF, 2, 66, EQUAL));
239 249
240 PolicyGlobal* policy = MakePolicyMemory(); 250 PolicyGlobal* policy = MakePolicyMemory();
241 const uint32 kFakeService = 3; 251 const uint32 kFakeService = 3;
242 LowLevelPolicy policyGen(policy); 252 LowLevelPolicy policyGen(policy);
243 253
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
296 sharing = 0; 306 sharing = 0;
297 result = pol_ev.Evaluate(kShortEval, eval_params, _countof(eval_params)); 307 result = pol_ev.Evaluate(kShortEval, eval_params, _countof(eval_params));
298 EXPECT_EQ(NO_POLICY_MATCH, result); 308 EXPECT_EQ(NO_POLICY_MATCH, result);
299 309
300 delete [] reinterpret_cast<char*>(policy); 310 delete [] reinterpret_cast<char*>(policy);
301 } 311 }
302 312
303 // Testing one single rule in one single service. The service is made to 313 // Testing one single rule in one single service. The service is made to
304 // resemble NtCreateFile. 314 // resemble NtCreateFile.
305 TEST(PolicyEngineTest, OneRuleTest) { 315 TEST(PolicyEngineTest, OneRuleTest) {
316 SetupNtdllImports();
306 PolicyRule pr(ASK_BROKER); 317 PolicyRule pr(ASK_BROKER);
307 EXPECT_TRUE(pr.AddStringMatch(IF, 0, L"c:\\*Microsoft*\\*.txt", 318 EXPECT_TRUE(pr.AddStringMatch(IF, 0, L"c:\\*Microsoft*\\*.txt",
308 CASE_SENSITIVE)); 319 CASE_SENSITIVE));
309 EXPECT_TRUE(pr.AddNumberMatch(IF_NOT, 1, CREATE_ALWAYS, EQUAL)); 320 EXPECT_TRUE(pr.AddNumberMatch(IF_NOT, 1, CREATE_ALWAYS, EQUAL));
310 EXPECT_TRUE(pr.AddNumberMatch(IF, 2, FILE_ATTRIBUTE_NORMAL, EQUAL)); 321 EXPECT_TRUE(pr.AddNumberMatch(IF, 2, FILE_ATTRIBUTE_NORMAL, EQUAL));
311 322
312 PolicyGlobal* policy = MakePolicyMemory(); 323 PolicyGlobal* policy = MakePolicyMemory();
313 324
314 const uint32 kNtFakeCreateFile = 7; 325 const uint32 kNtFakeCreateFile = 7;
315 326
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
366 377
367 filename = L"c:\\Microsoft\\1.ttt"; 378 filename = L"c:\\Microsoft\\1.ttt";
368 result = pol_ev.Evaluate(kShortEval, eval_params, _countof(eval_params)); 379 result = pol_ev.Evaluate(kShortEval, eval_params, _countof(eval_params));
369 EXPECT_EQ(NO_POLICY_MATCH, result); 380 EXPECT_EQ(NO_POLICY_MATCH, result);
370 381
371 delete [] reinterpret_cast<char*>(policy); 382 delete [] reinterpret_cast<char*>(policy);
372 } 383 }
373 384
374 // Testing 3 rules in 3 services. Two of the services resemble File services. 385 // Testing 3 rules in 3 services. Two of the services resemble File services.
375 TEST(PolicyEngineTest, ThreeRulesTest) { 386 TEST(PolicyEngineTest, ThreeRulesTest) {
387 SetupNtdllImports();
376 PolicyRule pr_pipe(FAKE_SUCCESS); 388 PolicyRule pr_pipe(FAKE_SUCCESS);
377 EXPECT_TRUE(pr_pipe.AddStringMatch(IF, 0, L"\\\\/?/?\\Pipe\\Chrome.*", 389 EXPECT_TRUE(pr_pipe.AddStringMatch(IF, 0, L"\\\\/?/?\\Pipe\\Chrome.*",
378 CASE_INSENSITIVE)); 390 CASE_INSENSITIVE));
379 EXPECT_TRUE(pr_pipe.AddNumberMatch(IF, 1, OPEN_EXISTING, EQUAL)); 391 EXPECT_TRUE(pr_pipe.AddNumberMatch(IF, 1, OPEN_EXISTING, EQUAL));
380 EXPECT_TRUE(pr_pipe.AddNumberMatch(IF, 2, FILE_ATTRIBUTE_NORMAL, EQUAL)); 392 EXPECT_TRUE(pr_pipe.AddNumberMatch(IF, 2, FILE_ATTRIBUTE_NORMAL, EQUAL));
381 393
382 size_t opc1 = pr_pipe.GetOpcodeCount(); 394 size_t opc1 = pr_pipe.GetOpcodeCount();
383 EXPECT_EQ(3, opc1); 395 EXPECT_EQ(3, opc1);
384 396
385 PolicyRule pr_dump(ASK_BROKER); 397 PolicyRule pr_dump(ASK_BROKER);
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
554 result = eval_None.Evaluate(kShortEval, params, _countof(params)); 566 result = eval_None.Evaluate(kShortEval, params, _countof(params));
555 EXPECT_EQ(NO_POLICY_MATCH, result); 567 EXPECT_EQ(NO_POLICY_MATCH, result);
556 result = eval_OpenFile.Evaluate(kShortEval, params, _countof(params)); 568 result = eval_OpenFile.Evaluate(kShortEval, params, _countof(params));
557 EXPECT_EQ(POLICY_MATCH, result); 569 EXPECT_EQ(POLICY_MATCH, result);
558 EXPECT_EQ(FAKE_SUCCESS, eval_OpenFile.GetAction()); 570 EXPECT_EQ(FAKE_SUCCESS, eval_OpenFile.GetAction());
559 571
560 delete [] reinterpret_cast<char*>(policy); 572 delete [] reinterpret_cast<char*>(policy);
561 } 573 }
562 574
563 } // namespace sandbox 575 } // namespace sandbox
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698