Commit graph

117 commits

Author SHA1 Message Date
jenkins-bot
e72303c9f3 Merge "Remove auto-generated "Constructor" documentation on constructors" 2017-07-21 13:19:44 +00:00
Thiemo Mättig
91a920fd85 Remove auto-generated "Constructor" documentation on constructors
Having such comments is worse than not having them. They add zero
information. But you must read the text to understand there is
nothing you don't already know from the class and the method name.

This is similar to I994d11e. Even more trivial, because this here is
about comments that don't say anything but "constructor".

Change-Id: I474dcdb5997bea3aafd11c0760ee072dfaff124c
2017-07-21 12:19:30 +02:00
jenkins-bot
06d611a399 Merge "Remove newline at end of MWExceptionRenderer::getShowBacktraceError" 2017-07-18 19:23:40 +00:00
Fomafix
6d0111186f Remove newline at end of MWExceptionRenderer::getShowBacktraceError
Also add a period at the end of the sentence.

This changes the HTML comment from

<!-- Set $wgShowExceptionDetails = true; at the bottom
of LocalSettings.php to show detailed debugging
information
 -->

to

<!-- Set $wgShowExceptionDetails = true; at the bottom
of LocalSettings.php to show detailed debugging
information. -->

This is a follow-up to 842b7a1769 (T162315).

Change-Id: I45ff4f856ad1c0dc72066fce7771077ff4663785
2017-07-18 12:26:44 +02:00
Roan Kattouw
1210916329 Use Sanitizer::stripAllTags( $x ) instead of html_entity_decode( strip_tags( $x ) )
We have a utility function for this, so let's use it.

What I don't understand though is why Sanitizer uses custom PHP implementations
for both tag stripping and entity decoding, instead of the built-in functions.
If there's a security reason for this or the built-ins are inadequate, that's
fine, but then that should be documented (and we should possibly ban usage
of the built-ins).

Change-Id: I2ba2ecd388cb3d9cd2360ecaa236f3d444f0eabf
2017-07-07 16:53:53 -07:00
Chad Horohoe
25c3c061b5 Fix/hack ErrorPageError to work from non-UI contexts
Right now, ErrorPageError *assumes* you're never running on the cli
or the API. It's kinda a crappy superclass to use for errors unless
you're 1000% sure you'll never hit that code path. Yay assumptions!

Ideally, all of this report() crap is cleaned up and unified across
the like 1192902117 places we have it spread out, but for now just
detect the scenario and delegate back to MWException, which does the
right thing

Bug: T168337
Change-Id: Ia2f490528e128527a7a5ef1f4f5eea36ec9ee810
2017-07-06 20:04:31 +00:00
Fomafix
15fb994130 Avoid double HTML encoding
Html:element() already makes an HTML encoding. The additional
htmlspecialchars is not necessary.

Change-Id: If0530c3d3cb0d3cc61e849a1c84ae0d68c242517
2017-07-03 17:55:15 +02:00
Aaron Schulz
8fc7ebaaa2 Push lazy jobs when exceptions are handled by MWExceptionHandler
Remove the exit(1), which does not seem to be needed by any callers.
Doing so means that post-send updates can still happen, such as the
pushing of lazy jobs.

Better avoid showing exceptions in doPostOutputShutdown(), given
that an error may have already been shown. By the post-send part,
it's to late to show errors anyway.

Bug: T100085
Change-Id: Ib1c75323f222a0e02603d6415626a4b233e8e1c7
2017-07-01 00:03:11 +00:00
Aaron Schulz
806a2214e2 Always log exceptions in rollbackMasterChangesAndLog()
MWExceptionHandler::rollbackMasterChangesAndLog() only logged exceptions
if there were already master changes. This is extremely problematic when
debugging, especially in situations like DeferredUpdates where they were
silently being swallowed.

