|
|
| version 1.2, 2001/05/07 13:29:56 | version 1.5, 2003/07/24 11:31:20 |
|---|---|
| Line 1 | Line 1 |
| /** @page String String | /** @page String String |
| В памяти строки[String] хранятся в виде списка фрагментов[String::Chunk::Row .item], | В памяти строки[String] хранятся в виде букв, и списка фрагментов[String::Fragment] язык фрагмента+его длина. |
| каждый помнит язык, на котором написан фрагмент. | Фрагменты, полученные из stdout скриптов считаются чистыми(String::Language ::L_CLEAN), |
| Фрагменты, полученные из скриптов считаются чистыми(String::Untaint_lang ::UL_CLEAN), | а от пользователя - из stderr скриптов, из environment, из form, с диска[table:load] или из sql сервера[table:sql] |
| а от пользователя - из environment, из form, с диска[table:load] или из sql сервера[table:sql] | считаются испачканными(String::Language ::UL_TAINTED), |
| считаются испачканными(String::Untaint_lang ::UL_TAINTED), | при операциях со строкой её могут расделять на части, но получающиеся части по-прежнему помнят языки своих фрагментов. |
| при операциях со строкой её могут расделять на части, но получающиеся части по-прежнему помнят свой язык. | Строку могут записать в Request::wcontext, задав ей язык. |
| Строку могут записать в Request.wcontext, задав ей язык. | При этом язык задаётся всем её испачканным частям, они становятся не неопределённо грязными[L_TAINTED], |
| При этом язык задаётся всем её испачканным частям, они становятся не неопределённо грязными[UL_TAINTED], | |
| а "грязными, но известно, что нужно с ними сделать, чтобы стали чистыми, т.е. известен их язык". | а "грязными, но известно, что нужно с ними сделать, чтобы стали чистыми, т.е. известен их язык". |
| скажем | скажем |
| @verbatim | @verbatim |
| ^table:sql{insert into news (title) values ('$form:title')] | ^void:sql{insert into news (title) values ('$form:title')] |
| @endverbatim | @endverbatim |
| при обработке параметра посредством Temp_lang выставляется "текущий язык"[Request::flang], | при обработке параметра посредством Temp_lang выставляется "текущий язык"[Request::flang], |
| и при записи[Request::write_assign_lang] UL_TAINTED строки из $form:title фрагмента параметра | и при записи[Request::write_assign_lang] L_TAINTED строки из $form:title фрагмента параметра |
| метода sql, находящегося в кавычках, получает язык UL_SQL. | метода sql, находящегося в кавычках, получает язык L_SQL. |
| String можно преобразовать в обычную С-строку, используя String::cstr(). | String можно преобразовать в обычную С-строку, используя String::cstr(). |
| При этом будут учтены языки фрагментов и произведены соответствующие вычищения. | Если задать String::cstr(String::L_UNSPECIFIED), то |
| Также можно воспользоваться String::cstr(String::Untaint_lang), при этом будет все фрагменты строки | при преобразовании будут учтены языки фрагментов и произведены соответствующие вычищения. |
| насильно будути считаться написаннами на этом языке. Безотносительно к указанному во фрагменте языку. | Также можно воспользоваться String::cstr(String::Language) [по-умолчанию =L_AS_IS], |
| Такое используется, например, для работы с именами файлов: | при этом будет все фрагменты строки насильно будут считаться написанными на этом языке |
| безотносительно к указанному во фрагменте языку. | |
| Такое используется, например, для работы с именами файлов | |
| [ВНИМАНИЕ: никогда и нигде не используйте эту конструкцию, если вам дороги ваши секретные файлы, | |
| используется только для примера]: | |
| @verbatim | @verbatim |
| ^table:load[$form:file_name] | $file[^table::load[$form:file_name]] |
| @endverbatim | @endverbatim |
| здесь при обычной обработке $form:file_name вышел бы UL_USER_HTML, а нужен UL_FILE_NAME, | здесь при обычной обработке $form:file_name вышел бы L_HTML|L_OPTIMIZE_BIT, а нужен L_FILE_SPEC, |
| при этом глупо всё время подобное делать, как для table:sql, настаивая на {} параметрах. | при этом глупо всё время подобное делать, как для table:sql, настаивая на {} параметрах. |
| Обычным языком вывода является String::Untaint_lang::UL_USER_HTML, | Обычным языком вывода является String::Language::L_HTML|String::Language::L_OPTIMIZE_BIT, |
| исключение составляет CGI скрипт, который запускают вне веб-сервера, | исключение составляет CGI скрипт, который запускают вне веб-сервера, |
| в этом случае используется язык UL_AS_IS. | в этом случае используется язык String::Language::L_AS_IS. |
| */ | |
| В фрагментах, язык которых помечен как OPTIMIZED (String::Language::L_OPTIMIZE_BIT), | |
| при преобразовании в строку String::cstr будут оптимизированы whitespace символы: | |
| из нескольких идущих подряд символов будет оставлен первый, остальные в результат не попадут. | |
| При работе с char* считается, что он никогда не может быть 0. | |
| */ |