Re: [PHP-DEV] backtrace From: Sascha Schumann (sascha <email protected>)
Date: 08/31/00

On Thu, 31 Aug 2000, Zeev Suraski wrote:

> At 21:22 31-08-00, Sascha Schumann wrote:
> >On Thu, 31 Aug 2000, Zeev Suraski wrote:
> >
> > > At 18:33 31-08-00, Sascha Schumann wrote:
> > > >On Thu, 31 Aug 2000, Stanislav Malyshev wrote:
> > > >
> > > > > j>> called with a null list of var_args, which is causing it to barf.
> > > > > j>> Problem is, the variable orig_args is being cleared on line 369
> > > > > j>> (va_end()), and
> > > > > j>> then being reused on line 444.
> > > > >
> > > > > Sorry, don't see any va_end in current CVS.
> > > >
> > > > The old_args stuff was removed some weeks ago (if we are
> > > > talking about main/main.c). The author of the original code
> > > > did not seem to be aware of the correct va_args use.
> > >
> > > Actually, the original version was quite alright, except for under very
> > > weird platforms, which define va_list as a type that cannot be copied
> > > (probably some sort of an array).
> >
> > It was not necessary at all to copy it. That is where I saw
> > the basic misunderstanding. A va_list can be traversed
> > multiple times without copying it.
>
> A va_list cannot be traversed multiple times, which is why the code was
> originally there (I think).

    The standard says otherwise.

> Many platforms that define va_list as a simple pointer, reset it to NULL on
> va_end(), which makes it useless afterwards.

    That behaviour is in conformance with ISO C99, SuS II and
    the upcoming SuS III (successor of POSIX).

    "void va_end(va_list ap)
    
    [..] The va_end macro may modify ap so that it is no longer
    usable (without being reinitialized by the va_start or
    va_copy macro). [..]"

    Note the part about reinitialization.

    - Sascha

-- 
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, e-mail: php-dev-unsubscribe <email protected>
For additional commands, e-mail: php-dev-help <email protected>
To contact the list administrators, e-mail: php-list-admin <email protected>