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

Side by Side Diff: syzygy/agent/asan/error_info_unittest.cc

Issue 2363733003: Make syzyasan_rtl compile in 64 bit (Closed)
Patch Set: Nits. Created 4 years, 2 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
« no previous file with comments | « syzygy/agent/asan/block_unittest.cc ('k') | syzygy/agent/asan/logger_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 Google Inc. All Rights Reserved. 1 // Copyright 2014 Google Inc. All Rights Reserved.
2 // 2 //
3 // Licensed under the Apache License, Version 2.0 (the "License"); 3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License. 4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at 5 // You may obtain a copy of the License at
6 // 6 //
7 // http://www.apache.org/licenses/LICENSE-2.0 7 // http://www.apache.org/licenses/LICENSE-2.0
8 // 8 //
9 // Unless required by applicable law or agreed to in writing, software 9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS, 10 // distributed under the License is distributed on an "AS IS" BASIS,
(...skipping 298 matching lines...) Expand 10 before | Expand all | Expand 10 after
309 AsanBlockInfo block_info = {}; 309 AsanBlockInfo block_info = {};
310 InitAsanBlockInfo(&block_info); 310 InitAsanBlockInfo(&block_info);
311 311
312 { 312 {
313 crashdata::Value info; 313 crashdata::Value info;
314 PopulateBlockInfo(runtime_->shadow(), block_info, false, &info, nullptr); 314 PopulateBlockInfo(runtime_->shadow(), block_info, false, &info, nullptr);
315 std::string json; 315 std::string json;
316 EXPECT_TRUE(crashdata::ToJson(true, &info, &json)); 316 EXPECT_TRUE(crashdata::ToJson(true, &info, &json));
317 const char kExpected[] = 317 const char kExpected[] =
318 "{\n" 318 "{\n"
319 " \"header\": \"0x%08X\",\n" 319 " \"header\": \"0x%08IX\",\n"
320 " \"user-size\": 8,\n" 320 " \"user-size\": 8,\n"
321 " \"state\": \"allocated\",\n" 321 " \"state\": \"allocated\",\n"
322 " \"heap-type\": \"WinHeap\",\n" 322 " \"heap-type\": \"WinHeap\",\n"
323 " \"analysis\": {\n" 323 " \"analysis\": {\n"
324 " \"block\": \"corrupt\",\n" 324 " \"block\": \"corrupt\",\n"
325 " \"header\": \"corrupt\",\n" 325 " \"header\": \"corrupt\",\n"
326 " \"body\": \"(unknown)\",\n" 326 " \"body\": \"(unknown)\",\n"
327 " \"trailer\": \"clean\"\n" 327 " \"trailer\": \"clean\"\n"
328 " },\n" 328 " },\n"
329 " \"alloc-thread-id\": 47,\n" 329 " \"alloc-thread-id\": 47,\n"
(...skipping 15 matching lines...) Expand all
345 block_info.free_stack_size = 3; 345 block_info.free_stack_size = 3;
346 block_info.heap_type = kWinHeap; 346 block_info.heap_type = kWinHeap;
347 block_info.milliseconds_since_free = 100; 347 block_info.milliseconds_since_free = 100;
348 348
349 crashdata::Value value; 349 crashdata::Value value;
350 PopulateBlockInfo(runtime_->shadow(), block_info, true, &value, nullptr); 350 PopulateBlockInfo(runtime_->shadow(), block_info, true, &value, nullptr);
351 std::string json; 351 std::string json;
352 EXPECT_TRUE(crashdata::ToJson(true, &value, &json)); 352 EXPECT_TRUE(crashdata::ToJson(true, &value, &json));
353 const char kExpected[] = 353 const char kExpected[] =
354 "{\n" 354 "{\n"
355 " \"header\": \"0x%08X\",\n" 355 " \"header\": \"0x%08IX\",\n"
356 " \"user-size\": 8,\n" 356 " \"user-size\": 8,\n"
357 " \"state\": \"quarantined (flooded)\",\n" 357 " \"state\": \"quarantined (flooded)\",\n"
358 " \"heap-type\": \"WinHeap\",\n" 358 " \"heap-type\": \"WinHeap\",\n"
359 " \"analysis\": {\n" 359 " \"analysis\": {\n"
360 " \"block\": \"corrupt\",\n" 360 " \"block\": \"corrupt\",\n"
361 " \"header\": \"corrupt\",\n" 361 " \"header\": \"corrupt\",\n"
362 " \"body\": \"(unknown)\",\n" 362 " \"body\": \"(unknown)\",\n"
363 " \"trailer\": \"clean\"\n" 363 " \"trailer\": \"clean\"\n"
364 " },\n" 364 " },\n"
365 " \"alloc-thread-id\": 47,\n" 365 " \"alloc-thread-id\": 47,\n"
366 " \"alloc-stack\": [\n" 366 " \"alloc-stack\": [\n"
367 " \"0x00000001\", \"0x00000002\"\n" 367 " \"0x00000001\", \"0x00000002\"\n"
368 " ],\n" 368 " ],\n"
369 " \"free-thread-id\": 32,\n" 369 " \"free-thread-id\": 32,\n"
370 " \"free-stack\": [\n" 370 " \"free-stack\": [\n"
371 " \"0x00000003\", \"0x00000004\", \"0x00000005\"\n" 371 " \"0x00000003\", \"0x00000004\", \"0x00000005\"\n"
372 " ],\n" 372 " ],\n"
373 " \"milliseconds-since-free\": 100,\n" 373 " \"milliseconds-since-free\": 100,\n"
374 " \"contents\": {\n" 374 " \"contents\": {\n"
375 " \"type\": \"blob\",\n" 375 " \"type\": \"blob\",\n"
376 " \"address\": \"0x%08X\",\n" 376 " \"address\": \"0x%08IX\",\n"
377 " \"size\": null,\n" 377 " \"size\": null,\n"
378 " \"data\": [\n" 378 " \"data\": [\n"
379 " \"0x80\", \"0xCA\", \"0x00\", \"0x00\", \"0x20\", \"0x00\"," 379 " \"0x80\", \"0xCA\", \"0x00\", \"0x00\", \"0x20\", \"0x00\","
380 " \"0x00\", \"0x00\",\n" 380 " \"0x00\", \"0x00\",\n"
381 " \"0x00\", \"0x00\", \"0x00\", \"0x00\", \"0x00\", \"0x00\"," 381 " \"0x00\", \"0x00\", \"0x00\", \"0x00\", \"0x00\", \"0x00\","
382 " \"0x00\", \"0x00\",\n" 382 " \"0x00\", \"0x00\",\n"
383 " \"0x00\", \"0x00\", \"0x00\", \"0x00\", \"0x00\", \"0x00\"," 383 " \"0x00\", \"0x00\", \"0x00\", \"0x00\", \"0x00\", \"0x00\","
384 " \"0x00\", \"0x00\",\n" 384 " \"0x00\", \"0x00\",\n"
385 #ifdef _WIN64 385 #ifdef _WIN64
386 " \"0x00\", \"0x00\", \"0x00\", \"0x00\", \"0x00\", \"0x00\"," 386 " \"0x00\", \"0x00\", \"0x00\", \"0x00\", \"0x00\", \"0x00\","
387 " \"0x00\", \"0x00\",\n" 387 " \"0x00\", \"0x00\",\n"
388 #endif 388 #endif
389 " \"0xC3\", \"0xC3\", \"0xC3\", \"0xC3\", \"0x00\", \"0x00\"," 389 " \"0xC3\", \"0xC3\", \"0xC3\", \"0xC3\", \"0x00\", \"0x00\","
390 " \"0x00\", \"0x00\",\n" 390 " \"0x00\", \"0x00\",\n"
391 #ifdef _WIN64
392 " \"0x00\", \"0x00\", \"0x00\", \"0x00\", \"0x00\", \"0x00\","
393 " \"0x00\", \"0x00\",\n"
394 #endif
391 " \"0x00\", \"0x00\", \"0x00\", \"0x00\", \"0x00\", \"0x00\"," 395 " \"0x00\", \"0x00\", \"0x00\", \"0x00\", \"0x00\", \"0x00\","
392 " \"0x00\", \"0x00\",\n" 396 " \"0x00\", \"0x00\",\n"
393 " \"0x00\", \"0x00\", \"0x00\", \"0x00\", \"0x00\", \"0x00\"," 397 " \"0x00\", \"0x00\", \"0x00\", \"0x00\", \"0x00\", \"0x00\","
394 " \"0x00\", \"0x00\"\n" 398 " \"0x00\", \"0x00\"\n"
395 " ]\n" 399 " ]\n"
396 " },\n" 400 " },\n"
397 " \"shadow\": {\n" 401 " \"shadow\": {\n"
398 " \"type\": \"blob\",\n" 402 " \"type\": \"blob\",\n"
399 " \"address\": \"0x%08zX\",\n" 403 " \"address\": \"0x%08IX\",\n"
400 " \"size\": null,\n" 404 " \"size\": null,\n"
401 " \"data\": [\n" 405 " \"data\": [\n"
402 #ifndef _WIN64 406 #ifndef _WIN64
403 " \"0xE0\", \"0xFA\", \"0x00\", \"0xFB\", \"0xFB\", \"0xF4\"\n" 407 " \"0xE0\", \"0xFA\", \"0x00\", \"0xFB\", \"0xFB\", \"0xF4\"\n"
404 #else 408 #else
405 " \"0xE0\", \"0xFA\", \"0xFA\", \"0x00\", \"0xFB\", \"0xFB\"," 409 " \"0xE0\", \"0xFA\", \"0xFA\", \"0x00\", \"0xFB\", \"0xFB\","
406 " \"0xF4\"\n" 410 " \"0xFB\", \"0xF4\"\n"
407 #endif 411 #endif
408 " ]\n" 412 " ]\n"
409 " }\n" 413 " }\n"
410 "}"; 414 "}";
411 std::string expected = base::StringPrintf( 415 std::string expected = base::StringPrintf(
412 kExpected, 416 kExpected,
413 block_info.header, 417 block_info.header,
414 block_info.header, 418 block_info.header,
415 BlockShadowAddress()); 419 BlockShadowAddress());
416 EXPECT_EQ(expected, json); 420 EXPECT_EQ(expected, json);
417 } 421 }
418 } 422 }
419 423
420 TEST_F(AsanErrorInfoTest, PopulateBlockInfoWithMemoryRanges) { 424 TEST_F(AsanErrorInfoTest, PopulateBlockInfoWithMemoryRanges) {
421 AsanBlockInfo block_info = {}; 425 AsanBlockInfo block_info = {};
422 InitAsanBlockInfo(&block_info); 426 InitAsanBlockInfo(&block_info);
423 427
424 { 428 {
425 crashdata::Value info; 429 crashdata::Value info;
426 PopulateBlockInfo(runtime_->shadow(), block_info, false, &info, nullptr); 430 PopulateBlockInfo(runtime_->shadow(), block_info, false, &info, nullptr);
427 std::string json; 431 std::string json;
428 EXPECT_TRUE(crashdata::ToJson(true, &info, &json)); 432 EXPECT_TRUE(crashdata::ToJson(true, &info, &json));
429 const char kExpected[] = 433 const char kExpected[] =
430 "{\n" 434 "{\n"
431 " \"header\": \"0x%08X\",\n" 435 " \"header\": \"0x%08IX\",\n"
432 " \"user-size\": 8,\n" 436 " \"user-size\": 8,\n"
433 " \"state\": \"allocated\",\n" 437 " \"state\": \"allocated\",\n"
434 " \"heap-type\": \"WinHeap\",\n" 438 " \"heap-type\": \"WinHeap\",\n"
435 " \"analysis\": {\n" 439 " \"analysis\": {\n"
436 " \"block\": \"corrupt\",\n" 440 " \"block\": \"corrupt\",\n"
437 " \"header\": \"corrupt\",\n" 441 " \"header\": \"corrupt\",\n"
438 " \"body\": \"(unknown)\",\n" 442 " \"body\": \"(unknown)\",\n"
439 " \"trailer\": \"clean\"\n" 443 " \"trailer\": \"clean\"\n"
440 " },\n" 444 " },\n"
441 " \"alloc-thread-id\": 47,\n" 445 " \"alloc-thread-id\": 47,\n"
(...skipping 16 matching lines...) Expand all
458 block_info.milliseconds_since_free = 100; 462 block_info.milliseconds_since_free = 100;
459 463
460 crashdata::Value value; 464 crashdata::Value value;
461 MemoryRanges memory_ranges; 465 MemoryRanges memory_ranges;
462 PopulateBlockInfo(runtime_->shadow(), block_info, true, &value, 466 PopulateBlockInfo(runtime_->shadow(), block_info, true, &value,
463 &memory_ranges); 467 &memory_ranges);
464 std::string json; 468 std::string json;
465 EXPECT_TRUE(crashdata::ToJson(true, &value, &json)); 469 EXPECT_TRUE(crashdata::ToJson(true, &value, &json));
466 const char kExpected[] = 470 const char kExpected[] =
467 "{\n" 471 "{\n"
468 " \"header\": \"0x%08X\",\n" 472 " \"header\": \"0x%08IX\",\n"
469 " \"user-size\": 8,\n" 473 " \"user-size\": 8,\n"
470 " \"state\": \"quarantined (flooded)\",\n" 474 " \"state\": \"quarantined (flooded)\",\n"
471 " \"heap-type\": \"WinHeap\",\n" 475 " \"heap-type\": \"WinHeap\",\n"
472 " \"analysis\": {\n" 476 " \"analysis\": {\n"
473 " \"block\": \"corrupt\",\n" 477 " \"block\": \"corrupt\",\n"
474 " \"header\": \"corrupt\",\n" 478 " \"header\": \"corrupt\",\n"
475 " \"body\": \"(unknown)\",\n" 479 " \"body\": \"(unknown)\",\n"
476 " \"trailer\": \"clean\"\n" 480 " \"trailer\": \"clean\"\n"
477 " },\n" 481 " },\n"
478 " \"alloc-thread-id\": 47,\n" 482 " \"alloc-thread-id\": 47,\n"
479 " \"alloc-stack\": [\n" 483 " \"alloc-stack\": [\n"
480 " \"0x00000001\", \"0x00000002\"\n" 484 " \"0x00000001\", \"0x00000002\"\n"
481 " ],\n" 485 " ],\n"
482 " \"free-thread-id\": 32,\n" 486 " \"free-thread-id\": 32,\n"
483 " \"free-stack\": [\n" 487 " \"free-stack\": [\n"
484 " \"0x00000003\", \"0x00000004\", \"0x00000005\"\n" 488 " \"0x00000003\", \"0x00000004\", \"0x00000005\"\n"
485 " ],\n" 489 " ],\n"
486 " \"milliseconds-since-free\": 100,\n" 490 " \"milliseconds-since-free\": 100,\n"
487 " \"contents\": {\n" 491 " \"contents\": {\n"
488 " \"type\": \"blob\",\n" 492 " \"type\": \"blob\",\n"
489 " \"address\": \"0x%08zX\",\n" 493 " \"address\": \"0x%08zX\",\n"
490 #ifndef _WIN64 494 #ifndef _WIN64
491 " \"size\": 48,\n" 495 " \"size\": 48,\n"
492 #else 496 #else
493 " \"size\": 56,\n" 497 " \"size\": 64,\n"
494 #endif 498 #endif
495 " \"data\": null\n" 499 " \"data\": null\n"
496 " },\n" 500 " },\n"
497 " \"shadow\": {\n" 501 " \"shadow\": {\n"
498 " \"type\": \"blob\",\n" 502 " \"type\": \"blob\",\n"
499 " \"address\": \"0x%08zX\",\n" 503 " \"address\": \"0x%08zX\",\n"
500 #ifndef _WIN64 504 #ifndef _WIN64
501 " \"size\": 6,\n" 505 " \"size\": 6,\n"
502 #else 506 #else
503 " \"size\": 7,\n" 507 " \"size\": 8,\n"
504 #endif 508 #endif
505 " \"data\": null\n" 509 " \"data\": null\n"
506 " }\n" 510 " }\n"
507 "}"; 511 "}";
508 std::string expected = base::StringPrintf( 512 std::string expected = base::StringPrintf(
509 kExpected, block_info.header, block_info.header, BlockShadowAddress()); 513 kExpected, block_info.header, block_info.header, BlockShadowAddress());
510 EXPECT_EQ(expected, json); 514 EXPECT_EQ(expected, json);
511 515
512 ASSERT_EQ(2, memory_ranges.size()); 516 ASSERT_EQ(2, memory_ranges.size());
513 const char* kExpectedMemoryRangesAddresses[] = { 517 const char* kExpectedMemoryRangesAddresses[] = {
514 reinterpret_cast<const char*>(block_info.header), 518 reinterpret_cast<const char*>(block_info.header),
515 reinterpret_cast<const char*>(BlockShadowAddress())}; 519 reinterpret_cast<const char*>(BlockShadowAddress())};
516 #ifndef _WIN64 520 #ifndef _WIN64
517 size_t kExpectedMemoryRangesSize[] = {48, 6}; 521 size_t kExpectedMemoryRangesSize[] = {48, 6};
518 #else 522 #else
519 size_t kExpectedMemoryRangesSize[] = {56, 7}; 523 size_t kExpectedMemoryRangesSize[] = {64, 8};
520 #endif 524 #endif
521 for (int i = 0; i < 2; i++) { 525 for (int i = 0; i < 2; i++) {
522 EXPECT_EQ(kExpectedMemoryRangesAddresses[i], memory_ranges[i].first); 526 EXPECT_EQ(kExpectedMemoryRangesAddresses[i], memory_ranges[i].first);
523 EXPECT_EQ(kExpectedMemoryRangesSize[i], memory_ranges[i].second); 527 EXPECT_EQ(kExpectedMemoryRangesSize[i], memory_ranges[i].second);
524 } 528 }
525 } 529 }
526 } 530 }
527 531
528 TEST_F(AsanErrorInfoTest, PopulateCorruptBlockRange) { 532 TEST_F(AsanErrorInfoTest, PopulateCorruptBlockRange) {
529 AsanBlockInfo block_info = {}; 533 AsanBlockInfo block_info = {};
(...skipping 11 matching lines...) Expand all
541 545
542 std::string json; 546 std::string json;
543 EXPECT_TRUE(crashdata::ToJson(true, &info, &json)); 547 EXPECT_TRUE(crashdata::ToJson(true, &info, &json));
544 const char kExpected[] = 548 const char kExpected[] =
545 "{\n" 549 "{\n"
546 " \"address\": \"0xBAADF00D\",\n" 550 " \"address\": \"0xBAADF00D\",\n"
547 " \"length\": 1048576,\n" 551 " \"length\": 1048576,\n"
548 " \"block-count\": 100,\n" 552 " \"block-count\": 100,\n"
549 " \"blocks\": [\n" 553 " \"blocks\": [\n"
550 " {\n" 554 " {\n"
551 " \"header\": \"0x%08X\",\n" 555 " \"header\": \"0x%08IX\",\n"
552 " \"user-size\": 8,\n" 556 " \"user-size\": 8,\n"
553 " \"state\": \"allocated\",\n" 557 " \"state\": \"allocated\",\n"
554 " \"heap-type\": \"WinHeap\",\n" 558 " \"heap-type\": \"WinHeap\",\n"
555 " \"analysis\": {\n" 559 " \"analysis\": {\n"
556 " \"block\": \"corrupt\",\n" 560 " \"block\": \"corrupt\",\n"
557 " \"header\": \"corrupt\",\n" 561 " \"header\": \"corrupt\",\n"
558 " \"body\": \"(unknown)\",\n" 562 " \"body\": \"(unknown)\",\n"
559 " \"trailer\": \"clean\"\n" 563 " \"trailer\": \"clean\"\n"
560 " },\n" 564 " },\n"
561 " \"alloc-thread-id\": 47,\n" 565 " \"alloc-thread-id\": 47,\n"
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
607 crashdata::Value info; 611 crashdata::Value info;
608 PopulateErrorInfo(runtime_->shadow(), error_info, &info, nullptr); 612 PopulateErrorInfo(runtime_->shadow(), error_info, &info, nullptr);
609 613
610 std::string json; 614 std::string json;
611 EXPECT_TRUE(crashdata::ToJson(true, &info, &json)); 615 EXPECT_TRUE(crashdata::ToJson(true, &info, &json));
612 const char kExpected[] = 616 const char kExpected[] =
613 "{\n" 617 "{\n"
614 " \"location\": \"0x00001000\",\n" 618 " \"location\": \"0x00001000\",\n"
615 " \"crash-stack-id\": 1234,\n" 619 " \"crash-stack-id\": 1234,\n"
616 " \"block-info\": {\n" 620 " \"block-info\": {\n"
617 " \"header\": \"0x%08X\",\n" 621 " \"header\": \"0x%08IX\",\n"
618 " \"user-size\": 8,\n" 622 " \"user-size\": 8,\n"
619 " \"state\": \"allocated\",\n" 623 " \"state\": \"allocated\",\n"
620 " \"heap-type\": \"WinHeap\",\n" 624 " \"heap-type\": \"WinHeap\",\n"
621 " \"analysis\": {\n" 625 " \"analysis\": {\n"
622 " \"block\": \"corrupt\",\n" 626 " \"block\": \"corrupt\",\n"
623 " \"header\": \"corrupt\",\n" 627 " \"header\": \"corrupt\",\n"
624 " \"body\": \"(unknown)\",\n" 628 " \"body\": \"(unknown)\",\n"
625 " \"trailer\": \"clean\"\n" 629 " \"trailer\": \"clean\"\n"
626 " },\n" 630 " },\n"
627 " \"alloc-thread-id\": 47,\n" 631 " \"alloc-thread-id\": 47,\n"
(...skipping 10 matching lines...) Expand all
638 " \"0x00\", \"0x00\", \"0x00\", \"0x00\", \"0x00\", \"0x00\"," 642 " \"0x00\", \"0x00\", \"0x00\", \"0x00\", \"0x00\", \"0x00\","
639 " \"0x00\", \"0x00\",\n" 643 " \"0x00\", \"0x00\",\n"
640 " \"0x00\", \"0x00\", \"0x00\", \"0x00\", \"0x00\", \"0x00\"," 644 " \"0x00\", \"0x00\", \"0x00\", \"0x00\", \"0x00\", \"0x00\","
641 " \"0x00\", \"0x00\",\n" 645 " \"0x00\", \"0x00\",\n"
642 #ifdef _WIN64 646 #ifdef _WIN64
643 " \"0x00\", \"0x00\", \"0x00\", \"0x00\", \"0x00\", \"0x00\"," 647 " \"0x00\", \"0x00\", \"0x00\", \"0x00\", \"0x00\", \"0x00\","
644 " \"0x00\", \"0x00\",\n" 648 " \"0x00\", \"0x00\",\n"
645 #endif 649 #endif
646 " \"0xC3\", \"0xC3\", \"0xC3\", \"0xC3\", \"0x00\", \"0x00\"," 650 " \"0xC3\", \"0xC3\", \"0xC3\", \"0xC3\", \"0x00\", \"0x00\","
647 " \"0x00\", \"0x00\",\n" 651 " \"0x00\", \"0x00\",\n"
652 #ifdef _WIN64
653 " \"0x00\", \"0x00\", \"0x00\", \"0x00\", \"0x00\", \"0x00\","
654 " \"0x00\", \"0x00\",\n"
655 #endif
648 " \"0x00\", \"0x00\", \"0x00\", \"0x00\", \"0x00\", \"0x00\"," 656 " \"0x00\", \"0x00\", \"0x00\", \"0x00\", \"0x00\", \"0x00\","
649 " \"0x00\", \"0x00\",\n" 657 " \"0x00\", \"0x00\",\n"
650 " \"0x00\", \"0x00\", \"0x00\", \"0x00\", \"0x00\", \"0x00\"," 658 " \"0x00\", \"0x00\", \"0x00\", \"0x00\", \"0x00\", \"0x00\","
651 " \"0x00\", \"0x00\"\n" 659 " \"0x00\", \"0x00\"\n"
652 " ]\n" 660 " ]\n"
653 " },\n" 661 " },\n"
654 " \"shadow\": {\n" 662 " \"shadow\": {\n"
655 " \"type\": \"blob\",\n" 663 " \"type\": \"blob\",\n"
656 " \"address\": \"0x%08zX\",\n" 664 " \"address\": \"0x%08zX\",\n"
657 " \"size\": null,\n" 665 " \"size\": null,\n"
658 " \"data\": [\n" 666 " \"data\": [\n"
659 #ifndef _WIN64 667 #ifndef _WIN64
660 " \"0xE0\", \"0xFA\", \"0x00\", \"0xFB\", \"0xFB\", \"0xF4\"\n" 668 " \"0xE0\", \"0xFA\", \"0x00\", \"0xFB\", \"0xFB\", \"0xF4\"\n"
661 #else 669 #else
662 " \"0xE0\", \"0xFA\", \"0xFA\", \"0x00\", \"0xFB\", \"0xFB\"," 670 " \"0xE0\", \"0xFA\", \"0xFA\", \"0x00\", \"0xFB\", \"0xFB\","
663 " \"0xF4\"\n" 671 " \"0xFB\", \"0xF4\"\n"
664 #endif 672 #endif
665 " ]\n" 673 " ]\n"
666 " }\n" 674 " }\n"
667 " },\n" 675 " },\n"
668 " \"error-type\": \"wild-access\",\n" 676 " \"error-type\": \"wild-access\",\n"
669 " \"access-mode\": \"read\",\n" 677 " \"access-mode\": \"read\",\n"
670 " \"access-size\": 4,\n" 678 " \"access-size\": 4,\n"
671 " \"shadow-memory-index\": 512,\n" 679 " \"shadow-memory-index\": 512,\n"
672 " \"shadow-memory\": {\n" 680 " \"shadow-memory\": {\n"
673 " \"type\": \"blob\",\n" 681 " \"type\": \"blob\",\n"
(...skipping 30 matching lines...) Expand all
704 " \"heap-is-corrupt\": 1,\n" 712 " \"heap-is-corrupt\": 1,\n"
705 " \"corrupt-range-count\": 10,\n" 713 " \"corrupt-range-count\": 10,\n"
706 " \"corrupt-block-count\": 200,\n" 714 " \"corrupt-block-count\": 200,\n"
707 " \"corrupt-ranges\": [\n" 715 " \"corrupt-ranges\": [\n"
708 " {\n" 716 " {\n"
709 " \"address\": \"0xBAADF00D\",\n" 717 " \"address\": \"0xBAADF00D\",\n"
710 " \"length\": 1048576,\n" 718 " \"length\": 1048576,\n"
711 " \"block-count\": 100,\n" 719 " \"block-count\": 100,\n"
712 " \"blocks\": [\n" 720 " \"blocks\": [\n"
713 " {\n" 721 " {\n"
714 " \"header\": \"0x%08X\",\n" 722 " \"header\": \"0x%08IX\",\n"
715 " \"user-size\": 8,\n" 723 " \"user-size\": 8,\n"
716 " \"state\": \"allocated\",\n" 724 " \"state\": \"allocated\",\n"
717 " \"heap-type\": \"WinHeap\",\n" 725 " \"heap-type\": \"WinHeap\",\n"
718 " \"analysis\": {\n" 726 " \"analysis\": {\n"
719 " \"block\": \"corrupt\",\n" 727 " \"block\": \"corrupt\",\n"
720 " \"header\": \"corrupt\",\n" 728 " \"header\": \"corrupt\",\n"
721 " \"body\": \"(unknown)\",\n" 729 " \"body\": \"(unknown)\",\n"
722 " \"trailer\": \"clean\"\n" 730 " \"trailer\": \"clean\"\n"
723 " },\n" 731 " },\n"
724 " \"alloc-thread-id\": 47,\n" 732 " \"alloc-thread-id\": 47,\n"
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
791 MemoryRanges memory_ranges; 799 MemoryRanges memory_ranges;
792 PopulateErrorInfo(runtime_->shadow(), error_info, &info, &memory_ranges); 800 PopulateErrorInfo(runtime_->shadow(), error_info, &info, &memory_ranges);
793 801
794 std::string json; 802 std::string json;
795 EXPECT_TRUE(crashdata::ToJson(true, &info, &json)); 803 EXPECT_TRUE(crashdata::ToJson(true, &info, &json));
796 const char kExpected[] = 804 const char kExpected[] =
797 "{\n" 805 "{\n"
798 " \"location\": \"0x00001000\",\n" 806 " \"location\": \"0x00001000\",\n"
799 " \"crash-stack-id\": 1234,\n" 807 " \"crash-stack-id\": 1234,\n"
800 " \"block-info\": {\n" 808 " \"block-info\": {\n"
801 " \"header\": \"0x%08X\",\n" 809 " \"header\": \"0x%08IX\",\n"
802 " \"user-size\": 8,\n" 810 " \"user-size\": 8,\n"
803 " \"state\": \"allocated\",\n" 811 " \"state\": \"allocated\",\n"
804 " \"heap-type\": \"WinHeap\",\n" 812 " \"heap-type\": \"WinHeap\",\n"
805 " \"analysis\": {\n" 813 " \"analysis\": {\n"
806 " \"block\": \"corrupt\",\n" 814 " \"block\": \"corrupt\",\n"
807 " \"header\": \"corrupt\",\n" 815 " \"header\": \"corrupt\",\n"
808 " \"body\": \"(unknown)\",\n" 816 " \"body\": \"(unknown)\",\n"
809 " \"trailer\": \"clean\"\n" 817 " \"trailer\": \"clean\"\n"
810 " },\n" 818 " },\n"
811 " \"alloc-thread-id\": 47,\n" 819 " \"alloc-thread-id\": 47,\n"
812 " \"alloc-stack\": [\n" 820 " \"alloc-stack\": [\n"
813 " \"0x00000001\", \"0x00000002\"\n" 821 " \"0x00000001\", \"0x00000002\"\n"
814 " ],\n" 822 " ],\n"
815 " \"contents\": {\n" 823 " \"contents\": {\n"
816 " \"type\": \"blob\",\n" 824 " \"type\": \"blob\",\n"
817 " \"address\": \"0x%08zX\",\n" 825 " \"address\": \"0x%08IX\",\n"
818 #ifndef _WIN64 826 #ifndef _WIN64
819 " \"size\": 48,\n" 827 " \"size\": 48,\n"
820 #else 828 #else
821 " \"size\": 56,\n" 829 " \"size\": 64,\n"
822 #endif 830 #endif
823 " \"data\": null\n" 831 " \"data\": null\n"
824 " },\n" 832 " },\n"
825 " \"shadow\": {\n" 833 " \"shadow\": {\n"
826 " \"type\": \"blob\",\n" 834 " \"type\": \"blob\",\n"
827 " \"address\": \"0x%08zX\",\n" 835 " \"address\": \"0x%08IX\",\n"
828 #ifndef _WIN64 836 #ifndef _WIN64
829 " \"size\": 6,\n" 837 " \"size\": 6,\n"
830 #else 838 #else
831 " \"size\": 7,\n" 839 " \"size\": 8,\n"
832 #endif 840 #endif
833 " \"data\": null\n" 841 " \"data\": null\n"
834 " }\n" 842 " }\n"
835 " },\n" 843 " },\n"
836 " \"error-type\": \"wild-access\",\n" 844 " \"error-type\": \"wild-access\",\n"
837 " \"access-mode\": \"read\",\n" 845 " \"access-mode\": \"read\",\n"
838 " \"access-size\": 4,\n" 846 " \"access-size\": 4,\n"
839 " \"shadow-memory-index\": 512,\n" 847 " \"shadow-memory-index\": 512,\n"
840 " \"shadow-memory\": {\n" 848 " \"shadow-memory\": {\n"
841 " \"type\": \"blob\",\n" 849 " \"type\": \"blob\",\n"
842 " \"address\": \"0x%08zX\",\n" 850 " \"address\": \"0x%08IX\",\n"
843 " \"size\": 64,\n" 851 " \"size\": 64,\n"
844 " \"data\": null\n" 852 " \"data\": null\n"
845 " },\n" 853 " },\n"
846 " \"page-bits-index\": 0,\n" 854 " \"page-bits-index\": 0,\n"
847 " \"page-bits\": {\n" 855 " \"page-bits\": {\n"
848 " \"type\": \"blob\",\n" 856 " \"type\": \"blob\",\n"
849 " \"address\": \"0x%08zX\",\n" 857 " \"address\": \"0x%08IX\",\n"
850 " \"size\": 3,\n" 858 " \"size\": 3,\n"
851 " \"data\": null\n" 859 " \"data\": null\n"
852 " },\n" 860 " },\n"
853 " \"heap-is-corrupt\": 1,\n" 861 " \"heap-is-corrupt\": 1,\n"
854 " \"corrupt-range-count\": 10,\n" 862 " \"corrupt-range-count\": 10,\n"
855 " \"corrupt-block-count\": 200,\n" 863 " \"corrupt-block-count\": 200,\n"
856 " \"corrupt-ranges\": [\n" 864 " \"corrupt-ranges\": [\n"
857 " {\n" 865 " {\n"
858 " \"address\": \"0xBAADF00D\",\n" 866 " \"address\": \"0xBAADF00D\",\n"
859 " \"length\": 1048576,\n" 867 " \"length\": 1048576,\n"
860 " \"block-count\": 100,\n" 868 " \"block-count\": 100,\n"
861 " \"blocks\": [\n" 869 " \"blocks\": [\n"
862 " {\n" 870 " {\n"
863 " \"header\": \"0x%08X\",\n" 871 " \"header\": \"0x%08IX\",\n"
864 " \"user-size\": 8,\n" 872 " \"user-size\": 8,\n"
865 " \"state\": \"allocated\",\n" 873 " \"state\": \"allocated\",\n"
866 " \"heap-type\": \"WinHeap\",\n" 874 " \"heap-type\": \"WinHeap\",\n"
867 " \"analysis\": {\n" 875 " \"analysis\": {\n"
868 " \"block\": \"corrupt\",\n" 876 " \"block\": \"corrupt\",\n"
869 " \"header\": \"corrupt\",\n" 877 " \"header\": \"corrupt\",\n"
870 " \"body\": \"(unknown)\",\n" 878 " \"body\": \"(unknown)\",\n"
871 " \"trailer\": \"clean\"\n" 879 " \"trailer\": \"clean\"\n"
872 " },\n" 880 " },\n"
873 " \"alloc-thread-id\": 47,\n" 881 " \"alloc-thread-id\": 47,\n"
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
905 // Check memory ranges. 913 // Check memory ranges.
906 ASSERT_EQ(4, memory_ranges.size()); 914 ASSERT_EQ(4, memory_ranges.size());
907 const char* kExpectedMemoryRangesAddresses[] = { 915 const char* kExpectedMemoryRangesAddresses[] = {
908 reinterpret_cast<const char*>(block_info.header), 916 reinterpret_cast<const char*>(block_info.header),
909 reinterpret_cast<const char*>(BlockShadowAddress()), 917 reinterpret_cast<const char*>(BlockShadowAddress()),
910 reinterpret_cast<const char*>(shadow_memory.address), 918 reinterpret_cast<const char*>(shadow_memory.address),
911 reinterpret_cast<const char*>(runtime_->shadow()->page_bits())}; 919 reinterpret_cast<const char*>(runtime_->shadow()->page_bits())};
912 #ifndef _WIN64 920 #ifndef _WIN64
913 size_t kExpectedMemoryRangesSize[] = {48, 6, 64, 3}; 921 size_t kExpectedMemoryRangesSize[] = {48, 6, 64, 3};
914 #else 922 #else
915 size_t kExpectedMemoryRangesSize[] = {56, 7, 64, 3}; 923 size_t kExpectedMemoryRangesSize[] = {64, 8, 64, 3};
916 #endif 924 #endif
917 for (int i = 0; i < memory_ranges.size(); i++) { 925 for (int i = 0; i < memory_ranges.size(); i++) {
918 EXPECT_EQ(kExpectedMemoryRangesAddresses[i], memory_ranges[i].first) 926 EXPECT_EQ(kExpectedMemoryRangesAddresses[i], memory_ranges[i].first)
919 << " Where i = " << i; 927 << " Where i = " << i;
920 EXPECT_EQ(kExpectedMemoryRangesSize[i], memory_ranges[i].second) 928 EXPECT_EQ(kExpectedMemoryRangesSize[i], memory_ranges[i].second)
921 << " Where i = " << i; 929 << " Where i = " << i;
922 } 930 }
923 } 931 }
924 932
925 TEST_F(AsanErrorInfoTest, CrashdataProtobufToErrorInfo) { 933 TEST_F(AsanErrorInfoTest, CrashdataProtobufToErrorInfo) {
(...skipping 20 matching lines...) Expand all
946 EXPECT_EQ(block_info.state, error_info_from_proto.block_info.state); 954 EXPECT_EQ(block_info.state, error_info_from_proto.block_info.state);
947 EXPECT_EQ(block_info.heap_type, error_info_from_proto.block_info.heap_type); 955 EXPECT_EQ(block_info.heap_type, error_info_from_proto.block_info.heap_type);
948 EXPECT_EQ(block_info.alloc_tid, error_info_from_proto.block_info.alloc_tid); 956 EXPECT_EQ(block_info.alloc_tid, error_info_from_proto.block_info.alloc_tid);
949 EXPECT_EQ(block_info.free_tid, error_info_from_proto.block_info.free_tid); 957 EXPECT_EQ(block_info.free_tid, error_info_from_proto.block_info.free_tid);
950 EXPECT_EQ(block_info.milliseconds_since_free, 958 EXPECT_EQ(block_info.milliseconds_since_free,
951 error_info_from_proto.block_info.milliseconds_since_free); 959 error_info_from_proto.block_info.milliseconds_since_free);
952 } 960 }
953 961
954 } // namespace asan 962 } // namespace asan
955 } // namespace agent 963 } // namespace agent
OLDNEW
« no previous file with comments | « syzygy/agent/asan/block_unittest.cc ('k') | syzygy/agent/asan/logger_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698