Skip to content
This repository has been archived by the owner on Aug 8, 2023. It is now read-only.

Crash in DefaultFileSource mbgl::style::Parser::parseLayer() when loading offline maps #10226

Closed
georgejlee opened this issue Oct 18, 2017 · 1 comment
Labels
Core The cross-platform C++ core, aka mbgl crash iOS Mapbox Maps SDK for iOS offline

Comments

@georgejlee
Copy link

I saw this crash on Crashlytics:

Platform: iPad 2 on iOS 9.3.5
Mapbox SDK version: Mapbox-iOS-SDK-3.6.4

Steps to trigger behavior

I cannot reliably reproduce myself, but looking at the logs it appears to happen when loading cached offline maps.

  1. Start the app and load some offline maps.
  2. Quit the app and restart the app.
  3. Crash while loading offline maps.

This might be related to #5651. Perhaps the offline map data has gotten corrupted somehow?

Expected behavior

The maps should load without crashing.

Actual behavior

Crash

# URL: https://fabric.io/pasturemap/ios/apps/com.herdliveonitunes/issues/59e77ba161b02d480dc9fefe?time=last-thirty-days/sessions/209be7c0965249189ae20194b4c89add_116e288cb41e11e7918c56847afe9799_0_v2
# Organization: PastureMap
# Platform: ios
# Application: PastureMap
# Version: 4.0.6 (1013)
# Bundle Identifier: com.HerdLiveOnItunes
# Issue #: 225
# Issue ID: 59e77ba161b02d480dc9fefe
# Session ID: 209be7c0965249189ae20194b4c89add_116e288cb41e11e7918c56847afe9799_0_v2
# Date: 2017-10-17T22:40:00Z
# OS Version: 9.3.5 (13G36)
# Device: iPad 2
# RAM Free: 8.5%
# Disk Free: 27.8%

