Re: [pcre-dev] \l issue

Top Page
Delete this message
Author: ph10
Date:  
To: Ze'ev Atlas
CC: Pcre Exim
Subject: Re: [pcre-dev] \l issue
On Wed, 3 Jun 2015, Ze'ev Atlas wrote:

> Hi PhilipI enclose here my CHARTAB8 which is the EBCDIC equivalent of
> pcre_chartable.c.  I Believe that it would explain some of the
> different printouts.


> OTH, I could not find where PCRE discovers \L and rejects it, PCRE
> correctly fails in both EBCDIC and ASCII.  Similarly, I could not find
> where PCRE discovers \l and supposed to reject it as well but it does
> not and looks at it as if it was the charcter 'l'.  I need some
> guidance on it.  It looks like the last identified bug in the code.


Very odd, because the rejection of both happens together, in line 1043
of pcre_compile.c (in the current code), which reads like this:

  switch (c)
    {                                                                  
    /* A number of Perl escapes are not handled by PCRE. We give an explicit
    error. */                                                             


    case CHAR_l:                                                          
    case CHAR_L:                                                          
    *errorcodeptr = ERR37;                                    
    break;


So it looks as if somehow CHAR_l is being mis-defined. The definitions
happen in pcre_internal.h, not in the chartables. Here we find

#define CHAR_l                      'l'


for both ASCII & EBCDIC (when Unicode is not defined). The only other
possibility is that control is never reaching that code. This *does*
depend on various tables (see code around line 1013).

Aha! There is a bug in line 207 - in an EBCDIC table. The line reads

/*  90 */     0,     0, -ESC_k,     'l',      0, ESC_n,      0, -ESC_p,


Instead of 'l', there should be 0 (as there is for the L entry below).

If you can confirm that this fixes it, I'll change the master code. (I
am still having Internet issues, so my responses might be slow.)

Philip

--
Philip Hazel