Перейти к публикации
asha

ACHTUNG!!! Кто знает PERL

Рекомендованные сообщения

В общем, кто знает 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

поможите, ЫЫЫЫ...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

ну а чего на автомате-то патчем не получается? я ж тебе написал, что ibfix'ом все это уже прошил на двух ib-форумах с русским лангпаком.

я перл хреново знаю, но тут, кажется все понятно.

это скорее всего session id (sid) обрабатывается регулярным выражением

$sid =~ s/^(\d+)$/$1/;

"=~" - это результат обработки левой части правым выражением с последующей записью результата в левую переменную, т.е. перл не может записать в

$iB::COOKIES->{$iB::INFO->{'COOKIE_ID'}.'lang'}

это же, обработанное следующим регулярным выражением

s/^([\d\w]+)$/$1/

смусл тут в коде разбираться, в общем, когда ошибка есть 'invalid lang cookie value' Неверная кука языка. Предлагаю новый модуль руссиш ланг пак поставить и его дефолтным сделать или, как вариант (для теста), попробовать откатиться назад, но я (снова повторюсь) сильно сомневаюсь, что дело именно в русском пакете. Может он просто встал криво?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

$iB::COOKIES->{$iB::INFO->{'COOKIE_ID'}.'lang'} =~ s/^([\d\w]+)$/$1/

     or die 'invalid lang cookie value';

Это выражение выполняется для строки которая содержит только буквы, цифры и знак подчёркивания ("_"). В нашей строке ("LANG-2") есть знак минус ("-"), который не подходит под этот рекэксп, поэтому вылетает 'invalid lang cookie value'...

Чтобы пофиксить - нужно посмотреть код подробней, а у меня его сейчас под рукой нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

ну а здесь не получается. пришли мне тот 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>

подождем, как теперь всхачат :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ларри Уолл придумал Perl, но регулярные выражения, кажется, далеко не только в нем используются, т.е. убивать на месте надо кого-то другого :)

кстати, ^ и $ - это, вроде, начало и конец слова (а не строки), т.е. нечто имеющее пробелы (переносы строки) с обеих сторон. Если бы это началом и концом строки было - все бы работало. Если убрать оба эти символа из кода, то LANG-2 будет просто превращаться в LANG в cookie после обсуждаемого фрагмента кода и язык, получается, всегда будет в этом месте сбрасываться обратно на английский.

ну его нафиг, в общем :D

хорошо, что все пашет и что на форуме есть собственные силы решать такие задачи.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

а вот здесь

http://docs.com.ru/perl_1_6.phphttp://docs...ru/perl_1_6.php

написано, что конец строки.

сиравно, не хотю больше с этим гимором хотя бы севодня возица. да эсли ево придумал этот лари уол или там лари флинт.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

asha, ты забыл еще про квадратные скобочки написать, они обозначают перечисление. Так что в данном регэкспе можно смело убивать \d ;-)

P.S.> perl rulezzz ;-)

P.P.S.> what about mod_deflate ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
пришли мне тот ibfix, которым ты апдейтил, посмотрю, скорее всего что-то с ним.

отправил мылом

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединиться к беседе

Вы можете опубликовать сообщение сейчас и зарегистрироваться позднее. Если у вас ест ьаккаунт, войдите в него для написания от своего имени.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

  • Заходи к нам в Telegram!

  • Интересные предложения

×
×
  • Создать...