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:
parent
a34d6da642
commit
f4ad7bde56
3 changed files with 38 additions and 2 deletions
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -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>
|
Loading…
Reference in a new issue