You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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.
This change:
1. Changes zend_ast_attr typedef from uint16_t to uint32_t
2. Adds explicit uint16_t __pad field to all AST structures after the
kind field to maintain the same memory layout (padding was already
present implicitly due to alignment)
The structure sizes remain unchanged: we're making existing implicit
padding explicit and widening the attr field to properly accommodate
all ZEND_ACC_* flag values.
0 commit comments