This makes it log exceptions in all paths, erring on the side of logging
the same exception twice (theoretically it's possible I suppose) instead
of not at all.

Also make the method able to handle DBError exceptions, which most of
the callers seemed to be assuming. ApiMain was handling this explicitly.

Bug: T168347
Change-Id: I8739051f824a455ba669344184c3b11ac95cb561
2017-06-30 22:32:47 +00:00
Aaron Schulz
82e2c924e4 Remove "@author Aaron Schulz" annotations
Bug: T139301
Change-Id: Ib5248e8e27d60611c7373bce4b29dd5e85aa3489
2017-06-27 15:24:14 -07:00
Alex Monk
f8b8d2689d MWExceptionRenderer::useOutputPage: Don't bother if we have no Title context
Change-Id: Ieb6d682a9f2fb4def4c01908ccd035fcce2e1895
2017-05-31 22:52:46 +00:00
Gergő Tisza
fcd495ffef Remove $wgExceptionHooks
Skip deprecation period because it is very unlikely that anyone used this:
it does not appear anywhere on gerrit/git, no nontrivial google hits,
the documentation has been flat out wrong for 9 years and no one
noticed it, and the whole feature is fairly useless as you need to declare
it separately for every single exception class you expect.

Change-Id: I85844a238d3135d05eeba10331149624b04bafe2
2017-05-22 00:57:44 +02:00
jenkins-bot
2ecb96a96f Merge "exception: Add newline at the end of a debugging line for CLI users" 2017-04-26 21:35:33 +00:00
Florian Schmidt
842b7a1769 exception: Add newline at the end of a debugging line for CLI users
Bug: T162315
Change-Id: Ia2963fa298ab0e4782ef823e7f53322cd6a9c99b
2017-04-26 21:26:13 +00:00
jenkins-bot
2d71bf187d Merge "Send 500 http status code, instead of 200, for DBConnectionErrors" 2017-04-22 02:08:09 +00:00
Florian Schmidt
2c1dc398be Send 500 http status code, instead of 200, for DBConnectionErrors
Bug: T160875
Change-Id: I4c909457938a19358dfc4b2aec216b1a148df46c
2017-04-21 11:55:36 +00:00
Aaron Schulz
dd359741cc Move DB errors to Rdbms namespace
Change-Id: I463bd86123501abc68fdb78b4cda6110f7af2549
2017-04-15 10:47:41 -07:00
Timo Tijhof
3a2a707546 Clean up remaining get_class() uses
* get_class()        -> __CLASS__ (same as self::class)
* get_called_class() -> static::class
* get_class($this)   -> static::class

Change-Id: I1888a1897ecf4548a2e5a67a942e5c080dd7e3d3
2017-03-07 22:03:47 +00:00
jenkins-bot
aa3319c4c0 Merge "Miscellaneous indentation tweaks" 2017-02-28 18:38:36 +00:00
Bartosz Dziewoński
ecdef925bb Miscellaneous indentation tweaks
I was bored. What? Don't look at me that way.

I mostly targetted mixed tabs and spaces, but others were not spared.
Note that some of the whitespace changes are inside HTML output,
extended regexps or SQL snippets.

Change-Id: Ie206cc946459f6befcfc2d520e35ad3ea3c0f1e0
2017-02-27 19:23:54 +01:00
James D. Forrester
9635dda73a includes: Replace implicit Bugzilla bug numbers with Phab ones
It's unreasonable to expect newbies to know that "bug 12345" means "Task T14345"
except where it doesn't, so let's just standardise on the real numbers.

Change-Id: I6f59febaf8fc96e80f8cfc11f4356283f461142a
2017-02-21 18:13:24 +00:00
Bryan Davis
4f08bb3be9 MWExceptionHandler::handleError: Set log severity based on error level
Bug: T45086
Change-Id: I240b75f5a4e0075c7a357609aa26834708f93b0b
2017-02-20 12:40:35 -07:00
This, that and the other
73224f4f8b User group memberships that expire
This patch adds an ug_expiry column to the user_groups table, a timestamp
giving a date when the user group expires. A new UserGroupMembership class,
based on the Block class, manages entries in this table.

When the expiry date passes, the row in user_groups is ignored, and will
eventually be purged from the DB when UserGroupMembership::insert is next
called. Old, expired user group memberships are not kept; instead, the log
entries are available to find the history of these memberships, similar
to the way it has always worked for blocks and protections.

Anyone getting user group info through the User object will get correct
information. However, code that reads the user_groups table directly will
now need to skip over rows with ug_expiry < wfTimestampNow(). See
UsersPager for an example of how to do this.

NULL is used to represent infinite (no) expiry, rather than a string
'infinity' or similar (except in the API). This allows existing user group
assignments and log entries, which are all infinite in duration, to be
treated the same as new, infinite-length memberships, without special
casing everything.

The whole thing is behind the temporary feature flag
$wgDisableUserGroupExpiry, in accordance with the WMF schema change policy.

The opportunity has been taken to refactor some static user-group-related
functions out of User into UserGroupMembership, and also to add a primary
key (ug_user, ug_group) to the user_groups table.

There are a few breaking changes:
- UserRightsProxy-like objects are now required to have a
  getGroupMemberships() function.
- $user->mGroups (on a User object) is no longer present.
- Some protected functions in UsersPager are altered or removed.
- The UsersPagerDoBatchLookups hook (unused in any Wikimedia Git-hosted
  extension) has a change of parameter.

Bug: T12493
Depends-On: Ia9616e1e35184fed9058d2d39afbe1038f56d7fa
Depends-On: I86eb1d5619347ce54a5f33a591417742ebe5d6f8
Change-Id: I93c955dc7a970f78e32aa503c01c67da30971d1a
2017-01-27 09:24:20 +00:00
Fomafix
ce6f7faadd Remove trailing empty lines in PHP
Performed using
find . -name \*.php -exec sed -i -e :a -e '/./,$!d;/^\n*$/{$d;N;};/\n$/ba' {} \;

Change-Id: I5d0627f94c73690cf3a8a453539c22c760c2aa60
2017-01-16 22:06:43 +01:00
mynk-96
037c58d9b1 moved Exception classes from ContentHandler.php
Bug: T153243
Change-Id: Ieb37b34e76441c5f68ec565c43421c50ac9be7e7
2016-12-26 14:31:39 +00:00
Aaron Schulz
b05989249e Add a caught_by context field to exceptions
This distinguishes random errors caught and explicitly logged by various
callers from those that were only caught by the registered exception handler.
The later are likely to have more visibily impact on the user.

Change-Id: Icb4c4e9376270c5475c95cf40708a7ca3e4e0a49
2016-12-21 20:46:06 -08:00
jenkins-bot
7ea47eeb18 Merge "Add ILocalizedException interface" 2016-12-16 07:15:18 +00:00
Huji Lee
0136242734 Always show exceptions of type 'error' in LTR
Bug: T153027
Change-Id: Iad5b9a01f5b8cdaa2ed94b3ece937acc1f6faa60
2016-12-12 20:23:41 -05:00
Brad Jorsch
a90bbf1a48 Add ILocalizedException interface
We already throw around some exceptions that are localized
(ErrorPageError and its subclasses, MalformedTitleException), but
there's no standard way to recognize them. Let's change that.

Then let's use them in the API to be able to have internationalized
errors when such exceptions are caught, instead of wrapping the
English-language version.

Change-Id: Iac7c90f92a889f8de9dae373547c07b884addaea
2016-12-08 13:53:24 -05:00
Aaron Schulz
0a615dd414 Include getPublicLogMessage() in double-exception messages
Change-Id: I364e237f859d65fdcc29025c63c90ac2e0b96718
2016-11-21 22:18:53 -08:00
jenkins-bot
5433c9357d Merge "Replace wgShowExceptionDetails with wgShowDBErrorBacktrace on db errors" 2016-11-21 22:27:38 +00:00
Reedy
57a1e7b270 Replace wgShowExceptionDetails with wgShowDBErrorBacktrace on db errors
Bug: T148957
Change-Id: I8891369156547e8931463a2fd55995cfa9e98ee7
2016-11-21 22:07:03 +00:00
Chad Horohoe
524e624637 Exception renderer: Remove useless check for isCommandLine()
If we're on the cli, we would've never hit this else block

Change-Id: Idff009ab255b1907f752e0c6b5652715923b0ed7
2016-11-21 13:47:09 -08:00
Bryan Davis
4a86be8ce4 MWExceptionHandler: Do not use 'exception' for custom log data
When we create an exception-like set of data for logging in
MWExceptionHandler::handleFatalError, add it to the logging context as
a 'fatal_exception' member. The 'exception' value in a log context
should only be populated with a real Exception object.

Bug: T150106
Change-Id: I253943849f19ed5480dbda7bfbc0bf607f69c47d
2016-11-07 10:30:09 -07:00
jenkins-bot
6d9704caef Merge "Relax phpdoc of PermissionError to match actual usage" 2016-10-20 21:16:31 +00:00
Gergő Tisza
d452323171 Relax phpdoc of PermissionError to match actual usage
Also fix OutputPage::showPermissionsErrorPage to handle everything
it claims to handle.

Change-Id: I8ed4a6f2f038fe70084ab673300e24af97e935db
2016-10-18 21:08:41 +00:00
Aaron Schulz
66b0ad56df Postgres installation fixes
* Make isTransactableQuery() exclude CREATE/ALTER.
  Starting transactions for schema changes like this can cause
  errors as it is not supported for MySQL and some Postgres
  operations. Note that temporary tables are session-level,
  so they are not effected by this change.
* Clean up the transaction logic in determineCoreSchema()
  so a transaction is not left dangling.
* Fix broken getSchemaPath() call in PostgresInstaller.
* Avoid warnings in DatabasePostgres::closeConnection() if
  mConn is already unset.
* Commit master changes in doMaintenance.php before running
  deferred updates, just as MediaWiki.php does.
* Change E_WARNING to E_USER_WARNING to avoid notices in the
  default /rdbms error handlers.
* Also avoid trying to rollback in MWExceptionHandler if the
  LBFactory service is disabled, which just results in an error.

Bug: T147599
Change-Id: I64ccab7f9b74f60309ba0c9a8ce68337c42ffb0f
2016-10-17 15:06:38 -07:00
Bryan Davis
eeb382e3c7 MWException: restore prior render() logic
Partially revert 00bee02 by restoring the prior MWException::report()
logic. MWExceptionRenderer does not handle all of the MWException
subclasses that somehow modify the default render() behavior. Notable
among these is Flow\Exception\FlowException and its subclasses which
modify the `$wgOut` global to divert HTML output to alternate locations.

Bug: T147122
Change-Id: Ibe3cadca229ce21ed0a3a2482433e3a22b5f5646
2016-10-01 18:32:12 -06:00
Aaron Schulz
97b5aa9a11 Exception rendering fixes
* Actually use MWExceptionRenderer::AS_RAW. Use this after
  an error is thrown while trying to pretty render the original
  error. This is how this case was originally handled before.
* Do not show the google form or file cache in CLI mode.

Change-Id: I130499753efbf8b4d6d254ea36bacb2473952c1b
2016-09-30 16:57:48 -07:00
Bryan Davis
74498116c0 MWExceptionHandler: Restore delegation to MWException::report
Follow up to 00bee0297. Many MWException subclasses override
MWException::report to do things like special logging and setting the
HTTP response status code. We need to keep calling those methods until
MWExceptionRenderer knows how to handle all of them.

Bug: T147098
Change-Id: I2c90e2d9e9b019357458c7e14a3d602b591c6f5b
2016-09-30 15:55:45 -06:00
Max Semenik
2b51bd1847 Fix function name case
Change-Id: Ibd4f682d2ed8500a50d85aae38f17281646f7c2d
2016-09-26 15:32:54 -07:00
Aaron Schulz
cb9901ef41 Fix "MWExceptionRenderer::getText() should not be called statically" errors
Change-Id: Icfb65795b1455217ca9bc2c1f7cd453144ad5106
2016-09-19 10:55:10 -07:00
Brad Jorsch
0b93d767ea Make MWExceptionRenderer work with PHP7's exception changes
See https://wiki.php.net/rfc/throwable-interface

Change-Id: Ib65f912580f5d84997c5926e7f602d5f5ef3faba
2016-09-19 12:40:36 -04:00
jenkins-bot
231278d0cb Merge "Split out ConvertableTimestamp class" 2016-09-16 03:07:28 +00:00
Aaron Schulz
e10f272a05 Split out ConvertableTimestamp class
* Make TimestampException a regular exception.
* Make DatabaseBase use ConvertableTimestamp.

Change-Id: I849737c9c187e8e0c6e080887ec0656e034f80d2
2016-09-16 03:00:09 +00:00
Aaron Schulz
3ad9e41be9 Fix $wgFileCache DB outage fallback
Change-Id: I5c41b4669ca29d119de5c08a2c61dbadae7cf55c
2016-09-16 02:18:12 +00:00
Aaron Schulz
5820c6dcac Exception cleanups for LoadBalancer
* Make the error message itself be dumb/raw.
* Make the exception exposer show the same GUI message.
* Remove overzelous wgLang check in MWExceptionRenderer.

Change-Id: Ifffff3b3cc785ea3080e4975efe33b3c2cf304d6
2016-09-15 01:32:43 +00:00
Aaron Schulz
00bee02971 Add MWExceptionRenderer class and decouple DBError
* This handles the work of showing exceptions so that
  MWException does not have too.
* Simplify the DBError classes to regular Exception
  classes. Lots of pointless prettification has been
  removed, but DBConnectionError still gets the usual
  special treatment of a fallback page and Google form.
* Remove hacky file cache fallback code that probably
  did not work.
* Make MWExceptionHandler::report() wrap
  MWExceptionExposer::output().
* Make MWException::runHooks() wrap
  MWExceptionExposer::runHooks().

Change-Id: I5dfdc84e94ddac65417226cf7c84513ebb9f9faa
2016-09-14 11:53:55 -07:00
Amir Sarabadani
d56829dca8 Clean up array() syntax from docs, part VI
Change-Id: Ib0eea494e2065c7ab356dc45fd174544a9c1c942
2016-09-12 14:36:37 +04:30
Aaron Schulz
dc0cdc8a4d Make DeferredUpdates able to run DataUpdates
* Also make ErrorPageError exceptions display themselves
  in PRESEND mode. Before they were always suppressed.
* Make DataUpdate::runUpdates() simply wrap
  DeferredUpdates::execute().
* Remove unused installDBListener() method, which was
  basically moved to Maintenance.
* Enable DBO_TRX for DeferredUpdates::execute() in CLI mode
* Also perform sub-DeferrableUpdate jobs right after their
  parent for better transaction locality.
* Made rollbackMasterChangesAndLog() clear all master
  transactions/rounds, even if there are no changes yet.
  This keeps the state cleaner for continuing.
* For sanity, avoid calling acquirePageLock() in link updates
  unless the transaction ticket is set. These locks are
  already redundant and weaker in range than the locks the
  Job classes that run them get. This helps guard against
  DBTransactionError.
* Renamed $type to $stage to be more clear about the order.

Change-Id: I1e90b56cc80041d70fb9158ac4f027285ad0f2c9
2016-09-02 04:12:50 +00:00