|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2018-12-10 16:55 UTC] spam2 at rhsoft dot net
Description: ------------ i doubt that it is expected behavior when some buggy library seems to play around with LOCALE that unformatted output of float vars changes from dot to a comma $pages_summary = (string)($count_summary / 3); echo "PAGES-SUMMARY: $pages_summary\n"; https://github.com/htacg/tidy-html5/issues/780#issuecomment-445885150 libtidy-5.6.0-2.fc28.x86_64.rpm [harry@srv-rhsoft:~]$ php /downloads/tidy-debug.php PAGES-SUMMARY: 3,3333333333333 PAGES-SUMMARY: 3,3333333333333 CORRUPTION! libtidy-5.4.0-4.fc28.20181003.rh.x86_64.rpm [harry@srv-rhsoft:~]$ php /downloads/tidy-debug.php PAGES-SUMMARY: 3.3333333333333 PAGES-SUMMARY: 4 OK Test script: --------------- libtidy 5.6 is touching LOCALE somewhere without a proper reset - period look at the comma instad dot after typecasting a float value libtidy-5.6.0-2.fc28.x86_64.rpm [harry@srv-rhsoft:~]$ php /downloads/tidy-debug.php PAGES-SUMMARY: 3,3333333333333 PAGES-SUMMARY: 3,3333333333333 CORRUPTION! libtidy-5.4.0-4.fc28.20181003.rh.x86_64.rpm [harry@srv-rhsoft:~]$ php /downloads/tidy-debug.php PAGES-SUMMARY: 3.3333333333333 PAGES-SUMMARY: 4 OK /** comment out this line and everything is fine with libtidy-5.6.0-2.fc28.x86_64 too */ $tidy = tidy_parse_string('bla', [], 'latin1'); /** that code is completly unrelated to tidy and must not change it's behavior */ $conn = mysqli_init(); mysqli_real_connect($conn, $host, $user, $pwd, $db); $result = mysqli_query($conn, "select SQL_CALC_FOUND_ROWS * from cl_autotest_youtube_items where yi_cid='1' and yi_aktiv='1' order by yi_sort asc limit 0, 3"); $count_summary = mysqli_fetch_row(mysqli_query($conn, 'select SQL_NO_CACHE found_rows()'))[0]; $pages_summary = (string)($count_summary / 3); echo "PAGES-SUMMARY: $pages_summary\n"; if($pages_summary > (int)$pages_summary) { $pages_summary = (int)$pages_summary + 1; } echo "PAGES-SUMMARY: $pages_summary\n"; if((int)$pages_summary !== 4) { echo "CORRUPTION!\n"; } else { echo "OK\n"; } Expected result: ---------------- PAGES-SUMMARY: 3.3333333333333 PAGES-SUMMARY: 4 Actual result: -------------- PAGES-SUMMARY: 3,3333333333333 PAGES-SUMMARY: 3,3333333333333 CORRUPTION! PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Tue Oct 28 21:00:01 2025 UTC |
standalone sample <?php declare(strict_types=1); $host = 'localhost'; $user = 'autotest'; $pwd = '****'; $db = 'autotest'; /** comment out this line and everything is fine with libtidy-5.6.0-2.fc28.x86_64 too */ $tidy = tidy_parse_string('bla', [], 'latin1'); /** that code is completly unrelated to tidy and must not change it's behavior */ $conn = mysqli_init(); mysqli_real_connect($conn, $host, $user, $pwd, $db); mysqli_query($conn, "DROP TABLE IF EXISTS `tidy_test`;"); mysqli_query($conn, "CREATE TABLE IF NOT EXISTS `tidy_test` (`tidy_id` mediumint(7) UNSIGNED NOT NULL AUTO_INCREMENT, `tidy_test` char(2), PRIMARY KEY (`tidy_id`));"); for($i=0; $i<=10; $i++) { mysqli_query($conn, "insert into `tidy_test` (`tidy_test`) values ('$i');"); } $result = mysqli_query($conn, "select SQL_CALC_FOUND_ROWS * from `tidy_test`"); $count_summary = mysqli_fetch_row(mysqli_query($conn, 'select SQL_NO_CACHE found_rows()'))[0]; $pages_summary = (string)($count_summary / 3); echo "PAGES-SUMMARY: $pages_summary\n"; if($pages_summary > (int)$pages_summary) { $pages_summary = (int)$pages_summary + 1; } echo "PAGES-SUMMARY: $pages_summary\n"; if((int)$pages_summary !== 4) { echo "CORRUPTION!\n"; } else { echo "OK\n"; } mysqli_query($conn, "DROP TABLE IF EXISTS `tidy_test`;"); ?>nonsense! show me the PHP code where type casts after setlocale() change tehir meaning! you can't even distinct what happens by use setlocale('whatever', NULL) before and after the tidy call because i get always get de_DE.UTF-8 as result