Skip to content

Commit edc88ee

Browse files
authored
ext/standard: Minor refactoring to URL scanner code (#15321)
1 parent 8740fdf commit edc88ee

File tree

2 files changed

+52
-56
lines changed

2 files changed

+52
-56
lines changed

ext/standard/url_scanner_ex.h

+7-7
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,13 @@ PHP_MSHUTDOWN_FUNCTION(url_scanner_ex);
2323
PHP_RINIT_FUNCTION(url_scanner_ex);
2424
PHP_RSHUTDOWN_FUNCTION(url_scanner_ex);
2525

26-
PHPAPI char *php_url_scanner_adapt_single_url(const char *url, size_t urllen, const char *name, const char *value, size_t *newlen, int encode);
27-
PHPAPI int php_url_scanner_add_session_var(const char *name, size_t name_len, const char *value, size_t value_len, int encode);
28-
PHPAPI int php_url_scanner_reset_session_var(zend_string *name, int encode);
29-
PHPAPI int php_url_scanner_reset_session_vars(void);
30-
PHPAPI int php_url_scanner_add_var(const char *name, size_t name_len, const char *value, size_t value_len, int encode);
31-
PHPAPI int php_url_scanner_reset_var(zend_string *name, int encode);
32-
PHPAPI int php_url_scanner_reset_vars(void);
26+
PHPAPI char *php_url_scanner_adapt_single_url(const char *url, size_t urllen, const char *name, const char *value, size_t *newlen, bool encode);
27+
PHPAPI zend_result php_url_scanner_add_session_var(const char *name, size_t name_len, const char *value, size_t value_len, bool encode);
28+
PHPAPI zend_result php_url_scanner_reset_session_var(zend_string *name, int encode);
29+
PHPAPI zend_result php_url_scanner_reset_session_vars(void);
30+
PHPAPI zend_result php_url_scanner_add_var(const char *name, size_t name_len, const char *value, size_t value_len, bool encode);
31+
PHPAPI zend_result php_url_scanner_reset_var(zend_string *name, int encode);
32+
PHPAPI zend_result php_url_scanner_reset_vars(void);
3333

3434
#include "zend_smart_str_public.h"
3535

ext/standard/url_scanner_ex.re

+45-49
Original file line numberDiff line numberDiff line change
@@ -45,14 +45,14 @@ static void tag_dtor(zval *zv)
4545
free(Z_PTR_P(zv));
4646
}
4747

