This file is indexed.

/usr/share/doc/flex/examples/manual/string2.lex is in flex 2.6.4-6.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
/*
 * string2.lex: An example of using scanning strings
 *              by using start states.
 */

%{
#include <ctype.h>
#include <malloc.h>

#define isodigit(x) ((x) >= '0' && (x) <= '7') 
#define hextoint(x) (isdigit((x)) ? (x) - '0' : ((x) - 'A') + 10)  

char *buffer      = NULL;
int  buffer_size  = 0;

void yyerror(char *message)
{
  printf("\nError: %s\n",message);
}

%}

%x STRING

hex (x|X)[0-9a-fA-F]{1,2}
oct [0-7]{1,3}

%%

\"                 { 
                     buffer      = malloc(1); 
                     buffer_size = 1; strcpy(buffer,"");
                     BEGIN(STRING);
                   }
<STRING>\n         {
                      yyerror("Unterminated string");       
                      free(buffer);
                      BEGIN(INITIAL);
                   }
<STRING><<EOF>>    {
                      yyerror("EOF in string");       
                      free(buffer);
                      BEGIN(INITIAL);
                   }
<STRING>[^\\\n"]   {
                     buffer = realloc(buffer,buffer_size+yyleng+1);
                     buffer_size += yyleng;
                     strcat(buffer,yytext);
                   }
<STRING>\\\n       /* ignore this */
<STRING>\\{hex}    {
                     int temp =0,loop = 0;
                     for(loop=yyleng-2; loop>0; loop--){
                       temp  <<= 4;
                       temp  += hextoint(toupper(yytext[yyleng-loop]));
                     } 
                     buffer = realloc(buffer,buffer_size+1);
                     buffer[buffer_size-1] = temp;
                     buffer[buffer_size]   = '\0';
                     buffer_size += 1;
                   }
<STRING>\\{oct}    {
                     int temp =0,loop = 0;
                     for(loop=yyleng-1; loop>0; loop--){
                       temp  <<= 3;
                       temp  += (yytext[yyleng-loop] - '0');
                     } 
                     buffer = realloc(buffer,buffer_size+1);
                     buffer[buffer_size-1] = temp;
                     buffer[buffer_size]   = '\0';
                     buffer_size += 1;
                   }
<STRING>\\[^\n]    {
                     buffer = realloc(buffer,buffer_size+1);
                     switch(yytext[yyleng-1]){
                     case 'b' : buffer[buffer_size-1] = '\b';  break;
                     case 't' : buffer[buffer_size-1] = '\t';  break;
                     case 'n' : buffer[buffer_size-1] = '\n';  break;
                     case 'v' : buffer[buffer_size-1] = '\v';  break;
                     case 'f' : buffer[buffer_size-1] = '\f';  break;
                     case 'r' : buffer[buffer_size-1] = '\r';  break;
                     default  : buffer[buffer_size-1] = yytext[yyleng-1];
                     }
                     buffer[buffer_size] = '\0';
                     buffer_size += 1;
                   }
<STRING>\"         {
                     printf("string = \"%s\"",buffer); 
                     free(buffer);
                     BEGIN(INITIAL);
                   }
%%