coreutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: bug#13530: head: memory exhausted when printing all from stdin but l


From: Jim Meyering
Subject: Re: bug#13530: head: memory exhausted when printing all from stdin but last P/E bytes
Date: Sun, 26 May 2013 22:16:30 +0200

Pádraig Brady wrote:
> On 05/26/2013 06:07 PM, Jim Meyering wrote:
>> Pádraig Brady wrote:
>> ...
>>> I expect to push soon, the attached more complete fix to realloc the array.
>>
>> That new test would still fail on 32-bit systems, and on any system
>> with SIZE_MAX < 1E.  I expect to push the additional fix below.
>
> The change looks good thanks.
> Ideally the test should be system independent,
> which could be done by also including this in your change:
>
> diff --git a/tests/misc/head-c.sh b/tests/misc/head-c.sh
> index 37a86ce..8b4df5c 100755
> --- a/tests/misc/head-c.sh
> +++ b/tests/misc/head-c.sh
> @@ -19,6 +19,7 @@
>  . "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
>  print_ver_ head
>  require_ulimit_v_
> +getlimits_
>
>  # exercise the fix of 2001-08-18, based on test case from Ian Bruce
>  echo abc > in || framework_failure_
> @@ -31,6 +32,6 @@ esac
>  # Only allocate memory as needed.
>  # Coreutils <= 8.21 would allocate memory up front
>  # based on the value passed to -c
> -(ulimit -v 20000; head --bytes=-E < /dev/null) || fail=1
> +(ulimit -v 20000; head --bytes=-$OFF_T_MAX < /dev/null) || fail=1

Good idea.
When I test with that on a system with size_t smaller than uintmax_t,
I get a segfault, because of this uintmax_t-to-size_t truncation:

    static bool
    elide_tail_bytes_pipe (const char *filename, int fd, uintmax_t n_elide_0)
    {
      size_t n_elide = n_elide_0;

That function really did require that N be no larger than SIZE_MAX.
So my patch needs further work.
Thanks!



reply via email to

[Prev in Thread] Current Thread [Next in Thread]