Krakonos / merkaartor-oldbugs

0 stars 0 forks source link

Prevent or warns about editions out of the downloaded area (redmine import 3083, Toby Speight, created 08/02/2010) #78

Closed Krakonos closed 9 years ago

Krakonos commented 9 years ago

I've found this to be very reproducible.

Select a way that's partly in the downloaded area, and has nodes in common with other ways that are not downloaded, and delete it. You can attempt to upload at this point, but the server will reject it, due to the attempt to remove nodes that are in use.

Now download the area containing the offending node (and way). You can't select the node (I'd love to be able to re-instate it, or better, have Merkaartor do that automatically), but you can delete the problematic way (or split it nearby and delete the section containing the node).

When you now upload (regardless of whether or not you attempted earlier), the upload succeeds, but then Merkaartor crashes thus (I've sanitised the auth string!):

0 malloc_consolidate (av=0x7ffff3969e40) at malloc.c:5145

1 0x00007ffff3681294 in _int_malloc (av=0x7ffff3969e40, bytes=65536) at malloc.c:4373

2 0x00007ffff3683970 in *__GI___libc_malloc (bytes=65536) at malloc.c:3661

3 0x00007ffff43c2c48 in QByteArray::realloc (this=0x37f1b78, alloc=) at tools/qbytearray.cpp:1412

4 0x00007ffff43c30b9 in QByteArray::resize (this=0x37f1b78, size=32768) at tools/qbytearray.cpp:1380

5 0x00007ffff487c517 in QRingBuffer::reserve (this=0x1d872ae0, bytes=144) at ../../include/QtCore/private/../../../src/corelib/tools/qringbuffer_p.h:158

6 0x00007ffff48780ee in QAbstractSocket::writeData (this=0x1987cbb0, data=0x1c53e738 "PUT /api/0.6/changeset/5375708/close HTTP/1.1\r\nHost: www.openstreetmap.org\r\nAuthorization: Basic xxxxxxxxxxxxxxxxxxxxxx\r\ncontent-length: 0\r\n\r\n", size=144) at socket/qabstractsocket.cpp:2184

7 0x00007ffff4446037 in QIODevice::write (this=0x1987cbb0, data=0x1c53e738 "PUT /api/0.6/changeset/5375708/close HTTP/1.1\r\nHost: www.openstreetmap.org\r\nAuthorization: Basic xxxxxxxxxxxxxxxxxxxxxx\r\ncontent-length: 0\r\n\r\n", maxSize=36028743711365120) at io/qiodevice.cpp:1359

8 0x00007ffff489491c in QSslSocket::writeData (this=0x193f29a0, data=0x1c53e738 "PUT /api/0.6/changeset/5375708/close HTTP/1.1\r\nHost: www.openstreetmap.org\r\nAuthorization: Basic xxxxxxxxxxxxxxxxxxxxxx\r\ncontent-length: 0\r\n\r\n", len=144) at ssl/qsslsocket.cpp:1785

9 0x00007ffff4446037 in QIODevice::write (this=0x193f29a0, data=0x1c53e738 "PUT /api/0.6/changeset/5375708/close HTTP/1.1\r\nHost: www.openstreetmap.org\r\nAuthorization: Basic xxxxxxxxxxxxxxxxxxxxxx\r\ncontent-length: 0\r\n\r\n", maxSize=36028743711365120) at io/qiodevice.cpp:1359

10 0x00007ffff4806a55 in QHttpPrivate::_q_slotConnected (this=0x1c520720) at access/qhttp.cpp:2608

11 0x00007ffff4809968 in QHttpPrivate::_q_slotSendRequest (this=0x1c520720) at access/qhttp.cpp:2512

12 0x00007ffff480c758 in QHttpNormalRequest::start (this=0x1b703560, http=0x1d5a6a68) at access/qhttp.cpp:274

13 0x00007ffff480eed3 in QHttpPrivate::_q_startNextRequest (this=0x1c520720) at access/qhttp.cpp:2407

14 0x00007ffff48115c5 in QHttpSetProxyRequest::start (this=, http=0x1d5a6a68) at access/qhttp.cpp:436

15 0x00007ffff480eed3 in QHttpPrivate::_q_startNextRequest (this=0x1c520720) at access/qhttp.cpp:2407

16 0x00007ffff480f4d1 in QHttp::qt_metacall (this=0x1d5a6a68, _c=QMetaObject::InvokeMetaMethod, _id=, _a=0x1cf719c0) at .moc/release-shared/moc_qhttp.cpp:128

17 0x00007ffff44bee89 in QObject::event (this=0x1d5a6a68, e=0x162fc600) at kernel/qobject.cpp:1248

18 0x00007ffff4cf432c in QApplicationPrivate::notify_helper (this=0xb4e420, receiver=0x1d5a6a68, e=0x162fc600) at kernel/qapplication.cpp:4302

19 0x00007ffff4cfa80b in QApplication::notify (this=0x7fffffffdd20, receiver=0x1d5a6a68, e=0x162fc600) at kernel/qapplication.cpp:4185

20 0x00007ffff44af15c in QCoreApplication::notifyInternal (this=0x7fffffffdd20, receiver=0x1d5a6a68, event=0x162fc600) at kernel/qcoreapplication.cpp:726

21 0x00007ffff44b2804 in QCoreApplication::sendEvent (receiver=0x0, event_type=, data=0xb4e5a0) at ../../include/QtCore/../../src/corelib/kernel/qcoreapplication.h:215

22 QCoreApplicationPrivate::sendPostedEvents (receiver=0x0, event_type=, data=0xb4e5a0) at kernel/qcoreapplication.cpp:1367

23 0x00007ffff44d8bd3 in QCoreApplication::sendPostedEvents (s=) at ../../include/QtCore/../../src/corelib/kernel/qcoreapplication.h:220

24 postEventSourceDispatch (s=) at kernel/qeventdispatcher_glib.cpp:276

25 0x00007fffee84b6c2 in g_main_context_dispatch () from /lib/libglib-2.0.so.0

26 0x00007fffee84f538 in ?? () from /lib/libglib-2.0.so.0

27 0x00007fffee84f6ec in g_main_context_iteration () from /lib/libglib-2.0.so.0

28 0x00007ffff44d8713 in QEventDispatcherGlib::processEvents (this=0xb4f960, flags=) at kernel/qeventdispatcher_glib.cpp:412

29 0x00007ffff4da414e in QGuiEventDispatcherGlib::processEvents (this=0x7ffff3969e40, flags=) at kernel/qguieventdispatcher_glib.cpp:204

30 0x00007ffff44ada82 in QEventLoop::processEvents (this=, flags=DWARF-2 expression error: DW_OP_reg operations must be used either alone or in conjuction with DW_OP_piece.

) at kernel/qeventloop.cpp:149

31 0x00007ffff44ade5c in QEventLoop::exec (this=0x1d5a6ac8, flags=DWARF-2 expression error: DW_OP_reg operations must be used either alone or in conjuction with DW_OP_piece.

) at kernel/qeventloop.cpp:201

32 0x0000000000663895 in Downloader::request (this=0x1d5a6a50, Method=..., URL=..., Data=...) at Sync/DownloadOSM.cpp:258

33 0x0000000000679a83 in DirtyListExecutorOSC::sendRequest (this=0x7fffffffbbb0, Method=..., URL=..., Data=..., Rcv=...) at Sync/DirtyListExecutorOSC.cpp:57

34 0x000000000067c626 in DirtyListExecutorOSC::stop (this=0x7fffffffbbb0) at Sync/DirtyListExecutorOSC.cpp:292

35 0x000000000067b2fe in DirtyListExecutorOSC::executeChanges (this=0x7fffffffbbb0, aParent=0x7fffffffdbc0) at Sync/DirtyListExecutorOSC.cpp:156

36 0x0000000000660346 in syncOSM (theMain=0x7fffffffdbc0, aWeb=..., aUser=..., aPwd=...) at Sync/SyncOSM.cpp:30

37 0x000000000053cdd0 in MainWindow::on_fileUploadAction_triggered (this=0x7fffffffdbc0) at MainWindow.cpp:1343

38 0x00000000007545f6 in MainWindow::qt_metacall (this=0x7fffffffdbc0, _c=QMetaObject::InvokeMetaMethod, _id=28, _a=0x7fffffffc180) at moc_MainWindow.cpp:382

39 0x00007ffff44c2346 in QMetaObject::activate (sender=0xc03750, m=, local_signal_index=, argv=0x31) at kernel/qobject.cpp:3295

40 0x00007ffff4cee132 in QAction::triggered (this=0x7ffff3969e40, _t1=false) at .moc/release-shared/moc_qaction.cpp:263

41 0x00007ffff4cf01ab in QAction::activate (this=0xc03750, event=) at kernel/qaction.cpp:1255

42 0x00007ffff4cf1ab7 in QAction::event (this=0x7ffff3969e40, e=) at kernel/qaction.cpp:1181

43 0x00007ffff4cf432c in QApplicationPrivate::notify_helper (this=0xb4e420, receiver=0xc03750, e=0x7fffffffc6e0) at kernel/qapplication.cpp:4302

44 0x00007ffff4cfa80b in QApplication::notify (this=0x7fffffffdd20, receiver=0xc03750, e=0x7fffffffc6e0) at kernel/qapplication.cpp:4185

45 0x00007ffff44af15c in QCoreApplication::notifyInternal (this=0x7fffffffdd20, receiver=0xc03750, event=0x7fffffffc6e0) at kernel/qcoreapplication.cpp:726

46 0x00007ffff4d2ff26 in QCoreApplication::sendEvent (this=, e=0x7fffffffcc90) at ../../include/QtCore/../../src/corelib/kernel/qcoreapplication.h:215

47 QShortcutMap::dispatchEvent (this=, e=0x7fffffffcc90) at kernel/qshortcutmap.cpp:879

48 0x00007ffff4d31d17 in QShortcutMap::tryShortcutEvent (this=0xb4e548, o=, e=0x7fffffffcc90) at kernel/qshortcutmap.cpp:364

49 0x00007ffff4cfc368 in QApplication::notify (this=0x7fffffffdd20, receiver=0xc4d190, e=0x7fffffffcc90) at kernel/qapplication.cpp:3748

50 0x00007ffff44af15c in QCoreApplication::notifyInternal (this=0x7fffffffdd20, receiver=0xc4d190, event=0x7fffffffcc90) at kernel/qcoreapplication.cpp:726

51 0x00007ffff4d9ed1a in QKeyMapper::sendKeyEvent (keyWidget=0xc4d190, grab=, type=QEvent::KeyPress, code=85, modifiers=, text=..., autorepeat=false, count=1, nativeScanCode=41, nativeVirtualKey=117, nativeModifiers=20) at kernel/qkeymapper_x11.cpp:1875

52 0x00007ffff4da1291 in QKeyMapperPrivate::translateKeyEvent (this=0x7fffffffd170, keyWidget=0xc4d190, event=, grab=false) at kernel/qkeymapper_x11.cpp:1845

53 0x00007ffff4d78a04 in QApplication::x11ProcessEvent (this=, event=0x7fffffffd840) at kernel/qapplication_x11.cpp:3406

54 0x00007ffff4da4552 in x11EventSourceDispatch (s=0xb535e0, callback=, user_data=) at kernel/qguieventdispatcher_glib.cpp:146

55 0x00007fffee84b6c2 in g_main_context_dispatch () from /lib/libglib-2.0.so.0

56 0x00007fffee84f538 in ?? () from /lib/libglib-2.0.so.0

57 0x00007fffee84f6ec in g_main_context_iteration () from /lib/libglib-2.0.so.0

58 0x00007ffff44d8713 in QEventDispatcherGlib::processEvents (this=0xb4f960, flags=) at kernel/qeventdispatcher_glib.cpp:412

59 0x00007ffff4da414e in QGuiEventDispatcherGlib::processEvents (this=0x7ffff3969e40, flags=) at kernel/qguieventdispatcher_glib.cpp:204

60 0x00007ffff44ada82 in QEventLoop::processEvents (this=, flags=DWARF-2 expression error: DW_OP_reg operations must be used either alone or in conjuction with DW_OP_piece.

) at kernel/qeventloop.cpp:149

61 0x00007ffff44ade5c in QEventLoop::exec (this=0x7fffffffdb60, flags=DWARF-2 expression error: DW_OP_reg operations must be used either alone or in conjuction with DW_OP_piece.

) at kernel/qeventloop.cpp:201

62 0x00007ffff44b2aeb in QCoreApplication::exec () at kernel/qcoreapplication.cpp:1003

63 0x000000000052ca85 in main (argc=1, argv=0x7fffffffe4b8) at Main.cpp:232

Krakonos commented 9 years ago

Status changed from New to FeedbackSorry, I'm a bit behind on bugs.

Does this crash only happen in the situation you describe? It seem to happen very low in Qt's workflow to launch an http request (the "close changeset" one).

Or maybe is it after a failed upload in general?    
Krakonos commented 9 years ago

Look suspiciously alike to #3060... and, AFAIK, you seem to be the only one to experience this...

Krakonos commented 9 years ago

The stack trace does look very similar - I'll see if I can confirm when I have a suitable edit with not too much work to lose!

My second paragraph still stands:

Now download the area containing the offending node (and way). You can't select the node (I'd love to be able to re-instate it, or better, have Merkaartor do that automatically), but you can delete the problematic way (or split it nearby and delete the section containing the node).

