Hello, Zdenek, Petter, The problem is resolved simply by changing rv to signed value.
Index: serial_terminal.c =================================================================== --- serial_terminal.c (revision 170) +++ serial_terminal.c (working copy) @@ -345,7 +345,7 @@ { char hex_rs[IPMI_SERIAL_MAX_RESPONSE * 3]; int i, j, resp_len = 0; - unsigned long rv; + long rv; char *p, *pp; char ch, str_hex[3]; Regards, Dmitry 31.01.2014 20:10, Zdenek Styblik пишет: > On Fri, Jan 31, 2014 at 3:08 PM, Zdenek Styblik > <zdenek.styb...@gmail.com> wrote: >> On Fri, Jan 31, 2014 at 2:29 PM, Petter Reinholdtsen <p...@hungry.com> wrote: >>> While we wait to conclude if we should move to git or not, making me >>> unsure if I should commit to CVS or git, here is a small patch to fix >>> a bug discovered by Coverity. >>> >>> The problem is that the value of rv, extracted from >>> serial_read_line(), is checked if it is negative. The unsigned long >>> value can never be negative, causing errors reported from >>> serial_read_line() to be ignored. >>> >>> I propose to fix it by making the temp result variable local to the >>> scope where it is used, and having the same type as is returned from >>> the function used to give it a value. This patch should fix CID >>> 1149026. >>> >>> Index: src/plugins/serial/serial_terminal.c >>> =================================================================== >>> RCS file: /cvsroot/ipmitool/ipmitool/src/plugins/serial/serial_terminal.c,v >>> retrieving revision 1.4 >>> diff -u -3 -p -u -r1.4 serial_terminal.c >>> --- src/plugins/serial/serial_terminal.c 31 Jan 2014 06:13:58 -0000 >>> 1.4 >>> +++ src/plugins/serial/serial_terminal.c 31 Jan 2014 13:25:09 -0000 >>> @@ -362,12 +362,12 @@ recv_response(struct ipmi_intf * intf, u >>> { >>> char hex_rs[IPMI_SERIAL_MAX_RESPONSE * 3]; >>> int i, j, resp_len = 0; >>> - unsigned long rv; >>> char *p, *pp; >>> char ch, str_hex[3]; >>> >>> p = hex_rs; >>> while (1) { >>> + int rv; >>> if ((rv = serial_read_line(intf, p, sizeof(hex_rs) - >>> resp_len)) < 0) { >>> /* error */ >>> return -1; >>> @@ -400,7 +400,7 @@ recv_response(struct ipmi_intf * intf, u >>> sleep(1); >>> serial_flush(intf); >>> errno = 0; >>> - rv = strtoul(p + 4, &p, 16); >>> + unsigned long rv = strtoul(p + 4, &p, 16); >>> if ((rv && rv < 0x100 && *p == '\0') >>> || (rv == 0 && !errno)) { >>> /* The message didn't get it through. The upper >>> >> Either I'm missing something, or your patch is wrong. Either way, I >> really don't like your approach to this problem. I'm sorry, but this >> is fugly. >> >> Z. > Please, just declare new variable, be it rv_readline, with type of int > and don't do things which cause a sudden need to suffocate myself with > a big black whooper ;) > > Z. > >> >>> As soon as we conclude about cvs vs. git, I'll commit into the winning >>> repository. :) >>> >>> -- >>> Happy hacking >>> Petter Reinholdtsen >>> >>> ------------------------------------------------------------------------------ >>> WatchGuard Dimension instantly turns raw network data into actionable >>> security intelligence. It gives you real-time visual feedback on key >>> security issues and trends. Skip the complicated setup - simply import >>> a virtual appliance and go from zero to informed in seconds. >>> http://pubads.g.doubleclick.net/gampad/clk?id=123612991&iu=/4140/ostg.clktrk >>> _______________________________________________ >>> Ipmitool-devel mailing list >>> Ipmitool-devel@lists.sourceforge.net >>> https://lists.sourceforge.net/lists/listinfo/ipmitool-devel > ------------------------------------------------------------------------------ > WatchGuard Dimension instantly turns raw network data into actionable > security intelligence. It gives you real-time visual feedback on key > security issues and trends. Skip the complicated setup - simply import > a virtual appliance and go from zero to informed in seconds. > http://pubads.g.doubleclick.net/gampad/clk?id=123612991&iu=/4140/ostg.clktrk > _______________________________________________ > Ipmitool-devel mailing list > Ipmitool-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/ipmitool-devel ------------------------------------------------------------------------------ WatchGuard Dimension instantly turns raw network data into actionable security intelligence. It gives you real-time visual feedback on key security issues and trends. Skip the complicated setup - simply import a virtual appliance and go from zero to informed in seconds. http://pubads.g.doubleclick.net/gampad/clk?id=123612991&iu=/4140/ostg.clktrk _______________________________________________ Ipmitool-devel mailing list Ipmitool-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/ipmitool-devel