parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Однако, на тестовом utf-8 файле при попытке его вывести, Парсер тихо спотыкается (или что происходит, пока я не понял)

dimolezhkin 20.07.2021 18:53 / 20.07.2021 19:15

и для работы парсера она не существенна.
Вот это я как раз и пытаюсь выяснить боем, и вот во что я _пока_ воткнулся

1) Есть utf-8 стресс-тестовый файл от некоего Dr.Markus Kuhn
https://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-test.txt

который был создан спровоцировать всякие utf-8 декодеры и валидаторы на всевозможные типы некорректных utf-8 последовательностей

Занимает он примерно 22.7Кб

2) По ссылке выше он прекрасно открывается в актуальном хроме в text/plain (все невалидные бяки выглядят как вопросики или окошечки, как в общем и должно быть)


3) Если же попытаться загрузить его Парсером и отдать, как-то так:
$request:charset[utf-8]
$response:charset[utf-8]
$response:content-type[
	$.value[text/plain]
	$.charset[$response:charset]
]

$f[^file::load[binary;/UTF-8-test.txt]]
-- start --
^untaint{$f.text}
-- end --
То получим только примерно 4кб текста вида:
-- start --
UTF-8 decoder capability and stress test
----------------------------------------

Markus Kuhn <http://www.cl.cam.ac.uk/~mgk25/> - 2015-08-28 - CC BY 4.0

This test file can help you examine, how your UTF-8 decoder handles
various types of correct, malformed, or otherwise interesting UTF-8

...

2.1  First possible sequence of a certain length                              |
                                                                              |
2.1.1  1 byte  (U-00000000):        "
-- end --
Т.е. вывод споткнётся на строчке 2.1.1 стресс-тестового файла

лимит на загружаемый файл проверил (стоит 512Мб как было в корневом
auto.p в default-конфиге)
$LIMITS[
  $.max_file_size(512*0x400*0x400)
...
]
Причем, и в text/html куда нить в тег <pre></pre> или в <textarea></textarea> - эффект одинаковый. Грешить на "неотображение самим браузером не приходится", т.к. и wget выкачивает 4Кб ответ (да и пример файла с домашней страницы автора файла открывается вроде без проблем).

Грузил файл и в binary и в text,
и таинтизмы на всякий случай делал
и

^untaint{$f.text}

и

$str[^taint[as-is][$f.text]]
$str
Результат одинаковый - вывод прерывается на п.2.1.1 этого файла.

Хорошо бы понимать, что происходит, лучше бы ругалось, но оно не ругается, а просто съедает тихо.

P.S.: Т.е. чисто технически задача или вопрос стоит так:
1) Вот есть text/plain файл по ссылке = https://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-test.txt

2) Как мне Парсером (со встроенным веб-сервером) отдать этот файл так же (полностью) как он отдается веб-сервером домашней страницы автора?

Но в идеале конечно понять ситуацию.