ahatanak wrote:
Without this fix, an ASan-enabled clang detects a use-after-free when compiling
the following code:
```
@interface NSObject {
int these, will, never, change, ever;
}
@end
@interface SuperClass2 : NSObject
@property int superClassProperty2;
@end
@interface C0 : SuperClass2
@end
@interface C1 : C0
@end
@interface C2 : C1
@end
@interface C3 : C2
@end
@interface C4 : C3
@end
@interface C5 : C4
@end
@interface C6 : C5
@end
@interface C7 : C6
@end
@interface C8 : C7
@end
@interface C9 : C8
@end
@interface C10 : C9
@end
@interface C11 : C10
@end
@interface C12 : C11
@end
@interface C13 : C12
@end
@interface C14 : C13
@end
@interface C15 : C14
@end
@interface C16 : C15
@end
@interface C17 : C16
@end
@interface C18 : C17
@end
@interface C19 : C18
@end
@interface C20 : C19
@end
@interface C21 : C20
@end
@interface C22 : C21
@end
@interface C23 : C22
@end
@interface C24 : C23
@end
@interface C25 : C24
@end
@interface C26 : C25
@end
@interface C27 : C26
@end
@interface C28 : C27
@end
@interface C29 : C28
@end
@interface C30 : C29
@end
@interface C31 : C30
@end
@interface C32 : C31
@end
@interface C33 : C32
@end
@interface C34 : C33
@end
@interface C35 : C34
@end
@interface C36 : C35
@end
@interface C37 : C36
@end
@interface C38 : C37
@end
@interface C39 : C38
@end
@interface C40 : C39
@end
@interface C41 : C40
@end
@interface C42 : C41
@end
@interface C43 : C42
@end
@interface C44 : C43
@end
@interface C45 : C44
@end
@interface IntermediateClass2 : SuperClass2
@property int IntermediateClass2Property;
@end
@interface IntermediateClass3 : SuperClass2
@property int IntermediateClass3Property;
@end
@interface IntermediateClass4 : SuperClass2
@end
@implementation IntermediateClass3
@end
@implementation SuperClass2
@end
```
The DenseMap grows from 64 entries to 128 entries when
`ResetObjCLayout(IntermediateClass3)` is called recursively from
`ResetObjCLayout(SuperClass2)`, invalidating the iterators in the caller.
https://github.com/llvm/llvm-project/pull/170360
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits