Интересный баг

Модератор: Хакер

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Интересный баг

Сообщение Хакер » 05.06.2011 (Вс) 0:02

Сейчас заменял все упоминания тегов [syntax="..."]...[/syntax] на [code=...]...[/code].
Сначала допустил небольшую ошибку в коде в регулярном выражении: забыл заэкранировать символ ] обратным слешем, чтобы он считался просто литерой, а не концом символьного класса.

Вообще, есть два поведения, которые я ожидал от PHP:
  • preg_replace воспримит символ как конец символьного класса, но поскольку открывающей скобки нигде нет, а значит нет и символного класса, сообщит об ошибке в синтаксисе регулярного выражения.
  • preg_replace не воспримет скобку как особый символ, а сочтёт обычным символом.

Но произошло нечто третье и неразумное: никакой ошибки не вывелось, но некоторые посты не подошли (match) к регулярному выражению.

Причём картина совершенно случайная (плюсиками указаны посты, которые не исправились за первый проход):
Код: Выделить всё
Doing replacing:
------------------------------|Processing 0-39.
------------------------------|Processing 40-79.
------------------------------|Processing 80-119.
------------------------------|Processing 120-159.
------------------------------|Processing 160-199.
------------------------------|Processing 200-239.
------------------------------|Processing 240-279.
---------+--------------------|Processing 280-319.
---+--------------------------|Processing 320-359.
------------------------------|Processing 360-399.
-------------+----------------|Processing 400-439.
------------------------------|Processing 440-479.
----+-------------------------|Processing 480-519.
------------------------------|Processing 520-559.
------------------------------|Processing 560-599.
----------+-+-----------------|Processing 600-639.
----------+--+----------+-----|Processing 640-679.
------------------------------|Processing 680-719.
-----++-----------------------|Processing 720-759.
------------------------------|Processing 760-799.
--------------+---------------|Processing 800-839.
------------------------------|Processing 840-879.
------------------------------|Processing 880-919.
------------------------------|Processing 920-959.
------------------------------|Processing 960-999.
------------------------+-----|Processing 1000-1039.
------------------------------|Processing 1040-1079.
-++---------------------------|Processing 1080-1119.
-----------------------+------|Processing 1120-1159.
------------------------------|Processing 1160-1199.
------------------------------|Processing 1200-1239.
---++---+---------------------|Processing 1240-1279.
---++-------------------------|Processing 1280-1319.
------------------------------|Processing 1320-1359.
------------------------------|Processing 1360-1399.
------------------------------|Processing 1400-1439.
---------+--------------------|Processing 1440-1479.
------------------------------|Processing 1480-1519.
-----------------------+------|Processing 1520-1559.
-------+----------------------|Processing 1560-1599.
-+----------------------------|Processing 1600-1639.
------------------------------|Processing 1640-1679.
---+--------+-----------------|Processing 1680-1719.
---------+-------------+--+---|Processing 1720-1759.
----------------+--+-------++-|Processing 1760-1799.
------------------------------|Processing 1800-1839.
------------------------------|Processing 1840-1879.
---------------+--------------|Processing 1880-1919.
---------+--------------------|Processing 1920-1959.
------+-----------------------|Processing 1960-1999.
------------------------------|Processing 2000-2039.
------------------------------|Processing 2040-2079.
--------------------------+---|Processing 2080-2119.
----------------------+-------|Processing 2120-2159.
------------------------------|Processing 2160-2199.
--------------------+---------|Processing 2200-2239.
----------+-------+-+--+------|Processing 2240-2279.
--------------------+---------|Processing 2280-2319.
-------------+--------------+-|Processing 2320-2359.
------------------------------|Processing 2360-2399.
------------------------------|Processing 2400-2439.
------------------------------|Processing 2440-2479.
------------------+-----------|Processing 2480-2519.
--------------+++-------------|Processing 2520-2559.
------------------------------|Processing 2560-2599.
----+-------------------------|Processing 2600-2639.
----+-------------------------|Processing 2640-2679.
-------+--------+-------------|Processing 2680-2719.
------------------------------|Processing 2720-2759.
---------------------+--------|Processing 2760-2799.
------------------------------|Processing 2800-2839.
------------+------+----------|Processing 2840-2879.
------------------------------|Processing 2880-2919.
------------------------------|Processing 2920-2959.
---+--------------------------|Processing 2960-2999.
-----------------+------++----|Processing 3000-3039.
+----------+------------------|Processing 3040-3079.
----+------+------------------|Processing 3080-3119.
--------------------------+---|Processing 3120-3159.
------------------------------|Processing 3160-3199.
------------------------------|Processing 3200-3239.
------------------------------|Processing 3240-3279.
----------++------------------|Processing 3280-3319.
---------------+------------+-|Processing 3320-3359.
------------------------------|Processing 3360-3399.
----+------------------+------|Processing 3400-3439.
------------------------------|Processing 3440-3479.
-------------+----------------|Processing 3480-3519.
---------------------+--------|Processing 3520-3559.
----------+-------------------|Processing 3560-3599.
----------+---------+---------|Processing 3600-3639.
-----------------+---------+--|Processing 3640-3679.
-------------------+----------|Processing 3680-3719.
------------------------------|Processing 3720-3759.
-------+----------------------|Processing 3760-3799.
------------------------------|Processing 3800-3839.
---------++-------------------|Processing 3840-3879.
----------------+-+---------+-|Processing 3880-3919.
-----+------------------------|Processing 3920-3959.
------------------------------|Processing 3960-3999.
------------------------------|Processing 4000-4039.
-----------------------------+|Processing 4040-4079.
--+---------------------------|Processing 4080-4119.
----+---------+---------------|Processing 4120-4159.
--------+--+------------------|Processing 4160-4199.
------------------------------|Processing 4200-4239.
++--------+------------+------|Processing 4240-4279.
----------------+-------+-----|Processing 4280-4319.
------------------------------|Processing 4320-4359.
------------------------------|Processing 4360-4399.
------------------+-----------|Processing 4400-4439.
-----+------------+-----------|Processing 4440-4479.
---------------------+--------|Processing 4480-4519.
------------------------------|Processing 4520-4559.
--------+--+---------+---+----|Processing 4560-4599.
-------+--+-------------------|Processing 4600-4639.
---------------------++-------|Processing 4640-4679.
-----+---------+--------------|Processing 4680-4719.
----+------+-------+----------|Processing 4720-4759.
-------------------+---------+|Processing 4760-4799.
------------------------+-----|Processing 4800-4839.
--------------+------------+--|Processing 4840-4879.
-----+---+--+---+------+------|Processing 4880-4919.
---------------++---------+---|Processing 4920-4959.
------------------+-+---------|Processing 4960-4999.
--------+-----------------+---|Processing 5000-5039.
------------------------------|Processing 5040-5079.
-----------------+------------|Processing 5080-5119.
------+---------------+-------|Processing 5120-5159.
-----+---+--------------------|Processing 5160-5199.
------------------------------|Processing 5200-5239.
----+-------------------------|Processing 5240-5279.
+----+---------+--------------|Processing 5280-5319.
------------------------------|Processing 5320-5359.
------------------------------|Processing 5360-5399.
--------+--------------------+|Processing 5400-5439.
---------------------------+--|Processing 5440-5479.
------------------------+-----|Processing 5480-5519.
---+------------+-+-+---------|Processing 5520-5559.
--------------------+---------|Processing 5560-5599.
+--------------------+---+----|Processing 5600-5639.
------------------------------|Processing 5640-5679.


