Fix exception in Import, when import of a revision fails
authoraude <aude.wiki@gmail.com>
Tue, 8 Sep 2015 14:18:03 +0000 (16:18 +0200)
committeraude <aude.wiki@gmail.com>
Tue, 22 Sep 2015 14:22:39 +0000 (16:22 +0200)
A 'notice' is thrown when an import fails, for some reason,
such as the user does not have permission, and the reason
is reported to the user.

In this case, $title is false and not a Title object,
as needed by the beforeImportPage callback (which calls
WikiPage::factory).  As well, $pageInfo['_title'] is undefined,
in pageOutCallback, which also calls WikiPage::factory via
finishImportPage.

Bug: T108544
Change-Id: I55042fdf305cd1198d3a4b28a0ebb5ce31b76a1f

includes/Import.php

index 6a0bfd0..db4a6b2 100644 (file)
@@ -728,13 +728,14 @@ class WikiImporter {
                                        $title = $this->processTitle( $pageInfo['title'],
                                                isset( $pageInfo['ns'] ) ? $pageInfo['ns'] : null );
 
-                                       if ( !$title ) {
+                                       // $title is either an array of two titles or false.
+                                       if ( is_array( $title ) ) {
+                                               $this->pageCallback( $title );
+                                               list( $pageInfo['_title'], $foreignTitle ) = $title;
+                                       } else {
                                                $badTitle = true;
                                                $skip = true;
                                        }
-
-                                       $this->pageCallback( $title );
-                                       list( $pageInfo['_title'], $foreignTitle ) = $title;
                                }
 
                                if ( $title ) {
@@ -750,10 +751,17 @@ class WikiImporter {
                        }
                }
 
-               $this->pageOutCallback( $pageInfo['_title'], $foreignTitle,
+               // @note $pageInfo is only set if a valid $title is processed above with
+               //       no error. If we have a valid $title, then pageCallback is called
+               //       above, $pageInfo['title'] is set and we do pageOutCallback here.
+               //       If $pageInfo['_title'] is not set, then $foreignTitle is also not
+               //       set since they both come from $title above.
+               if ( array_key_exists( '_title', $pageInfo ) ) {
+                       $this->pageOutCallback( $pageInfo['_title'], $foreignTitle,
                                        $pageInfo['revisionCount'],
                                        $pageInfo['successfulRevisionCount'],
                                        $pageInfo );
+               }
        }
 
        /**