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

Side by Side Diff: test/cctest/test-api.cc

Issue 118499: Make JSObjects with both indexed interceptors and indexed accessors work safe... (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: '' Created 11 years, 6 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 | « src/objects.cc ('k') | 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 2007-2008 the V8 project authors. All rights reserved. 1 // Copyright 2007-2008 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 533 matching lines...) Expand 10 before | Expand all | Expand 10 after
544 Local<String> string = 544 Local<String> string =
545 String::NewExternal(new TestResource(two_byte_string)); 545 String::NewExternal(new TestResource(two_byte_string));
546 i::Handle<i::String> istring = v8::Utils::OpenHandle(*string); 546 i::Handle<i::String> istring = v8::Utils::OpenHandle(*string);
547 // Trigger GCs so that the newly allocated string moves to old gen. 547 // Trigger GCs so that the newly allocated string moves to old gen.
548 i::Heap::CollectGarbage(0, i::NEW_SPACE); // in survivor space now 548 i::Heap::CollectGarbage(0, i::NEW_SPACE); // in survivor space now
549 i::Heap::CollectGarbage(0, i::NEW_SPACE); // in old gen now 549 i::Heap::CollectGarbage(0, i::NEW_SPACE); // in old gen now
550 i::Handle<i::String> isymbol = i::Factory::SymbolFromString(istring); 550 i::Handle<i::String> isymbol = i::Factory::SymbolFromString(istring);
551 CHECK(isymbol->IsSymbol()); 551 CHECK(isymbol->IsSymbol());
552 } 552 }
553 i::Heap::CollectAllGarbage(); 553 i::Heap::CollectAllGarbage();
554 i::Heap::CollectAllGarbage();
554 } 555 }
555 556
556 557
557 THREADED_TEST(UsingExternalAsciiString) { 558 THREADED_TEST(UsingExternalAsciiString) {
558 { 559 {
559 v8::HandleScope scope; 560 v8::HandleScope scope;
560 const char* one_byte_string = "test string"; 561 const char* one_byte_string = "test string";
561 Local<String> string = String::NewExternal( 562 Local<String> string = String::NewExternal(
562 new TestAsciiResource(i::StrDup(one_byte_string))); 563 new TestAsciiResource(i::StrDup(one_byte_string)));
563 i::Handle<i::String> istring = v8::Utils::OpenHandle(*string); 564 i::Handle<i::String> istring = v8::Utils::OpenHandle(*string);
564 // Trigger GCs so that the newly allocated string moves to old gen. 565 // Trigger GCs so that the newly allocated string moves to old gen.
565 i::Heap::CollectGarbage(0, i::NEW_SPACE); // in survivor space now 566 i::Heap::CollectGarbage(0, i::NEW_SPACE); // in survivor space now
566 i::Heap::CollectGarbage(0, i::NEW_SPACE); // in old gen now 567 i::Heap::CollectGarbage(0, i::NEW_SPACE); // in old gen now
567 i::Handle<i::String> isymbol = i::Factory::SymbolFromString(istring); 568 i::Handle<i::String> isymbol = i::Factory::SymbolFromString(istring);
568 CHECK(isymbol->IsSymbol()); 569 CHECK(isymbol->IsSymbol());
569 } 570 }
570 i::Heap::CollectAllGarbage(); 571 i::Heap::CollectAllGarbage();
572 i::Heap::CollectAllGarbage();
571 } 573 }
572 574
573 575
574 THREADED_TEST(GlobalProperties) { 576 THREADED_TEST(GlobalProperties) {
575 v8::HandleScope scope; 577 v8::HandleScope scope;
576 LocalContext env; 578 LocalContext env;
577 v8::Handle<v8::Object> global = env->Global(); 579 v8::Handle<v8::Object> global = env->Global();
578 global->Set(v8_str("pi"), v8_num(3.1415926)); 580 global->Set(v8_str("pi"), v8_num(3.1415926));
579 Local<Value> pi = global->Get(v8_str("pi")); 581 Local<Value> pi = global->Get(v8_str("pi"));
580 CHECK_EQ(3.1415926, pi->NumberValue()); 582 CHECK_EQ(3.1415926, pi->NumberValue());
(...skipping 1693 matching lines...) Expand 10 before | Expand all | Expand 10 after
2274 2276
2275 2277
2276 static v8::Handle<Value> XPropertyGetter(Local<String> property, 2278 static v8::Handle<Value> XPropertyGetter(Local<String> property,
2277 const AccessorInfo& info) { 2279 const AccessorInfo& info) {
2278 ApiTestFuzzer::Fuzz(); 2280 ApiTestFuzzer::Fuzz();
2279 CHECK(info.Data()->IsUndefined()); 2281 CHECK(info.Data()->IsUndefined());
2280 return property; 2282 return property;
2281 } 2283 }
2282 2284
2283 2285
2284 THREADED_TEST(NamedInterceporPropertyRead) { 2286 THREADED_TEST(NamedInterceptorPropertyRead) {
2285 v8::HandleScope scope; 2287 v8::HandleScope scope;
2286 Local<ObjectTemplate> templ = ObjectTemplate::New(); 2288 Local<ObjectTemplate> templ = ObjectTemplate::New();
2287 templ->SetNamedPropertyHandler(XPropertyGetter); 2289 templ->SetNamedPropertyHandler(XPropertyGetter);
2288 LocalContext context; 2290 LocalContext context;
2289 context->Global()->Set(v8_str("obj"), templ->NewInstance()); 2291 context->Global()->Set(v8_str("obj"), templ->NewInstance());
2290 Local<Script> script = Script::Compile(v8_str("obj.x")); 2292 Local<Script> script = Script::Compile(v8_str("obj.x"));
2291 for (int i = 0; i < 10; i++) { 2293 for (int i = 0; i < 10; i++) {
2292 Local<Value> result = script->Run(); 2294 Local<Value> result = script->Run();
2293 CHECK_EQ(result, v8_str("x")); 2295 CHECK_EQ(result, v8_str("x"));
2294 } 2296 }
2295 } 2297 }
2296 2298
2299
2300 static v8::Handle<Value> IndexedPropertyGetter(uint32_t index,
2301 const AccessorInfo& info) {
2302 ApiTestFuzzer::Fuzz();
2303 if (index == 37) {
2304 return v8::Handle<Value>(v8_num(625));
2305 }
2306 return v8::Handle<Value>();
2307 }
2308
2309
2310 static v8::Handle<Value> IndexedPropertySetter(uint32_t index,
2311 Local<Value> value,
2312 const AccessorInfo& info) {
2313 ApiTestFuzzer::Fuzz();
2314 if (index == 39) {
2315 return value;
2316 }
2317 return v8::Handle<Value>();
2318 }
2319
2320
2321 THREADED_TEST(IndexedInterceptorWithIndexedAccessor) {
2322 v8::HandleScope scope;
2323 Local<ObjectTemplate> templ = ObjectTemplate::New();
2324 templ->SetIndexedPropertyHandler(IndexedPropertyGetter,
2325 IndexedPropertySetter);
2326 LocalContext context;
2327 context->Global()->Set(v8_str("obj"), templ->NewInstance());
2328 Local<Script> getter_script = Script::Compile(v8_str(
2329 "obj.__defineGetter__(\"3\", function(){return 5;});obj[3];"));
2330 Local<Script> setter_script = Script::Compile(v8_str(
2331 "obj.__defineSetter__(\"17\", function(val){this.foo = val;});"
2332 "obj[17] = 23;"
2333 "obj.foo;"));
2334 Local<Script> interceptor_setter_script = Script::Compile(v8_str(
2335 "obj.__defineSetter__(\"39\", function(val){this.foo = \"hit\";});"
2336 "obj[39] = 47;"
2337 "obj.foo;")); // This setter should not run, due to the interceptor.
2338 Local<Script> interceptor_getter_script = Script::Compile(v8_str(
2339 "obj[37];"));
2340 Local<Value> result = getter_script->Run();
2341 CHECK_EQ(v8_num(5), result);
2342 result = setter_script->Run();
2343 CHECK_EQ(v8_num(23), result);
2344 result = interceptor_setter_script->Run();
2345 CHECK_EQ(v8_num(23), result);
2346 result = interceptor_getter_script->Run();
2347 CHECK_EQ(v8_num(625), result);
2348 }
2349
2350
2297 THREADED_TEST(MultiContexts) { 2351 THREADED_TEST(MultiContexts) {
2298 v8::HandleScope scope; 2352 v8::HandleScope scope;
2299 v8::Handle<ObjectTemplate> templ = ObjectTemplate::New(); 2353 v8::Handle<ObjectTemplate> templ = ObjectTemplate::New();
2300 templ->Set(v8_str("dummy"), v8::FunctionTemplate::New(DummyCallHandler)); 2354 templ->Set(v8_str("dummy"), v8::FunctionTemplate::New(DummyCallHandler));
2301 2355
2302 Local<String> password = v8_str("Password"); 2356 Local<String> password = v8_str("Password");
2303 2357
2304 // Create an environment 2358 // Create an environment
2305 LocalContext context0(0, templ); 2359 LocalContext context0(0, templ);
2306 context0->SetSecurityToken(password); 2360 context0->SetSecurityToken(password);
(...skipping 4589 matching lines...) Expand 10 before | Expand all | Expand 10 after
6896 calling_context2->Exit(); 6950 calling_context2->Exit();
6897 6951
6898 // Dispose the contexts to allow them to be garbage collected. 6952 // Dispose the contexts to allow them to be garbage collected.
6899 calling_context0.Dispose(); 6953 calling_context0.Dispose();
6900 calling_context1.Dispose(); 6954 calling_context1.Dispose();
6901 calling_context2.Dispose(); 6955 calling_context2.Dispose();
6902 calling_context0.Clear(); 6956 calling_context0.Clear();
6903 calling_context1.Clear(); 6957 calling_context1.Clear();
6904 calling_context2.Clear(); 6958 calling_context2.Clear();
6905 } 6959 }
OLDNEW
« no previous file with comments | « src/objects.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698