]> granicus.if.org Git - php/commitdiff
Accept zend_string in highlight_string API
authorNikita Popov <nikita.ppv@gmail.com>
Thu, 22 Oct 2020 12:35:40 +0000 (14:35 +0200)
committerNikita Popov <nikita.ppv@gmail.com>
Thu, 22 Oct 2020 12:35:40 +0000 (14:35 +0200)
Zend/zend_highlight.h
Zend/zend_language_scanner.l
ext/standard/basic_functions.c

index c4f819d508c1ef24db475e89e64e2fb6016da48a..e54a339ec4bc341c43ef05fbc89d8c3ddb01726a 100644 (file)
@@ -40,7 +40,7 @@ BEGIN_EXTERN_C()
 ZEND_API void zend_highlight(zend_syntax_highlighter_ini *syntax_highlighter_ini);
 ZEND_API void zend_strip(void);
 ZEND_API zend_result highlight_file(const char *filename, zend_syntax_highlighter_ini *syntax_highlighter_ini);
-ZEND_API void highlight_string(zval *str, zend_syntax_highlighter_ini *syntax_highlighter_ini, const char *str_name);
+ZEND_API void highlight_string(zend_string *str, zend_syntax_highlighter_ini *syntax_highlighter_ini, const char *str_name);
 ZEND_API void zend_html_putc(char c);
 ZEND_API void zend_html_puts(const char *s, size_t len);
 END_EXTERN_C()
index d1c5b85cf248c11c19fa225e62c1d3cf92d55ac5..cd31878eb9d10bd92a1b997a90f090644143ce93 100644 (file)
@@ -851,17 +851,13 @@ zend_result highlight_file(const char *filename, zend_syntax_highlighter_ini *sy
        return SUCCESS;
 }
 
-void highlight_string(zval *str, zend_syntax_highlighter_ini *syntax_highlighter_ini, const char *str_name)
+void highlight_string(zend_string *str, zend_syntax_highlighter_ini *syntax_highlighter_ini, const char *str_name)
 {
        zend_lex_state original_lex_state;
-       zval tmp;
-
-       if (UNEXPECTED(Z_TYPE_P(str) != IS_STRING)) {
-               ZVAL_STR(&tmp, zval_get_string_func(str));
-               str = &tmp;
-       }
+       zval str_zv;
+       ZVAL_STR_COPY(&str_zv, str);
        zend_save_lexical_state(&original_lex_state);
-       zend_prepare_string_for_scanning(str, str_name);
+       zend_prepare_string_for_scanning(&str_zv, str_name);
        BEGIN(INITIAL);
        zend_highlight(syntax_highlighter_ini);
        if (SCNG(script_filtered)) {
@@ -869,9 +865,7 @@ void highlight_string(zval *str, zend_syntax_highlighter_ini *syntax_highlighter
                SCNG(script_filtered) = NULL;
        }
        zend_restore_lexical_state(&original_lex_state);
-       if (UNEXPECTED(str == &tmp)) {
-               zval_ptr_dtor(&tmp);
-       }
+       zval_ptr_dtor(&str_zv);
 }
 
 ZEND_API void zend_multibyte_yyinput_again(zend_encoding_filter old_input_filter, const zend_encoding *old_encoding)
index 563de2942b56adea522798eed219ef96b9a5fb52..33247c4cb3941b3d1ece518f73d0092412a7c531 100755 (executable)
@@ -1951,12 +1951,8 @@ PHP_FUNCTION(highlight_string)
 
        hicompiled_string_description = zend_make_compiled_string_description("highlighted code");
 
-       // TODO: Accept zend_string in highlight_string API.
-       zval str_zv;
-       ZVAL_STR_COPY(&str_zv, str);
-       highlight_string(&str_zv, &syntax_highlighter_ini, hicompiled_string_description);
+       highlight_string(str, &syntax_highlighter_ini, hicompiled_string_description);
        efree(hicompiled_string_description);
-       zval_ptr_dtor(&str_zv);
 
        EG(error_reporting) = old_error_reporting;