[Libvir] PATCH 1/4: QEMU driver char device support
Daniel P. Berrange
berrange at redhat.com
Sun Apr 27 19:42:04 UTC 2008
On Thu, Apr 24, 2008 at 10:01:29PM +0200, Jim Meyering wrote:
> "Daniel P. Berrange" <berrange at redhat.com> wrote:
> > static const char needle[] = "char device redirected to";
> > char *tmp;
> >
> > - if (!(tmp = strstr(haystack, needle)))
> > + /* First look for our magic string */
> > + if (!(tmp = strstr(haystack + *offset, needle)))
> > return -1;
> >
> > + /* Grab all the trailing data */
> > strncpy(path, tmp+sizeof(needle), pathmax-1);
>
> That should be sizeof(needle)-1.
> Otherwise, if someone nasty gave you input ending with
> "char device redirected to", the strncpy above would start
> reading just past the NUL at the end of "haystack".
Fixed this.
> > path[pathmax-1] = '\0';
> >
> > - while (*path) {
> > - /*
> > - * The monitor path ends at first whitespace char
> > - * so lets search for it & NULL terminate it there
> > - */
> > - if (isspace(*path)) {
> > - *path = '\0';
> > + /*
> > + * And look for first whitespace character and nul terminate
> > + * to mark end of the pty path
> > + */
> > + tmp = path;
> > + while (*tmp) {
> > + if (isspace(*tmp)) {
>
> Since "tmp" has type "char", this causes trouble in an environment
> where "char" is a signed type. When *tmp is larger than 127, it gets
> sign-extended, and isspace can misbehave on the large negative number
> (isspace is not defined for such values). Instead, do it like this:
>
> if (isspace(*(unsigned char *)tmp)) {
>
> or better, using the to_uchar function (from coreutils):
>
> if (isspace(to_uchar(tmp))) {
Fixed this when merging with your to_uchar() changes.
Dan.
--
|: Red Hat, Engineering, Boston -o- http://people.redhat.com/berrange/ :|
|: http://libvirt.org -o- http://virt-manager.org -o- http://ovirt.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|
More information about the libvir-list
mailing list