• [^] # Re: Analyse

    Posté par (site web personnel) . En réponse à l’entrée du suivi Téléchargement contenu au format EPub - Pb avec la gestion des images. Évalué à 3 (+0/-0).

    URL brutes

    http://example.com/logo.jpg
    https://example.com/logo.jpg
    http://example.com/withaveryveryveryveryveryveryveryverylongnametoreachthelimitlogo.jpg
    https://example.com/withaveryveryveryveryveryveryveryverylongnametoreachthelimitlogo.jpg
    https://example.invalid/logo.jpg
    https://example.invalid/withaveryveryveryveryveryveryveryverylongnametoreachthelimitlogo.jpg
    https://example.invalid/with/a/very/very/very/long/path/to/reach/the/limit/logo.jpg
    https://example.invalid/with/a/very/very/very/long/path/to/reach/the/limit/old/logo.jpg
    

    Après img :

    /img/687474703a2f2f6578616d706c652e636f6d2f6c6f676f2e6a7067/logo.jpg
    /img/68747470733a2f2f6578616d706c652e636f6d2f6c6f676f2e6a7067/logo.jpg
    /img/687474703a2f2f6578616d706c652e636f6d2f776974686176657279766572797665727976657279766572797665727976657279766572796c6f6e676e616d65746f72656163687468656c696d69746c6f676f2e6a7067/withaveryveryveryveryveryveryveryverylongnametoreachthelimitlogo.jpg
    /img/68747470733a2f2f6578616d706c652e636f6d2f776974686176657279766572797665727976657279766572797665727976657279766572796c6f6e676e616d65746f72656163687468656c696d69746c6f676f2e6a7067/withaveryveryveryveryveryveryveryverylongnametoreachthelimitlogo.jpg
    /img/68747470733a2f2f6578616d706c652e696e76616c69642f6c6f676f2e6a7067/logo.jpg
    /img/68747470733a2f2f6578616d706c652e696e76616c69642f776974686176657279766572797665727976657279766572797665727976657279766572796c6f6e676e616d65746f72656163687468656c696d69746c6f676f2e6a7067/withaveryveryveryveryveryveryveryverylongnametoreachthelimitlogo.jpg
    /img/68747470733a2f2f6578616d706c652e696e76616c69642f776974682f612f766572792f766572792f766572792f6c6f6e672f706174682f746f2f72656163682f7468652f6c696d69742f6c6f676f2e6a7067/logo.jpg
    /img/68747470733a2f2f6578616d706c652e696e76616c69642f776974682f612f766572792f766572792f766572792f6c6f6e672f706174682f746f2f72656163682f7468652f6c696d69742f6f6c642f6c6f676f2e6a7067/logo.jpg
    

    Avec img, epub non corrigé:

    img687474703a2f2f6578616d706c652e636f6d2f6c6f676f2e6a7067lo.jpg
    img68747470733a2f2f6578616d706c652e636f6d2f6c6f676f2e6a7067.jpg
    img687474703a2f2f6578616d706c652e636f6d2f776974686176657279.jpg
    img68747470733a2f2f6578616d706c652e636f6d2f7769746861766572.jpg
    img68747470733a2f2f6578616d706c652e696e76616c69642f6c6f676f.jpg
    img68747470733a2f2f6578616d706c652e696e76616c69642f77697468.jpg # collision
    img68747470733a2f2f6578616d706c652e696e76616c69642f77697468.jpg # collision
    img68747470733a2f2f6578616d706c652e696e76616c69642f77697468.jpg # collision
    

    Sans img, epub non corrigé :

    logo.jpg # collision
    logo.jpg # collision
    withaveryveryveryveryveryveryveryverylongnametoreachthelimi.jpg # collision
    withaveryveryveryveryveryveryveryverylongnametoreachthelimi.jpg # collision
    logo.jpg # collision
    withaveryveryveryveryveryveryveryverylongnametoreachthelimi.jpg # collision
    withaveryveryverylongpathtoreachthelimitlogo.jpg
    withaveryveryverylongpathtoreachthelimitoldlogo.jpg
    

    Correctif proposé : un hachage sha224 (sha256 -> 64 octets et sha224 -> 56 octets, on avait choisi moins de 60, je vais m'y tenir) pour éviter les collisions de début de path en sortie d'img, mais en calculant plus largement que juste le path, autant prendre l'URI en entier, le tout en restant en 60 octets ou moins (ici 56) + l'extension.

     filename := strings.Replace(uri.Path, "/", "", -1)
     if len(filename) > 64 {
    - filename = filename[:60] + path.Ext(filename)
    + hashpart := sha256.Sum224([]byte(uri.String()))
    + filename = hex.EncodeToString(hashpart[:]) + path.Ext(filename)