Salut JP,
Pour l'amour de la bidouille et satisfaire une pointe de curiosité, que se passe-t-il en remplaçant le morceau de code qui lève l'erreur par if SrcPos+3>Count then Exit(EoiCode); ?
Salut JP,
Pour l'amour de la bidouille et satisfaire une pointe de curiosité, que se passe-t-il en remplaçant le morceau de code qui lève l'erreur par if SrcPos+3>Count then Exit(EoiCode); ?
Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
. Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !
Salut Yves !
Toi tu sais utiliser les mots qu'il faut pour obtenir des résultats, bien joué ! ! !
Alors avant de parler de ta demande, je voulais revenir sur la manière dont cette fonction a été codée :
dans la principale, dans la boucle "repeat" on trouve ça :
Comment faire le distingo entre l'erreur au début et l'erreur à la fin ? Je trouve qu'il y a des baffes qui se perdent, d'autant plus que la sous-fonction GetNextCode répète ce schéma minable :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 repeat ... if Code=ClearCode then Error('LZW code out of bounds'); ... end else Error('LZW code out of bounds'); end; until false;
Je ne sais pas comment ils ont réussi à débugguer leur truc, avec ce genre de message.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 begin ... // read from three bytes if SrcPos+3>Count then Error('LZW stream overrun'); ... end else begin // read from two bytes if SrcPos+2>Count then Error('LZW stream overrun'); ...
C'est pour ça qu'une de mes premières manips a été de différencier ces deux erreurs :
Bon, ta petite demande...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 // read from three bytes if SrcPos+3>Count then Error('(a)-LZW stream overrun '+IntToStr(SrcPos)+'--'+IntToStr(Count)); ... // read from two bytes if SrcPos+2>Count then Error('(b)-LZW stream overrun');
Juste pour faire durer le suspense, je précise que j'avais aussi un peu joué avec, à savoir que j'avais simplement mis en commentaire la ligne du premier test if SrcPos+3>Count then, auquel cas ça partait en erreur sur le test suivant (au tour d'après il me semble), if SrcPos+2>Count then, et qu'en commentant également ce test j'avais l'erreur dans la fonction appelante, Error('LZW code out of bounds');Mais laquelle des deux ? Ça m'a tellement gonflé que j'ai laissé tombé.
Bon, j'aurais peut-être dû attendre cet après-midi et... ta petite demande car, aussi incroyable que ça paraisse, hé bien... ça... fonctionne !
Plus d'erreur, l'image de mon fichier est correctement affichée, !
Et les onze autres fichiers (qui n'ont jamais posé problème) confirment que c'est tout bon.
Alors, à quoi servent ces deux tests ?
Je t'avoue que j'ai remplacé en une seule fois les deux tests par tes exit magiques et que j'ai la flemme de tester juste l'un puis juste l'autre.
Qu'est-ce qui t'est passé par la tête ? Qu'est-ce qui t'a donné l'idée de tester comme ça ?
La lecture des spéc's Tiff 6.0 ?
Me semble y avoir lu que les fonctions en cas d'erreur devaient terminer "gracefully", est-ce ce qu'on accomplit avec tes exit ?
En tout cas, bien, très bien joué, Yves !
La question, maintenant, c'est : est-ce qu'on fait remonter cette infos aux dév's de FreePascal ? Faudrait que je leur envoie mon fichier à problème, qui pèse quand même 16 Mo incompressibles.
Bon week-end,
Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peut–être qu'il peut être sûr, etc.
Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
Mes 2 cts,
--
jp
C'est un coup de pot, plutôt !
Je n'ai pas relu TIFF 6.0 mais ça permet de remplacer l'erreur par une fin de fichier.
Il semble donc que ton fichier ne soit pas bien fini...
Le décodeur (pas les autres qui traitent pê gracefully) ici présent attend donc un code de 9 à 12 bits qui se situe à cheval sur 2 ou 3 octets, le dernier après la fin du stream !
Je ne sais pas si c'est un défaut d'encodage ou de décodage, en levant une exception qui aurait dû être gérée.
Parfois, l'intuition a du bon (et surtout, les données de débogage que tu as fournies).
Sinon, pour ton autre question, c'est pour gérer les codes en dehors de la table ou la succession de 2 ClearCode.
Bon week-end
Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
. Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager