In <132359384747.20000714170040@zhurnal.ru> Ilya Obshadko (ilya@zhurnal.ru) wrote:
IO> Hello Alex,
IO> пятница, 14 июля 2000 г., you wrote:
>>> Не понял, отрезается только при POST? Тогда это баг в API charset_bread,
>>> скорее всего. gdb, httpd -X, и фиксить, фиксить, фиксить...
AT>> Да, похоже там есть проблемы :)
IO> Они там однозначно есть. Вспомни историю с multipart-формами.
А какая история ? Не было там никакой истории. Перекодирование multipart-форм
в Apache - "bred of wery sif kobyl". Ибо не знает он ни про какие-такие
multipart-формы. Что пришло - то и скормили в скрипт или еще куда.
IO> Которые я сейчас перекодирую из скрипта при помощи Apache::Charset. ;)
А как их еще перекодировать ? Тебе-то всяко MIME разбирать приходится - деваться
некуда. А это не такая простая работа (особенно в bread'е), чтобы ее делать
дважды - и по времени и по размерам кода и по количеству возможных ошибок.
Или у тебя на сервере процесс сильно недогружен и его чем-то занять надо ?
А вот в charset_bread'е проблемы там есть. charset_bread неправильно
работает в одном-единственном, казалось бы, маловероятном случае: когда
его попросили считать сначала, скажем, 4096 байт так, что "на стык"
попала %XX последовательность (после чего charset_bread вернет
4095 или 4094 байта :-), а затем попросили прочитать один или
два байта. В этом случае charset_bread вернет 0 - признак конца !
Казалось бы - КАК такое может произойти ? Ну кому может придти в
голову читать по одному-два байтам ??? Ответ: системе буферизации apache.
Когда оно видит, что ему вернули не полный буффер, а немного "недодали",
то он просит дочитать еще "чуть-чуть" чтобы дополнить буффер.
Далее - см. выше.
Паtch при'attach'ен. С multipart формами пусть разбирается кто-нибудь
другой: ясно, что это можно сделать "заглядывая вперед" подальше, но вот
сложность кода и его размеры явно превзойдут разумные пределы... Про
скорость я уж и вообще молчу. Вот с unicode можно было бы попробовать
разобраться, но это требует отдельных таблиц: unicode -> current_charset
и т.п. Хороший проектик для кого-нибудь, кому нечем на выходных заняться :-)
P.S. Вообще безумие все это: столько слез было, а вот вооружиться gdb и
потратить час никому в голову не пришло :-( Grrr.
"Russian Apache" includes software developed
by the Apache Group for use in the Apache HTTP server project
(http://www.apache.org/) See
Apache LICENSE.
Copyright (C) 1995-2001 The Apache Group. All rights reserved.
Copyright (C) 1996 Dm. Kryukov; Copyright (C)
1997-2009 Alex Tutubalin. Design (C) 1998 Max Smolev.