Bug 302842 - "download region" crashes Marble if main texture layer of map theme has absolute file path
Summary: "download region" crashes Marble if main texture layer of map theme has absol...
Status: RESOLVED FIXED
Alias: None
Product: marble
Classification: Applications
Component: general (show other bugs)
Version: unspecified
Platform: Maemo 5 Linux
: NOR critical
Target Milestone: ---
Assignee: marble-bugs
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2012-07-01 16:14 UTC by Bernhard Beschow
Modified: 2012-07-24 20:48 UTC (History)
0 users

See Also:
Latest Commit:
Version Fixed In: 4.9.0


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Bernhard Beschow 2012-07-01 16:14:40 UTC
Suppose you open a map theme with the following ID: "earth/openstreetmap/openstreetmap.dgml". Further suppose it has the absolute file path (sourcedir) for the OSM layer set to "/home/user/MyDocs/.maps/OpenStreetMap I".

When trying to download the region, MarbleMap tries to derive the sourcedir from the map theme ID, which spuriously evaluates to "earth/openstreetmap". When looking for the GeoSceneTexture in TileLoader::tileStatus(), a null pointer is returned, leading to the following backtrace (which, for some strange reason, is incomplete):

Application: Marble – Virtueller Globus (marble), signal: Segmentation fault
Using host libthread_db library "/lib/libthread_db.so.1".
[Current thread is 1 (Thread 0xb2b99980 (LWP 8630))]

Thread 1 (Thread 0xb2b99980 (LWP 8630)):
[KCrash Handler]
#6  QString (other=..., this=0xbff3e638) at /usr/include/QtCore/qstring.h:725
#7  Marble::GeoSceneAbstractDataset::fileFormat (this=0x0) at /home/shentey/Projekte/marble/src/src/lib/geodata/scene/GeoSceneLayer.cpp:47
#8  0xb7450f00 in Marble::GeoSceneTexture::relativeTileFileName (this=0x0, id=...) at /home/shentey/Projekte/marble/src/src/lib/geodata/scene/GeoSceneTexture.cpp:213
#9  0x00000000 in ?? ()

Reproducible: Always

Steps to Reproduce:
1. Start Marble on the N900
2. Select OSM map theme
3. Open "Donwload Region" dialog
4. Press the Done button (no need to change settings)
Actual Results:  
Marble crashes

Expected Results:  
Marble should download current region
Comment 1 Bernhard Beschow 2012-07-01 16:35:56 UTC
Git commit 94781d81994c34b8819539611de170bdf751fc12 by Bernhard Beschow.
Committed on 30/06/2012 at 17:20.
Pushed by beschow into branch 'master'.

when downloading a region, consider tile availability for each layer separately instead of judging from the first

Besides being more precise, it also avoids a crash by not trying to guess the source directory from the first tile layer.

M  +1    -3    src/lib/MarbleMap.cpp
M  +3    -1    src/lib/MergedLayerDecorator.cpp
M  +0    -5    src/lib/layers/TextureLayer.cpp
M  +0    -3    src/lib/layers/TextureLayer.h

http://commits.kde.org/marble/94781d81994c34b8819539611de170bdf751fc12
Comment 2 Bernhard Beschow 2012-07-02 20:19:30 UTC
Git commit a95181059adfd21a8a03e611c40318a673dea7d4 by Bernhard Beschow.
Committed on 30/06/2012 at 17:20.
Pushed by beschow into branch 'KDE/4.9'.

when downloading a region, consider tile availability for each layer separately instead of judging from the first

Besides being more precise, it also avoids a crash by not trying to guess the source directory for the base tiles from the .dgml directory.
FIXED-IN: 4.9.0
(cherry picked from commit 94781d81994c34b8819539611de170bdf751fc12)

M  +1    -3    src/lib/MarbleMap.cpp
M  +3    -1    src/lib/MergedLayerDecorator.cpp
M  +0    -5    src/lib/layers/TextureLayer.cpp
M  +0    -3    src/lib/layers/TextureLayer.h

http://commits.kde.org/marble/a95181059adfd21a8a03e611c40318a673dea7d4
Comment 3 Dennis Nienhüser 2012-07-24 20:48:50 UTC
Git commit 457d3716cedde930af478452846352f100433329 by Dennis Nienhüser, on behalf of Bernhard Beschow.
Committed on 30/06/2012 at 17:20.
Pushed by nienhueser into branch 'sok-2012-plasma-active'.

when downloading a region, consider tile availability for each layer separately instead of judging from the first

Besides being more precise, it also avoids a crash by not trying to guess the source directory from the first tile layer.

M  +1    -3    src/lib/MarbleMap.cpp
M  +3    -1    src/lib/MergedLayerDecorator.cpp
M  +0    -5    src/lib/layers/TextureLayer.cpp
M  +0    -3    src/lib/layers/TextureLayer.h

http://commits.kde.org/marble/457d3716cedde930af478452846352f100433329