Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 6 Jul 2008 13:15:11 +0200
From:      Jilles Tjoelker <jilles@stack.nl>
To:        Alexandre Sunny Kovalenko <gaijin.k@gmail.com>
Cc:        stable@freebsd.org
Subject:   Re: expand_number(3) silently truncates numeric part of the argument to 32 bit on i386, light impact on gjournal
Message-ID:  <20080706111511.GA68941@stack.nl>
In-Reply-To: <1214770585.1079.13.camel@RabbitsDen>
References:  <1214770585.1079.13.camel@RabbitsDen>

next in thread | previous in thread | raw e-mail | index | archive | help

--9zSXsLTf0vkW971A
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

On Sun, Jun 29, 2008 at 04:16:25PM -0400, Alexandre Sunny Kovalenko wrote:
> I honestly don't know whether it should or should not do it, and if it
> should not, what errno should be set to. Program below gives following
> output on RELENG_7 as of June 28th:

> sunny:RabbitsDen>./expand_number 5368709120k 
> Result is 1099511627776
> sunny:RabbitsDen>./expand_number 5120G
> Result is 5497558138880
> sunny:RabbitsDen>

> One of the more interesting manifestations in the userland is that

> gjournal label -s 5368709120 -f /dev/da0s1a

> quietly gives you 1G of the journal in the resulting file system.
> [snip program calling expand_number(3)]

This happens because src/lib/libutil/expand_number.c does not include
the necessary header <inttypes.h> for calling strtoimax(3). The file is
compiled without compiler warnings, so the bug shows up as wrong
behaviour.

Adding #include <inttypes.h> fixes it.

The file is slightly changed in CURRENT but the same patch should apply.

-- 
Jilles Tjoelker

--9zSXsLTf0vkW971A
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment; filename="expand_number.patch"

--- src/lib/libutil/expand_number.c.orig	2007-09-05 16:27:13.000000000 +0200
+++ src/lib/libutil/expand_number.c	2008-07-06 13:11:02.766238000 +0200
@@ -33,6 +33,7 @@
 #include <errno.h>
 #include <libutil.h>
 #include <stdint.h>
+#include <inttypes.h>
 
 /*
  * Convert an expression of the following forms to a int64_t.

--9zSXsLTf0vkW971A--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20080706111511.GA68941>