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

this bug's URL: http://intevation.de/rt/webrt?serial_num=5197
-------------------------------------------------------------------------

Subject: v.distance: segfault when 'from' vector doesn't exist

Current 6.3 CVS, Ubuntu Dapper.

As the title reads. Eg.:

$ v.distance from=dummy1 to=dummy2 upload=cat col=nic
Segmentation fault

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@

BTW: why 'dummy1@' instead of 'dummy1@mapset_name'? I noticed the many (all?)
modules have been recently doing that. Related to recent --v/--q flags
development?

Maciek

-------------------------------------------- Managed by Request Tracker

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@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