Hi Hamish, see my comments on GForge [1]. I see problem in check_multiple_opts() fn... The attached patch is too simple, should be fixed in more robust way...
Martin [1] http://wald.intevation.org/tracker/?func=detail&atid=204&aid=509&group_id=21 2007/10/11, Hamish <[EMAIL PROTECTED]>: > > code I item #509, was opened at 2007-10-11 10:29 > > Summary: v.mkgrid: segfault when "grid" parameters missing > .. > > If the user fails to provide "grid" parameters, it segfaults. Applies to bot > > 6.2 CVS and 6.3 CVS. Example: > > > > $ v.mkgrid map=debug_grid position=region grid= > > Segmentation fault (core dumped) > > > > backtrace: > > > > Program received signal SIGSEGV, Segmentation fault. > > [Switching to Thread 46912562415552 (LWP 26775)] > > 0x00002aaaabe92cf1 in __strtoull_internal () from /lib/libc.so.6 > > (gdb) bt > > #0 0x00002aaaabe92cf1 in __strtoull_internal () from /lib/libc.so.6 > > #1 0x00002aaaaba65022 in atoi () from /usr/local/lib/libgdal.so.1 > > #2 0x0000000000401a25 in main (argc=4, argv=0x7fffff972dd8) at main.c:142 > > It is in the main.c atoi("") [line 137], but I'm not sure why it thinks that's > found in libgdal. > > the root of the problem is that even though the option is declared > TYPE_INTEGER, that is never checked. > v.mkgrid/main.c has > grid = G_define_option (); > grid->key = "grid"; > grid->key_desc = "rows,columns"; > grid->type = TYPE_INTEGER; > grid->required = YES; > grid->multiple = NO; > grid->description = _("Number of rows and columns in grid"); > > > in lib/gis/parser.c ~ line 2136 the check_opts() fn skips sending it to > check_an_opt() as (opt->options && opt->answer) are (null) and "" > respectively. > [ie not allocated, and allocated but set to "\0" (?)] > > it would be easy to add to v.mkgrid a test for the answer being empty and > throw > it to {G_usage(); exit(EXIT_FAILURE);}, but that doesn't solve the general > problem- the parser should check for an integer answer. (same for TYPE_DOUBLE, > ...) Note in this case the checker has to check key_desc to know to expect two > int answers. > > G_parser() does catch the "grid=1," error with a please supply two values > message. so maybe the problem is in check_multiple_opts()? > > > > Interesting, I hadn't noticed the parser's custom opt->checker option-option > before. > > > Hamish > > > > > ____________________________________________________________________________________ > Don't let your dream ride pass you by. Make it a reality with Yahoo! Autos. > http://autos.yahoo.com/index.html > > > > _______________________________________________ > grass-dev mailing list > [email protected] > http://grass.itc.it/mailman/listinfo/grass-dev > -- Martin Landa <[EMAIL PROTECTED]> * http://gama.fsv.cvut.cz/~landa * _______________________________________________ grass-dev mailing list [email protected] http://grass.itc.it/mailman/listinfo/grass-dev