48-
static int php_ini_on_update_tags(zend_ini_entry *entry, zend_string *new_value, void *mh_arg1, void *mh_arg2, void *mh_arg3, int stage, int type)
48+
static zend_result php_ini_on_update_tags(zend_ini_entry *entry, zend_string *new_value, void *mh_arg1, void *mh_arg2, void *mh_arg3, int stage, bool is_session)
4949
{
5050
url_adapt_state_ex_t *ctx;
5151
char *key;
5252
char *tmp;
5353
char *lasts = NULL;
5454

55-
if (type) {
55+
if (is_session) {
5656
ctx = &BG(url_adapt_session_ex);
5757
} else {
5858
ctx = &BG(url_adapt_output_ex);
@@ -102,22 +102,22 @@ static int php_ini_on_update_tags(zend_ini_entry *entry, zend_string *new_value,
102102

103103
static PHP_INI_MH(OnUpdateSessionTags)
104104
{
105-
return php_ini_on_update_tags(entry, new_value, mh_arg1, mh_arg2, mh_arg3, stage, 1);
105+
return php_ini_on_update_tags(entry, new_value, mh_arg1, mh_arg2, mh_arg3, stage, /* is_session */ true);
106106
}
107107

108108
static PHP_INI_MH(OnUpdateOutputTags)
109109
{
110-
return php_ini_on_update_tags(entry, new_value, mh_arg1, mh_arg2, mh_arg3, stage, 0);
110+
return php_ini_on_update_tags(entry, new_value, mh_arg1, mh_arg2, mh_arg3, stage, /* is_session */ false);
111111
}
112112

113-
static int php_ini_on_update_hosts(zend_ini_entry *entry, zend_string *new_value, void *mh_arg1, void *mh_arg2, void *mh_arg3, int stage, int type)
113+
static zend_result php_ini_on_update_hosts(zend_ini_entry *entry, zend_string *new_value, void *mh_arg1, void *mh_arg2, void *mh_arg3, int stage, bool is_session)
114114
{
115115
HashTable *hosts;
116116
char *key;
117117
char *tmp;
118118
char *lasts = NULL;
119119

120-
if (type) {
120+
if (is_session) {
121121
hosts = &BG(url_adapt_session_hosts_ht);
122122
} else {
123123
hosts = &BG(url_adapt_output_hosts_ht);
@@ -152,12 +152,12 @@ static int php_ini_on_update_hosts(zend_ini_entry *entry, zend_string *new_value
152152

153153
static PHP_INI_MH(OnUpdateSessionHosts)
154154
{
155-
return php_ini_on_update_hosts(entry, new_value, mh_arg1, mh_arg2, mh_arg3, stage, 1);
155+
return php_ini_on_update_hosts(entry, new_value, mh_arg1, mh_arg2, mh_arg3, stage, /* is_session */ true);
156156
}
157157

158158
static PHP_INI_MH(OnUpdateOutputHosts)
159159
{
160-
return php_ini_on_update_hosts(entry, new_value, mh_arg1, mh_arg2, mh_arg3, stage, 0);
160+
return php_ini_on_update_hosts(entry, new_value, mh_arg1, mh_arg2, mh_arg3, stage, /* is_session */ false);
161161
}
162162

163163
/* FIXME: OnUpdate*Hosts cannot set default to $_SERVER['HTTP_HOST'] at startup */
@@ -349,7 +349,7 @@ static inline void passthru(STD_PARA)
349349
}
350350

351351

352-
static int check_http_host(char *target)
352+
static zend_result check_http_host(char *target)
353353
{
354354
zval *host, *tmp;
355355
zend_string *host_tmp;
@@ -375,7 +375,7 @@ static int check_http_host(char *target)
375375
return FAILURE;
376376
}
377377

378-
static int check_host_whitelist(url_adapt_state_ex_t *ctx)
378+
static zend_result check_host_whitelist(url_adapt_state_ex_t *ctx)
379379
{
380380
php_url *url_parts = NULL;
381381
HashTable *allowed_hosts = ctx->type ? &BG(url_adapt_session_hosts_ht) : &BG(url_adapt_output_hosts_ht);
@@ -583,7 +583,7 @@ stop:
583583
}
584584

585585

586-
PHPAPI char *php_url_scanner_adapt_single_url(const char *url, size_t urllen, const char *name, const char *value, size_t *newlen, int encode)
586+
PHPAPI char *php_url_scanner_adapt_single_url(const char *url, size_t urllen, const char *name, const char *value, size_t *newlen, bool encode)
587587
{
588588
char *result;
589589
smart_str surl = {0};
@@ -647,26 +647,24 @@ static char *url_adapt_ext(const char *src, size_t srclen, size_t *newlen, bool
647647
return retval;
648648
}
649649

650-
static int php_url_scanner_ex_activate(int type)
650+
static void php_url_scanner_ex_activate(bool is_session)
651651
{
652652
url_adapt_state_ex_t *ctx;
653653

654-
if (type) {
654+
if (is_session) {
655655
ctx = &BG(url_adapt_session_ex);
656656
} else {
657657
ctx = &BG(url_adapt_output_ex);
658658
}
659659

660660
memset(ctx, 0, XtOffsetOf(url_adapt_state_ex_t, tags));
661-
662-
return SUCCESS;
663661
}
664662

665-
static int php_url_scanner_ex_deactivate(int type)
663+
static void php_url_scanner_ex_deactivate(bool is_session)
666664
{
667665
url_adapt_state_ex_t *ctx;
668666

669-
if (type) {
667+
if (is_session) {
670668
ctx = &BG(url_adapt_session_ex);
671669
} else {
672670
ctx = &BG(url_adapt_output_ex);
@@ -677,16 +675,14 @@ static int php_url_scanner_ex_deactivate(int type)
677675
smart_str_free(&ctx->tag);
678676
smart_str_free(&ctx->arg);
679677
smart_str_free(&ctx->attr_val);
680-
681-
return SUCCESS;
682678
}
683679

684-
static inline void php_url_scanner_session_handler_impl(char *output, size_t output_len, char **handled_output, size_t *handled_output_len, int mode, int type)
680+
static inline void php_url_scanner_session_handler_impl(char *output, size_t output_len, char **handled_output, size_t *handled_output_len, int mode, bool is_session)
685681
{
686682
size_t len;
687683
url_adapt_state_ex_t *url_state;
688684

689-
if (type) {
685+
if (is_session) {
690686
url_state = &BG(url_adapt_session_ex);
691687
} else {
692688
url_state = &BG(url_adapt_output_ex);
@@ -720,15 +716,15 @@ static inline void php_url_scanner_session_handler_impl(char *output, size_t out
720716

721717
static void php_url_scanner_session_handler(char *output, size_t output_len, char **handled_output, size_t *handled_output_len, int mode)
722718
{
723-
php_url_scanner_session_handler_impl(output, output_len, handled_output, handled_output_len, mode, 1);
719+
php_url_scanner_session_handler_impl(output, output_len, handled_output, handled_output_len, mode, /* is_session */ true);
724720
}
725721

726722
static void php_url_scanner_output_handler(char *output, size_t output_len, char **handled_output, size_t *handled_output_len, int mode)
727723
{
728-
php_url_scanner_session_handler_impl(output, output_len, handled_output, handled_output_len, mode, 0);
724+
php_url_scanner_session_handler_impl(output, output_len, handled_output, handled_output_len, mode, /* is_session */ false);
729725
}
730726

731-
static inline int php_url_scanner_add_var_impl(const char *name, size_t name_len, const char *value, size_t value_len, int encode, int type)
727+
static inline void php_url_scanner_add_var_impl(const char *name, size_t name_len, const char *value, size_t value_len, bool encode, bool is_session)
732728
{
733729
smart_str sname = {0};
734730
smart_str svalue = {0};
@@ -739,7 +735,7 @@ static inline int php_url_scanner_add_var_impl(const char *name, size_t name_len
739735
php_output_handler_func_t handler;
740736
bool should_start = false;
741737

742-
if (type) {
738+
if (is_session) {
743739
url_state = &BG(url_adapt_session_ex);
744740
handler = php_url_scanner_session_handler;
745741
} else {
@@ -748,10 +744,10 @@ static inline int php_url_scanner_add_var_impl(const char *name, size_t name_len
748744
}
749745

750746
if (!url_state->active) {
751-
php_url_scanner_ex_activate(type);
747+
php_url_scanner_ex_activate(is_session);
752748
should_start = true;
753749
url_state->active = 1;
754-
url_state->type = type;
750+
url_state->type = is_session;
755751
}
756752

757753
if (url_state->url_app.s && ZSTR_LEN(url_state->url_app.s) != 0) {
@@ -792,27 +788,27 @@ static inline int php_url_scanner_add_var_impl(const char *name, size_t name_len
792788
if (should_start) {
793789
php_output_start_internal(ZEND_STRL("URL-Rewriter"), handler, 0, PHP_OUTPUT_HANDLER_STDFLAGS);
794790
}
795-
796-
return SUCCESS;
797791
}
798792

799793

800-
PHPAPI int php_url_scanner_add_session_var(const char *name, size_t name_len, const char *value, size_t value_len, int encode)
794+
PHPAPI zend_result php_url_scanner_add_session_var(const char *name, size_t name_len, const char *value, size_t value_len, bool encode)
801795
{
802-
return php_url_scanner_add_var_impl(name, name_len, value, value_len, encode, 1);
796+
php_url_scanner_add_var_impl(name, name_len, value, value_len, encode, /* is_session */ true);
797+
return SUCCESS;
803798
}
804799

805800

806-
PHPAPI int php_url_scanner_add_var(const char *name, size_t name_len, const char *value, size_t value_len, int encode)
801+
PHPAPI zend_result php_url_scanner_add_var(const char *name, size_t name_len, const char *value, size_t value_len, bool encode)
807802
{
808-
return php_url_scanner_add_var_impl(name, name_len, value, value_len, encode, 0);
803+
php_url_scanner_add_var_impl(name, name_len, value, value_len, encode, /* is_session */ false);
804+
return SUCCESS;
809805
}
810806

811807

812-
static inline void php_url_scanner_reset_vars_impl(int type) {
808+
static inline void php_url_scanner_reset_vars_impl(bool is_session) {
813809
url_adapt_state_ex_t *url_state;
814810

815-
if (type) {
811+
if (is_session) {
816812
url_state = &BG(url_adapt_session_ex);
817813
} else {
818814
url_state = &BG(url_adapt_output_ex);
@@ -827,21 +823,21 @@ static inline void php_url_scanner_reset_vars_impl(int type) {
827823
}
828824

829825

830-
PHPAPI int php_url_scanner_reset_session_vars(void)
826+
PHPAPI zend_result php_url_scanner_reset_session_vars(void)
831827
{
832-
php_url_scanner_reset_vars_impl(1);
828+
php_url_scanner_reset_vars_impl(true);
833829
return SUCCESS;
834830
}
835831

836832

837-
PHPAPI int php_url_scanner_reset_vars(void)
833+
PHPAPI zend_result php_url_scanner_reset_vars(void)
838834
{
839-
php_url_scanner_reset_vars_impl(0);
835+
php_url_scanner_reset_vars_impl(false);
840836
return SUCCESS;
841837
}
842838

843839

844-
static inline int php_url_scanner_reset_var_impl(zend_string *name, int encode, int type)
840+
static inline zend_result php_url_scanner_reset_var_impl(zend_string *name, int encode, bool is_session)
845841
{
846842
char *start, *end, *limit;
847843
size_t separator_len;
@@ -854,7 +850,7 @@ static inline int php_url_scanner_reset_var_impl(zend_string *name, int encode,
854850
bool sep_removed = 0;
855851
url_adapt_state_ex_t *url_state;
856852

857-
if (type) {
853+
if (is_session) {
858854
url_state = &BG(url_adapt_session_ex);
859855
} else {
860856
url_state = &BG(url_adapt_output_ex);
@@ -911,7 +907,7 @@ static inline int php_url_scanner_reset_var_impl(zend_string *name, int encode,
911907
}
912908
/* Remove all when this is the only rewrite var */
913909
if (ZSTR_LEN(url_state->url_app.s) == end - start) {
914-
php_url_scanner_reset_vars_impl(type);
910+
php_url_scanner_reset_vars_impl(is_session);
915911
goto finish;
916912
}
917913
/* Check preceding separator */
@@ -933,7 +929,7 @@ static inline int php_url_scanner_reset_var_impl(zend_string *name, int encode,
933929
if (!start) {
934930
/* Should not happen */
935931
ret = FAILURE;
936-
php_url_scanner_reset_vars_impl(type);
932+
php_url_scanner_reset_vars_impl(is_session);
937933
goto finish;
938934
}
939935
/* Get end of form var */
@@ -961,15 +957,15 @@ finish:
961957
}
962958

963959

964-
PHPAPI int php_url_scanner_reset_session_var(zend_string *name, int encode)
960+
PHPAPI zend_result php_url_scanner_reset_session_var(zend_string *name, int encode)
965961
{
966-
return php_url_scanner_reset_var_impl(name, encode, 1);
962+
return php_url_scanner_reset_var_impl(name, encode, /* is_session */ true);
967963
}
968964

969965

970-
PHPAPI int php_url_scanner_reset_var(zend_string *name, int encode)
966+
PHPAPI zend_result php_url_scanner_reset_var(zend_string *name, int encode)
971967
{
972-
return php_url_scanner_reset_var_impl(name, encode, 0);
968+
return php_url_scanner_reset_var_impl(name, encode, /* is_session */ false);
973969
}
974970

975971

@@ -1000,7 +996,7 @@ PHP_RINIT_FUNCTION(url_scanner)
1000996
PHP_RSHUTDOWN_FUNCTION(url_scanner)
1001997
{
1002998
if (BG(url_adapt_session_ex).active) {
1003-
php_url_scanner_ex_deactivate(1);
999+
php_url_scanner_ex_deactivate(true);
10041000
BG(url_adapt_session_ex).active = 0;
10051001
BG(url_adapt_session_ex).tag_type = 0;
10061002
BG(url_adapt_session_ex).attr_type = 0;
@@ -1009,7 +1005,7 @@ PHP_RSHUTDOWN_FUNCTION(url_scanner)
10091005
smart_str_free(&BG(url_adapt_session_ex).url_app);
10101006

10111007
if (BG(url_adapt_output_ex).active) {
1012-
php_url_scanner_ex_deactivate(0);
1008+
php_url_scanner_ex_deactivate(false);
10131009
BG(url_adapt_output_ex).active = 0;
10141010
BG(url_adapt_output_ex).tag_type = 0;
10151011
BG(url_adapt_output_ex).attr_type = 0;

0 commit comments

Comments
 (0)