Fix: ensure Internet Explorer bookmark dumps can be imported

Relates to https://github.com/shaarli/Shaarli/issues/607

Modifications:
- [application][tests] NetscapeBookmarkUtils: more permissive doctype detection

The IE bookmark exports contain extra escape sequences, which can be observed
by binary comparison of the reference input data used in tests:

   $ cmp -b -l -n 8 netscape_basic.htm internet_explorer_encoding.htm

   1  74 <    357 M-o
   2  41 !    273 M-;
   3 104 D    277 M-?
   4 117 O     74 <
   5 103 C     41 !
   6 124 T    104 D
   7 131 Y    117 O
   8 120 P    103 C

Signed-off-by: VirtualTam <virtualtam@flibidi.net>
This commit is contained in:
VirtualTam 2016-08-12 23:22:15 +02:00
parent a34d6da642
commit f4ad7bde56
3 changed files with 38 additions and 2 deletions

View file

@ -98,8 +98,7 @@ public static function import($post, $files, $linkDb, $pagecache)
$filesize = $files['filetoupload']['size']; $filesize = $files['filetoupload']['size'];
$data = file_get_contents($files['filetoupload']['tmp_name']); $data = file_get_contents($files['filetoupload']['tmp_name']);
// Sniff file type if (strpos($data, '<!DOCTYPE NETSCAPE-Bookmark-file-1>') === false) {
if (! startsWith($data, '<!DOCTYPE NETSCAPE-Bookmark-file-1>')) {
return self::importStatus($filename, $filesize); return self::importStatus($filename, $filesize);
} }

View file

@ -82,6 +82,34 @@ public function testImportNoDoctype()
$this->assertEquals(0, count($this->linkDb)); $this->assertEquals(0, count($this->linkDb));
} }
/**
* Ensure IE dumps are supported
*/
public function testImportInternetExplorerEncoding()
{
$files = file2array('internet_explorer_encoding.htm');
$this->assertEquals(
'File internet_explorer_encoding.htm (356 bytes) was successfully processed:'
.' 1 links imported, 0 links overwritten, 0 links skipped.',
NetscapeBookmarkUtils::import(array(), $files, $this->linkDb, $this->pagecache)
);
$this->assertEquals(1, count($this->linkDb));
$this->assertEquals(0, count_private($this->linkDb));
$this->assertEquals(
array(
'linkdate' => '20160618_173944',
'title' => 'Hg Init a Mercurial tutorial by Joel Spolsky',
'url' => 'http://hginit.com/',
'description' => '',
'private' => 0,
'tags' => ''
),
$this->linkDb->getLinkFromUrl('http://hginit.com/')
);
}
/** /**
* Import bookmarks nested in a folder hierarchy * Import bookmarks nested in a folder hierarchy
*/ */

View file

@ -0,0 +1,9 @@
<!DOCTYPE NETSCAPE-Bookmark-file-1>
<!-- This is an automatically generated file.
It will be read and overwritten.
Do Not Edit! -->
<TITLE>Bookmarks</TITLE>
<H1>Bookmarks</H1>
<DL><p>
<DT><A HREF="http://hginit.com/" ADD_DATE="1466271584" LAST_VISIT="1466271584" LAST_MODIFIED="1466271584" >Hg Init a Mercurial tutorial by Joel Spolsky</A>
</DL><p>