-
Notifications
You must be signed in to change notification settings - Fork 17
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Use core-foundation-sys instead of core-foundation #50
Conversation
iana-time-zone is used by [chrono], and chrono is (optionally) used by [core-foundation]. So if iana-time-zone uses core-foundation, this results in a circular dependency. This PR replaces core-foundation by [core-foundation-sys], which breaks the circular dependency. [chrono]: https://crates.io/crates/chrono [core-foundation]: https://crates.io/crates/core-foundation [core-foundation-sys]: https://crates.io/crates/core-foundation-sys
I don't have a Mac, so I cannot test this on an actual system. Related issue: chronotope/chrono#770 |
Thanks all. Released in 0.1.43. And @djc thanks to you and team for moving chrono forward again - that is great. |
.and_then(|name| std::ffi::CStr::from_ptr(name).to_str().ok()) | ||
.map(|name| name.to_owned()) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This bit makes me a bit scared with the Dropping
type and the CStr
being dropped while a borrowed &str
is taken from name
. Is the .map(|name| name.to_owned())
a use after free?
To be sure, I'd probably restructure all of these combinators to use short circuit return to make sure the Dropping
and CStr
wrappers are dropped in the right order.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hm, I am not exactly sure. An implementation that's guaranteed to be sane should be:
pub(crate) fn get_timezone_inner() -> Result<String, crate::GetTimezoneError> {
unsafe {
if let Some(tz) = Dropping::new(CFTimeZoneCopySystem()) {
if let Some(name) = Dropping::new(CFTimeZoneGetName(tz.0)) {
let name = CFStringGetCStringPtr(name.0, kCFStringEncodingUTF8);
if !name.is_null() {
if let Ok(name) = std::ffi::CStr::from_ptr(name).to_str() {
return Ok(name.to_owned());
}
}
}
}
}
Err(crate::GetTimezoneError::OsError)
}
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
to be double sure I'd promote the std::ffi::CStr::from_ptr(name)
to a named binding before the if let
instead of a temporary in the if let
.
I'm not sure if this is related, but leak sanitizer is not happy on my mac: $ RUSTFLAGS="-Z sanitizer=leak" cargo +nightly test --lib
Compiling core-foundation-sys v0.8.3
error: failed to run custom build command for `core-foundation-sys v0.8.3`
Caused by:
process didn't exit successfully: `/Users/lopopolo/dev/repos/iana-time-zone/target/debug/build/core-foundation-sys-12e9821091001b77/build-script-build` (exit status: 23)
--- stdout
cargo:rustc-link-lib=framework=CoreFoundation
--- stderr
=================================================================
==70432==ERROR: LeakSanitizer: detected memory leaks
Direct leak of 1888 byte(s) in 59 object(s) allocated from:
#0 0x1055697fd in wrap_calloc+0x5d (librustc-nightly_rt.lsan.dylib:x86_64+0xb7fd) (BuildId: 8c28f22865823830a53915a56e9223bb240000001000000000070a0000010c00)
#1 0x7ff801b3b84f in realizeClassWithoutSwift(objc_class*, objc_class*)+0x88 (libobjc.A.dylib:x86_64h+0x484f) (BuildId: dad8610317e93016930d02cad81a5ed932000000200000000100000000050c00)
#2 0x7ff801b39b59 in map_images_nolock+0x161b (libobjc.A.dylib:x86_64h+0x2b59) (BuildId: dad8610317e93016930d02cad81a5ed932000000200000000100000000050c00)
#3 0x7ff801b384db in map_images+0x42 (libobjc.A.dylib:x86_64h+0x14db) (BuildId: dad8610317e93016930d02cad81a5ed932000000200000000100000000050c00)
#4 0x113dc11fa in invocation function for block in dyld4::RuntimeState::setObjCNotifiers(void (*)(unsigned int, char const* const*, mach_header const* const*), void (*)(char const*, mach_header const*), void (*)(char const*, mach_header const*))+0x112 (dyld:x86_64+0xf1fa) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#5 0x113dbc6c8 in dyld4::RuntimeState::withLoadersReadLock(void () block_pointer)+0x28 (dyld:x86_64+0xa6c8) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#6 0x113dc10e1 in dyld4::RuntimeState::setObjCNotifiers(void (*)(unsigned int, char const* const*, mach_header const* const*), void (*)(char const*, mach_header const*), void (*)(char const*, mach_header const*))+0x51 (dyld:x86_64+0xf0e1) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#7 0x113dd4d44 in dyld4::APIs::_dyld_objc_notify_register(void (*)(unsigned int, char const* const*, mach_header const* const*), void (*)(char const*, mach_header const*), void (*)(char const*, mach_header const*))+0x4e (dyld:x86_64+0x22d44) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#8 0x7ff801b38343 in _objc_init+0x4fe (libobjc.A.dylib:x86_64h+0x1343) (BuildId: dad8610317e93016930d02cad81a5ed932000000200000000100000000050c00)
#9 0x7ff801af2992 in _os_object_init+0xc (libdispatch.dylib:x86_64+0x2992) (BuildId: 5115c8efbc5732db91c671b61a79966e32000000200000000100000000050c00)
#10 0x7ff801b001b7 in libdispatch_init+0x136 (libdispatch.dylib:x86_64+0x101b7) (BuildId: 5115c8efbc5732db91c671b61a79966e32000000200000000100000000050c00)
#11 0x7ff80caa4894 in libSystem_initializer+0xed (libSystem.B.dylib:x86_64+0x1894) (BuildId: ba73a734cc563c50a9c8513b34b3726932000000200000000100000000050c00)
#12 0x113dc6e4e in invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const+0xb5 (dyld:x86_64+0x14e4e) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#13 0x113dedaac in invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void (unsigned int) block_pointer, void const*) const+0xf1 (dyld:x86_64+0x3baac) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#14 0x113de4e25 in invocation function for block in dyld3::MachOFile::forEachSection(void (dyld3::MachOFile::SectionInfo const&, bool, bool&) block_pointer) const+0x22c (dyld:x86_64+0x32e25) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#15 0x113db3db2 in dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void (load_command const*, bool&) block_pointer) const+0x80 (dyld:x86_64+0x1db2) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#16 0x113de4bb6 in dyld3::MachOFile::forEachSection(void (dyld3::MachOFile::SectionInfo const&, bool, bool&) block_pointer) const+0xb2 (dyld:x86_64+0x32bb6) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#17 0x113ded603 in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void (unsigned int) block_pointer, void const*) const+0x1d1 (dyld:x86_64+0x3b603) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#18 0x113dc6d81 in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const+0x8f (dyld:x86_64+0x14d81) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#19 0x113dcd659 in dyld4::PrebuiltLoader::runInitializers(dyld4::RuntimeState&) const+0x1d (dyld:x86_64+0x1b659) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#20 0x113dda76d in dyld4::APIs::runAllInitializersForMain()+0x25 (dyld:x86_64+0x2876d) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#21 0x113db838c in dyld4::prepare(dyld4::APIs&, dyld3::MachOAnalyzer const*)+0xd72 (dyld:x86_64+0x638c) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#22 0x113db74e3 in start+0x183 (dyld:x86_64+0x54e3) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
Direct leak of 1888 byte(s) in 59 object(s) allocated from:
#0 0x1055697fd in wrap_calloc+0x5d (librustc-nightly_rt.lsan.dylib:x86_64+0xb7fd) (BuildId: 8c28f22865823830a53915a56e9223bb240000001000000000070a0000010c00)
#1 0x7ff801b3b84f in realizeClassWithoutSwift(objc_class*, objc_class*)+0x88 (libobjc.A.dylib:x86_64h+0x484f) (BuildId: dad8610317e93016930d02cad81a5ed932000000200000000100000000050c00)
#2 0x7ff801b3b91b in realizeClassWithoutSwift(objc_class*, objc_class*)+0x154 (libobjc.A.dylib:x86_64h+0x491b) (BuildId: dad8610317e93016930d02cad81a5ed932000000200000000100000000050c00)
#3 0x7ff801b39b59 in map_images_nolock+0x161b (libobjc.A.dylib:x86_64h+0x2b59) (BuildId: dad8610317e93016930d02cad81a5ed932000000200000000100000000050c00)
#4 0x7ff801b384db in map_images+0x42 (libobjc.A.dylib:x86_64h+0x14db) (BuildId: dad8610317e93016930d02cad81a5ed932000000200000000100000000050c00)
#5 0x113dc11fa in invocation function for block in dyld4::RuntimeState::setObjCNotifiers(void (*)(unsigned int, char const* const*, mach_header const* const*), void (*)(char const*, mach_header const*), void (*)(char const*, mach_header const*))+0x112 (dyld:x86_64+0xf1fa) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#6 0x113dbc6c8 in dyld4::RuntimeState::withLoadersReadLock(void () block_pointer)+0x28 (dyld:x86_64+0xa6c8) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#7 0x113dc10e1 in dyld4::RuntimeState::setObjCNotifiers(void (*)(unsigned int, char const* const*, mach_header const* const*), void (*)(char const*, mach_header const*), void (*)(char const*, mach_header const*))+0x51 (dyld:x86_64+0xf0e1) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#8 0x113dd4d44 in dyld4::APIs::_dyld_objc_notify_register(void (*)(unsigned int, char const* const*, mach_header const* const*), void (*)(char const*, mach_header const*), void (*)(char const*, mach_header const*))+0x4e (dyld:x86_64+0x22d44) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#9 0x7ff801b38343 in _objc_init+0x4fe (libobjc.A.dylib:x86_64h+0x1343) (BuildId: dad8610317e93016930d02cad81a5ed932000000200000000100000000050c00)
#10 0x7ff801af2992 in _os_object_init+0xc (libdispatch.dylib:x86_64+0x2992) (BuildId: 5115c8efbc5732db91c671b61a79966e32000000200000000100000000050c00)
#11 0x7ff801b001b7 in libdispatch_init+0x136 (libdispatch.dylib:x86_64+0x101b7) (BuildId: 5115c8efbc5732db91c671b61a79966e32000000200000000100000000050c00)
#12 0x7ff80caa4894 in libSystem_initializer+0xed (libSystem.B.dylib:x86_64+0x1894) (BuildId: ba73a734cc563c50a9c8513b34b3726932000000200000000100000000050c00)
#13 0x113dc6e4e in invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const+0xb5 (dyld:x86_64+0x14e4e) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#14 0x113dedaac in invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void (unsigned int) block_pointer, void const*) const+0xf1 (dyld:x86_64+0x3baac) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#15 0x113de4e25 in invocation function for block in dyld3::MachOFile::forEachSection(void (dyld3::MachOFile::SectionInfo const&, bool, bool&) block_pointer) const+0x22c (dyld:x86_64+0x32e25) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#16 0x113db3db2 in dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void (load_command const*, bool&) block_pointer) const+0x80 (dyld:x86_64+0x1db2) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#17 0x113de4bb6 in dyld3::MachOFile::forEachSection(void (dyld3::MachOFile::SectionInfo const&, bool, bool&) block_pointer) const+0xb2 (dyld:x86_64+0x32bb6) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#18 0x113ded603 in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void (unsigned int) block_pointer, void const*) const+0x1d1 (dyld:x86_64+0x3b603) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#19 0x113dc6d81 in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const+0x8f (dyld:x86_64+0x14d81) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#20 0x113dcd659 in dyld4::PrebuiltLoader::runInitializers(dyld4::RuntimeState&) const+0x1d (dyld:x86_64+0x1b659) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#21 0x113dda76d in dyld4::APIs::runAllInitializersForMain()+0x25 (dyld:x86_64+0x2876d) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#22 0x113db838c in dyld4::prepare(dyld4::APIs&, dyld3::MachOAnalyzer const*)+0xd72 (dyld:x86_64+0x638c) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#23 0x113db74e3 in start+0x183 (dyld:x86_64+0x54e3) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
Direct leak of 160 byte(s) in 5 object(s) allocated from:
#0 0x1055697fd in wrap_calloc+0x5d (librustc-nightly_rt.lsan.dylib:x86_64+0xb7fd) (BuildId: 8c28f22865823830a53915a56e9223bb240000001000000000070a0000010c00)
#1 0x7ff801b3b84f in realizeClassWithoutSwift(objc_class*, objc_class*)+0x88 (libobjc.A.dylib:x86_64h+0x484f) (BuildId: dad8610317e93016930d02cad81a5ed932000000200000000100000000050c00)
#2 0x7ff801b3b91b in realizeClassWithoutSwift(objc_class*, objc_class*)+0x154 (libobjc.A.dylib:x86_64h+0x491b) (BuildId: dad8610317e93016930d02cad81a5ed932000000200000000100000000050c00)
#3 0x7ff801b3b8f8 in realizeClassWithoutSwift(objc_class*, objc_class*)+0x131 (libobjc.A.dylib:x86_64h+0x48f8) (BuildId: dad8610317e93016930d02cad81a5ed932000000200000000100000000050c00)
#4 0x7ff801b39b59 in map_images_nolock+0x161b (libobjc.A.dylib:x86_64h+0x2b59) (BuildId: dad8610317e93016930d02cad81a5ed932000000200000000100000000050c00)
#5 0x7ff801b384db in map_images+0x42 (libobjc.A.dylib:x86_64h+0x14db) (BuildId: dad8610317e93016930d02cad81a5ed932000000200000000100000000050c00)
#6 0x113dc11fa in invocation function for block in dyld4::RuntimeState::setObjCNotifiers(void (*)(unsigned int, char const* const*, mach_header const* const*), void (*)(char const*, mach_header const*), void (*)(char const*, mach_header const*))+0x112 (dyld:x86_64+0xf1fa) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#7 0x113dbc6c8 in dyld4::RuntimeState::withLoadersReadLock(void () block_pointer)+0x28 (dyld:x86_64+0xa6c8) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#8 0x113dc10e1 in dyld4::RuntimeState::setObjCNotifiers(void (*)(unsigned int, char const* const*, mach_header const* const*), void (*)(char const*, mach_header const*), void (*)(char const*, mach_header const*))+0x51 (dyld:x86_64+0xf0e1) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#9 0x113dd4d44 in dyld4::APIs::_dyld_objc_notify_register(void (*)(unsigned int, char const* const*, mach_header const* const*), void (*)(char const*, mach_header const*), void (*)(char const*, mach_header const*))+0x4e (dyld:x86_64+0x22d44) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#10 0x7ff801b38343 in _objc_init+0x4fe (libobjc.A.dylib:x86_64h+0x1343) (BuildId: dad8610317e93016930d02cad81a5ed932000000200000000100000000050c00)
#11 0x7ff801af2992 in _os_object_init+0xc (libdispatch.dylib:x86_64+0x2992) (BuildId: 5115c8efbc5732db91c671b61a79966e32000000200000000100000000050c00)
#12 0x7ff801b001b7 in libdispatch_init+0x136 (libdispatch.dylib:x86_64+0x101b7) (BuildId: 5115c8efbc5732db91c671b61a79966e32000000200000000100000000050c00)
#13 0x7ff80caa4894 in libSystem_initializer+0xed (libSystem.B.dylib:x86_64+0x1894) (BuildId: ba73a734cc563c50a9c8513b34b3726932000000200000000100000000050c00)
#14 0x113dc6e4e in invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const+0xb5 (dyld:x86_64+0x14e4e) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#15 0x113dedaac in invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void (unsigned int) block_pointer, void const*) const+0xf1 (dyld:x86_64+0x3baac) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#16 0x113de4e25 in invocation function for block in dyld3::MachOFile::forEachSection(void (dyld3::MachOFile::SectionInfo const&, bool, bool&) block_pointer) const+0x22c (dyld:x86_64+0x32e25) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#17 0x113db3db2 in dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void (load_command const*, bool&) block_pointer) const+0x80 (dyld:x86_64+0x1db2) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#18 0x113de4bb6 in dyld3::MachOFile::forEachSection(void (dyld3::MachOFile::SectionInfo const&, bool, bool&) block_pointer) const+0xb2 (dyld:x86_64+0x32bb6) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#19 0x113ded603 in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void (unsigned int) block_pointer, void const*) const+0x1d1 (dyld:x86_64+0x3b603) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#20 0x113dc6d81 in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const+0x8f (dyld:x86_64+0x14d81) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#21 0x113dcd659 in dyld4::PrebuiltLoader::runInitializers(dyld4::RuntimeState&) const+0x1d (dyld:x86_64+0x1b659) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#22 0x113dda76d in dyld4::APIs::runAllInitializersForMain()+0x25 (dyld:x86_64+0x2876d) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#23 0x113db838c in dyld4::prepare(dyld4::APIs&, dyld3::MachOAnalyzer const*)+0xd72 (dyld:x86_64+0x638c) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#24 0x113db74e3 in start+0x183 (dyld:x86_64+0x54e3) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
Direct leak of 160 byte(s) in 5 object(s) allocated from:
#0 0x1055697fd in wrap_calloc+0x5d (librustc-nightly_rt.lsan.dylib:x86_64+0xb7fd) (BuildId: 8c28f22865823830a53915a56e9223bb240000001000000000070a0000010c00)
#1 0x7ff801b3b84f in realizeClassWithoutSwift(objc_class*, objc_class*)+0x88 (libobjc.A.dylib:x86_64h+0x484f) (BuildId: dad8610317e93016930d02cad81a5ed932000000200000000100000000050c00)
#2 0x7ff801b3b8f8 in realizeClassWithoutSwift(objc_class*, objc_class*)+0x131 (libobjc.A.dylib:x86_64h+0x48f8) (BuildId: dad8610317e93016930d02cad81a5ed932000000200000000100000000050c00)
#3 0x7ff801b39b59 in map_images_nolock+0x161b (libobjc.A.dylib:x86_64h+0x2b59) (BuildId: dad8610317e93016930d02cad81a5ed932000000200000000100000000050c00)
#4 0x7ff801b384db in map_images+0x42 (libobjc.A.dylib:x86_64h+0x14db) (BuildId: dad8610317e93016930d02cad81a5ed932000000200000000100000000050c00)
#5 0x113dc11fa in invocation function for block in dyld4::RuntimeState::setObjCNotifiers(void (*)(unsigned int, char const* const*, mach_header const* const*), void (*)(char const*, mach_header const*), void (*)(char const*, mach_header const*))+0x112 (dyld:x86_64+0xf1fa) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#6 0x113dbc6c8 in dyld4::RuntimeState::withLoadersReadLock(void () block_pointer)+0x28 (dyld:x86_64+0xa6c8) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#7 0x113dc10e1 in dyld4::RuntimeState::setObjCNotifiers(void (*)(unsigned int, char const* const*, mach_header const* const*), void (*)(char const*, mach_header const*), void (*)(char const*, mach_header const*))+0x51 (dyld:x86_64+0xf0e1) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#8 0x113dd4d44 in dyld4::APIs::_dyld_objc_notify_register(void (*)(unsigned int, char const* const*, mach_header const* const*), void (*)(char const*, mach_header const*), void (*)(char const*, mach_header const*))+0x4e (dyld:x86_64+0x22d44) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#9 0x7ff801b38343 in _objc_init+0x4fe (libobjc.A.dylib:x86_64h+0x1343) (BuildId: dad8610317e93016930d02cad81a5ed932000000200000000100000000050c00)
#10 0x7ff801af2992 in _os_object_init+0xc (libdispatch.dylib:x86_64+0x2992) (BuildId: 5115c8efbc5732db91c671b61a79966e32000000200000000100000000050c00)
#11 0x7ff801b001b7 in libdispatch_init+0x136 (libdispatch.dylib:x86_64+0x101b7) (BuildId: 5115c8efbc5732db91c671b61a79966e32000000200000000100000000050c00)
#12 0x7ff80caa4894 in libSystem_initializer+0xed (libSystem.B.dylib:x86_64+0x1894) (BuildId: ba73a734cc563c50a9c8513b34b3726932000000200000000100000000050c00)
#13 0x113dc6e4e in invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const+0xb5 (dyld:x86_64+0x14e4e) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#14 0x113dedaac in invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void (unsigned int) block_pointer, void const*) const+0xf1 (dyld:x86_64+0x3baac) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#15 0x113de4e25 in invocation function for block in dyld3::MachOFile::forEachSection(void (dyld3::MachOFile::SectionInfo const&, bool, bool&) block_pointer) const+0x22c (dyld:x86_64+0x32e25) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#16 0x113db3db2 in dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void (load_command const*, bool&) block_pointer) const+0x80 (dyld:x86_64+0x1db2) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#17 0x113de4bb6 in dyld3::MachOFile::forEachSection(void (dyld3::MachOFile::SectionInfo const&, bool, bool&) block_pointer) const+0xb2 (dyld:x86_64+0x32bb6) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#18 0x113ded603 in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void (unsigned int) block_pointer, void const*) const+0x1d1 (dyld:x86_64+0x3b603) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#19 0x113dc6d81 in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const+0x8f (dyld:x86_64+0x14d81) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#20 0x113dcd659 in dyld4::PrebuiltLoader::runInitializers(dyld4::RuntimeState&) const+0x1d (dyld:x86_64+0x1b659) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#21 0x113dda76d in dyld4::APIs::runAllInitializersForMain()+0x25 (dyld:x86_64+0x2876d) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#22 0x113db838c in dyld4::prepare(dyld4::APIs&, dyld3::MachOAnalyzer const*)+0xd72 (dyld:x86_64+0x638c) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#23 0x113db74e3 in start+0x183 (dyld:x86_64+0x54e3) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
Direct leak of 32 byte(s) in 1 object(s) allocated from:
#0 0x1055697fd in wrap_calloc+0x5d (librustc-nightly_rt.lsan.dylib:x86_64+0xb7fd) (BuildId: 8c28f22865823830a53915a56e9223bb240000001000000000070a0000010c00)
#1 0x7ff801b3b84f in realizeClassWithoutSwift(objc_class*, objc_class*)+0x88 (libobjc.A.dylib:x86_64h+0x484f) (BuildId: dad8610317e93016930d02cad81a5ed932000000200000000100000000050c00)
#2 0x7ff801b3b91b in realizeClassWithoutSwift(objc_class*, objc_class*)+0x154 (libobjc.A.dylib:x86_64h+0x491b) (BuildId: dad8610317e93016930d02cad81a5ed932000000200000000100000000050c00)
#3 0x7ff801b3b8f8 in realizeClassWithoutSwift(objc_class*, objc_class*)+0x131 (libobjc.A.dylib:x86_64h+0x48f8) (BuildId: dad8610317e93016930d02cad81a5ed932000000200000000100000000050c00)
#4 0x7ff801b3b8f8 in realizeClassWithoutSwift(objc_class*, objc_class*)+0x131 (libobjc.A.dylib:x86_64h+0x48f8) (BuildId: dad8610317e93016930d02cad81a5ed932000000200000000100000000050c00)
#5 0x7ff801b39b59 in map_images_nolock+0x161b (libobjc.A.dylib:x86_64h+0x2b59) (BuildId: dad8610317e93016930d02cad81a5ed932000000200000000100000000050c00)
#6 0x7ff801b384db in map_images+0x42 (libobjc.A.dylib:x86_64h+0x14db) (BuildId: dad8610317e93016930d02cad81a5ed932000000200000000100000000050c00)
#7 0x113dc11fa in invocation function for block in dyld4::RuntimeState::setObjCNotifiers(void (*)(unsigned int, char const* const*, mach_header const* const*), void (*)(char const*, mach_header const*), void (*)(char const*, mach_header const*))+0x112 (dyld:x86_64+0xf1fa) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#8 0x113dbc6c8 in dyld4::RuntimeState::withLoadersReadLock(void () block_pointer)+0x28 (dyld:x86_64+0xa6c8) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#9 0x113dc10e1 in dyld4::RuntimeState::setObjCNotifiers(void (*)(unsigned int, char const* const*, mach_header const* const*), void (*)(char const*, mach_header const*), void (*)(char const*, mach_header const*))+0x51 (dyld:x86_64+0xf0e1) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#10 0x113dd4d44 in dyld4::APIs::_dyld_objc_notify_register(void (*)(unsigned int, char const* const*, mach_header const* const*), void (*)(char const*, mach_header const*), void (*)(char const*, mach_header const*))+0x4e (dyld:x86_64+0x22d44) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#11 0x7ff801b38343 in _objc_init+0x4fe (libobjc.A.dylib:x86_64h+0x1343) (BuildId: dad8610317e93016930d02cad81a5ed932000000200000000100000000050c00)
#12 0x7ff801af2992 in _os_object_init+0xc (libdispatch.dylib:x86_64+0x2992) (BuildId: 5115c8efbc5732db91c671b61a79966e32000000200000000100000000050c00)
#13 0x7ff801b001b7 in libdispatch_init+0x136 (libdispatch.dylib:x86_64+0x101b7) (BuildId: 5115c8efbc5732db91c671b61a79966e32000000200000000100000000050c00)
#14 0x7ff80caa4894 in libSystem_initializer+0xed (libSystem.B.dylib:x86_64+0x1894) (BuildId: ba73a734cc563c50a9c8513b34b3726932000000200000000100000000050c00)
#15 0x113dc6e4e in invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const+0xb5 (dyld:x86_64+0x14e4e) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#16 0x113dedaac in invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void (unsigned int) block_pointer, void const*) const+0xf1 (dyld:x86_64+0x3baac) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#17 0x113de4e25 in invocation function for block in dyld3::MachOFile::forEachSection(void (dyld3::MachOFile::SectionInfo const&, bool, bool&) block_pointer) const+0x22c (dyld:x86_64+0x32e25) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#18 0x113db3db2 in dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void (load_command const*, bool&) block_pointer) const+0x80 (dyld:x86_64+0x1db2) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#19 0x113de4bb6 in dyld3::MachOFile::forEachSection(void (dyld3::MachOFile::SectionInfo const&, bool, bool&) block_pointer) const+0xb2 (dyld:x86_64+0x32bb6) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#20 0x113ded603 in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void (unsigned int) block_pointer, void const*) const+0x1d1 (dyld:x86_64+0x3b603) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#21 0x113dc6d81 in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const+0x8f (dyld:x86_64+0x14d81) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#22 0x113dcd659 in dyld4::PrebuiltLoader::runInitializers(dyld4::RuntimeState&) const+0x1d (dyld:x86_64+0x1b659) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#23 0x113dda76d in dyld4::APIs::runAllInitializersForMain()+0x25 (dyld:x86_64+0x2876d) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#24 0x113db838c in dyld4::prepare(dyld4::APIs&, dyld3::MachOAnalyzer const*)+0xd72 (dyld:x86_64+0x638c) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#25 0x113db74e3 in start+0x183 (dyld:x86_64+0x54e3) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
Direct leak of 32 byte(s) in 1 object(s) allocated from:
#0 0x1055697fd in wrap_calloc+0x5d (librustc-nightly_rt.lsan.dylib:x86_64+0xb7fd) (BuildId: 8c28f22865823830a53915a56e9223bb240000001000000000070a0000010c00)
#1 0x7ff801b3b84f in realizeClassWithoutSwift(objc_class*, objc_class*)+0x88 (libobjc.A.dylib:x86_64h+0x484f) (BuildId: dad8610317e93016930d02cad81a5ed932000000200000000100000000050c00)
#2 0x7ff801b3b8f8 in realizeClassWithoutSwift(objc_class*, objc_class*)+0x131 (libobjc.A.dylib:x86_64h+0x48f8) (BuildId: dad8610317e93016930d02cad81a5ed932000000200000000100000000050c00)
#3 0x7ff801b3b8f8 in realizeClassWithoutSwift(objc_class*, objc_class*)+0x131 (libobjc.A.dylib:x86_64h+0x48f8) (BuildId: dad8610317e93016930d02cad81a5ed932000000200000000100000000050c00)
#4 0x7ff801b39b59 in map_images_nolock+0x161b (libobjc.A.dylib:x86_64h+0x2b59) (BuildId: dad8610317e93016930d02cad81a5ed932000000200000000100000000050c00)
#5 0x7ff801b384db in map_images+0x42 (libobjc.A.dylib:x86_64h+0x14db) (BuildId: dad8610317e93016930d02cad81a5ed932000000200000000100000000050c00)
#6 0x113dc11fa in invocation function for block in dyld4::RuntimeState::setObjCNotifiers(void (*)(unsigned int, char const* const*, mach_header const* const*), void (*)(char const*, mach_header const*), void (*)(char const*, mach_header const*))+0x112 (dyld:x86_64+0xf1fa) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#7 0x113dbc6c8 in dyld4::RuntimeState::withLoadersReadLock(void () block_pointer)+0x28 (dyld:x86_64+0xa6c8) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#8 0x113dc10e1 in dyld4::RuntimeState::setObjCNotifiers(void (*)(unsigned int, char const* const*, mach_header const* const*), void (*)(char const*, mach_header const*), void (*)(char const*, mach_header const*))+0x51 (dyld:x86_64+0xf0e1) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#9 0x113dd4d44 in dyld4::APIs::_dyld_objc_notify_register(void (*)(unsigned int, char const* const*, mach_header const* const*), void (*)(char const*, mach_header const*), void (*)(char const*, mach_header const*))+0x4e (dyld:x86_64+0x22d44) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#10 0x7ff801b38343 in _objc_init+0x4fe (libobjc.A.dylib:x86_64h+0x1343) (BuildId: dad8610317e93016930d02cad81a5ed932000000200000000100000000050c00)
#11 0x7ff801af2992 in _os_object_init+0xc (libdispatch.dylib:x86_64+0x2992) (BuildId: 5115c8efbc5732db91c671b61a79966e32000000200000000100000000050c00)
#12 0x7ff801b001b7 in libdispatch_init+0x136 (libdispatch.dylib:x86_64+0x101b7) (BuildId: 5115c8efbc5732db91c671b61a79966e32000000200000000100000000050c00)
#13 0x7ff80caa4894 in libSystem_initializer+0xed (libSystem.B.dylib:x86_64+0x1894) (BuildId: ba73a734cc563c50a9c8513b34b3726932000000200000000100000000050c00)
#14 0x113dc6e4e in invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const+0xb5 (dyld:x86_64+0x14e4e) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#15 0x113dedaac in invocation function for block in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void (unsigned int) block_pointer, void const*) const+0xf1 (dyld:x86_64+0x3baac) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#16 0x113de4e25 in invocation function for block in dyld3::MachOFile::forEachSection(void (dyld3::MachOFile::SectionInfo const&, bool, bool&) block_pointer) const+0x22c (dyld:x86_64+0x32e25) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#17 0x113db3db2 in dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void (load_command const*, bool&) block_pointer) const+0x80 (dyld:x86_64+0x1db2) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#18 0x113de4bb6 in dyld3::MachOFile::forEachSection(void (dyld3::MachOFile::SectionInfo const&, bool, bool&) block_pointer) const+0xb2 (dyld:x86_64+0x32bb6) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#19 0x113ded603 in dyld3::MachOAnalyzer::forEachInitializer(Diagnostics&, dyld3::MachOAnalyzer::VMAddrConverter const&, void (unsigned int) block_pointer, void const*) const+0x1d1 (dyld:x86_64+0x3b603) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#20 0x113dc6d81 in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const+0x8f (dyld:x86_64+0x14d81) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#21 0x113dcd659 in dyld4::PrebuiltLoader::runInitializers(dyld4::RuntimeState&) const+0x1d (dyld:x86_64+0x1b659) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#22 0x113dda76d in dyld4::APIs::runAllInitializersForMain()+0x25 (dyld:x86_64+0x2876d) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#23 0x113db838c in dyld4::prepare(dyld4::APIs&, dyld3::MachOAnalyzer const*)+0xd72 (dyld:x86_64+0x638c) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
#24 0x113db74e3 in start+0x183 (dyld:x86_64+0x54e3) (BuildId: f71fb3ca5fcc35779457b047888a46d132000000200000000100000000050c00)
SUMMARY: LeakSanitizer: 4160 byte(s) leaked in 130 allocation(s). Edit filed a ticket: #52 |
Per Ryan Lopopolo's review: > This bit makes me a bit scared with the `Dropping` type and the `CStr` being dropped while a borrowed `&str` is taken from name. Is the `.map(|name| name.to_owned())` a use after free? > > To be sure, I'd probably restructure all of these combinators to use short circuit return to make sure the `Dropping` and `CStr` wrappers are dropped in the right order. <strawlab#50 (comment)>
Per Ryan Lopopolo's review: > This bit makes me a bit scared with the `Dropping` type and the `CStr` being dropped while a borrowed `&str` is taken from name. Is the `.map(|name| name.to_owned())` a use after free? > > To be sure, I'd probably restructure all of these combinators to use short circuit return to make sure the `Dropping` and `CStr` wrappers are dropped in the right order. <strawlab#50 (comment)>
Following up on my review, the potential use-after-free was fixed in #54. The potential UAF was filed with the rustsec advisory DB in rustsec/advisory-db#1366 and published here: https://rustsec.org/advisories/RUSTSEC-2022-0049.html |
iana-time-zone is used by chrono, and chrono is (optionally) used by core-foundation. So if iana-time-zone uses core-foundation, this results in a circular dependency.
This PR replaces core-foundation by core-foundation-sys, which breaks the circular dependency.