That workaround isn't exactly great, you'll agree.    
Krakonos commented 9 years ago

Toby Speight wrote:

The stack trace does look very similar - I'll see if I can confirm when I have a suitable edit with not too much work to lose!

My second paragraph still stands:

Now download the area containing the offending node (and way). You can't select the node (I'd love to be able to re-instate it, or better, have Merkaartor do that automatically), but you can delete the problematic way (or split it nearby and delete the section containing the node).

That workaround isn't exactly great, you'll agree.

Definitely not, but the solution is not obvious, either. Would you be so kind as to open a separate ticket for this issue, please.    
Krakonos commented 9 years ago

Chris Browet wrote:

Toby Speight wrote:

The stack trace does look very similar - I'll see if I can confirm when I have a suitable edit with not too much work to lose!

My second paragraph still stands:

Now download the area containing the offending node (and way). You can't select the node (I'd love to be able to re-instate it, or better, have Merkaartor do that automatically), but you can delete the problematic way (or split it nearby and delete the section containing the node).

That workaround isn't exactly great, you'll agree.

Definitely not, but the solution is not obvious, either.

OTOH... Am I right assuming that, in order to reproduce the bug, you have to delete a node outside of the "downloaded area" (i.e. the "red dot" zone)?If so, I could just forbid edition in this "unsafe" zone (as was requested a while back by someone). Or at least display a warning disclaiming Merkaartor's responsability in case of unsafe edition ;-)

