From c0d33040b602446cc420113159fdaee97264d39c Mon Sep 17 00:00:00 2001 From: yflory Date: Tue, 12 Feb 2019 11:16:13 +0100 Subject: [PATCH 1/3] Fix an issue with empty hash in the href validator --- www/common/common-hash.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/www/common/common-hash.js b/www/common/common-hash.js index 1bdd3b702..71ad0977b 100644 --- a/www/common/common-hash.js +++ b/www/common/common-hash.js @@ -225,7 +225,7 @@ Version 1 var ret = {}; if (!href) { return ret; } - if (href.slice(-1) !== '/') { href += '/'; } + if (href.slice(-1) !== '/' && href.slice(-1) !== '#') { href += '/'; } href = href.replace(/\/\?[^#]+#/, '/#'); var idx; @@ -246,6 +246,7 @@ Version 1 if (!/^https*:\/\//.test(href)) { idx = href.indexOf('/#'); ret.type = href.slice(1, idx); + if (idx === -1) { return ret; } ret.hash = href.slice(idx + 2); ret.hashData = parseTypeHash(ret.type, ret.hash); return ret; From 4774eff6ae1818c3a39d738db412d9da0744c8c0 Mon Sep 17 00:00:00 2001 From: yflory Date: Tue, 12 Feb 2019 11:19:45 +0100 Subject: [PATCH 2/3] Add tests for the href validator --- www/assert/main.js | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/www/assert/main.js b/www/assert/main.js index e0b437f58..17769868d 100644 --- a/www/assert/main.js +++ b/www/assert/main.js @@ -309,6 +309,43 @@ define([ parsed.keys.symmetric.length === keys.symmetric.length); }, 'parse a block hash'); + assert(function (cb) { + var v1 = Hash.isValidHref('https://cryptpad.fr/pad'); + var v2 = Hash.isValidHref('https://cryptpad.fr/pad/'); + var v3 = Hash.isValidHref('/pad'); + var v4 = Hash.isValidHref('/pad/'); + + var res = v1 && v2 && v3 && v4; + cb(res); + if (!res) { + console.log(v1, v2, v3, v4); + } + }, 'test isValidHref no hash'); + assert(function (cb) { + var v1 = !Hash.isValidHref('https://cryptpad.fr/pad#'); // Invalid + var v2 = Hash.isValidHref('https://cryptpad.fr/pad/#'); + var v3 = Hash.isValidHref('/pad#'); // Invalid + var v4 = Hash.isValidHref('/pad/#'); + + var res = v1 && v2 && v3 && v4; + cb(res); + if (!res) { + console.log(v1, v2, v3, v4); + } + }, 'test isValidHref empty hash'); + assert(function (cb) { + var v1 = Hash.isValidHref('https://cryptpad.fr/pad/#/2/pad/edit/HGu0tK2od-2BBnwAz2ZNS-t4/p/embed'); + var v2 = Hash.isValidHref('https://cryptpad.fr/pad/#/1/edit/CmN5+YJkrHFS3NSBg-P7Sg/DNZ2wcG683GscU4fyOyqA87G/present/embed'); + var v3 = Hash.isValidHref('https://cryptpad.fr/pad/#67b8385b07352be53e40746d2be6ccd7XAYSuJYYqa9NfmInyHci7LNy'); + var v4 = Hash.isValidHref('/pad/#/2/pad/edit/HGu0tK2od-2BBnwAz2ZNS-t4/p/embed'); + + var res = v1 && v2 && v3 && v4; + cb(res); + if (!res) { + console.log(v1, v2, v3, v4); + } + }, 'test isValidHref hash'); + assert(function (cb) { try { MediaTag(void 0).on('progress').on('decryption'); From d0f70d413ae3069b72dd3012f965646525eccfe4 Mon Sep 17 00:00:00 2001 From: yflory Date: Tue, 12 Feb 2019 11:19:59 +0100 Subject: [PATCH 3/3] Update french translation --- www/common/sframe-common.js | 2 +- www/common/translations/messages.fr.json | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/www/common/sframe-common.js b/www/common/sframe-common.js index b89cad5bb..5f4c1bdea 100644 --- a/www/common/sframe-common.js +++ b/www/common/sframe-common.js @@ -563,7 +563,7 @@ define([ msg = Messages.deletedError + '
' + Messages.errorRedirectToHome; } if (err === "INVALID_HASH") { - msg = Messages.invalidHashError; // XXX + msg = Messages.invalidHashError; } UI.errorLoadingScreen(msg, false, function () { funcs.gotoURL('/drive/'); diff --git a/www/common/translations/messages.fr.json b/www/common/translations/messages.fr.json index 462a6afd4..6d73a29db 100644 --- a/www/common/translations/messages.fr.json +++ b/www/common/translations/messages.fr.json @@ -31,6 +31,7 @@ "deletedError": "Ce pad a été supprimé par son propriétaire et n'est donc plus disponible.", "inactiveError": "Ce pad a été supprimé en raison de son inactivité. Appuyez sur Échap pour créer un nouveau pad.", "chainpadError": "Une erreur critique est survenue lors de la mise à jour du contenu. Le pad est désormais en mode lecture seule afin de s'assurer que vous ne perdiez pas davantage de données.
Appuyez sur Échap pour voir le pad ou rechargez la page pour pouvoir le modifier à nouveau.", + "invalidHashError": "L'URL du document demandé n'est pas valide.", "errorCopy": " Vous pouvez toujours copier son contenu ailleurs en appuyant sur Échap.
Dés que vous aurez quitté la page, il sera impossible de le récupérer.", "errorRedirectToHome": "Appuyez sur Échap pour retourner vers votre CryptDrive.", "newVersionError": "Une nouvelle version de CryptPad est disponible.
Rechargez la page pour utiliser la nouvelle version, ou appuyez sur Échap pour accéder au contenu actuel en mode hors-ligne.", @@ -250,6 +251,8 @@ "poll_comment_placeholder": "Votre commentaire", "poll_comment_disabled": "Publiez ce sondage en utilisant le bouton ✓ afin d'activer les commentaires.", "oo_reconnect": "La connexion au serveur est rétablie. Cliquez sur OK pour recharger la page et continuer l'édition.", + "oo_cantUpload": "Impossible d'importer un document si d'autres utilisateurs sont présents.", + "oo_uploaded": "L'importation est terminée. Cliquez sur OK pour recharger la page ou sur Annuler pour continuer en lecture-seule", "canvas_clear": "Nettoyer", "canvas_delete": "Supprimer la sélection", "canvas_disable": "Désactiver le dessin", @@ -374,6 +377,7 @@ "fm_tags_used": "Nombre d'utilisations", "fm_restoreDrive": "Restauration de votre CryptDrive à une version antérieure. Pour de meilleurs résultats, veuillez éviter de modifier votre CryptDrive avant que cette restauration ne soit terminée.", "fm_moveNestedSF": "Vous ne pouvez pas placer un dossier partagé dans un autre. Le dossier {0} n'a pas été déplacé.", + "fm_passwordProtected": "Ce document est protégé avec un mot de passe", "fc_newfolder": "Nouveau dossier", "fc_newsharedfolder": "Nouveau dossier partagé", "fc_rename": "Renommer",