The strtok() library routine overwrites delimiting bytes in the
string it is supplied. It is also not length-constrained.
Since we're making a duplicate of the string anyway, and since we
are only finding the end of a single token, we can do both without
the need to modify the passed-in mount entry structure.
Add checking for memory allocation failures, and if one occurs just
exit (as is the practice elsewhere in this file).
Signed-off-by: Alex Elder <aelder@sgi.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
/* Do this only after we've finished processing mount options */
if (fslog) {
- strtok(fslog, " ,");
- fslog = strdup(fslog);
+ fslog = strndup(fslog, strcspn(fslog, " ,"));
+ if (!fslog) {
+ fprintf(stderr, _("%s: %s: out of memory (fslog)\n"),
+ progname, __func__);
+ exit(1);
+ }
}
if (fsrt) {
- strtok(fsrt, " ,");
- fsrt = strdup(fsrt);
+ fsrt = strndup(fsrt, strcspn(fsrt, " ,"));
+ if (!fsrt) {
+ fprintf(stderr, _("%s: %s: out of memory (fsrt)\n"),
+ progname, __func__);
+ free(fslog);
+ exit(1);
+ }
}
*logp = fslog;