summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Dankov <tryagain@navit-project.org>2015-08-16 01:03:42 +0300
committerMichael Dankov <tryagain@navit-project.org>2015-08-16 01:07:22 +0300
commit37dd4f49eaf19d9d30393041cbe341aeeb50b889 (patch)
treee6e2a0ef81c0e524281b31f535ef5b3a0892eea8
parent63fb07481d75ee10e3f67cf4671e99fc5895f46d (diff)
downloadnavit-37dd4f49eaf19d9d30393041cbe341aeeb50b889.tar.gz
Fix:maptool:Do not segfault when unable to open output binfile.
-rw-r--r--navit/maptool/maptool.c5
-rw-r--r--navit/maptool/maptool.h2
-rw-r--r--navit/maptool/zip.c15
3 files changed, 19 insertions, 3 deletions
diff --git a/navit/maptool/maptool.c b/navit/maptool/maptool.c
index 3fc47b680..e9c229494 100644
--- a/navit/maptool/maptool.c
+++ b/navit/maptool/maptool.c
@@ -711,7 +711,10 @@ maptool_assemble_map(struct maptool_params *p, char *suffix, char **filenames, c
zip_set_compression_level(zip_info, p->compression_level);
if (p->md5file)
zip_set_md5(zip_info, 1);
- zip_open(zip_info, p->result, zipdir, zipindex);
+ if(!zip_open(zip_info, p->result, zipdir, zipindex)) {
+ fprintf(stderr,"Fatal: Could not write output file.\n");
+ exit(1);
+ }
if (p->url) {
map_information_attrs[1].type=attr_url;
map_information_attrs[1].u.str=p->url;
diff --git a/navit/maptool/maptool.h b/navit/maptool/maptool.h
index d8813b49f..7fde891dd 100644
--- a/navit/maptool/maptool.h
+++ b/navit/maptool/maptool.h
@@ -412,7 +412,7 @@ void zip_set_maxnamelen(struct zip_info *info, int max);
int zip_get_maxnamelen(struct zip_info *info);
int zip_add_member(struct zip_info *info);
int zip_set_timestamp(struct zip_info *info, char *timestamp);
-void zip_open(struct zip_info *info, char *out, char *dir, char *index);
+int zip_open(struct zip_info *info, char *out, char *dir, char *index);
FILE *zip_get_index(struct zip_info *info);
int zip_get_zipnum(struct zip_info *info);
void zip_set_zipnum(struct zip_info *info, int num);
diff --git a/navit/maptool/zip.c b/navit/maptool/zip.c
index 3d58d191e..b75f1e3e7 100644
--- a/navit/maptool/zip.c
+++ b/navit/maptool/zip.c
@@ -428,12 +428,25 @@ zip_set_timestamp(struct zip_info *info, char *timestamp)
return 0;
}
-void
+int
zip_open(struct zip_info *info, char *out, char *dir, char *index)
{
info->res2=fopen(out,"wb+");
+ if(!info->res2) {
+ fprintf(stderr,"Could not open output zip file %s\n", out);
+ return 0;
+ }
info->dir=fopen(dir,"wb+");
+ if(!info->dir) {
+ fprintf(stderr,"Could not open zip directory %s\n", dir);
+ return 0;
+ }
info->index=fopen(index,"wb+");
+ if(!info->index) {
+ fprintf(stderr,"Could not open index %s\n", index);
+ return 0;
+ }
+ return 1;
}
FILE *