Баг или фича?

  • Автор темы Автор темы shisik
  • Дата начала Дата начала
S

shisik

Сейчас столкнулся со странность в компиляторе g++. Есть некоторый класс для работы с регулярными выражениеми. Переменная regExp - экземпляр этого класса. Программа проверяет строку на соответствие некоторому шаблону, выделяет из неё две подстроки и выводит их на экран следующим образом:

C++:
std::cout << regExp.GetMatch(1) << ' ' << regExp.GetMatch(2) << std::endl;

Но при этом выводится два раза первое соответствие (206 206 в моём случае, хотя должно быть 206 Partial Content). Я сначала думал, что ошибка в классе или в шаблоне, но потом обнаружил забавную вещь: если изменить код таким образом

C++:
std::cout << regExp.GetMatch(1) << ' ';
std::cout << regExp.GetMatch(2) << std::endl;

ну т.е. разбить код на две строки, то выводятся две разные подстроки, как это и должно быть (206 Partial Content). Т.е. класс и шаблон нормальные, проблема по всей видимости в компиляторе, когда вместо вызова метода с параметром 2, он второй раз вызывается с параметром 1. Или же эта такая фича?

Компилятор используется g++ версии 4.4.5; ОС - Gentoo amd64. При компиляции именно этого проекта оптимизации выключены. При сборке софта проблем никогда не возникало, а собрал я немало, как видно из названия ОС ;) А вот сейчас столкнулся с такой странностью. Это не сильно важно с практической точки зрения, но если это фича, то о ней хотелось бы узнать побольше.

Кто-нибудь знает, в чём причина? Заранее спасибо.
 
Хорошо бы код посмотреть...
 
shisik

Скорее всего класс регулярных выражений представляет из себя быдло-код, в котором функция GetMatch возвращает указатель на статический буфер.

Решение - выкинуть этот класс, и использовать нормальную реализацию.
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

🚀 Первый раз на Codeby?
Гайд для новичков: что делать в первые 15 минут, ключевые разделы, правила
Начать здесь →
🔴 Свежие CVE, 0-day и инциденты
То, о чём ChatGPT ещё не знает — обсуждаем в реальном времени
Threat Intel →
💼 Вакансии и заказы в ИБ
Pentest, SOC, DevSecOps, bug bounty — работа и проекты от проверенных компаний
Карьера в ИБ →

HackerLab