Subject: regcomp(3) memory leak
To: None <netbsd-users@netbsd.org>
From: Takayoshi Kochi <t-kouchi@sannet.ne.jp>
List: netbsd-users
Date: 12/09/2001 21:24:32
Hi,

I'm hit by a memory leak problem in regcomp(3) on 1.5 and very
recent 1.5-current.

This case is easily repeatable by attached program.
If you give it a regular expression (e.g. '^[a-z]+'), the program
searches the pattern against the same string forever.
In special case, when I give it '\(.\)\1\1\1' (any 4 sequential
characters), its size will be increasing to its limit (which
can be monitord by top(1)).
But strangely, when I give '\(.\)\1\1' (any 3 sequential characters)
the problem won't occur.

I saw the same problem on FreeBSD 4.4.

Am I missing something?  Or if this is a real problem,
I'll send-pr to both NetBSD and FreeBSD.

------------------

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <regex.h>

main(int argc, char *argv[])
{
        int c, ret, cflags;
        regex_t re;
        char buf[BUFSIZ];

        cflags = REG_ICASE;

        while(1) {
                ret = regcomp(&re, argv[1], cflags);
                if (ret) {
                        regerror(ret, &re, buf, BUFSIZ);
                        fprintf(stderr, "%s\n", buf);
                        regfree(&re);
                        exit(1);
                }
                ret = regexec(&re, "bbbddeeefffefjaidf", 0, 0, 0);
                regfree(&re);
        }
}

---
Takayoshi Kochi <t-kouchi@sannet.ne.jp>