Skip to content

Commit a0e18ce

Browse files
author
Mark Lam
committed
Fix infinite recursion in WTFCrashWithInfo() after r248930.
https://bugs.webkit.org/show_bug.cgi?id=201022 Reviewed by Saam Barati. * wtf/Assertions.cpp: (WTFCrashWithInfoImpl): (WTFCrashWithInfo): Deleted. * wtf/Assertions.h: (WTFCrashWithInfo): Canonical link: https://commits.webkit.org/214730@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@248992 268f45cc-cd09-0410-ab3c-d52691b4dbfc
1 parent 5cb6d06 commit a0e18ce

3 files changed

Lines changed: 46 additions & 33 deletions

File tree

Source/WTF/ChangeLog

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,16 @@
1+
2019-08-21 Mark Lam <mark.lam@apple.com>
2+
3+
Fix infinite recursion in WTFCrashWithInfo() after r248930.
4+
https://bugs.webkit.org/show_bug.cgi?id=201022
5+
6+
Reviewed by Saam Barati.
7+
8+
* wtf/Assertions.cpp:
9+
(WTFCrashWithInfoImpl):
10+
(WTFCrashWithInfo): Deleted.
11+
* wtf/Assertions.h:
12+
(WTFCrashWithInfo):
13+
114
2019-08-21 Chris Dumez <cdumez@apple.com>
215

316
registrableDomainsToRemoveWebsiteDataFor() does not need to return a HashMap

Source/WTF/wtf/Assertions.cpp

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (C) 2003-2017 Apple Inc. All rights reserved.
2+
* Copyright (C) 2003-2019 Apple Inc. All rights reserved.
33
* Copyright (C) 2007-2009 Torch Mobile, Inc.
44
* Copyright (C) 2011 University of Szeged. All rights reserved.
55
*
@@ -621,7 +621,7 @@ void WTFReleaseLogStackTrace(WTFLogChannel* channel)
621621

622622
#endif // CPU(ARM64)
623623

