Return to BSD News archive
Newsgroups: comp.os.386bsd.bugs Path: sserve!newshost.anu.edu.au!harbinger.cc.monash.edu.au!msuinfo!agate!howland.reston.ans.net!pipex!sunic!trane.uninett.no!eunet.no!nuug!EU.net!uunet!brunix!mhw From: mhw@cs.brown.edu (Mark Weaver) Subject: Re: FreeBSD 1.1.5 -- Bug in /usr/bin/leave Message-ID: <1994Aug15.034212.20767@cs.brown.edu> Sender: news@cs.brown.edu Organization: Brown University Department of Computer Science References: <NILS.94Aug14230659@guru.stgt.sub.org> Date: Mon, 15 Aug 1994 03:42:12 GMT Lines: 43 Your fix doesn't change the program at all. In C, "&&" has a higher precedence than "||", and both have a lower precedence than the comparison operators. I don't know why you thought this changed anything, but I'm sure it didn't. Mark In article <NILS.94Aug14230659@guru.stgt.sub.org>, Cornelis van der Laan <nils@ims.uni-stuttgart.de> wrote: > >There's a bug in /usr/bin/leave, causing it to not properly handle >argument times. > >Repeat by: > At 22:50 try to set an alarm for 24:00 (ok, that's not possible, > so let's take 23:59). > > leave 2359 responds with: usage: leave [[+]hhmm] > >The fix is to insert missing parentheses around a conjunctive condition: > >*** leave.c Sun Aug 14 22:59:58 1994 >--- leave.c.orig Sun Aug 14 22:59:26 1994 >*************** >*** 97,103 **** > secs = hours * 60 * 60 + minutes * 60; > else { > if (hours > 23 || t->tm_hour > hours || >! t->tm_hour == hours && minutes <= t->tm_min) > usage(); > secs = (hours - t->tm_hour) * 60 * 60; > secs += (minutes - t->tm_min) * 60; >--- 97,103 ---- > secs = hours * 60 * 60 + minutes * 60; > else { > if (hours > 23 || t->tm_hour > hours || >! (t->tm_hour == hours && minutes <= t->tm_min)) > usage(); > secs = (hours - t->tm_hour) * 60 * 60; > secs += (minutes - t->tm_min) * 60; -------------------------------------------------------------------- Email: Mark_Weaver@brown.edu | Brown University PGP Key: finger mhw@cs.brown.edu | Dept of Computer Science