LINUX.ORG.RU

Есть ли в Perl что-то для ограничения размера входящих данных?


0

0

Т. е. нужно ограничить, чтобы поступающие данные (пофиг откуда - из STDIN, из файла, ответ из СУБД, POST в случае веб-программы, ответ от какого-то сервера по сокету или откуда-то ещё) не были по несколько мегабайт, что может заставить программу выполнять ненужные действия (например, считывание первой строки длиною в мегабайты из файла, хотя по идее в файле должно быть всего двадцать символов, а регекспы проверяют данные только после полного считывания).

anonymous

Читать perlvar про '$/', она же $RS, она же $INPUT_RECORD_SEPARATOR.

$ perl -e 'open F, "/dev/zero"; $/ = \1024; $l = <F>; print length($l), "\n"'

1024

anonymous
()
Ответ на: комментарий от anonymous

> Читать perlvar про '$/', она же $RS, она же $INPUT_RECORD_SEPARATOR.
> $ perl -e 'open F, "/dev/zero"; $/ = \1024; $l = <F>; print length($l), "\n"'
>

Думаю это не то, что хотел OP. Судя по его вопросу он имел ввиду
"получить строку, но не более XXX символов". В твоем же случае
всегда читается 1024 символа.

Onanim
()

Ну так считай нужное кол-во символов, закрой поток и до свидания.

Хотя в твоей программе явно что-то не так, если у нее такие представления о внешнем мире.

shimon ★★★★★
()
Ответ на: комментарий от Onanim

Это понятно, но других-то способов нету особенно.

anonymous
()
Ответ на: комментарий от shimon

>Ну так считай нужное кол-во символов, закрой поток и до свидания.

По символам считывать вместо строк? Нафиг надо. А из untrusted СУБД? А HTTP POST?

Почему моя программа должна виснуть, если кто-то ей какой-то мусор толкает?

anonymous
()
Ответ на: комментарий от anonymous

И хорошо если просто виснуть, а то займёт всю память, и ядро будет другие процессы убивать. Не, я конечно понимаю, что большинству пых-пыхеров пофиг даже до SQL-вставок, но мне всё-таки хочется писать надёжные проги.

anonymous
()
Ответ на: комментарий от anonymous

perldoc -f sysread не поможет? я им из файлов и сокетов читаю, где это разумно, без особых проблем.

Casus ★★★★★
()
Ответ на: комментарий от anonymous

Какой такой "untrusted СУБД"? Это вы чем-то не тем занимаетесь, имхо.

А размер HTTP POST data ограничивается в CGI.pm каким-то конфигурационным параметром, оно даже работает.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.