+1 for Error
On Jul 26, 2015 11:32 PM, "Aaron Piotrowski" <aa...@icicle.io> wrote:

>
> > I must have overlooked a detail here.
> >
> > According to https://github.com/tpunt/PHP7-Reference#throwable-interface
> > there are Throwables called Error, as a separate designation from an
> > exception. I didn't see this in the engine exceptions RFC, so I was
> > unaware that was even a thing.
> >
> > In this case, yes, as long as you can wrap it in try/catch blocks,
> > SecurityError which extends Error and/or implements Throwable is an
> > excellent suggestion.
> >
> > Previously, I thought the suggestion was to stick to triggering errors
> > (E_ERROR, E_RECOVERABLE_ERROR, etc.).
> >
> > Scott Arciszewski
> > Chief Development Officer
> > Paragon Initiative Enterprises <https://paragonie.com>
> >
> > --
> > PHP Internals - PHP Runtime Development Mailing List
> > To unsubscribe, visit: http://www.php.net/unsub.php
> >
>
> I believe some were suggesting triggering an E_ERROR, though most E_ERRORs
> in the engine have been replaced with thrown Error exceptions, so I think
> using E_ERROR in this case would be inappropriate.
>
> As I suggested in my prior email, I think throwing an instance of Error
> would be appropriate when the functions random_bytes() and random_int()
> fail.
>
> There are several conditions that already cause the engine to throw an
> Error (or subclass thereof):
>
> (1)->method(); // Throws Error
> declare(strict_types=1); array_map(1, 1); // Throws TypeError
> require 'file-with-parse-error.php'; // Throws ParseError
> eval("$a[ = 1;"); // Throws ParseError
> 1 << -1; // Throws ArithmeticError
> intdiv(1, 0); // Throws DivisionByZeroError
> 1 % 0; // Throws DivisionByZeroError
>
> Of particular interest in the above examples is intdiv(), an internal
> function that can throw an instance of Error if the denominator is zero.
>
> I propose that random_bytes() and random_int() should throw an instance of
> Error if the parameters are not as expected or if generating a random
> number fails. (To avoid further debate about a subclass, the function
> should throw just a plain instance of Error, it can always be subclassed
> later without BC concerns).
>
> random_bytes() and random_int() failing closed is very important to
> prevent misguided or lazy programmers from using false in place of a random
> value. A return of false can easily be overlooked and unintentionally be
> cast to a zero or empty string. A thrown instance of Error must be
> purposely caught and ignored to produce the same behavior. As Larry pointed
> out, it is a very common error for programmers to not do a strict check
> using === against false when calling strpos().
>
> Does anyone have a strong objection to the above proposal? If not, then I
> think Sammy should update his PRs to throw an Error so they can be merged
> before the next beta release.
>
> Aaron Piotrowski
>
>

Reply via email to