Hi hackers,

The following code fails to pass the ecpg compilation, although it is accepted 
by the gcc compiler.


```
#if ABC /* this is a multi-line
              * comment including single star character */
int a = 1;
#endif
```


The issue arises from the first '*' in the second line. Upon its removal, the 
ecpg compiler functions properly.


```
#if ABC /* this is a multi-line
                comment without single star character */
int a = 1;
#endif
```


The problem has been identified as a bug in the `cppline` definition within the 
`pgc.l` file.


```
cppline 
{space}*#([^i][A-Za-z]*|{if}|{ifdef}|{ifndef}|{import})((\/\*[^*/]*\*+\/)|.|\\{space}*{newline})*{newline}
```
[Source](https://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=src/interfaces/ecpg/preproc/pgc.l;h=f3c03482aec61956691f30426f61510920c5c702;hb=HEAD#l461)


More specifically, the bug originates from the regex pattern for the C block 
code comment.


```
\/\*[^*/]*\*+\/
```


Attempting another example:


```
#if ABC /* hello * world */
int a = 1;
#endif
```


This time, the ecpg compiler also functions correctly.


Confused! I am uncertain how to rectify the regex. I hope someone can address 
this bug.

Reply via email to