[GRASS-dev] Re: [GRASS GIS] #718: r.li forgets mask/illegal filename
GRASS GIS
trac at osgeo.org
Mon Aug 17 03:11:18 EDT 2009
#718: r.li forgets mask/illegal filename
------------------------+---------------------------------------------------
Reporter: kyngchaos | Owner: grass-dev at lists.osgeo.org
Type: defect | Status: new
Priority: normal | Milestone: 6.4.0
Component: Raster | Version: 6.4.0 RCs
Resolution: | Keywords: r.li, smp
Platform: All | Cpu: All
------------------------+---------------------------------------------------
Changes (by hamish):
* keywords: r.li => r.li, smp
Comment:
FWIW I'd note that I got this error on a 32bit Pentium4 running
Debian/etch:
{{{
*** glibc detected *** malloc(): memory corruption: 0x09166940 ***
D0/0: daemon while loop: toReceive.type=-1208818294
Illegal filename. Character < > not allowed.
...
}}}
----
ok, with the help of Nathan's backtrace in today's grass-user post I
tracked it down to this:
source:grass/trunk/raster/r.li/r.li.daemon/daemon.c at 38766#L397
i.e.:
{{{
} while ((token = strtok(NULL, " ")) != NULL &&
strcmp(token, "SAMPLEAREA") == 0);
}}}
note the glibc man page for strtok() says:
{{{
BUGS
Avoid using these functions. If you do use them, note that:
These functions modify their first argument.
These functions cannot be used on constant strings.
The identity of the delimiting character is lost.
The strtok() function uses a static buffer while parsing,
so it's not thread safe. Use strtok_r() if this matters to
you.
RETURN VALUE
The strtok() and strtok_r() functions return a pointer to the
next token, or NULL if there are no more tokens.
CONFORMING TO
strtok()
SVr4, POSIX.1-2001, 4.3BSD, C89.
strtok_r()
POSIX.1-2001
}}}
i.e. strtok() is '''not thread safe''' and it is being used in a thread.
The result is breakage. And strtok_r() is not as portable as we require.
in light of that, could our G_tokenize() help? AFAICS this is just for
simple plain text string parsing stuff, so no huge drama to work around
it.
Maybe the landclass96_conf above doesn't break for me because it only has
1 line with a space in it?
Hamish
--
Ticket URL: <https://trac.osgeo.org/grass/ticket/718#comment:16>
GRASS GIS <http://grass.osgeo.org>
More information about the grass-dev
mailing list