Commit 04667a6
committed
Change zend_ast_kind and zend_ast_attr from uint16_t to uint32_t
The zend_ast_attr type was defined as uint16_t, limiting it to 16 bits,
but it's used to store ZEND_ACC_* flags which can use bits up to 31:
- ZEND_ACC_OVERRIDE = (1 << 28)
- ZEND_ACC_ENUM = (1 << 28)
- ZEND_ACC_STRICT_TYPES = (1U << 31)
While current code doesn't appear to assign these high-bit flags to
ast->attr fields, the type mismatch creates a potential bug where any
future code attempting to store ZEND_ACC flags with bits 16-31 would
have those bits silently truncated to zero.
Additionally, several functions (zend_ast_create_va, zend_ast_create_ex_*,
etc.) accept uint32_t or zend_ast_attr parameters before assigning to the
attr field, creating a truncation point at line 821 in zend_language_parser.y
where zend_modifier_list_to_flags() returns uint32_t.
This change:
1. Changes zend_ast_kind typedef from uint16_t to uint32_t
2. Changes zend_ast_attr typedef from uint16_t to uint32_t
Extending kind to uint32_t maintains natural alignment without requiring
explicit padding fields. The structure sizes remain unchanged. Padding
was already present implicitly due to alignment.1 parent 035f95c commit 04667a6
1 file changed
+2
-2
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
182 | 182 | | |
183 | 183 | | |
184 | 184 | | |
185 | | - | |
186 | | - | |
| 185 | + | |
| 186 | + | |
187 | 187 | | |
188 | 188 | | |
189 | 189 | | |
| |||
0 commit comments