https://bugs.exim.org/show_bug.cgi?id=2673
Bug ID: 2673
Summary: Regex cannot be compiled if source compiled with
std=c18
Product: PCRE
Version: 10.33 (PCRE2)
Hardware: x86
OS: Linux
Status: NEW
Severity: bug
Priority: medium
Component: Code
Assignee: Philip.Hazel@???
Reporter: shiftag@???
CC: pcre-dev@???
Hi,
I'm using a regex that do not work if I compile with the latest C version
(c18). I used the following example:
http://pcre.org/current/doc/html/pcre2demo.html
With the following regex:
"^((?<scheme>[^:/?#]+):)?(?<authority>//(((?<userinfo>[^/?#]*)@)?(?<host>[^/?#:]*)(?:(?<port>[^/?#]*))?))?(?<path>[^?#]*)(\?(?<query>[^#]*))?(#(?<fragment>.*))?"
If compiled with gnu11 I modified the regex as below:
static const char pattern[] =
R"("^((?<scheme>[^:/?#]+):)?(?<authority>//(((?<userinfo>[^/?#]*)@)?(?<host>[^/?#:]*)(?:(?<port>[^/?#]*))?))?(?<path>[^?#]*)(\?(?<query>[^#]*))?(#(?<fragment>.*))?)";
( R"()" ) <- for raw string.
And then I build the source:
$ gcc test.c `pkg-config --libs --cflags libpcre2-8` -o test
Everything works fine.
But when using c18 as below I got an error for the exact same regex:
static const char pattern[] =
"^((?<scheme>[^:/?#]+):)?(?<authority>//(((?<userinfo>[^/?#]*)@)?(?<host>[^/?#:]*)(?:(?<port>[^/?#]*))?))?(?<path>[^?#]*)(\?(?<query>[^#]*))?(#(?<fragment>.*))?";
$ gcc -std=c18 test.c `pkg-config --libs --cflags libpcre2-8` -o test
$ ./test
PCRE2 compilation failed at offset 122: assertion expected after (?( or (?(?C)
is there any workaround ?
Thx
--
You are receiving this mail because:
You are on the CC list for the bug.