My only concern is that, we have a fixed timetable for the 7.0.0 release. It's certainly a good idea to develop a cogent strategy before moving forward, but I worry that bikeshedding will get involved and we won't make the deadline.
I propose that, if a better strategy cannot be presented in time for RC1, consistency should take a back seat to security. Fail hard, throw an Error, deal with the details later. Scott Arciszewski Chief Development Officer Paragon Initiative Enterprises On Mon, Jul 27, 2015 at 2:53 AM, Anatol Belski <anatol....@belski.net> wrote: > Hi Aaron, > >> -----Original Message----- >> From: Aaron Piotrowski [mailto:aa...@icicle.io] >> Sent: Monday, July 27, 2015 5:32 AM >> To: Sammy Kaye Powers <m...@sammyk.me>; Scott Arciszewski >> <sc...@paragonie.com> >> Cc: Anatol Belski <anatol....@belski.net>; la...@garfieldtech.com; Jakub >> Kubíček <kelerest...@gmail.com>; Stanislav Malyshev >> <smalys...@gmail.com>; sc...@paragonie.com; rowan.coll...@gmail.com; >> pierre....@gmail.com; Dean Eigenmann <dean.eigenm...@icloud.com>; >> Yasuo Ohgaki <yohg...@ohgaki.net>; PHP Internals <internals@lists.php.net> >> Subject: Re: [PHP-DEV] Core functions throwing exceptions in PHP7 >> >> >> > 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. >> > Yes, there is an objection at least on my side. As we was discussing the PR > on the github page, the primary goal of the suggestion to move the > discussion to the intarnals list was to create an approach about exceptions > in functions. This seems not be the case here. It is not the question > whether exceptions should be thrown in functions - it's almost obvious that > they should now after it's the engine behavior. But it is a huge question of > the consistency with anything else. That was also the reason why me and > Kalle have changed our minds about your PR converting fatals in the > functions. > > The only case where exception is thrown in a function is intdiv() now. But > also as mentioned elsewhere - it's something tightly coupled with the > behavior of div/mod in the engine. IMHO it is not building any base for > randomly adding exceptions elsewhere. Neither I don't see as a base that the > CSPRNG functions are new. Neither the argument "we can change it later to > xyz". The main concern is still not addressed, and even wasn't started to be > addressed. It is for nothing to have new "nice" functions with nice and > correct behavior while leaving the old "ugly" functions ugly. > > IMO we should stop building special cases and move to the conceptualization > as first. The more special cases exist, the harder it will be in the future > to bring the behaviors inline without BC breaks. Till now I haven't seen > even any gentle hint about such conceptualization work going on, no RFC page > still exists, but it's being continued pushing on a special case. Solving an > immediate issue might be tactically justifiable, but without a strategical > thinking will lead to even a bigger issue. It is not something we want to > leave behind us for the next generations. I would kindly call therefore, to > think about this in a more global way, discuss and show at least a rough > draft about what should be done regarding the existing functions, new > functions, backward compatibility, exact warning/error types and how they > should be converted, etc. before pushing further on this case. > > Thanks > > Anatol > > -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php