[GRASS-dev] [bug #5197] (grass) v.distance: segfault when 'from' vector doesn't exist

Hamish hamish_nospam at yahoo.com
Mon Oct 9 23:58:34 EDT 2006


Request Tracker wrote:
> this bug's URL: http://intevation.de/rt/webrt?serial_num=5197
> ---------------------------------------------------------------------
..
> Subject: v.distance: segfault when 'from' vector doesn't exist
..
> $ v.distance from=dummy1 to=dummy2 upload=cat col=nic
> Segmentation fault

fixed in CVS HEAD & 6.2.

it was checking the vector map, but then didn't check to see what the
result of that test was. The test returns the mapset name on success.


> Interestingly, with '-p' it will behave as supposed to:
>
> $ v.distance -p from=dummy1 to=dummy2 upload=cat col=nic
> ERROR: Cannot find vector dummy1@

that's because it broke on this strcmp() when "mapset" was NULL:

if ( !print_flag->answer && strcmp(mapset,G_mapset()) != 0 )
   G_fatal_error(_("Vector 'from' is not in user mapset and cannot be updated"));


> BTW: why 'dummy1@' instead of 'dummy1 at mapset_name'?

map wasn't found so mapset was NULL, and NULL at the end of a string
is just the end of the string.


> I noticed the many (all?) modules have been recently doing that.

if you can still find them, please provide specifics.



my question, and maybe the bigger bug, is why G_parser() didn't catch
this?
        /*vector maps*/    
        case G_OPT_V_INPUT:
            Opt->key          = "input";
            Opt->type         = TYPE_STRING;
            Opt->key_desc     = "name";
            Opt->required     = YES;
            Opt->gisprompt    = "old,vector,vector";
            Opt->description  = _("Name of input vector map");
            break;


I thought the "old" in gisprompt meant that it was tested. Or is that
just true for "new"?


Hamish




More information about the grass-dev mailing list