Странно.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Интересный баг

Сообщение Хакер » 05.06.2011 (Вс) 2:49

Интересно, самые внимательные найдут никак не связанный c описанным багом подвох?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Proxy
Профессор VB наук
Профессор VB наук
Аватара пользователя
 
Сообщения: 2941
Зарегистрирован: 31.08.2007 (Пт) 4:41

Re: Интересный баг

Сообщение Proxy » 06.06.2011 (Пн) 17:48

Не вижу ничего. Кавычки?
Follow the white rabbit.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Интересный баг

Сообщение Хакер » 06.06.2011 (Пн) 18:31

Ты о чём?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: Интересный баг

Сообщение SLIM » 06.06.2011 (Пн) 20:40

надо думать подвох связан с регулярками?
Пишите жизнь на чистовик.....переписать не удастся.....

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Интересный баг

Сообщение Хакер » 06.06.2011 (Пн) 20:49

SLIM писал(а):надо думать подвох связан с регулярками?

Нет.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Интересный баг

Сообщение Хакер » 06.06.2011 (Пн) 20:51

Кстати, само регулярное выражение:
/\[syntax="(\w+)"\](.*?)\[\/syntax\]/smi
Выделенный слеш отсутствовал.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

FaKk2
El rebelde gurú
El rebelde gurú
Аватара пользователя
 
Сообщения: 2031
Зарегистрирован: 09.03.2003 (Вс) 22:10
Откуда: Los Angeles

Re: Интересный баг

Сообщение FaKk2 » 07.06.2011 (Вт) 2:52

Если не с регулярками, то с телом поста. Надо полагать те посты, которые не обработались какие-то особенные?
Для получения ответа надо продемонстрировать качества, позволяющие стать компетентным — внимательность, вдумчивость, наблюдательность, желание активно участвовать в выработке решения.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Интересный баг

Сообщение Хакер » 07.06.2011 (Вт) 2:59

FaKk2 писал(а):Надо полагать те посты, которые не обработались какие-то особенные?

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

Подвох не в этом.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

FaKk2
El rebelde gurú
El rebelde gurú
Аватара пользователя
 
Сообщения: 2031
Зарегистрирован: 09.03.2003 (Вс) 22:10
Откуда: Los Angeles

Re: Интересный баг

Сообщение FaKk2 » 07.06.2011 (Вт) 18:12

Значит дело в среде исполнения. PHP интерпретатор глючит?
Для получения ответа надо продемонстрировать качества, позволяющие стать компетентным — внимательность, вдумчивость, наблюдательность, желание активно участвовать в выработке решения.

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: Интересный баг

Сообщение SLIM » 07.06.2011 (Вт) 23:10

Хакер писал(а):Подвох не в этом.

Ну нужен контекст.
Подвох в посте, или в в чем-то другом? Ты что, букву пропустил?
Пишите жизнь на чистовик.....переписать не удастся.....

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Интересный баг

Сообщение Хакер » 08.06.2011 (Ср) 0:16

FaKk2 писал(а):Значит дело в среде исполнения. PHP интерпретатор глючит?

Ты о баге? Глюк, очевидно, в реализации PCRE в составе PHP. Сам-то PHP это большое скопление кода.

SLIM писал(а):Подвох в посте, или в в чем-то другом?

Подвох в поста. Подвох в нестыковке, которую внимательный человек заметил бы.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.


Вернуться в Мой блог

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 16

    TopList