xfs
[Top] [All Lists]

Re: [PATCH] Detect strto* failures based on errno.

To: Arkadiusz MiÅkiewicz <arekm@xxxxxxxx>
Subject: Re: [PATCH] Detect strto* failures based on errno.
From: Dave Chinner <david@xxxxxxxxxxxxx>
Date: Thu, 17 Jul 2014 09:32:49 +1000
Cc: xfs@xxxxxxxxxxx
Delivered-to: xfs@xxxxxxxxxxx
In-reply-to: <201407160944.07266.arekm@xxxxxxxx>
References: <20140713230406.GE22339@dastard> <1405324619-25515-1-git-send-email-arekm@xxxxxxxx> <20140716030132.GB20518@dastard> <201407160944.07266.arekm@xxxxxxxx>
User-agent: Mutt/1.5.21 (2010-09-15)
On Wed, Jul 16, 2014 at 09:44:07AM +0200, Arkadiusz MiÅkiewicz wrote:
> On Wednesday 16 of July 2014, Dave Chinner wrote:
> > On Mon, Jul 14, 2014 at 09:56:59AM +0200, Arkadiusz MiÅkiewicz wrote:
> > > Code was testing for ERANGE errno only in some places. In other places
> > > it didn't do any errno checking at all.
> > > 
> > > Unify strto* result testing by treating any non zero errno as failure.
> > > 
> > > Signed-off-by: Arkadiusz MiÅkiewicz <arekm@xxxxxxxx>
> > 
> > This patch appears to cause xfs/071 to fail:
> > 
> > 
> > 
> >      Writing 512 bytes, offset is +0 (direct=false)
> >     -pwrite64: File too large
> >     +non-numeric offset argument -- <OFFSET>
> >      Reading 512 bytes (direct=false)
> >      read 0/512 bytes at offset <OFFSET>
> >     ...
> >     (Run 'diff -u tests/xfs/071.out
> > /home/dave/src/xfstests-dev/results//xfs/071.out.bad'  to see the entire
> > diff)
> > 
> > Can you have a look into this?
> 
> The test runs:
> xfs_io -c 'pwrite 9223373136366403583 512' file
> 
> where 9223373136366403583 is bigger than LLONG_MAX (9223372036854775807), so
> 
> # LC_ALL=C xfs_io -c 'pwrite 9223373136366403583 512' ./x
> (MYDEBUG)strerror(34): Numerical result out of range
> non-numeric offset argument -- 9223373136366403583
> 
> 
> What would be best approach to fix this - some cvtunum for unsigned long long?

I'm pretty sure that cvtnum is only supposed to work with positive
integers - it returns negative values as an error. hence just
changing to use strtoull() would probably fix the issue.

The caller can determine if a negative number is valid or not....

Cheers,

Dave.
-- 
Dave Chinner
david@xxxxxxxxxxxxx

<Prev in Thread] Current Thread [Next in Thread>