mirror of
https://github.com/laurent22/joplin.git
synced 2024-12-24 10:27:10 +02:00
Desktop, Cli: Fix importing certain ENEX notes that include invalid tables
This commit is contained in:
parent
4048d83dd7
commit
00eee19077
@ -1,4 +1,5 @@
|
||||
<table>
|
||||
<div></div> <!-- INVALID! -->
|
||||
<tr>
|
||||
<td>one</td>
|
||||
<td>two</td>
|
||||
|
@ -142,22 +142,28 @@ describe('import-enex-md-gen', () => {
|
||||
expect(all[0].mime).toBe('application/zip');
|
||||
});
|
||||
|
||||
it('should keep importing notes when one of them is corrupted', async () => {
|
||||
const filePath = `${enexSampleBaseDir}/ImportTestCorrupt.enex`;
|
||||
const errors: any[] = [];
|
||||
const consoleSpy = jest.spyOn(console, 'warn').mockImplementation(jest.fn());
|
||||
await importEnex('', filePath, {
|
||||
onError: (error: any) => errors.push(error),
|
||||
});
|
||||
consoleSpy.mockRestore();
|
||||
const notes = await Note.all();
|
||||
expect(notes.length).toBe(2);
|
||||
// Disabled for now because the ENEX parser has become so error-tolerant
|
||||
// that it's no longer possible to generate a note that would generate a
|
||||
// failure.
|
||||
|
||||
// Check that an error was recorded and that it includes the title
|
||||
// of the note, so that it can be found back by the user
|
||||
expect(errors.length).toBe(1);
|
||||
expect(errors[0].message.includes('Note 2')).toBe(true);
|
||||
});
|
||||
// it('should keep importing notes when one of them is corrupted', async () => {
|
||||
// const filePath = `${enexSampleBaseDir}/ImportTestCorrupt.enex`;
|
||||
// const errors: any[] = [];
|
||||
// const consoleSpy = jest.spyOn(console, 'warn').mockImplementation(jest.fn());
|
||||
// await importEnex('', filePath, {
|
||||
// onError: (error: any) => errors.push(error),
|
||||
// });
|
||||
// consoleSpy.mockRestore();
|
||||
// const notes:NoteEntity[] = await Note.all();
|
||||
// expect(notes.length).toBe(2);
|
||||
// expect(notes.find(n => n.title === 'Note 1')).toBeTruthy();
|
||||
// expect(notes.find(n => n.title === 'Note 3')).toBeTruthy();
|
||||
|
||||
// // Check that an error was recorded and that it includes the title
|
||||
// // of the note, so that it can be found back by the user
|
||||
// expect(errors.length).toBe(1);
|
||||
// expect(errors[0].message.includes('Note 2')).toBe(true);
|
||||
// });
|
||||
|
||||
it('should throw an error and stop if the outer XML is invalid', async () => {
|
||||
await expectThrow(async () => importEnexFile('invalid_html.enex'));
|
||||
|
@ -1241,6 +1241,14 @@ function drawTable(table: Section) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (typeof tr === 'string') {
|
||||
// A <TABLE> tag should only have <TR> tags as direct children.
|
||||
// However certain Evernote notes can contain other random tags
|
||||
// such as empty DIVs. In that case we just skip the content.
|
||||
// See test "table_with_invalid_content.html".
|
||||
continue;
|
||||
}
|
||||
|
||||
const isHeader = tr.isHeader;
|
||||
const line = [];
|
||||
const headerLine = [];
|
||||
@ -1249,10 +1257,7 @@ function drawTable(table: Section) {
|
||||
const td = tr.lines[tdIndex];
|
||||
|
||||
if (typeof td === 'string') {
|
||||
// A <TR> tag should only have <TD> tags as direct children.
|
||||
// However certain Evernote notes can contain other random tags
|
||||
// such as empty DIVs. In that case we just skip the content.
|
||||
// See test "table_with_invalid_content.html".
|
||||
// Same comment as above the <TR> tags.
|
||||
continue;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user