После нескольких итераций вызова regexec я получаю внутреннюю ошибку в relocxec для malloc.
Обычно в массиве тегов только один тег (reg exp), поэтому в следующем коде значение tagidx вцикл равен нулю.Пошаговое выполнение кода показывает правильное регулярное выражение
^\"(.+)\",\"(.+)\"$
И в буфере содержится символ с нулем в конце * (строка)
0x555555756160 <buffer> "\"PrimaryKey\",\"https://example.com/news/story/samplepage\""
Так что эта функция работает несколько раз, прежде чем в конечном итоге завершится с ошибкой:
поврежденный размер по сравнению с prev_size
Трассировка стека показывает ошибку изнутри malloc, вызванную из regexec.
Моя среда - Ubuntu 18.04, gcc 7.4.4.
void ProcessTags(FILE *infile, char *buffer, tag *tags)
{
int tagcnt = sizeof(*tags)/sizeof(tag);
int tagidx, errno;
regex_t tagreg;
regmatch_t matches[MAXMATCHES];
for (tagidx = 0 ; tagidx < tagcnt ; tagidx++)
{
if((errno = regcomp(&tagreg, tags[tagidx].regexp, REG_EXTENDED)))
{
regerror(errno, &tagreg, errbuf, sizeof(errbuf));
fprintf(stderr, "Regular expression problem with tag %s - %s : %s\n", tags[tagidx].tagname, tags[tagidx].regexp, errbuf);
}
if (regexec(&tagreg, buffer, MAXMATCHES, matches, 0) == 0) // SIGINT here!!!
{
switch (tags[tagidx].action)
{
...
}
}
regfree(&tagreg);
}
}