#16. Crashed: DefaultFileSource
0  Mapbox                         0xd3086c std::__1::__hash_const_iterator<std::__1::__hash_node<std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::experimental::fundamentals_v1::optional<mbgl::style::conversion::Error> (*)(mbgl::style::Layer&, rapidjson::GenericValue<rapidjson::UTF8<char>, rapidjson::CrtAllocator> const&, std::experimental::fundamentals_v1::optional<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > const&)>, void*>*> std::__1::__hash_table<std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::experimental::fundamentals_v1::optional<mbgl::style::conversion::Error> (*)(mbgl::style::Layer&, rapidjson::GenericValue<rapidjson::UTF8<char>, rapidjson::CrtAllocator> const&, std::experimental::fundamentals_v1::optional<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > const&)>, std::__1::__unordered_map_hasher<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::experimental::fundamentals_v1::optional<mbgl::style::conversion::Error> (*)(mbgl::style::Layer&, rapidjson::GenericValue<rapidjson::UTF8<char>, rapidjson::CrtAllocator> const&, std::experimental::fundamentals_v1::optional<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > const&)>, std::__1::hash<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, true>, std::__1::__unordered_map_equal<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::experimental::fundamentals_v1::optional<mbgl::style::conversion::Error> (*)(mbgl::style::Layer&, rapidjson::GenericValue<rapidjson::UTF8<char>, rapidjson::CrtAllocator> const&, std::experimental::fundamentals_v1::optional<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > const&)>, std::__1::equal_to<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, true>, std::__1::allocator<std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::experimental::fundamentals_v1::optional<mbgl::style::conversion::Error> (*)(mbgl::style::Layer&, rapidjson::GenericValue<rapidjson::UTF8<char>, rapidjson::CrtAllocator> const&, std::experimental::fundamentals_v1::optional<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > const&)> > >::find<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) const + 1125391
1  Mapbox                         0xd30869 std::__1::__hash_const_iterator<std::__1::__hash_node<std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::experimental::fundamentals_v1::optional<mbgl::style::conversion::Error> (*)(mbgl::style::Layer&, rapidjson::GenericValue<rapidjson::UTF8<char>, rapidjson::CrtAllocator> const&, std::experimental::fundamentals_v1::optional<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > const&)>, void*>*> std::__1::__hash_table<std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::experimental::fundamentals_v1::optional<mbgl::style::conversion::Error> (*)(mbgl::style::Layer&, rapidjson::GenericValue<rapidjson::UTF8<char>, rapidjson::CrtAllocator> const&, std::experimental::fundamentals_v1::optional<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > const&)>, std::__1::__unordered_map_hasher<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::experimental::fundamentals_v1::optional<mbgl::style::conversion::Error> (*)(mbgl::style::Layer&, rapidjson::GenericValue<rapidjson::UTF8<char>, rapidjson::CrtAllocator> const&, std::experimental::fundamentals_v1::optional<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > const&)>, std::__1::hash<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, true>, std::__1::__unordered_map_equal<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::experimental::fundamentals_v1::optional<mbgl::style::conversion::Error> (*)(mbgl::style::Layer&, rapidjson::GenericValue<rapidjson::UTF8<char>, rapidjson::CrtAllocator> const&, std::experimental::fundamentals_v1::optional<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > const&)>, std::__1::equal_to<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, true>, std::__1::allocator<std::__1::__hash_value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::experimental::fundamentals_v1::optional<mbgl::style::conversion::Error> (*)(mbgl::style::Layer&, rapidjson::GenericValue<rapidjson::UTF8<char>, rapidjson::CrtAllocator> const&, std::experimental::fundamentals_v1::optional<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > const&)> > >::find<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) const + 1125388
2  Mapbox                         0xd10885 std::experimental::fundamentals_v1::optional<mbgl::style::conversion::Error> mbgl::style::conversion::setPaintProperty<rapidjson::GenericValue<rapidjson::UTF8<char>, rapidjson::CrtAllocator> >(mbgl::style::Layer&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, rapidjson::GenericValue<rapidjson::UTF8<char>, rapidjson::CrtAllocator> const&, std::experimental::fundamentals_v1::optional<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > const&) + 994344
3  Mapbox                         0xd10721 std::experimental::fundamentals_v1::optional<mbgl::style::conversion::Error> mbgl::style::conversion::eachMember<std::experimental::fundamentals_v1::optional<mbgl::style::conversion::Error> mbgl::style::conversion::setPaintProperties<rapidjson::GenericValue<rapidjson::UTF8<char>, rapidjson::CrtAllocator> >(mbgl::style::Layer&, rapidjson::GenericValue<rapidjson::UTF8<char>, rapidjson::CrtAllocator> const&)::'lambda'(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, rapidjson::GenericValue<rapidjson::UTF8<char>, rapidjson::CrtAllocator> const&)::operator()(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, rapidjson::GenericValue<rapidjson::UTF8<char>, rapidjson::CrtAllocator> const&) const::'lambda'(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, rapidjson::GenericValue<rapidjson::UTF8<char>, rapidjson::CrtAllocator> const&)>(rapidjson::GenericValue<rapidjson::UTF8<char>, rapidjson::CrtAllocator> const&, rapidjson::GenericValue<rapidjson::UTF8<char>, rapidjson::CrtAllocator>&&) + 993988
4  Mapbox                         0xd105d1 std::experimental::fundamentals_v1::optional<mbgl::style::conversion::Error> mbgl::style::conversion::setPaintProperties<rapidjson::GenericValue<rapidjson::UTF8<char>, rapidjson::CrtAllocator> >(mbgl::style::Layer&, rapidjson::GenericValue<rapidjson::UTF8<char>, rapidjson::CrtAllocator> const&)::'lambda'(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, rapidjson::GenericValue<rapidjson::UTF8<char>, rapidjson::CrtAllocator> const&)::operator()(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, rapidjson::GenericValue<rapidjson::UTF8<char>, rapidjson::CrtAllocator> const&) const + 993652
5  Mapbox                         0xd10403 std::experimental::fundamentals_v1::optional<mbgl::style::conversion::Error> mbgl::style::conversion::eachMember<std::experimental::fundamentals_v1::optional<mbgl::style::conversion::Error> mbgl::style::conversion::setPaintProperties<rapidjson::GenericValue<rapidjson::UTF8<char>, rapidjson::CrtAllocator> >(mbgl::style::Layer&, rapidjson::GenericValue<rapidjson::UTF8<char>, rapidjson::CrtAllocator> const&)::'lambda'(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, rapidjson::GenericValue<rapidjson::UTF8<char>, rapidjson::CrtAllocator> const&)>(rapidjson::GenericValue<rapidjson::UTF8<char>, rapidjson::CrtAllocator> const&, rapidjson::GenericValue<rapidjson::UTF8<char>, rapidjson::CrtAllocator>&&) + 993190
6  Mapbox                         0xd31375 std::experimental::fundamentals_v1::optional<std::__1::unique_ptr<mbgl::style::Layer, std::__1::default_delete<mbgl::style::Layer> > > mbgl::style::conversion::Converter<std::__1::unique_ptr<mbgl::style::Layer, std::__1::default_delete<mbgl::style::Layer> >, void>::operator()<rapidjson::GenericValue<rapidjson::UTF8<char>, rapidjson::CrtAllocator> >(rapidjson::GenericValue<rapidjson::UTF8<char>, rapidjson::CrtAllocator> const&, mbgl::style::conversion::Error&) const + 1128216
7  Mapbox                         0xd0798f mbgl::style::Parser::parseLayer(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, rapidjson::GenericValue<rapidjson::UTF8<char>, rapidjson::CrtAllocator> const&, std::__1::unique_ptr<mbgl::style::Layer, std::__1::default_delete<mbgl::style::Layer> >&) + 957746
8  Mapbox                         0xd0769d mbgl::style::Parser::parseLayers(rapidjson::GenericValue<rapidjson::UTF8<char>, rapidjson::CrtAllocator> const&) + 956992
9  Mapbox                         0xd06923 mbgl::style::Parser::parse(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) + 953542
10 Mapbox                         0xc3dddf mbgl::OfflineDownload::getStatus() const + 131458
11 Mapbox                         0xc29e65 mbgl::DefaultFileSource::Impl::getRegionStatus(long long, std::__1::function<void (std::exception_ptr, std::experimental::fundamentals_v1::optional<mbgl::OfflineRegionStatus>)>) + 49672
12 Mapbox                         0xc3369b void mbgl::WorkTaskImpl<auto mbgl::util::Thread<mbgl::DefaultFileSource::Impl>::bind<void (mbgl::DefaultFileSource::Impl::*)(long long, std::__1::function<void (std::exception_ptr, std::experimental::fundamentals_v1::optional<mbgl::OfflineRegionStatus>)>)>(void (mbgl::DefaultFileSource::Impl::*)(long long, std::__1::function<void (std::exception_ptr, std::experimental::fundamentals_v1::optional<mbgl::OfflineRegionStatus>)>))::'lambda'(void (mbgl::DefaultFileSource::Impl::*&&)(long long, std::__1::function<void (std::exception_ptr, std::experimental::fundamentals_v1::optional<mbgl::OfflineRegionStatus>)>)), std::__1::tuple<long long, std::__1::function<void (std::exception_ptr, std::experimental::fundamentals_v1::optional<mbgl::OfflineRegionStatus>)> > >::invoke<0ul, 1ul>(std::__1::integer_sequence<unsigned long, 0ul, 1ul>) + 88638
13 Mapbox                         0xc3358f mbgl::WorkTaskImpl<auto mbgl::util::Thread<mbgl::DefaultFileSource::Impl>::bind<void (mbgl::DefaultFileSource::Impl::*)(long long, std::__1::function<void (std::exception_ptr, std::experimental::fundamentals_v1::optional<mbgl::OfflineRegionStatus>)>)>(void (mbgl::DefaultFileSource::Impl::*)(long long, std::__1::function<void (std::exception_ptr, std::experimental::fundamentals_v1::optional<mbgl::OfflineRegionStatus>)>))::'lambda'(void (mbgl::DefaultFileSource::Impl::*&&)(long long, std::__1::function<void (std::exception_ptr, std::experimental::fundamentals_v1::optional<mbgl::OfflineRegionStatus>)>)), std::__1::tuple<long long, std::__1::function<void (std::exception_ptr, std::experimental::fundamentals_v1::optional<mbgl::OfflineRegionStatus>)> > >::operator()() + 88370
14 Mapbox                         0xc22c29 mbgl::util::RunLoop::process() + 20428
15 CoreFoundation                 0x25375dff __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 14
16 CoreFoundation                 0x253759ed __CFRunLoopDoSources0 + 452
17 CoreFoundation                 0x25373d5b __CFRunLoopRun + 794
18 CoreFoundation                 0x252c3229 CFRunLoopRunSpecific + 520
19 CoreFoundation                 0x25303dd3 CFRunLoopRun + 98
20 Mapbox                         0xc2b9b5 void mbgl::util::Thread<mbgl::DefaultFileSource::Impl>::run<std::__1::tuple<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, unsigned long long&>, 0ul, 1ul>(std::__1::tuple<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, unsigned long long&>&&, std::__1::integer_sequence<unsigned long, 0ul, 1ul>) + 56664
21 Mapbox                         0xc2b889 std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, mbgl::util::Thread<mbgl::DefaultFileSource::Impl>::Thread<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, unsigned long long&>(mbgl::util::ThreadContext const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&&&, unsigned long long&&&)::'lambda'()> >(void*, void*) + 56364
22 libsystem_pthread.dylib        0x250e785b _pthread_body + 138
23 libsystem_pthread.dylib        0x250e77cf _pthread_start + 110
24 libsystem_pthread.dylib        0x250e5724 thread_start + 8

Full trace below:
com.herdliveonitunes_issue_225_crash_209be7c0965249189ae20194b4c89add_116e288cb41e11e7918c56847afe9799_0_v2.txt

@kkaefer
Copy link
Member

kkaefer commented Jan 23, 2018

Fixed in #11001

@kkaefer kkaefer closed this as completed Jan 23, 2018
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Core The cross-platform C++ core, aka mbgl crash iOS Mapbox Maps SDK for iOS offline
Projects
None yet
Development

No branches or pull requests

4 participants