Generally, catching the top level Exception class should only be done when required (i.e. a global exception handler or circumstances where Exception (not one of its subclasses) are thrown. This PR tries to catch more specific Exception objects as logical.
Why Change?
Generally, code should only try to catch and handle errors it expects. In the case of catching the top level Exception class, basically all errors will be caught and processed by the catch portion of the try/catch, even if it's an error condition that the code making the call wasn't expecting. One could argue it's better to catch more errors than expected but it's really kind of a bad practice.
Summary of Changes
JErrorPage::render() will now also catch a PHP 7 Throwable if one is thrown while rendering the error page (this is an extra step to help prevent possible WSOD or PHP Fatal conditions)
JInstallerHelper::downloadPackage() will only catch thrown RuntimeException objects as that is all that is expected from the JHttp API
The constructor of JSchemaChangeset will only catch thrown RuntimeException objects as that is all that is expected from the database API
JCacheStorageRedis::getConnection() will only catch thrown RedisException objects as that is what the underlying PHP code throws
The constructor of JFilterInput will only catch thrown RuntimeException objects as that is all that is expected from the database API
JSessionStorageDatabase will only catch thrown RuntimeException objects as that is all that is expected from the database API
JUpdateAdapter will only catch thrown RuntimeException objects as that is all that is expected from the database API
Testing Instructions
This is mostly going to be PLT review/decision. If you wanted to test some of the changes, the easiest one will be to throw Exception from the JHttp API when installing an extension via URL. Pre-patch, it'll be caught and gracefully handled because the catch is for all Exception objects and post-patch that should bubble up to either something which is catching all Exception objects or hit the global handler and cause an error page to be displayed.