Метки
amd bittorrent bug centos debian enlightenment fedora fedora 8 fedora 9 fedora 10 fedora 11 fedora 12 fedora 13 fedora 15 fedora 16 FedoraMD fglrx firefox flash player gnome google intel interview java kde kernel linux livecd migrate moldova nvidia openoffice OpenStreetMap opera Orange ovirt radeon red hat rpmfusion Sandel skype video virtualisation vmware wine
Анонсирован выход релизов Python 2.3.7 и 2.4.5
2008-03-12 17:08 | Автор: Oleg | Filed under: Новости
Анонсирован выход релизов Python 2.3.7 и 2.4.5, содержащих только исправление ошибок, связанных с безопасностью и стабильностью.
В обоих релизах добавлен код для предотвращения целочисленных переполнений. Устранены ошибки приводящие к краху интерпретатора. В релизе 2.4.5 в код cgitb, в функции вывода сообщений об ошибках, добавлено дополнительное экранирование HTML тэгов (злоумышленник мог подставить HTML код в текст ошибки).
Метки: python
Начало альфа тестирования Python 2.6. Третья альфа версия Python 3.0
2008-03-02 20:34 | Автор: Oleg | Filed under: Новости
Вышла первая альфа версия Python 2.6 и третья альфа версия Python 3.0. Python 2.6 позиционируется как переходный релиз, облегчающий переход с Python 2.x на Python 3.
Многие возможности Python 3.0 будут портированы в ветку 2.6 (без нарушения совместимости с ранее написанными для Python 2.x скриптами), оба релиза выйдут одновременно. Также версия 2.6 будет выдавать предупреждения для конструкций языка, которые могут вызвать проблемы при переходе на версию 3.0.
Метки: python
Релиз Python 2.5.2
2008-02-23 09:23 | Автор: Oleg | Filed under: Новости
Спустя чуть меньше года с момента выпуска прошлого релиза, анонсирован выход обновления Python 2.5.2, в котором исправлено более 100 накопившихся ошибок устраняющих известные проблемы, связанные со стабильностью работы и переносимостью кода на различные платформы.
Напомню, что ветка Python 2.5 находится в режиме исправления ошибок, новые возможности не добавляются.
Метки: python
BitTorrent Tracker
2008-02-07 23:01 | Автор: Oleg | Filed under: Oleg
Сегодня проводил подготовку к запуску на нашем серваке Битторрент трекер. За базу взял стандартный bittorrent, написанный на python.Все отлично заработало из коробки. Но когда я включил опцию --allowed_dir в логах увидел ошибку:
Traceback (most recent call last): File "/usr/lib/python2.5/site-packages/BitTorrent/RawServer.py", line 467, in _make_wrapped_call function(*args) File "/usr/lib/python2.5/site-packages/BitTorrent/track.py", line 796, in save_dfile h.write(bencode(self.state)) File "/usr/lib/python2.5/site-packages/BitTorrent/bencode.py", line 135, in bencode encode_func[type(x)](x, r) File "/usr/lib/python2.5/site-packages/BitTorrent/bencode.py", line 115, in encode_dict encode_func[type(v)](v, r) File "/usr/lib/python2.5/site-packages/BitTorrent/bencode.py", line 115, in encode_dict encode_func[type(v)](v, r) File "/usr/lib/python2.5/site-packages/BitTorrent/bencode.py", line 106, in encode_list encode_func[type(i)](i, r) File "/usr/lib/python2.5/site-packages/BitTorrent/bencode.py", line 106, in encode_list encode_func[type(i)](i, r) KeyError: <type 'float'>
Замечено было, что данная ошибка появлялась каждый раз, когда производилась запись в файл состояния. И соответственно при перезагрузке сервера битторрента ничего не сохранялось.
Погугля пол дня, я нарвался на одну статью, где рассказано, как включить поддержку float в bencode.py. На основании статьи соорудил следующий патч, который решает все проблемы:
--- bencode.py.org 2008-02-07 22:00:01.000000000 +0200 +++ bencode.py 2008-02-07 22:02:15.000000000 +0200 @@ -14,6 +14,8 @@ from BitTorrent import BTFailure +import string + def decode_int(x, f): f += 1 newf = x.index('e', f) @@ -25,6 +27,23 @@ raise ValueError return (n, newf+1) +def assert_finite(n): + """Raises ValueError if n is NaN or infinite.""" + + valid_chars = '0123456789.-+eE' + if repr(n).translate(string.maketrans('',''), valid_chars) != '': + raise ValueError('encountered NaN or infinite') + +def decode_float(x, f): + f += 1 + newf = x.index('e', f) + try: + n = float(x[f:newf].replace('E', 'e')) + assert_finite(n) + except (OverflowError, ValueError): + raise ValueError('encountered NaN or infinite') + return (n, newf+1) + def decode_string(x, f): colon = x.index(':', f) n = int(x[f:colon]) @@ -55,6 +74,7 @@ decode_func['l'] = decode_list decode_func['d'] = decode_dict decode_func['i'] = decode_int +decode_func['f'] = decode_float decode_func['0'] = decode_string decode_func['1'] = decode_string decode_func['2'] = decode_string @@ -75,7 +95,7 @@ raise BTFailure, _("invalid bencoded value (data after valid prefix)") return r -from types import StringType, IntType, LongType, DictType, ListType, TupleType +from types import StringType, IntType, LongType, DictType, ListType, TupleType, FloatType class Bencached(object): @@ -91,6 +111,10 @@ def encode_int(x, r): r.extend(('i', str(x), 'e')) +def encode_float(x, r): + assert_finite(x) + r.extend(('f', repr(x).replace('e', 'E'), 'e')) + def encode_bool(x, r): if x: encode_int(1, r) @@ -119,6 +143,7 @@ encode_func[Bencached] = encode_bencached encode_func[IntType] = encode_int encode_func[LongType] = encode_int +encode_func[FloatType] = encode_float encode_func[StringType] = encode_string encode_func[ListType] = encode_list encode_func[TupleType] = encode_list
Данный патч касается версии bittorrent 4.4.0-5, которая не менялась со времён Fedora 7.
Метки: bittorrent, python