624-
void WTFCrashWithInfo(int, const char*, const char*, int, uint64_t reason, uint64_t misc1, uint64_t misc2, uint64_t misc3, uint64_t misc4, uint64_t misc5, uint64_t misc6)
624+
void WTFCrashWithInfoImpl(int, const char*, const char*, int, uint64_t reason, uint64_t misc1, uint64_t misc2, uint64_t misc3, uint64_t misc4, uint64_t misc5, uint64_t misc6)
625625
{
626626
register uint64_t reasonGPR asm(CRASH_GPR0) = reason;
627627
register uint64_t misc1GPR asm(CRASH_GPR1) = misc1;
@@ -634,7 +634,7 @@ void WTFCrashWithInfo(int, const char*, const char*, int, uint64_t reason, uint6
634634
__builtin_unreachable();
635635
}
636636

637-
void WTFCrashWithInfo(int, const char*, const char*, int, uint64_t reason, uint64_t misc1, uint64_t misc2, uint64_t misc3, uint64_t misc4, uint64_t misc5)
637+
void WTFCrashWithInfoImpl(int, const char*, const char*, int, uint64_t reason, uint64_t misc1, uint64_t misc2, uint64_t misc3, uint64_t misc4, uint64_t misc5)
638638
{
639639
register uint64_t reasonGPR asm(CRASH_GPR0) = reason;
640640
register uint64_t misc1GPR asm(CRASH_GPR1) = misc1;
@@ -646,7 +646,7 @@ void WTFCrashWithInfo(int, const char*, const char*, int, uint64_t reason, uint6
646646
__builtin_unreachable();
647647
}
648648

649-
void WTFCrashWithInfo(int, const char*, const char*, int, uint64_t reason, uint64_t misc1, uint64_t misc2, uint64_t misc3, uint64_t misc4)
649+
void WTFCrashWithInfoImpl(int, const char*, const char*, int, uint64_t reason, uint64_t misc1, uint64_t misc2, uint64_t misc3, uint64_t misc4)
650650
{
651651
register uint64_t reasonGPR asm(CRASH_GPR0) = reason;
652652
register uint64_t misc1GPR asm(CRASH_GPR1) = misc1;
@@ -657,7 +657,7 @@ void WTFCrashWithInfo(int, const char*, const char*, int, uint64_t reason, uint6
657657
__builtin_unreachable();
658658
}
659659

660-
void WTFCrashWithInfo(int, const char*, const char*, int, uint64_t reason, uint64_t misc1, uint64_t misc2, uint64_t misc3)
660+
void WTFCrashWithInfoImpl(int, const char*, const char*, int, uint64_t reason, uint64_t misc1, uint64_t misc2, uint64_t misc3)
661661
{
662662
register uint64_t reasonGPR asm(CRASH_GPR0) = reason;
663663
register uint64_t misc1GPR asm(CRASH_GPR1) = misc1;
@@ -667,7 +667,7 @@ void WTFCrashWithInfo(int, const char*, const char*, int, uint64_t reason, uint6
667667
__builtin_unreachable();
668668
}
669669

670-
void WTFCrashWithInfo(int, const char*, const char*, int, uint64_t reason, uint64_t misc1, uint64_t misc2)
670+
void WTFCrashWithInfoImpl(int, const char*, const char*, int, uint64_t reason, uint64_t misc1, uint64_t misc2)
671671
{
672672
register uint64_t reasonGPR asm(CRASH_GPR0) = reason;
673673
register uint64_t misc1GPR asm(CRASH_GPR1) = misc1;
@@ -676,15 +676,15 @@ void WTFCrashWithInfo(int, const char*, const char*, int, uint64_t reason, uint6
676676
__builtin_unreachable();
677677
}
678678

679-
void WTFCrashWithInfo(int, const char*, const char*, int, uint64_t reason, uint64_t misc1)
679+
void WTFCrashWithInfoImpl(int, const char*, const char*, int, uint64_t reason, uint64_t misc1)
680680
{
681681
register uint64_t reasonGPR asm(CRASH_GPR0) = reason;
682682
register uint64_t misc1GPR asm(CRASH_GPR1) = misc1;
683683
__asm__ volatile (CRASH_INST : : "r"(reasonGPR), "r"(misc1GPR));
684684
__builtin_unreachable();
685685
}
686686

687-
void WTFCrashWithInfo(int, const char*, const char*, int, uint64_t reason)
687+
void WTFCrashWithInfoImpl(int, const char*, const char*, int, uint64_t reason)
688688
{
689689
register uint64_t reasonGPR asm(CRASH_GPR0) = reason;
690690
__asm__ volatile (CRASH_INST : : "r"(reasonGPR));
@@ -693,13 +693,13 @@ void WTFCrashWithInfo(int, const char*, const char*, int, uint64_t reason)
693693

694694
#else
695695

696-
void WTFCrashWithInfo(int, const char*, const char*, int, uint64_t, uint64_t, uint64_t, uint64_t, uint64_t, uint64_t, uint64_t) { CRASH(); }
697-
void WTFCrashWithInfo(int, const char*, const char*, int, uint64_t, uint64_t, uint64_t, uint64_t, uint64_t, uint64_t) { CRASH(); }
698-
void WTFCrashWithInfo(int, const char*, const char*, int, uint64_t, uint64_t, uint64_t, uint64_t, uint64_t) { CRASH(); }
699-
void WTFCrashWithInfo(int, const char*, const char*, int, uint64_t, uint64_t, uint64_t, uint64_t) { CRASH(); }
700-
void WTFCrashWithInfo(int, const char*, const char*, int, uint64_t, uint64_t, uint64_t) { CRASH(); }
701-
void WTFCrashWithInfo(int, const char*, const char*, int, uint64_t, uint64_t) { CRASH(); }
702-
void WTFCrashWithInfo(int, const char*, const char*, int, uint64_t) { CRASH(); }
696+
void WTFCrashWithInfoImpl(int, const char*, const char*, int, uint64_t, uint64_t, uint64_t, uint64_t, uint64_t, uint64_t, uint64_t) { CRASH(); }
697+
void WTFCrashWithInfoImpl(int, const char*, const char*, int, uint64_t, uint64_t, uint64_t, uint64_t, uint64_t, uint64_t) { CRASH(); }
698+
void WTFCrashWithInfoImpl(int, const char*, const char*, int, uint64_t, uint64_t, uint64_t, uint64_t, uint64_t) { CRASH(); }
699+
void WTFCrashWithInfoImpl(int, const char*, const char*, int, uint64_t, uint64_t, uint64_t, uint64_t) { CRASH(); }
700+
void WTFCrashWithInfoImpl(int, const char*, const char*, int, uint64_t, uint64_t, uint64_t) { CRASH(); }
701+
void WTFCrashWithInfoImpl(int, const char*, const char*, int, uint64_t, uint64_t) { CRASH(); }
702+
void WTFCrashWithInfoImpl(int, const char*, const char*, int, uint64_t) { CRASH(); }
703703

704704
#endif // OS(DARWIN) && (CPU(X64_64) || CPU(ARM64))
705705

Source/WTF/wtf/Assertions.h

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -549,6 +549,17 @@ WTF_EXPORT_PRIVATE NO_RETURN_DUE_TO_CRASH void WTFCrashWithSecurityImplication(v
549549

550550
#ifdef __cplusplus
551551

552+
// The combination of line, file, function, and counter should be a unique number per call to this crash. This tricks the compiler into not coalescing calls to WTFCrashWithInfo.
553+
// The easiest way to fill these values per translation unit is to pass __LINE__, __FILE__, WTF_PRETTY_FUNCTION, and __COUNTER__.
554+
WTF_EXPORT_PRIVATE NO_RETURN_DUE_TO_CRASH NOT_TAIL_CALLED void WTFCrashWithInfoImpl(int line, const char* file, const char* function, int counter, uint64_t reason, uint64_t misc1, uint64_t misc2, uint64_t misc3, uint64_t misc4, uint64_t misc5, uint64_t misc6);
555+
WTF_EXPORT_PRIVATE NO_RETURN_DUE_TO_CRASH NOT_TAIL_CALLED void WTFCrashWithInfoImpl(int line, const char* file, const char* function, int counter, uint64_t reason, uint64_t misc1, uint64_t misc2, uint64_t misc3, uint64_t misc4, uint64_t misc5);
556+
WTF_EXPORT_PRIVATE NO_RETURN_DUE_TO_CRASH NOT_TAIL_CALLED void WTFCrashWithInfoImpl(int line, const char* file, const char* function, int counter, uint64_t reason, uint64_t misc1, uint64_t misc2, uint64_t misc3, uint64_t misc4);
557+
WTF_EXPORT_PRIVATE NO_RETURN_DUE_TO_CRASH NOT_TAIL_CALLED void WTFCrashWithInfoImpl(int line, const char* file, const char* function, int counter, uint64_t reason, uint64_t misc1, uint64_t misc2, uint64_t misc3);
558+
WTF_EXPORT_PRIVATE NO_RETURN_DUE_TO_CRASH NOT_TAIL_CALLED void WTFCrashWithInfoImpl(int line, const char* file, const char* function, int counter, uint64_t reason, uint64_t misc1, uint64_t misc2);
559+
WTF_EXPORT_PRIVATE NO_RETURN_DUE_TO_CRASH NOT_TAIL_CALLED void WTFCrashWithInfoImpl(int line, const char* file, const char* function, int counter, uint64_t reason, uint64_t misc1);
560+
WTF_EXPORT_PRIVATE NO_RETURN_DUE_TO_CRASH NOT_TAIL_CALLED void WTFCrashWithInfoImpl(int line, const char* file, const char* function, int counter, uint64_t reason);
561+
NO_RETURN_DUE_TO_CRASH NOT_TAIL_CALLED void WTFCrashWithInfo(int line, const char* file, const char* function, int counter);
562+
552563
template<typename T>
553564
ALWAYS_INLINE uint64_t wtfCrashArg(T* arg) { return reinterpret_cast<uintptr_t>(arg); }
554565

@@ -558,56 +569,45 @@ ALWAYS_INLINE uint64_t wtfCrashArg(T arg) { return arg; }
558569
template<typename T>
559570
NO_RETURN_DUE_TO_CRASH ALWAYS_INLINE void WTFCrashWithInfo(int line, const char* file, const char* function, int counter, T reason)
560571
{
561-
WTFCrashWithInfo(line, file, function, counter, wtfCrashArg(reason));
572+
WTFCrashWithInfoImpl(line, file, function, counter, wtfCrashArg(reason));
562573
}
563574

564575
template<typename T, typename U>
565576
NO_RETURN_DUE_TO_CRASH ALWAYS_INLINE void WTFCrashWithInfo(int line, const char* file, const char* function, int counter, T reason, U misc1)
566577
{
567-
WTFCrashWithInfo(line, file, function, counter, wtfCrashArg(reason), wtfCrashArg(misc1));
578+
WTFCrashWithInfoImpl(line, file, function, counter, wtfCrashArg(reason), wtfCrashArg(misc1));
568579
}
569580

570581
template<typename T, typename U, typename V>
571582
NO_RETURN_DUE_TO_CRASH ALWAYS_INLINE void WTFCrashWithInfo(int line, const char* file, const char* function, int counter, T reason, U misc1, V misc2)
572583
{
573-
WTFCrashWithInfo(line, file, function, counter, wtfCrashArg(reason), wtfCrashArg(misc1), wtfCrashArg(misc2));
584+
WTFCrashWithInfoImpl(line, file, function, counter, wtfCrashArg(reason), wtfCrashArg(misc1), wtfCrashArg(misc2));
574585
}
575586

576587
template<typename T, typename U, typename V, typename W>
577588
NO_RETURN_DUE_TO_CRASH ALWAYS_INLINE void WTFCrashWithInfo(int line, const char* file, const char* function, int counter, T reason, U misc1, V misc2, W misc3)
578589
{
579-
WTFCrashWithInfo(line, file, function, counter, wtfCrashArg(reason), wtfCrashArg(misc1), wtfCrashArg(misc2), wtfCrashArg(misc3));
590+
WTFCrashWithInfoImpl(line, file, function, counter, wtfCrashArg(reason), wtfCrashArg(misc1), wtfCrashArg(misc2), wtfCrashArg(misc3));
580591
}
581592

582593
template<typename T, typename U, typename V, typename W, typename X>
583594
NO_RETURN_DUE_TO_CRASH ALWAYS_INLINE void WTFCrashWithInfo(int line, const char* file, const char* function, int counter, T reason, U misc1, V misc2, W misc3, X misc4)
584595
{
585-
WTFCrashWithInfo(line, file, function, counter, wtfCrashArg(reason), wtfCrashArg(misc1), wtfCrashArg(misc2), wtfCrashArg(misc3), wtfCrashArg(misc4));
596+
WTFCrashWithInfoImpl(line, file, function, counter, wtfCrashArg(reason), wtfCrashArg(misc1), wtfCrashArg(misc2), wtfCrashArg(misc3), wtfCrashArg(misc4));
586597
}
587598

588599
template<typename T, typename U, typename V, typename W, typename X, typename Y>
589600
NO_RETURN_DUE_TO_CRASH ALWAYS_INLINE void WTFCrashWithInfo(int line, const char* file, const char* function, int counter, T reason, U misc1, V misc2, W misc3, X misc4, Y misc5)
590601
{
591-
WTFCrashWithInfo(line, file, function, counter, wtfCrashArg(reason), wtfCrashArg(misc1), wtfCrashArg(misc2), wtfCrashArg(misc3), wtfCrashArg(misc4), wtfCrashArg(misc5));
602+
WTFCrashWithInfoImpl(line, file, function, counter, wtfCrashArg(reason), wtfCrashArg(misc1), wtfCrashArg(misc2), wtfCrashArg(misc3), wtfCrashArg(misc4), wtfCrashArg(misc5));
592603
}
593604

594605
template<typename T, typename U, typename V, typename W, typename X, typename Y, typename Z>
595606
NO_RETURN_DUE_TO_CRASH ALWAYS_INLINE void WTFCrashWithInfo(int line, const char* file, const char* function, int counter, T reason, U misc1, V misc2, W misc3, X misc4, Y misc5, Z misc6)
596607
{
597-
WTFCrashWithInfo(line, file, function, counter, wtfCrashArg(reason), wtfCrashArg(misc1), wtfCrashArg(misc2), wtfCrashArg(misc3), wtfCrashArg(misc4), wtfCrashArg(misc5), wtfCrashArg(misc6));
608+
WTFCrashWithInfoImpl(line, file, function, counter, wtfCrashArg(reason), wtfCrashArg(misc1), wtfCrashArg(misc2), wtfCrashArg(misc3), wtfCrashArg(misc4), wtfCrashArg(misc5), wtfCrashArg(misc6));
598609
}
599610

600-
// The combination of line, file, function, and counter should be a unique number per call to this crash. This tricks the compiler into not coalescing calls to WTFCrashWithInfo.
601-
// The easiest way to fill these values per translation unit is to pass __LINE__, __FILE__, WTF_PRETTY_FUNCTION, and __COUNTER__.
602-
WTF_EXPORT_PRIVATE NO_RETURN_DUE_TO_CRASH NOT_TAIL_CALLED void WTFCrashWithInfo(int line, const char* file, const char* function, int counter, uint64_t reason, uint64_t misc1, uint64_t misc2, uint64_t misc3, uint64_t misc4, uint64_t misc5, uint64_t misc6);
603-
WTF_EXPORT_PRIVATE NO_RETURN_DUE_TO_CRASH NOT_TAIL_CALLED void WTFCrashWithInfo(int line, const char* file, const char* function, int counter, uint64_t reason, uint64_t misc1, uint64_t misc2, uint64_t misc3, uint64_t misc4, uint64_t misc5);
604-
WTF_EXPORT_PRIVATE NO_RETURN_DUE_TO_CRASH NOT_TAIL_CALLED void WTFCrashWithInfo(int line, const char* file, const char* function, int counter, uint64_t reason, uint64_t misc1, uint64_t misc2, uint64_t misc3, uint64_t misc4);
605-
WTF_EXPORT_PRIVATE NO_RETURN_DUE_TO_CRASH NOT_TAIL_CALLED void WTFCrashWithInfo(int line, const char* file, const char* function, int counter, uint64_t reason, uint64_t misc1, uint64_t misc2, uint64_t misc3);
606-
WTF_EXPORT_PRIVATE NO_RETURN_DUE_TO_CRASH NOT_TAIL_CALLED void WTFCrashWithInfo(int line, const char* file, const char* function, int counter, uint64_t reason, uint64_t misc1, uint64_t misc2);
607-
WTF_EXPORT_PRIVATE NO_RETURN_DUE_TO_CRASH NOT_TAIL_CALLED void WTFCrashWithInfo(int line, const char* file, const char* function, int counter, uint64_t reason, uint64_t misc1);
608-
WTF_EXPORT_PRIVATE NO_RETURN_DUE_TO_CRASH NOT_TAIL_CALLED void WTFCrashWithInfo(int line, const char* file, const char* function, int counter, uint64_t reason);
609-
NO_RETURN_DUE_TO_CRASH NOT_TAIL_CALLED void WTFCrashWithInfo(int line, const char* file, const char* function, int counter);
610-
611611
inline void WTFCrashWithInfo(int, const char*, const char*, int)
612612
#if COMPILER(CLANG)
613613
__attribute__((optnone))

0 commit comments

Comments
 (0)