Ticket #238: patch.238.diff

File patch.238.diff, 2.5 KB (added by ssinger, 13 years ago)

This patch fixes a number of segfaults that occour when no mapset is available

  • navit/mapset.c

     
    6363struct mapset_handle *
    6464mapset_open(struct mapset *ms)
    6565{
    66         struct mapset_handle *ret;
     66        struct mapset_handle *ret=NULL;
     67        if(ms)
     68        {
     69          ret=g_new(struct mapset_handle, 1);
     70          ret->l=ms->maps;
     71        }
    6772
    68         ret=g_new(struct mapset_handle, 1);
    69         ret->l=ms->maps;
    70 
    7173        return ret;
    7274}
    7375
     
    7779        struct attr active_attr;
    7880
    7981        for (;;) {
    80                 if (!msh->l)
     82                if (!msh || !msh->l)
    8183                        return NULL;
    8284                ret=msh->l->data;
    8385                msh->l=g_list_next(msh->l);
     
    110112        struct mapset_search *this;
    111113        dbg(1,"enter(%p,%p,%p,%d)\n", ms, item, search_attr, partial);
    112114        this=g_new0(struct mapset_search,1);
    113         this->map=ms->maps;
    114         this->item=item;
    115         this->search_attr=search_attr;
    116         this->partial=partial;
    117         this->ms=map_search_new(this->map->data, item, search_attr, partial);
    118         return this;
     115        if(this != NULL && ms!=NULL )
     116        {
     117          this->map=ms->maps;
     118          this->item=item;
     119          this->search_attr=search_attr;
     120          this->partial=partial;
     121          this->ms=map_search_new(this->map->data, item, search_attr, partial);
     122          return this;
     123        }
     124        else
     125        {
     126          return NULL;
     127        }
    119128}
    120129
    121130struct item *
     
    124133        struct item *ret=NULL;
    125134        struct attr active_attr;
    126135
    127         while (!this->ms || !(ret=map_search_get_item(this->ms))) {
     136        while ((this) && (!this->ms || !(ret=map_search_get_item(this->ms))) ) {
    128137                if (this->search_attr->type >= attr_country_all && this->search_attr->type <= attr_country_name)
    129138                        break;
    130139                for (;;) {
  • navit/route.c

     
    410410                route_info_free(this->dst);
    411411        this->dst=NULL;
    412412        if (dst)
    413                 this->dst=route_find_nearest_street(this->ms, dst);
    414         route_info_distances(this->dst, dst->pro);
     413          this->dst=route_find_nearest_street(this->ms, dst);
     414        if(this->dst)
     415          route_info_distances(this->dst, dst->pro);     
     416       
    415417        profile(1,"find_nearest_street");
    416418        route_graph_destroy(this->graph);
    417419        this->graph=NULL;
  • navit/navit.c

     
    153153        } else {
    154154                g_warning("No mapsets enabled! Is it on purpose? Navit can't draw a map. Please check your navit.xml\n");
    155155        }
    156         exit(-1);
     156        return NULL;
    157157}
    158158
    159159struct tracking *