BUG: VC-2010 regex liefert falsche Ergebnisse bei Verwendung von Repetitions/Wiederholungen

In der regex Implementierung von VS-2010 ist ein relativ fataler Bug drin, der auftritt, wenn man Repetitions (Wiederholungen, {n}) verwendet.
Wie zum Beispiel hier in diesem Beispiel.

#include <stdio.h>
#include <ios>
#include <iostream>
#include <ostream>
#include <regex>
#include <string>
using namespace std;

void test(const string& s, const string& reg)
{
  cout << "---------------" << endl;
  cout << "s: " << s << endl;
  cout << "r: " << reg << endl;

  const regex r(reg);
  cout << boolalpha << regex_match(s, r) << endl;
}

int main()
{
 printf("%02d.%02d.%05d.%02d\n",
          _MSC_VER / 100,
          _MSC_VER % 100,
          _MSC_FULL_VER % 100000,
          _MSC_BUILD);

  test("56." , "(([0-9]{1,2})\\.){1}");
  test("1." ,  "(([0-9]{1,2})\\.){1}");
  test("56.1.", "(([0-9]{1,2})\\.){2}");

}

Der erste und zweite Ausdruck führt zu einem Match. Der dritte Ausdruck ist eigentlich nur der kombinierte Test, der beide Ausdrücke in einem testet.
Der Fehler wird auch in SP1 nicht gefixed sein.

Meine Tests ergaben, dass in VS-2008 SP1 bei der das ganze tr1-Zeugs in VisualStudio Einzug genommen hat, noch alles korrekt funktioniert hat.

Nachtrag (07.03.2010): Es gibt auch einen entsprechenden Bug auf Connect:
https://connect.microsoft.com/VisualStudio/feedback/details/648543/tr1-regex-doesnt-match-a-valid-pattern-with-repetition#tabs

3 Gedanken zu „BUG: VC-2010 regex liefert falsche Ergebnisse bei Verwendung von Repetitions/Wiederholungen“

  1. Also nach der Installation vom VST SP1 hab ich da noch mehr Bugs gefunden….

    Macht man einen Doppelklick in die Captionbar um ein Fenster zu maximieren, verschwindet die QuickAccessBar, allerdings nur im Release Mode, ist Debug eingestellt, geht es. Ich werde VST SP1 entfernen.

    1. Sorry Detlef. Ich habe das eben nachgespielt mit einer Applikation die ich mit dem Wizard erzeugt habe und kann das Problem nicht nachvollziehen.
      Würde mich auch wundern. Ich habe große Teile des Codes schon durchgesehen, der geändert wurde. Das ist wirklich nur ganz marginal, was da an Änderungen in der MFC gelaufen ist im SP1.

  2. Hallo Martin,

    ja Du hast recht, nach langem hin und her geht es endlich. Also mal kurz zur Vorgeschichte:

    Installiert war VST Ultimate mit dem SP Beta und Intel Parallel Studio XE. Ich habe anschließend via MSDN den WEB Installer (was später noch einen Tag gekostet hat) für VST SP1 drüber laufen lassen. Danach hatte ich das Phänomen.
    Anschließend habe ich versucht den SP1 zu deinstallieren, was natürlich nicht geklappt hat, die MSI Dateien nur temp. Vorlagen und in der Zwischenzeit „entsorgt“ worden sind. Auch ein komplettes VST Deinstall hat nicht mehr funktioniert (weiter so, kann ich nur sagen und jedem empfehlen, den WEB Installer für das SP1 nicht zu benutzen). Nach langem „Rumbastel“ mit den Windows Installer Cleantool, war ich dann in der Lage, VST 2010 komplett zu deinstallieren. Nach einem Neustart hat dann auch die Neuinstallation von VST2010 funktioniert (bei MSDN auf dem neusten Stand, inkl. SP1 [sehr gut!!!]). Nachdem ich dann das Intel Parallel Studio deinstalliert hatte und wieder neu eingespielt hatte, lief meine Applikation sowohl im Debug als auch im Release Modus wieder einwandfrei.
    Also „Asche auf mein Haupt“, es war wahrscheinlich ein Resultat „dummer Umstände“.

    Was die imaginären Änderungen, kann ich nur sagen, dass ich es nicht nachvollziehen kann, warum in der MFC z.B. aus heiterem Himmel im afxvisualmanageroffice2007.h das Member m_ctrlRibbonBtnMain in m_RibbonBtnMain umgetauft wurde. Hatte z.B. zur Folge dass ich all meine davon abgeleiteten Klassen korrigieren musste.

    L.G. Detlef

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.