From 9254d52146bba6595fdf5b3590094f339c7da562 Mon Sep 17 00:00:00 2001 From: Gina Peter Banyard Date: Thu, 13 Nov 2025 22:32:58 +0000 Subject: [PATCH 1/3] Use uint32_t type --- Zend/zend_language_scanner.h | 2 +- Zend/zend_language_scanner.l | 15 ++++++++------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/Zend/zend_language_scanner.h b/Zend/zend_language_scanner.h index 612c845479272..d78d24abfb625 100644 --- a/Zend/zend_language_scanner.h +++ b/Zend/zend_language_scanner.h @@ -71,7 +71,7 @@ typedef struct _zend_heredoc_label { /* Track locations of unclosed {, [, (, etc. for better syntax error reporting */ typedef struct _zend_nest_location { char text; - int lineno; + uint32_t lineno; } zend_nest_location; BEGIN_EXTERN_C() diff --git a/Zend/zend_language_scanner.l b/Zend/zend_language_scanner.l index 3ecb2f8d0ee45..1e26ddbd99199 100644 --- a/Zend/zend_language_scanner.l +++ b/Zend/zend_language_scanner.l @@ -30,6 +30,7 @@ #include "zend_language_scanner_defs.h" #include +#include #include "zend.h" #ifdef ZEND_WIN32 # include @@ -600,7 +601,7 @@ static zend_op_array *zend_compile(int type) CG(ast_arena) = zend_arena_create(1024 * 32); if (!zendparse()) { - int last_lineno = CG(zend_lineno); + uint32_t last_lineno = CG(zend_lineno); zend_file_context original_file_context; zend_oparray_context original_oparray_context; zend_op_array *original_active_op_array = CG(active_op_array); @@ -1140,7 +1141,7 @@ skip_escape_conversion: unsigned char *str; // TODO: avoid realocation ??? s = Z_STRVAL_P(zendlval); - SCNG(output_filter)(&str, &sz, (unsigned char *)s, (size_t)Z_STRLEN_P(zendlval)); + SCNG(output_filter)(&str, &sz, (unsigned char *)s, Z_STRLEN_P(zendlval)); zval_ptr_dtor(zendlval); ZVAL_STRINGL(zendlval, (char *) str, sz); efree(str); @@ -1172,7 +1173,7 @@ static bool strip_multiline_string_indentation( const char *str = Z_STRVAL_P(zendlval), *end = str + Z_STRLEN_P(zendlval); char *copy = Z_STRVAL_P(zendlval); - int newline_count = 0; + uint32_t newline_count = 0; size_t newline_len; const char *nl; @@ -1253,7 +1254,7 @@ static void copy_heredoc_label_stack(void *void_heredoc_label) } /* Check that { }, [ ], ( ) are nested correctly */ -static void report_bad_nesting(char opening, int opening_lineno, char closing) +static void report_bad_nesting(char opening, uint32_t opening_lineno, char closing) { char buf[256]; size_t used = 0; @@ -1361,7 +1362,7 @@ int ZEND_FASTCALL lex_scan(zval *zendlval, zend_parser_stack_elem *elem) { int token; int offset; -int start_line = CG(zend_lineno); +uint32_t start_line = CG(zend_lineno); ZVAL_UNDEF(zendlval); restart: @@ -2499,7 +2500,7 @@ inline_char_handler: if (YYCURSOR < YYLIMIT) { YYCURSOR++; } else { - zend_throw_exception_ex(zend_ce_parse_error, 0, "Unterminated comment starting line %d", CG(zend_lineno)); + zend_throw_exception_ex(zend_ce_parse_error, 0, "Unterminated comment starting line %" PRIu32, CG(zend_lineno)); if (PARSER_MODE()) { RETURN_TOKEN(T_ERROR); } @@ -2616,7 +2617,7 @@ skip_escape_conversion: zend_string *new_str; s = Z_STRVAL_P(zendlval); // TODO: avoid reallocation ??? - SCNG(output_filter)((unsigned char **)&str, &sz, (unsigned char *)s, (size_t)Z_STRLEN_P(zendlval)); + SCNG(output_filter)((unsigned char **)&str, &sz, (unsigned char *)s, Z_STRLEN_P(zendlval)); new_str = zend_string_init(str, sz, 0); if (str != s) { efree(str); From b613995c6a0d22824023a47878a253ad73ca0eaa Mon Sep 17 00:00:00 2001 From: Gina Peter Banyard Date: Fri, 14 Nov 2025 07:52:16 +0000 Subject: [PATCH 2/3] Make some structs private --- Zend/zend_language_scanner.h | 13 ------------- Zend/zend_language_scanner.l | 13 +++++++++++++ 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/Zend/zend_language_scanner.h b/Zend/zend_language_scanner.h index d78d24abfb625..35b5eb4762882 100644 --- a/Zend/zend_language_scanner.h +++ b/Zend/zend_language_scanner.h @@ -61,19 +61,6 @@ typedef struct _zend_lex_state { zend_arena *ast_arena; } zend_lex_state; -typedef struct _zend_heredoc_label { - char *label; - int length; - int indentation; - bool indentation_uses_spaces; -} zend_heredoc_label; - -/* Track locations of unclosed {, [, (, etc. for better syntax error reporting */ -typedef struct _zend_nest_location { - char text; - uint32_t lineno; -} zend_nest_location; - BEGIN_EXTERN_C() ZEND_API void zend_save_lexical_state(zend_lex_state *lex_state); ZEND_API void zend_restore_lexical_state(zend_lex_state *lex_state); diff --git a/Zend/zend_language_scanner.l b/Zend/zend_language_scanner.l index 1e26ddbd99199..ea3adcccdf164 100644 --- a/Zend/zend_language_scanner.l +++ b/Zend/zend_language_scanner.l @@ -48,6 +48,19 @@ #include "zend_exceptions.h" #include "zend_virtual_cwd.h" +typedef struct _zend_heredoc_label { + char *label; + int length; + int indentation; + bool indentation_uses_spaces; +} zend_heredoc_label; + +/* Track locations of unclosed {, [, (, etc. for better syntax error reporting */ +typedef struct _zend_nest_location { + char text; + uint32_t lineno; +} zend_nest_location; + #define YYCTYPE unsigned char #define YYFILL(n) { if ((YYCURSOR + n) >= (YYLIMIT + ZEND_MMAP_AHEAD)) { return 0; } } #define YYCURSOR SCNG(yy_cursor) From 16665ef71d28438e315c85b4caaa7dff50d2148a Mon Sep 17 00:00:00 2001 From: Gina Peter Banyard Date: Fri, 14 Nov 2025 07:59:27 +0000 Subject: [PATCH 3/3] Add some header includes and detail reasons why --- Zend/zend_language_scanner.h | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/Zend/zend_language_scanner.h b/Zend/zend_language_scanner.h index 35b5eb4762882..24c84ac593260 100644 --- a/Zend/zend_language_scanner.h +++ b/Zend/zend_language_scanner.h @@ -20,7 +20,14 @@ #ifndef ZEND_SCANNER_H #define ZEND_SCANNER_H -#include "zend_globals.h" +#include "zend_arena.h" +#include "zend_ast.h" +#include "zend_stack.h" +#include "zend_ptr_stack.h" +#include "zend_stream.h" /* For zend_file_handle */ +#include "zend_string.h" +#include "zend_multibyte.h" /* For zend_encoding_filter and zend_encoding */ +#include "zend_globals.h" /* For zend_php_scanner_event */ typedef struct _zend_lex_state { unsigned int yy_leng;