mgorny-nyan (on) :autism:🙀🚂🐧<p>Odkryłem ciekawy bug w <a href="https://pol.social/tags/ZBar" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>ZBar</span></a>, debugując błąd testów paczki <a href="https://pol.social/tags/SegNo" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>SegNo</span></a> (generator <a href="https://pol.social/tags/QRCode" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>QRCode</span></a> w Pythonie), na <a href="https://pol.social/tags/Gentoo" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>Gentoo</span></a>, z <a href="https://pol.social/tags/musl" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>musl</span></a> libc.</p><p>SegNo domyślnie próbuje kodować ciągi znaków jako ISO-8859-1, jeżeli jest to możliwe. ZBar domyślnie próbuje w pierwszej kolejności dekodować je jako Big5. Zazwyczaj wszystko działa.</p><p>Weźmy przykładowy ciąg znaków z testów ZBar: "Märchenbücher". Kiedy kodujemy go jako ISO-8859-1, otrzymamy dwie sekwencje kodowe (wysoki bajt, niski bajt): E4 72 dla "är", i FC 63 dla "üc". Ta druga wchodzi na "zdefiniowany przez użytkownika" znak w Big5, i glibc odmawia konwersji. Natomiast musl radośnie to konwertuje. Tak więc, ZBar dekoduje ciąg znaków jako Big5, "M酺chenb𡡷her".</p><p>Można tu argumentować, że musl działa niepoprawnie. Ale należy zwrócić uwagę, że pierwsza sekwencja jest poprawnym kodowaniem Big5. Tak więc jeśli skrócimy ciąg do "Märchen", glibc radośnie zdekoduje nasze ISO-8859-1 jako Big5, i da nam "M酺chen". I tak, po wstawieniu takiego ciągu znaków w SegNo, dostaję QRCode, przy pomocy którego mogę odtworzyć ten problem na glibc.</p><p>Czy ZBar działa niepoprawnie? Czy może SegNo powinno unikać kodowania ISO-8859-1, i zamiast tego pójść w bezpieczniejsze UTF-8?</p><p><a href="https://bugs.gentoo.org/923233" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="">bugs.gentoo.org/923233</span><span class="invisible"></span></a><br><a href="https://github.com/heuer/segno/issues/134" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">github.com/heuer/segno/issues/</span><span class="invisible">134</span></a><br><a href="https://github.com/mchehab/zbar/issues/281" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">github.com/mchehab/zbar/issues</span><span class="invisible">/281</span></a></p><p><a href="https://pol.social/tags/Python" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>Python</span></a> <a href="https://pol.social/tags/kodowanie" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>kodowanie</span></a></p>