Raimond Spekking [Fri, 4 Feb 2011 21:04:49 +0000 (21:04 +0000)]
Localisation updates for core and extension messages from translatewiki.net (2011-02-04 20:33:00 UTC)
Chad Horohoe [Fri, 4 Feb 2011 21:00:17 +0000 (21:00 +0000)]
More uppercase trues
Chad Horohoe [Fri, 4 Feb 2011 20:54:43 +0000 (20:54 +0000)]
lowercase a few more t/f
Bryan Tong Minh [Fri, 4 Feb 2011 20:54:11 +0000 (20:54 +0000)]
(bug 19751) Filesystem is now checked during image undeletion
* FSRepo::storeBatch() now does an sha1 check unless SKIP_VALIDATION flag is set
* Introduced Status::$success in addition to Status::$successcount
** FSRepo::storeBatch() now logs success/failure in this variable
* LocalFileRestoreBatch now aborts on failure in FSRepo::storeBatch() and cleans up the already copied files
** Introduced FSRepo::cleanupBatch() for this purpose
* SpecialUndelete now aborts if LocalFile::restore() gives a fatal
Chad Horohoe [Fri, 4 Feb 2011 20:52:55 +0000 (20:52 +0000)]
Rm selectDB from Postgres, doesn't do anything
Mark A. Hershberger [Fri, 4 Feb 2011 20:05:05 +0000 (20:05 +0000)]
change from double quote to single quote to avoid double-encoding by htmlspecialchars()
Alexandre Emsenhuber [Fri, 4 Feb 2011 16:52:26 +0000 (16:52 +0000)]
Use wfMessage() instead of wfMsgGetKey()
Alexandre Emsenhuber [Fri, 4 Feb 2011 16:47:24 +0000 (16:47 +0000)]
Allow parameter to be passed with an array in the first parameter (as other wfMsg*() functions)
Krinkle [Fri, 4 Feb 2011 16:44:07 +0000 (16:44 +0000)]
user scripts & styles are lowercase skin; + using 'vector' as example instead.
Happy-melon [Fri, 4 Feb 2011 16:41:31 +0000 (16:41 +0000)]
Release notes for r81524
Happy-melon [Fri, 4 Feb 2011 16:39:17 +0000 (16:39 +0000)]
Follow-up r64670 (bug22929): cleaner implementation of security for script (and potentially CSS) files. ResourceLoader *already* knows where each module has come from, so all we need to do is filter them in OutputPage according to the desired level of 'trustworthiness'.
TODO:
* Are there instances where we might want to restrict CSS as well as JS?
* Would a $wg config option and/or user preference and/or index.php GET parameter to limit inclusion be useful?
* Can we deprecate any of the existing $wg config options?
* What's going on with the duplicated code between OutputPage and SkinTemplate?
Chad Horohoe [Fri, 4 Feb 2011 15:03:59 +0000 (15:03 +0000)]
Revert r73198 (adding exclusing option to runJobs.php). Per CR, this should use a real pool counter.
Daniel Friesen [Fri, 4 Feb 2011 04:18:05 +0000 (04:18 +0000)]
Completely remove support for legacy style skins. All legacy skinning options are now part of a SkinLegacy/LegacySkinTemplate pair that inherits from the normal SkinTemplate setup. Also ported our three built in skins to use the new legacy classes. ( ;) if you want to kill legacy skins now, you only have to svn rm 4 files)
Krinkle [Fri, 4 Feb 2011 03:30:50 +0000 (03:30 +0000)]
more clear
Krinkle [Fri, 4 Feb 2011 03:30:14 +0000 (03:30 +0000)]
adding that Vector shipped with 1.16 in 2010
Krinkle [Fri, 4 Feb 2011 02:17:14 +0000 (02:17 +0000)]
Making a start with $.jsMessage. A more flexible way for messages. Supports grouping them and making the replacing of previous messages into option (the current jsMsg() function always replaces older messages. Time has shown that there is need for the ability to show older messages as well and grouping to avoid different scripts from erasing or clearing eachother's output (current Commons and a few other wikis have created similar functions to enable keeping previous messages)
* See also bug 26888. Not resolving the bug yet, this plugins needs a little more testing and should then be called from within mw.util.jsMessage with some wiki specific things.
Examples:
// Show a simple message in the default group
$.jsMessage( {
message: 'Hello',
target: 'mw-js-message'
} );
// Add a new message this time stating the defaults
$.jsMessage( {
message: 'World',
group: 'default',
replace: false,
target: 'mw-js-message'
} );
// Post a new message, replacing the previous ones
$.jsMessage( {
message: 'New',
group: 'default',
replace: true,
target: 'mw-js-message'
} );
// Add a messages in a new group (groups separated by a line)
$.jsMessage( {
message: 'A new group',
group: 'something',
target: 'mw-js-message'
} );
// Clear the default group
// See code comments for more info
$.jsMessage( {
message: '',
replace: true,
target: 'mw-js-message'
} );
// Clear the 'something'-group
// Since this leaves no visible groups, the main box will hide (slideUp) right after
$.jsMessage( {
message: '',
group: 'something',
replace: true,
target: 'mw-js-message'
} );
If testing goes well, mw.util.jsMsg(message, className, replace) will call
$.jsMessage( { message: message, group: className, replace: replace, target: $.jsMessage(ge' );
So it's more a backend plugin, not used directly by core modules.
But this way extensions or third party sites can easily re-use this plugin and/or create multiple message boxes
on one page, by calling $.jsMessageNew and giving an id and location for it on the page.
Mark A. Hershberger [Fri, 4 Feb 2011 00:40:33 +0000 (00:40 +0000)]
Use the right query parameter.
Mark A. Hershberger [Fri, 4 Feb 2011 00:21:59 +0000 (00:21 +0000)]
re r81495 — you know, I've completely forgotten why I wanted to return a status object. Fix that and not the busted status message.
Happy-melon [Fri, 4 Feb 2011 00:20:14 +0000 (00:20 +0000)]
Revert r70270; per CR comments.
Mark A. Hershberger [Fri, 4 Feb 2011 00:15:44 +0000 (00:15 +0000)]
* make canCreateAccounts() return Status Objects instead of boolean
* re-use openConnection to test the ability of the user to connect.
Sam Reed [Thu, 3 Feb 2011 23:09:42 +0000 (23:09 +0000)]
Few more return types
Sam Reed [Thu, 3 Feb 2011 22:06:10 +0000 (22:06 +0000)]
Fixup r81467
Chad Horohoe [Thu, 3 Feb 2011 21:02:36 +0000 (21:02 +0000)]
rm unrelated changes from r81486
Chad Horohoe [Thu, 3 Feb 2011 21:01:35 +0000 (21:01 +0000)]
Remove now unused enableBackend()
Sam Reed [Thu, 3 Feb 2011 20:57:56 +0000 (20:57 +0000)]
Fix return type documentation
Sam Reed [Thu, 3 Feb 2011 20:47:54 +0000 (20:47 +0000)]
Fixup spaces to tabs
Chad Horohoe [Thu, 3 Feb 2011 20:40:20 +0000 (20:40 +0000)]
Raimond Spekking [Thu, 3 Feb 2011 19:50:35 +0000 (19:50 +0000)]
Localisation updates for core and extension messages from translatewiki.net (2011-02-03 19:28:00 UTC)
Raimond Spekking [Thu, 3 Feb 2011 19:22:44 +0000 (19:22 +0000)]
Follow-up r81408: Add new message key to maintenance file
Alexandre Emsenhuber [Thu, 3 Feb 2011 17:30:14 +0000 (17:30 +0000)]
* Use wfMessage() instead of wfMsgGetKey()
* Don't play with $wgLang, pass the Language object to the Message object
* Bug fix: when 'enableparser' is passed without 'args', $1 is no longer replaced by an empty string (the default value on line 92 of the file was null instead of array(), making wfMsgExt() think that this was the value of $1 and thus this was replaced)
Sam Reed [Thu, 3 Feb 2011 16:45:45 +0000 (16:45 +0000)]
bug 27133 - Update docs/skin.txt
Siebrand Mazeland [Thu, 3 Feb 2011 15:59:55 +0000 (15:59 +0000)]
Localisation updates from translatewiki.net
* Update namespace names.
Siebrand Mazeland [Thu, 3 Feb 2011 15:35:25 +0000 (15:35 +0000)]
Localisation updates from translatewiki.net
* Update magic words
Alexandre Emsenhuber [Thu, 3 Feb 2011 15:31:38 +0000 (15:31 +0000)]
Follow-up r81456: forgot to remove a global declaration
Alexandre Emsenhuber [Thu, 3 Feb 2011 15:29:13 +0000 (15:29 +0000)]
* Use wfMessage() instead of wfMsgGetKey() and wfEmptyMsg()
* Factorise common code
Siebrand Mazeland [Thu, 3 Feb 2011 15:27:08 +0000 (15:27 +0000)]
Localisation updates from translatewiki.net
* Update special page aliases
Roan Kattouw [Thu, 3 Feb 2011 13:21:25 +0000 (13:21 +0000)]
Followup r81446: and mergehistory too
Roan Kattouw [Thu, 3 Feb 2011 13:20:14 +0000 (13:20 +0000)]
Add editusercss and edituserjs rights to User::$mCoreRights. Pointed out by Scalable on IRC
OverlordQ [Thu, 3 Feb 2011 05:17:18 +0000 (05:17 +0000)]
Follow-up to r81439, works up to installing the admin user then dies with:
Creating administrator user account...
Mediawiki tried to access the database via wfGetDB(). This is not allowed.
Backtrace:
#0 /var/www/testsite.com/w/includes/GlobalFunctions.php(3020): LBFactory_Fake->getMainLB(false)
#1 /var/www/testsite.com/w/includes/GlobalFunctions.php(3010): wfGetLB(false)
#2 /var/www/testsite.com/w/includes/User.php(2558): wfGetDB(-1)
#3 /var/www/testsite.com/w/includes/installer/Installer.php(1383): User->idForName()
#4 [internal function]: Installer->createSysop(Object(PostgresInstaller))
#5 /var/www/testsite.com/w/includes/installer/Installer.php(1293): call_user_func(Array, Object(PostgresInstaller))
#6 /var/www/testsite.com/w/includes/installer/WebInstallerPage.php(1022): Installer->performInstallation(Array, Array)
#7 /var/www/testsite.com/w/includes/installer/WebInstaller.php(243): WebInstaller_Install->execute()
#8 /var/www/testsite.com/w/config/index.php(46): WebInstaller->execute(Array)
#9 /var/www/testsite.com/w/config/index.php(14): wfInstallerMain()
#10 {main}
Mark A. Hershberger [Thu, 3 Feb 2011 04:06:11 +0000 (04:06 +0000)]
Results of my work on new-installer and Pg.
* NOTE: this commit removes any semblence of tsearch compatibility with pre-8.3 PostgreSQL
* Make new-installer work against PostgreSQL
* Remove SearchPostgres.php's call to pg_fetch_result. I think this is the only one outside of the vestigtial old installer code.
Andrew Garrett [Thu, 3 Feb 2011 01:25:09 +0000 (01:25 +0000)]
Kill the XMLReader2 class in response to Tim's code review comments on r68587
Daniel Friesen [Thu, 3 Feb 2011 00:00:58 +0000 (00:00 +0000)]
Commit some fixes for comments on r77741
Trevor Parscal [Wed, 2 Feb 2011 22:59:06 +0000 (22:59 +0000)]
Fixed bug #26829 by increasing the specificity of the CSS hack used to get IE6 working so that it doesn't also affect IE7.
Sam Reed [Wed, 2 Feb 2011 22:43:07 +0000 (22:43 +0000)]
Followup r81427, actually use the $msg variable
Sam Reed [Wed, 2 Feb 2011 22:31:48 +0000 (22:31 +0000)]
Followup r67094, factor out code duplication in HistoryPage::getStartBody()
Sam Reed [Wed, 2 Feb 2011 22:23:11 +0000 (22:23 +0000)]
Followup r67094
Wrap some long lines
Tidy up SQL "IN()" wheel re-invention and such
Remove passing of $dbw around
Remove passing of by reference
Ilmari Karonen [Wed, 2 Feb 2011 21:30:02 +0000 (21:30 +0000)]
followup r81408: fix option desc and year in copyright statement
Antoine Musso [Wed, 2 Feb 2011 21:04:21 +0000 (21:04 +0000)]
Test suite for revisions and date related magic variables.
Tests should be carefully reviewed, please note there is are exceptions
for 'revisionday' and 'revisionmonth1' magics which are hardcoded in
the parser to return an integer.
Follow up r66200
TESTS:
$ php phpunit.php -c suite.xml --filter MagicVariable --testdox
PHPUnit 3.5.10 by Sebastian Bergmann.
MagicVariable
[x] Currentday is un padded
[x] Currentdaytwo is zero padded
[x] Localday is un padded
[x] Localdaytwo is zero padded
[x] Currentmonth is zero padded
[x] Currentmonthone is un padded
[x] Localmonth is zero padded
[x] Localmonthone is un padded
[x] Revisionday is un padded
[x] Revisiondaytwo is zero padded
[x] Revisionmonth is zero padded
[x] Revisionmonthone is un padded
$
Roan Kattouw [Wed, 2 Feb 2011 20:25:47 +0000 (20:25 +0000)]
Merge r80947 from 1.16wmf4 to trunk: throw exception when text couldn't be loaded from archive table
Ilmari Karonen [Wed, 2 Feb 2011 19:33:32 +0000 (19:33 +0000)]
followup r81408: fix class name in comment
Ilmari Karonen [Wed, 2 Feb 2011 19:25:53 +0000 (19:25 +0000)]
Add a maintenance script to fix double redirects (and corresponding edit summary messages). Still lacks some features like batch querying, but basically it works.
Roan Kattouw [Wed, 2 Feb 2011 19:16:05 +0000 (19:16 +0000)]
Fix regression in r81124, causing &pst to be ignored for the purposees of actually parsing wikitext
Bryan Tong Minh [Wed, 2 Feb 2011 16:07:28 +0000 (16:07 +0000)]
Cleanup SpecialUploadStash
Follow-up r78426:
* Fix clearing the stash; The data array passed has as keys the keys passed used in the descriptor, not the HTML input name
* Transform array( __CLASS__, $fname ) to __CLASS__ . "::$fname", because not all PHP version support the first
* Remove addHiddenField; not needed
* Fix indentation
* Kill loadRequest all together; all this stuff is handled by HTMLForm
Follow-up r80993: Use LocalRepo to create the UploadStash
Sam Reed [Wed, 2 Feb 2011 15:48:43 +0000 (15:48 +0000)]
Followup r81313, fix 210 typo
Bryan Tong Minh [Wed, 2 Feb 2011 15:44:42 +0000 (15:44 +0000)]
Follow-up r77640: Check whether there are errors before asking Status to transform them into wikitext.
Mark A. Hershberger [Wed, 2 Feb 2011 15:44:37 +0000 (15:44 +0000)]
* recover dropped check of $wgUsePathInfo from r81363
* document getPathInfo
Bryan Tong Minh [Wed, 2 Feb 2011 15:30:20 +0000 (15:30 +0000)]
Remove the $request parameter fro SpecialUploadStash::__construct(). This parameter was in SpecialUpload::__construct because it used to be the only way to talk to the upload backend in the pre-1.16 era. Not needed for SpecialUploadStash.
Alexandre Emsenhuber [Wed, 2 Feb 2011 14:48:26 +0000 (14:48 +0000)]
Force isCached() to false; otherwise the result is "This page is disabled for performance reason" when both $wgMiserMode and $wgDisableQueryPages are true
Sam Reed [Wed, 2 Feb 2011 14:26:12 +0000 (14:26 +0000)]
Fixup fixme on r81198, explicitally ORDER BY qc_value ASC if not doing DESC
Bryan Tong Minh [Wed, 2 Feb 2011 14:07:08 +0000 (14:07 +0000)]
Follow-up r79964: Fix double parsing of file info
Sam Reed [Wed, 2 Feb 2011 13:02:45 +0000 (13:02 +0000)]
Followup r81373, r81363
PHP Notice: Undefined variable: matches in /home/ci/cruisecontrol-bin-2.8.3/projects/mw/source/includes/WebRequest.php on line 109
Explicitally define $matches at top of function, allowing it to always be defined for all paths
Sam Reed [Wed, 2 Feb 2011 11:38:50 +0000 (11:38 +0000)]
Couple more return hints
Swap and for &&
Sam Reed [Wed, 2 Feb 2011 11:38:25 +0000 (11:38 +0000)]
Remove false related to failfunction...
Happy-melon [Wed, 2 Feb 2011 11:00:09 +0000 (11:00 +0000)]
Follow-up r79682: more documentation tidying
Sam Reed [Wed, 2 Feb 2011 10:42:17 +0000 (10:42 +0000)]
Fixup some trailing newlines
Fixup indentation of a few methods
Add a couple of return type hints
Tim Starling [Wed, 2 Feb 2011 05:35:57 +0000 (05:35 +0000)]
Blacklist ZIP subtypes added in r68873, to avoid GIFAR.
Mark A. Hershberger [Wed, 2 Feb 2011 03:14:37 +0000 (03:14 +0000)]
follow up r81363 and fix Bug#27099
Mark A. Hershberger [Wed, 2 Feb 2011 01:08:15 +0000 (01:08 +0000)]
* Remove last bit of code that uses PATH_INFO from img_auth.php so that people who want to use protected images on hosts with sadly mis-shapen PHPs (e.g. GoDaddy) can.
* Mangle PATH_INFO handler in WebRequest so that all the relevant bits are in a (couple of) static functions.
Mark A. Hershberger [Tue, 1 Feb 2011 23:08:10 +0000 (23:08 +0000)]
Whitespace cleanup
Tim Starling [Tue, 1 Feb 2011 22:54:50 +0000 (22:54 +0000)]
Relax Language::isValidCode() to avoid breaking uselang hacks
Tim Starling [Tue, 1 Feb 2011 22:43:58 +0000 (22:43 +0000)]
(bug 27094) fix path traversal vulnerability
Tim Starling [Tue, 1 Feb 2011 22:36:43 +0000 (22:36 +0000)]
(bug 27093, CVE-2011-0047): Fixed CSS injection vulnerability. The StringUtils.php patch is by Roan, the Sanitizer.php patch is by me.
Raimond Spekking [Tue, 1 Feb 2011 20:52:54 +0000 (20:52 +0000)]
Localisation updates for core and extension messages from translatewiki.net (2011-02-01 20:37:00 UTC)
Sam Reed [Tue, 1 Feb 2011 18:58:32 +0000 (18:58 +0000)]
Followup r81311, add MysqlUpdater function to update ll_lang length if it's still 10
Sam Reed [Tue, 1 Feb 2011 18:35:38 +0000 (18:35 +0000)]
For bug 24129 and a followup to r23239, there was never a patch to transfer from VARCHAR/VARBINARY(10) to VARBINARY(20)
Need to work out how to fit it into the updaters...
Alexandre Emsenhuber [Tue, 1 Feb 2011 15:17:25 +0000 (15:17 +0000)]
* (bug 26851) Special:UserRights now allows to prefill the reason field
The parameter is named "user-reason" as for the form submission
Krinkle [Tue, 1 Feb 2011 02:28:10 +0000 (02:28 +0000)]
Applying conventions and some JSLint good practices in core modules.
Sam Reed [Mon, 31 Jan 2011 23:41:38 +0000 (23:41 +0000)]
Function out query building, to allow easier overriding
Sam Reed [Mon, 31 Jan 2011 23:13:22 +0000 (23:13 +0000)]
Followup r81279, forgot to press save!
Sam Reed [Mon, 31 Jan 2011 23:06:36 +0000 (23:06 +0000)]
Re-write raw SQL
Wrap lines, add missing braces
Krinkle [Mon, 31 Jan 2011 22:02:58 +0000 (22:02 +0000)]
Applying conventions and some JSLint good practices in core modules.
Mark A. Hershberger [Mon, 31 Jan 2011 21:04:40 +0000 (21:04 +0000)]
fix Bug#26274: Database layer should allow arrays for ORDER BY, GROUP BY
Mark A. Hershberger [Mon, 31 Jan 2011 20:58:06 +0000 (20:58 +0000)]
making my whitespace OCD happier.
Sam Reed [Mon, 31 Jan 2011 20:30:31 +0000 (20:30 +0000)]
More missing semi colons
Raimond Spekking [Mon, 31 Jan 2011 20:16:49 +0000 (20:16 +0000)]
Localisation updates for core and extension messages from translatewiki.net (2011-01-31 20:09:00 UTC)
Chad Horohoe [Mon, 31 Jan 2011 20:09:29 +0000 (20:09 +0000)]
Fixups to r81266
Chad Horohoe [Mon, 31 Jan 2011 20:00:59 +0000 (20:00 +0000)]
(bug 26857) Fatal error during installation enabling 'Vector' extension (or any extension, really). The reason we're including extensions during setup is so they have a chance to register with LoadExtensionSchemaUpdates. Before including extensions, we now include DefaultSettings.php, so any operations on those variables won't result in the fatals described in the bug.
More importantly, this adds support for installing extension tables *at* install time. Previously, the best we could do was to add the require()s to LocalSettings. However, without a subsequent update, wikis will probably start having errors immediately after install (this is really bad!). So I've added an interface to the DatabaseUpdater passed to LoadExtensionSchemaUpdates. An extension can now call addNewExtension() which will allow the extension to be enabled on install and not just update. Example committed in CodeReview
Krinkle [Mon, 31 Jan 2011 19:33:16 +0000 (19:33 +0000)]
Wrapping core modules (FIXME from r79929)
(Touch: r74088, r73046)
Bryan Tong Minh [Mon, 31 Jan 2011 18:07:44 +0000 (18:07 +0000)]
Follow-up r81209: Use the same param detection method as WebStore, so that thumbnails with different mimetypes than the original file are thumbnailed as well.
Sam Reed [Mon, 31 Jan 2011 17:33:30 +0000 (17:33 +0000)]
Add a fairly pants TRUNCATE vs DELETE benchmark...
Sam Reed [Mon, 31 Jan 2011 16:41:19 +0000 (16:41 +0000)]
Swap "or" to ||
Chad Horohoe [Mon, 31 Jan 2011 16:23:38 +0000 (16:23 +0000)]
Stupid references, stupid PHP. I blame Nikerabbit (fixing r81254)
Chad Horohoe [Mon, 31 Jan 2011 15:47:47 +0000 (15:47 +0000)]
Remove a bunch of useless $wgOuts. Just pass them like we should. Also make them protected so people don't call them
Roan Kattouw [Mon, 31 Jan 2011 12:48:08 +0000 (12:48 +0000)]
(bug 27046) Do not strip newlines following C++-style // comments. Prior to this commit, such newlines were always stripped, causing invalid JS output in certain cases. They are now always preserved, even if they would normally qualifiy for vertical whitespace stripping/collapsing when wgResourceLoaderMinifyJSVerticalSpace is enabled.
Tim Starling [Mon, 31 Jan 2011 07:07:43 +0000 (07:07 +0000)]
Cleanup for r66268, r66267: merge WikiImporter back into Import.php, where it started. It doesn't really make sense to have a class called WikiImporter in a file called ImportXMLReader.php, and a few little helper classes for it in a file called Import.php.
Raimond Spekking [Sun, 30 Jan 2011 22:35:06 +0000 (22:35 +0000)]
Localisation updates for core and extension messages from translatewiki.net (2011-01-30 22:23:00 UTC)
Sam Reed [Sun, 30 Jan 2011 22:12:13 +0000 (22:12 +0000)]
Remove usage of $dbw->escapeLike in RenameDbPrefix (per bug 270042)
Chad Horohoe [Sun, 30 Jan 2011 18:21:37 +0000 (18:21 +0000)]
Tweak install steps to be on the POST rather than GET. It makes more sense architecturally. It also gives us one last chance for them to say no (in case they clicked "I'm bored already" but changed their minds). Check final step of installer for fatals, and if everything's good, suppress the back button. It's just going to confuse people. And the opposite, suppress continue on fatals...no need pretending things went dandy if they didn't. It's basically now impossible to re-run 'page=Install' after it completes. This is probably a good thing as it throws errors. Coincidentally this also fixes bug 26947.
Brian Wolff [Sun, 30 Jan 2011 18:17:57 +0000 (18:17 +0000)]
(Bug 26961) hide anons from watchlist preference was broken due to typo in
r39314.
Fix by duplicatebug.
Given that this preference has been broken since it was introduced,
and the only person to notice in 3 years has been the testers, that may be
a good argument to remove the preference altogether.
Bryan Tong Minh [Sun, 30 Jan 2011 16:57:19 +0000 (16:57 +0000)]
As per my comments on bug 27038 and my comments on r75906, use a /thumb and /file prefix for files fetched via Special:UploadStash. Make filenames more consistent with regular thumbs by using the /thumb/$fileName/$thumbName scheme. Now uses MediaHandler::parseParamString so that params like page are properly handled.