@@ -101,11 +101,11 @@ static const REOpCode reopcode_info[REOP_COUNT] = {
101
101
};
102
102
103
103
#define RE_HEADER_FLAGS 0
104
- #define RE_HEADER_CAPTURE_COUNT 1
105
- #define RE_HEADER_STACK_SIZE 2
106
- #define RE_HEADER_BYTECODE_LEN 3
104
+ #define RE_HEADER_CAPTURE_COUNT 2
105
+ #define RE_HEADER_STACK_SIZE 3
106
+ #define RE_HEADER_BYTECODE_LEN 4
107
107
108
- #define RE_HEADER_LEN 7
108
+ #define RE_HEADER_LEN 8
109
109
110
110
static inline int is_digit (int c ) {
111
111
return c >= '0' && c <= '9' ;
@@ -280,16 +280,16 @@ static __maybe_unused void lre_dump_bytecode(const uint8_t *buf,
280
280
281
281
assert (buf_len >= RE_HEADER_LEN );
282
282
283
- re_flags = buf [ 0 ] ;
283
+ re_flags = lre_get_flags ( buf ) ;
284
284
bc_len = get_u32 (buf + RE_HEADER_BYTECODE_LEN );
285
285
assert (bc_len + RE_HEADER_LEN <= buf_len );
286
286
printf ("flags: 0x%x capture_count=%d stack_size=%d\n" ,
287
- re_flags , buf [1 ], buf [2 ]);
287
+ re_flags , buf [RE_HEADER_CAPTURE_COUNT ], buf [RE_HEADER_STACK_SIZE ]);
288
288
if (re_flags & LRE_FLAG_NAMED_GROUPS ) {
289
289
const char * p ;
290
290
p = (char * )buf + RE_HEADER_LEN + bc_len ;
291
291
printf ("named groups: " );
292
- for (i = 1 ; i < buf [1 ]; i ++ ) {
292
+ for (i = 1 ; i < buf [RE_HEADER_CAPTURE_COUNT ]; i ++ ) {
293
293
if (i != 1 )
294
294
printf ("," );
295
295
printf ("<%s>" , p );
@@ -1850,7 +1850,7 @@ uint8_t *lre_compile(int *plen, char *error_msg, int error_msg_size,
1850
1850
dbuf_init2 (& s -> byte_code , opaque , lre_realloc );
1851
1851
dbuf_init2 (& s -> group_names , opaque , lre_realloc );
1852
1852
1853
- dbuf_putc (& s -> byte_code , re_flags ); /* first element is the flags */
1853
+ dbuf_put_u16 (& s -> byte_code , re_flags ); /* first element is the flags */
1854
1854
dbuf_putc (& s -> byte_code , 0 ); /* second element is the number of captures */
1855
1855
dbuf_putc (& s -> byte_code , 0 ); /* stack size */
1856
1856
dbuf_put_u32 (& s -> byte_code , 0 ); /* bytecode length */
@@ -1903,7 +1903,8 @@ uint8_t *lre_compile(int *plen, char *error_msg, int error_msg_size,
1903
1903
/* add the named groups if needed */
1904
1904
if (s -> group_names .size > (s -> capture_count - 1 )) {
1905
1905
dbuf_put (& s -> byte_code , s -> group_names .buf , s -> group_names .size );
1906
- s -> byte_code .buf [RE_HEADER_FLAGS ] |= LRE_FLAG_NAMED_GROUPS ;
1906
+ put_u16 (s -> byte_code .buf + RE_HEADER_FLAGS ,
1907
+ LRE_FLAG_NAMED_GROUPS | lre_get_flags (s -> byte_code .buf ));
1907
1908
}
1908
1909
dbuf_free (& s -> group_names );
1909
1910
@@ -2509,7 +2510,7 @@ int lre_exec(uint8_t **capture,
2509
2510
int re_flags , i , alloca_size , ret ;
2510
2511
StackInt * stack_buf ;
2511
2512
2512
- re_flags = bc_buf [ RE_HEADER_FLAGS ] ;
2513
+ re_flags = lre_get_flags ( bc_buf ) ;
2513
2514
s -> multi_line = (re_flags & LRE_FLAG_MULTILINE ) != 0 ;
2514
2515
s -> ignore_case = (re_flags & LRE_FLAG_IGNORECASE ) != 0 ;
2515
2516
s -> is_unicode = (re_flags & LRE_FLAG_UNICODE ) != 0 ;
@@ -2546,7 +2547,7 @@ int lre_get_capture_count(const uint8_t *bc_buf)
2546
2547
2547
2548
int lre_get_flags (const uint8_t * bc_buf )
2548
2549
{
2549
- return bc_buf [ RE_HEADER_FLAGS ] ;
2550
+ return get_u16 ( bc_buf + RE_HEADER_FLAGS ) ;
2550
2551
}
2551
2552
2552
2553
/* Return NULL if no group names. Otherwise, return a pointer to
@@ -2575,6 +2576,8 @@ void lre_byte_swap(uint8_t *buf, size_t len, BOOL is_byte_swapped)
2575
2576
// <capture group name 1>
2576
2577
// <capture group name 2>
2577
2578
// etc.
2579
+ inplace_bswap16 (& p [RE_HEADER_FLAGS ]);
2580
+
2578
2581
n = get_u32 (& p [RE_HEADER_BYTECODE_LEN ]);
2579
2582
inplace_bswap32 (& p [RE_HEADER_BYTECODE_LEN ]);
2580
2583
if (is_byte_swapped )
0 commit comments