bug-grep
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#19420: intermittent segfault using grep -P


From: J.P. Hendrix
Subject: bug#19420: intermittent segfault using grep -P
Date: Mon, 22 Dec 2014 22:32:33 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.2.0

I'm not a developer, so please bear with me here. You kinda lost me with below analysis, but I think I managed to reproduce your findings with a bit of Google-magic. Are you saying a bug should be registered with pcre.org?

I am reproducing your findings as follows:

€ sudo apt-get install libpcre3-dbg libpcre3-dev # these were already installed.

€ tar xzf pcre-8.36.tar.gz
€ cd pcre-8.36
€ CFLAGS=-g ./configure --enable-utf --enable-unicode-properties --prefix=/tmp/segfaultGrep
€ make
€ make install

€ gcc reproduce.c -L/tmp/segfaultGrep/lib -lpcre
€ LD_LIBRARY_PATH=/tmp/segfaultGrep/lib ./a.out; echo $?
Segmentation fault (core dumped)
139

Please check my notes and advice how to go forward.

Kind regards,

JP



On 2014-12-22 16:55, Norihiro Tanaka wrote:
It could reproduce as following in Fedora21, RHEL 6.5.

$ cd pcre-8.36
$ CFLAGS=-g ./configure --enable-utf --enable-unicode-properties
$ make
# make install

grep-2.21
$ ./configure
$ make
# make install

By the way, if we enabled to optimize or recompile pcre with --enable-jit
option, it did not reproduced.

However, I see that it is an issue in PRE side.  It reproduces with
following test case without grep frontend.

==
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <pcre.h>

enum { LEN = 15000 };
enum { NSUB = 300 };

int
main ()
{
   char *text = malloc ((LEN + 1) * sizeof *text);
   memset (text, '0', LEN);
   text[LEN] = '\0';
   char const *re = "0(?:(?!foo).)+";
   char const *ep;
   int eo;

   pcre *cre = pcre_compile (re, 0, &ep, &eo, NULL);
   if (!cre)
     exit (EXIT_FAILURE);

   int sub[NSUB];
   pcre_exec (cre, NULL, text, strlen (text), 0, 0, sub, NSUB);

   exit (EXIT_SUCCESS);
}
==





reply via email to

[Prev in Thread] Current Thread [Next in Thread]