The problems is that this node deletion could be buried under a number of subsequent edits, potentially dependdent on this one. So I cannot just make the node "reappear" in case of a deletion error.    
Krakonos commented 9 years ago
OTOH... Am I right assuming that, in order to reproduce the bug, you have to delete a node outside of the "downloaded area" (i.e. the "red dot" zone)?

Yes, exactly - sorry if I wasn't clear enough to begin with.

If so, I could just forbid edition in this "unsafe" zone (as was requested a while back by someone). Or at least display a warning disclaiming Merkaartor's responsibility in case of unsafe edition ;-)

Yes, that would be very helpful.  :-)

The problems is that this node deletion could be buried under a number of subsequent edits, potentially dependdent on this one.  So I cannot just make the node "reappear" in case of a deletion error.

Agreed - and for the same reason, using Undo is often impractical, because of the amount of work that may need to be redone.  OTOH, it's a lesson in "save often"...    
Krakonos commented 9 years ago
Would you be so kind as to open a separate ticket for this issue, please.

For the crash?  I've just attempted to repro that, and it didn't occur in my (single) test.  So there's probably no need, and this ticket (on deleting out-of-area nodes) is the only one we need.  :-)  Perhaps it needs re-titling?  I'm not sure I can do that - does it need an admin?    
Krakonos commented 9 years ago

Subject changed from Crash after upload following off-area delete to Prevent or warns about editions out of the downloaded areaToby Speight wrote:

Would you be so kind as to open a separate ticket for this issue, please.

For the crash?  I've just attempted to repro that, and it didn't occur in my (single) test.  So there's probably no need, and this ticket (on deleting out-of-area nodes) is the only one we need.  :-)  Perhaps it needs re-titling?  I'm not sure I can do that - does it need an admin?

Actually, I meant for the deletion. I'll change the title of this one.I'm not sure if you can re-title... There is a "Plus" besides "Change properties". There I can change the title and the initial report.As the owner of the ticket, I assume you can do it, too. Otherwise, please tell me...    
Krakonos commented 9 years ago

Seems to be implemented in the current master.