Про долги ЖКХ и российские методы борьбы22 октября. Велопокатушка Тарасиха - Киселиха

Привидения в коде

rss баг у сайта rsdn, https или httpИногда ошибку найти не так просто. Кажется, что всё должно работать, а unit-тесты всё проходят на ура.

Но дело оказывается во внешнем источнике.

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

Стал разбираться, в чём же дело. Оказалось, что url источника - https. И отчего-то он поставляет guid то http, то https (видимо, по настроению). От этого читалка, работая по стандарту и по сути правильно, думает, что запись новая. 

И хотя здесь возможен всего двойной дубляж, если проверять на уникальность через поиск в базе. Но дело в том, что я недавно перевёл алгоритм (оптимизировал для скорости и для других возможностей) на то, чтобы для потока хранился как-бы индекс последних guid. И если таких guid нет, то запись добавляется в базу как новая.

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

Подумалось здесь, что для того, чтобы не зависеть вот от таких внешних багов (которые запросто можно использовать во зло), нужно guid, если это url, приводить к той же схеме, который имеет поток.

Проверил - так и оказалось.

Вот один скрин, видно, что поток имеет https везде в ссылках:

rss баг у сайта rsdn, https

А вот другой момент, уже http:

rss баг у сайта rsdn, http

При этом без разницы, брать поток по https или по http.