asha 2 Опубликовано: 25 августа 2004 В общем, кто знает subj, просьба помочь разобраться. пытаюсь поставить патч, чтобы не хакали. есть проблема. в общем, все сводится к следующему: Suggested Fix : Sources/Lib/FUNC.pm, replace the line: Code Sample $sid =~ s/^(\d+)$/$1/; with Code Sample if (length($sid) > 1) { $sid =~ s/^([\d\w]+)$/$1/ or die 'invalid sid value'; } AND : Find : Code Sample $iB::COOKIES->{$iB::INFO->{'COOKIE_ID'}.'lang'} =~ s/^([\d\w]+)$/$1/; replace with : Code Sample if (length($iB::COOKIES->{$iB::INFO->{'COOKIE_ID'}.'lang'}) > 1) { $iB::COOKIES->{$iB::INFO->{'COOKIE_ID'}.'lang'} =~ s/^([\d\w]+)$/$1/ or die 'invalid lang cookie value'; } После этих мероприятий начались проблемы: если у в настройках стоит русский langpack, то форум не работает. меняю в настройках на английский - начинает работать. иначе пишет этот самый 'invalid lang cookie value' подозреваю, что тут все просто, просто какая-то проверка, но т.к. не знаком с интаксисом перла - вопрос - как починить/что добавить в эти проверки. З.Ы. Значение lang в cookie: LANG-2 поможите, ЫЫЫЫ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Sevat 7 Опубликовано: 25 августа 2004 ну а чего на автомате-то патчем не получается? я ж тебе написал, что ibfix'ом все это уже прошил на двух ib-форумах с русским лангпаком. я перл хреново знаю, но тут, кажется все понятно. это скорее всего session id (sid) обрабатывается регулярным выражением $sid =~ s/^(\d+)$/$1/; "=~" - это результат обработки левой части правым выражением с последующей записью результата в левую переменную, т.е. перл не может записать в $iB::COOKIES->{$iB::INFO->{'COOKIE_ID'}.'lang'} это же, обработанное следующим регулярным выражением s/^([\d\w]+)$/$1/ смусл тут в коде разбираться, в общем, когда ошибка есть 'invalid lang cookie value' Неверная кука языка. Предлагаю новый модуль руссиш ланг пак поставить и его дефолтным сделать или, как вариант (для теста), попробовать откатиться назад, но я (снова повторюсь) сильно сомневаюсь, что дело именно в русском пакете. Может он просто встал криво? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
CyberDem0n 0 Опубликовано: 25 августа 2004 $iB::COOKIES->{$iB::INFO->{'COOKIE_ID'}.'lang'} =~ s/^([\d\w]+)$/$1/ or die 'invalid lang cookie value'; Это выражение выполняется для строки которая содержит только буквы, цифры и знак подчёркивания ("_"). В нашей строке ("LANG-2") есть знак минус ("-"), который не подходит под этот рекэксп, поэтому вылетает 'invalid lang cookie value'... Чтобы пофиксить - нужно посмотреть код подробней, а у меня его сейчас под рукой нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
asha 2 Опубликовано: 25 августа 2004 ну а здесь не получается. пришли мне тот ibfix, которым ты апдейтил, посмотрю, скорее всего что-то с ним. thnx за помощь. по любому сам разобрался уже. к этому момент патч успешно применен вручную с небольшими модификациями: $iB::COOKIES->{$iB::INFO->{'COOKIE_ID'}.'lang'} =~ s/^([\d\w-]+)$/$1/ or die 'invalid lang cookie value'; надеюсь, применил правильно, эта штуковина действительно ругалась на "минус" в лангпаке. на sid не ругается - там все ок вроде бы. <OFF> того кто придумал этот censored perl убить мало на месте. шаблон ^([\d\w]+)$ ^ - начало строки \d - одно цифра \w - алфавитно-цифровой символ + - повторяется 1 или большее число раз $ - конец строки </OFF> подождем, как теперь всхачат Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Sevat 7 Опубликовано: 25 августа 2004 Ларри Уолл придумал Perl, но регулярные выражения, кажется, далеко не только в нем используются, т.е. убивать на месте надо кого-то другого кстати, ^ и $ - это, вроде, начало и конец слова (а не строки), т.е. нечто имеющее пробелы (переносы строки) с обеих сторон. Если бы это началом и концом строки было - все бы работало. Если убрать оба эти символа из кода, то LANG-2 будет просто превращаться в LANG в cookie после обсуждаемого фрагмента кода и язык, получается, всегда будет в этом месте сбрасываться обратно на английский. ну его нафиг, в общем хорошо, что все пашет и что на форуме есть собственные силы решать такие задачи. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
asha 2 Опубликовано: 25 августа 2004 а вот здесь http://docs.com.ru/perl_1_6.phphttp://docs...ru/perl_1_6.php написано, что конец строки. сиравно, не хотю больше с этим гимором хотя бы севодня возица. да эсли ево придумал этот лари уол или там лари флинт. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
CyberDem0n 0 Опубликовано: 26 августа 2004 asha, ты забыл еще про квадратные скобочки написать, они обозначают перечисление. Так что в данном регэкспе можно смело убивать \d ;-) P.S.> perl rulezzz ;-) P.P.S.> what about mod_deflate ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Sevat 7 Опубликовано: 26 августа 2004 пришли мне тот ibfix, которым ты апдейтил, посмотрю, скорее всего что-то с ним. отправил мылом Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах