Opened 10 years ago

Closed 10 years ago

Last modified 10 years ago

#959 closed defect/bug (fixed)

Navit crashes if destination.txt cannot be written

Reported by: sleske Owned by: KaZeR
Priority: major Milestone:
Component: core Version: git master
Severity: Keywords:
Cc: nick@…

Description

If destination.txt cannot be written to (for example because of filesystem permissions), Navit will segfault as soon as it tries to write to it.

To reproduce (on Linux):

  • set destination.txt read-only: chmod a-w path/to/destination.txt
  • start Navit
  • set a destination (by choosing a bookmark, or entering it directly)

Navit will segfault. Backtrace (shortened):

[...]
#4  0x08062ecf in sigsegv (sig=11) at debug.c:80
#5  <signal handler called>
#6  0xb7463e47 in fclose () from /lib/i386-linux-gnu/i686/cmov/libc.so.6
#7  0x08093074 in bookmarks_append_coord at bookmarks.c:704
#8  0x080731ff in navit_set_destination  at navit.c:1483
[...]

Attachments (2)

fix-for-959.patch (450 bytes) - added by sleske 10 years ago.
Fix for issue #959: Do not call fclose() if fopen() failed
bookmarks.c.patch (429 bytes) - added by number6 10 years ago.
This patch uses dbg to notify the user, and stops the program from crashing

Download all attachments as: .zip

Change History (6)

Changed 10 years ago by sleske

Fix for issue #959: Do not call fclose() if fopen() failed

comment:1 Changed 10 years ago by sleske

The cause of this crash is that Navit tries to close the file handle for destination.txt, even if the fopen() call failed (in bookmarks.c, function bookmarks_append_coord).

I attached a patch to fix this.

Changed 10 years ago by number6

This patch uses dbg to notify the user, and stops the program from crashing

comment:2 Changed 10 years ago by number6

  • Cc nick@… added

comment:3 Changed 10 years ago by number6

  • Resolution set to fixed
  • Status changed from new to closed

Added my own patch in Revision 4845!

comment:4 Changed 10 years ago by sleske

Hm, to be honest, I believe my patch is a bit better (because it prints the cause of the error). Anyway, the main thing is that it's fixed.

Note: See TracTickets for help on using tickets.