[pcre-dev] [Bug 733] pcre_fullinfo() returns wrong PCRE_INF…

Página superior
Eliminar este mensaje
Autor: Dmitry Ukolov
Fecha:  
A: pcre-dev
Asunto: [pcre-dev] [Bug 733] pcre_fullinfo() returns wrong PCRE_INFO_NAMECOUNT on some patterns
------- You are receiving this mail because: -------
You are on the CC list for the bug.

http://bugs.exim.org/show_bug.cgi?id=733

Dmitry Ukolov <udmitry@???> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |udmitry@???





--- Comment #9 from Dmitry Ukolov <udmitry@???> 2008-07-16 08:42:35 ---
I insert debug output.

by line 2440
............
#ifdef DEBUG
if (lengthptr != NULL) DPRINTF((">> start branch\n"));
#endif

printf("UKOLOV: line 2409 optionsptr=%.8x", optionsptr);
printf("UKOLOV: line 2409 *optionsptr=%.8x", *optionsptr);

/* Set up the default and non-default settings for greediness */
greedy_default = ((options & PCRE_UNGREEDY) != 0);
........

by line 2597:
.......
  /* In extended mode, skip white space and comments */
printf("UKOLOV: line 2597 c=%.2x", (int)c);
printf("UKOLOV: line 2597 check options & PCRE_EXTENDED. options=%.8x",
options);
  if ((options & PCRE_EXTENDED) != 0)
    {
.......



and by line 4904^
.....
        /* Set up the changed option bits, but don't change anything yet. */


        newoptions = (options | set) & (~unset);
printf("UKOLOV: line 4903 SET newoptions INTO %.8x", newoptions);
        /* If the options ended with ')' this is not the start of a nested
        group with option changes, so the options change at this level. If this
.....



and on pattern
(?x)1|2
I got this trace:


UKOLOV: line 2409 optionsptr=0012EE50
UKOLOV: line 2409 *optionsptr=00000000
UKOLOV: line 2597 c=28 // '('
UKOLOV: line 2597 check options & PCRE_EXTENDED. options=00000000
UKOLOV: line 4903 SET newoptions INTO 00000008
UKOLOV: line 2597 c=31 // '1'
UKOLOV: line 2597 check options & PCRE_EXTENDED. options=00000008
UKOLOV: line 2597 c=7C // '|'
UKOLOV: line 2597 check options & PCRE_EXTENDED. options=00000008
UKOLOV: line 2409 optionsptr=0012EE50
UKOLOV: line 2409 *optionsptr=00000000
UKOLOV: line 2597 c=32 // '2'
UKOLOV: line 2597 check options & PCRE_EXTENDED. options=00000000
UKOLOV: line 2597 c=00 // ' '
UKOLOV: line 2597 check options & PCRE_EXTENDED. options=00000000
UKOLOV: line 2409 optionsptr=0012EE54
UKOLOV: line 2409 *optionsptr=00000008
UKOLOV: line 2597 c=28 // '('
UKOLOV: line 2597 check options & PCRE_EXTENDED. options=00000008
UKOLOV: line 4903 SET newoptions INTO 00000008
UKOLOV: line 2597 c=31 // '1'
UKOLOV: line 2597 check options & PCRE_EXTENDED. options=00000008
UKOLOV: line 2597 c=7C // '|'
UKOLOV: line 2597 check options & PCRE_EXTENDED. options=00000008
UKOLOV: line 2409 optionsptr=0012EE54
UKOLOV: line 2409 *optionsptr=00000008
UKOLOV: line 2597 c=32 // '2'
UKOLOV: line 2597 check options & PCRE_EXTENDED. options=00000008
UKOLOV: line 2597 c=00 // ' '
UKOLOV: line 2597 check options & PCRE_EXTENDED. options=00000008

on first pattern scan on symbol '2' options=00000000, and procedure does not
interpret # or spaces as comments.
on second pattern scan on symbol '2' options=00000008

Value of optionsptr is defferent on first and second pass.

Any idea?


--
Configure bugmail: http://bugs.exim.org/userprefs.cgi?tab=email