Skip to content
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

Merged
merged 1 commit into from Aug 11, 2022

Conversation

Kijewski
Copy link
Collaborator

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.

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
@Kijewski
Copy link
Collaborator Author

I don't have a Mac, so I cannot test this on an actual system.

Related issue: chronotope/chrono#770
Cc @rdeaton

@djc
Copy link
Contributor

djc commented Aug 11, 2022

@Kijewski thanks for fixing this up! And @astraw thanks for this crate, I hope we can iron out the initial issues with our use in chrono soon and hopefully we won't cause too much more support burden.

@astraw astraw merged commit aa7f46f into strawlab:main Aug 11, 2022
@astraw
Copy link
Member

astraw commented Aug 11, 2022

Thanks all. Released in 0.1.43. And @djc thanks to you and team for moving chrono forward again - that is great.

@Kijewski Kijewski deleted the pr-core-foundation-sys branch August 11, 2022 15:08
Comment on lines +17 to +18
.and_then(|name| std::ffi::CStr::from_ptr(name).to_str().ok())
.map(|name| name.to_owned())
Copy link
Collaborator

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.

Copy link
Collaborator Author

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)
}

Copy link
Collaborator

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.

@lopopolo
Copy link
Collaborator

lopopolo commented Aug 14, 2022

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

@lopopolo lopopolo mentioned this pull request Aug 14, 2022
Kijewski added a commit to Kijewski/iana-time-zone that referenced this pull request Aug 14, 2022
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)>
Kijewski added a commit to Kijewski/iana-time-zone that referenced this pull request Aug 14, 2022
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)>
@lopopolo
Copy link
Collaborator

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

@astraw astraw mentioned this pull request Sep 26, 2022
@lopopolo lopopolo added the Tier-1 Rust Tier-1 platform label Oct 1, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Tier-1 Rust Tier-1 platform
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

4 participants