Skip to content

Commit 82de8b0

Browse files
committed
Next review round fixes
1 parent ecec09a commit 82de8b0

File tree

4 files changed

+146
-129
lines changed

4 files changed

+146
-129
lines changed

ext/uri/php_lexbor.c

Lines changed: 52 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -23,56 +23,42 @@
2323
#include <arpa/inet.h>
2424
#endif
2525

26-
static void *lexbor_parse_uri(const zend_string *uri_str, const void *base_url, zval *errors);
27-
static void lexbor_create_invalid_uri_exception(zval *exception_zv, zval *errors);
28-
static void *lexbor_clone_uri(void *uri);
29-
static zend_string *lexbor_uri_to_string(void *uri, uri_recomposition_mode_t recomposition_mode, bool exclude_fragment);
30-
static void lexbor_free_uri(void *uri);
31-
32-
static HashTable lexbor_property_handlers;
33-
3426
ZEND_TLS lxb_url_parser_t *lexbor_parser;
3527
ZEND_TLS int lexbor_urls;
3628

37-
const uri_handler_t lexbor_uri_handler = {
38-
URI_PARSER_WHATWG,
39-
lexbor_parse_uri,
40-
lexbor_create_invalid_uri_exception,
41-
lexbor_clone_uri,
42-
lexbor_uri_to_string,
43-
lexbor_free_uri,
44-
&lexbor_property_handlers
45-
};
46-
47-
#define MAX_URL_COUNT 500
29+
#define LEXBOR_MAX_URL_COUNT 500
30+
#define LEXBOR_MRAW_BYTE_SIZE 8192
4831

4932
#define ZVAL_STRING_OR_NULL_TO_LEXBOR_STR(value, str) do { \
5033
if (Z_TYPE_P(value) == IS_STRING && Z_STRLEN_P(value) > 0) { \
51-
lexbor_str_init_append(&str, lexbor_parser->mraw, (const lxb_char_t *) Z_STRVAL_P(value), Z_STRLEN_P(value)); \
34+
str.data = (lxb_char_t *) Z_STRVAL_P(value); \
35+
str.length = Z_STRLEN_P(value); \
5236
} else { \
5337
ZEND_ASSERT(Z_ISNULL_P(value) || (Z_TYPE_P(value) == IS_STRING && Z_STRLEN_P(value) == 0)); \
54-
lexbor_str_init(&str, lexbor_parser->mraw, 0); \
38+
str.data = (lxb_char_t *) ""; \
39+
str.length = 0; \
5540
} \
5641
} while (0)
5742

5843
#define ZVAL_LONG_OR_NULL_TO_LEXBOR_STR(value, str) do { \
5944
if (Z_TYPE_P(value) == IS_LONG) { \
6045
ZVAL_STR(value, zend_long_to_str(Z_LVAL_P(value))); \
6146
lexbor_str_init_append(&str, lexbor_parser->mraw, (const lxb_char_t *) Z_STRVAL_P(value), Z_STRLEN_P(value)); \
62-
zval_ptr_dtor(value); \
47+
zval_ptr_dtor_str(value); \
6348
} else { \
6449
ZEND_ASSERT(Z_ISNULL_P(value)); \
65-
lexbor_str_init(&str, lexbor_parser->mraw, 0); \
50+
str.data = (lxb_char_t *) ""; \
51+
str.length = 0; \
6652
} \
6753
} while (0)
6854

69-
#define LEXBOR_READ_ASCII_URI_COMPONENT(start, len, read_mode, retval) do { \
55+
#define LEXBOR_READ_ASCII_URI_COMPONENT(start, len, retval) do { \
7056
ZVAL_STRINGL(retval, (const char *) start, len); \
7157
} while (0)
7258

7359
static void lexbor_cleanup_parser(void)
7460
{
75-
if (++lexbor_urls % MAX_URL_COUNT == 0) {
61+
if (++lexbor_urls % LEXBOR_MAX_URL_COUNT == 0) {
7662
lexbor_mraw_clean(lexbor_parser->mraw);
7763
}
7864

@@ -246,7 +232,7 @@ static lxb_status_t lexbor_serialize_callback(const lxb_char_t *data, size_t len
246232
return LXB_STATUS_OK;
247233
}
248234

249-
static zend_result lexbor_read_scheme(const uri_internal_t *internal_uri, uri_component_read_mode_t read_mode, zval *retval)
235+
static zend_result lexbor_read_scheme(const struct uri_internal_t *internal_uri, uri_component_read_mode_t read_mode, zval *retval)
250236
{
251237
lxb_url_t *lexbor_uri = internal_uri->uri;
252238

@@ -257,7 +243,7 @@ static zend_result lexbor_read_scheme(const uri_internal_t *internal_uri, uri_co
257243
return SUCCESS;
258244
}
259245

260-
static zend_result lexbor_write_scheme(uri_internal_t *internal_uri, zval *value, zval *errors)
246+
static zend_result lexbor_write_scheme(struct uri_internal_t *internal_uri, zval *value, zval *errors)
261247
{
262248
lxb_url_t *lexbor_uri = internal_uri->uri;
263249
lexbor_str_t str = {0};
@@ -273,12 +259,12 @@ static zend_result lexbor_write_scheme(uri_internal_t *internal_uri, zval *value
273259
return SUCCESS;
274260
}
275261

276-
static zend_result lexbor_read_username(const uri_internal_t *internal_uri, uri_component_read_mode_t read_mode, zval *retval)
262+
static zend_result lexbor_read_username(const struct uri_internal_t *internal_uri, uri_component_read_mode_t read_mode, zval *retval)
277263
{
278264
lxb_url_t *lexbor_uri = internal_uri->uri;
279265

280266
if (lexbor_uri->username.length) {
281-
LEXBOR_READ_ASCII_URI_COMPONENT(lexbor_uri->username.data, lexbor_uri->username.length, read_mode, retval);
267+
LEXBOR_READ_ASCII_URI_COMPONENT(lexbor_uri->username.data, lexbor_uri->username.length, retval);
282268
} else {
283269
ZVAL_NULL(retval);
284270
}
@@ -302,20 +288,20 @@ static zend_result lexbor_write_username(uri_internal_t *internal_uri, zval *val
302288
return SUCCESS;
303289
}
304290

305-
static zend_result lexbor_read_password(const uri_internal_t *internal_uri, uri_component_read_mode_t read_mode, zval *retval)
291+
static zend_result lexbor_read_password(const struct uri_internal_t *internal_uri, uri_component_read_mode_t read_mode, zval *retval)
306292
{
307293
lxb_url_t *lexbor_uri = internal_uri->uri;
308294

309295
if (lexbor_uri->password.length > 0) {
310-
LEXBOR_READ_ASCII_URI_COMPONENT(lexbor_uri->password.data, lexbor_uri->password.length, read_mode, retval);
296+
LEXBOR_READ_ASCII_URI_COMPONENT(lexbor_uri->password.data, lexbor_uri->password.length, retval);
311297
} else {
312298
ZVAL_NULL(retval);
313299
}
314300

315301
return SUCCESS;
316302
}
317303

318-
static zend_result lexbor_write_password(uri_internal_t *internal_uri, zval *value, zval *errors)
304+
static zend_result lexbor_write_password(struct uri_internal_t *internal_uri, zval *value, zval *errors)
319305
{
320306
lxb_url_t *lexbor_uri = internal_uri->uri;
321307
lexbor_str_t str = {0};
@@ -342,7 +328,7 @@ static ZEND_RESULT_CODE init_idna(void)
342328
return lxb_unicode_idna_init(lexbor_parser->idna) == LXB_STATUS_OK ? SUCCESS : FAILURE;
343329
}
344330

345-
static zend_result lexbor_read_host(const uri_internal_t *internal_uri, uri_component_read_mode_t read_mode, zval *retval)
331+
static zend_result lexbor_read_host(const struct uri_internal_t *internal_uri, uri_component_read_mode_t read_mode, zval *retval)
346332
{
347333
lxb_url_t *lexbor_uri = internal_uri->uri;
348334

@@ -387,7 +373,7 @@ static zend_result lexbor_read_host(const uri_internal_t *internal_uri, uri_comp
387373
return SUCCESS;
388374
}
389375

390-
static zend_result lexbor_write_host(uri_internal_t *internal_uri, zval *value, zval *errors)
376+
static zend_result lexbor_write_host(struct uri_internal_t *internal_uri, zval *value, zval *errors)
391377
{
392378
lxb_url_t *lexbor_uri = internal_uri->uri;
393379
lexbor_str_t str = {0};
@@ -403,7 +389,7 @@ static zend_result lexbor_write_host(uri_internal_t *internal_uri, zval *value,
403389
return SUCCESS;
404390
}
405391

406-
static zend_result lexbor_read_port(const uri_internal_t *internal_uri, uri_component_read_mode_t read_mode, zval *retval)
392+
static zend_result lexbor_read_port(const struct uri_internal_t *internal_uri, uri_component_read_mode_t read_mode, zval *retval)
407393
{
408394
lxb_url_t *lexbor_uri = internal_uri->uri;
409395

@@ -416,7 +402,7 @@ static zend_result lexbor_read_port(const uri_internal_t *internal_uri, uri_comp
416402
return SUCCESS;
417403
}
418404

419-
static zend_result lexbor_write_port(uri_internal_t *internal_uri, zval *value, zval *errors)
405+
static zend_result lexbor_write_port(struct uri_internal_t *internal_uri, zval *value, zval *errors)
420406
{
421407
lxb_url_t *lexbor_uri = internal_uri->uri;
422408
lexbor_str_t str = {0};
@@ -432,20 +418,20 @@ static zend_result lexbor_write_port(uri_internal_t *internal_uri, zval *value,
432418
return SUCCESS;
433419
}
434420

435-
static zend_result lexbor_read_path(const uri_internal_t *internal_uri, uri_component_read_mode_t read_mode, zval *retval)
421+
static zend_result lexbor_read_path(const struct uri_internal_t *internal_uri, uri_component_read_mode_t read_mode, zval *retval)
436422
{
437423
lxb_url_t *lexbor_uri = internal_uri->uri;
438424

439425
if (lexbor_uri->path.str.length) {
440-
LEXBOR_READ_ASCII_URI_COMPONENT(lexbor_uri->path.str.data, lexbor_uri->path.str.length, read_mode, retval);
426+
LEXBOR_READ_ASCII_URI_COMPONENT(lexbor_uri->path.str.data, lexbor_uri->path.str.length, retval);
441427
} else {
442428
ZVAL_EMPTY_STRING(retval);
443429
}
444430

445431
return SUCCESS;
446432
}
447433

448-
static zend_result lexbor_write_path(uri_internal_t *internal_uri, zval *value, zval *errors)
434+
static zend_result lexbor_write_path(struct uri_internal_t *internal_uri, zval *value, zval *errors)
449435
{
450436
lxb_url_t *lexbor_uri = internal_uri->uri;
451437
lexbor_str_t str = {0};
@@ -461,20 +447,20 @@ static zend_result lexbor_write_path(uri_internal_t *internal_uri, zval *value,
461447
return SUCCESS;
462448
}
463449

464-
static zend_result lexbor_read_query(const uri_internal_t *internal_uri, uri_component_read_mode_t read_mode, zval *retval)
450+
static zend_result lexbor_read_query(const struct uri_internal_t *internal_uri, uri_component_read_mode_t read_mode, zval *retval)
465451
{
466452
lxb_url_t *lexbor_uri = internal_uri->uri;
467453

468454
if (lexbor_uri->query.length) {
469-
LEXBOR_READ_ASCII_URI_COMPONENT(lexbor_uri->query.data, lexbor_uri->query.length, read_mode, retval);
455+
LEXBOR_READ_ASCII_URI_COMPONENT(lexbor_uri->query.data, lexbor_uri->query.length, retval);
470456
} else {
471457
ZVAL_NULL(retval);
472458
}
473459

474460
return SUCCESS;
475461
}
476462

477-
static zend_result lexbor_write_query(uri_internal_t *internal_uri, zval *value, zval *errors)
463+
static zend_result lexbor_write_query(struct uri_internal_t *internal_uri, zval *value, zval *errors)
478464
{
479465
lxb_url_t *lexbor_uri = internal_uri->uri;
480466
lexbor_str_t str = {0};
@@ -490,20 +476,20 @@ static zend_result lexbor_write_query(uri_internal_t *internal_uri, zval *value,
490476
return SUCCESS;
491477
}
492478

493-
static zend_result lexbor_read_fragment(const uri_internal_t *internal_uri, uri_component_read_mode_t read_mode, zval *retval)
479+
static zend_result lexbor_read_fragment(const struct uri_internal_t *internal_uri, uri_component_read_mode_t read_mode, zval *retval)
494480
{
495481
lxb_url_t *lexbor_uri = internal_uri->uri;
496482

497483
if (lexbor_uri->fragment.length) {
498-
LEXBOR_READ_ASCII_URI_COMPONENT(lexbor_uri->fragment.data, lexbor_uri->fragment.length, read_mode, retval);
484+
LEXBOR_READ_ASCII_URI_COMPONENT(lexbor_uri->fragment.data, lexbor_uri->fragment.length, retval);
499485
} else {
500486
ZVAL_NULL(retval);
501487
}
502488

503489
return SUCCESS;
504490
}
505491

506-
static zend_result lexbor_write_fragment(uri_internal_t *internal_uri, zval *value, zval *errors)
492+
static zend_result lexbor_write_fragment(struct uri_internal_t *internal_uri, zval *value, zval *errors)
507493
{
508494
lxb_url_t *lexbor_uri = internal_uri->uri;
509495
lexbor_str_t str = {0};
@@ -519,29 +505,10 @@ static zend_result lexbor_write_fragment(uri_internal_t *internal_uri, zval *val
519505
return SUCCESS;
520506
}
521507

522-
void lexbor_module_init(void)
523-
{
524-
zend_hash_init(&lexbor_property_handlers, 8, NULL, NULL, true);
525-
526-
URI_REGISTER_PROPERTY_READ_WRITE_HANDLER(&lexbor_property_handlers, ZSTR_KNOWN(ZEND_STR_SCHEME), lexbor_read_scheme, lexbor_write_scheme);
527-
URI_REGISTER_PROPERTY_READ_WRITE_HANDLER(&lexbor_property_handlers, ZSTR_KNOWN(ZEND_STR_USERNAME), lexbor_read_username, lexbor_write_username);
528-
URI_REGISTER_PROPERTY_READ_WRITE_HANDLER(&lexbor_property_handlers, ZSTR_KNOWN(ZEND_STR_PASSWORD), lexbor_read_password, lexbor_write_password);
529-
URI_REGISTER_PROPERTY_READ_WRITE_HANDLER(&lexbor_property_handlers, ZSTR_KNOWN(ZEND_STR_HOST), lexbor_read_host, lexbor_write_host);
530-
URI_REGISTER_PROPERTY_READ_WRITE_HANDLER(&lexbor_property_handlers, ZSTR_KNOWN(ZEND_STR_PORT), lexbor_read_port, lexbor_write_port);
531-
URI_REGISTER_PROPERTY_READ_WRITE_HANDLER(&lexbor_property_handlers, ZSTR_KNOWN(ZEND_STR_PATH), lexbor_read_path, lexbor_write_path);
532-
URI_REGISTER_PROPERTY_READ_WRITE_HANDLER(&lexbor_property_handlers, ZSTR_KNOWN(ZEND_STR_QUERY), lexbor_read_query, lexbor_write_query);
533-
URI_REGISTER_PROPERTY_READ_WRITE_HANDLER(&lexbor_property_handlers, ZSTR_KNOWN(ZEND_STR_FRAGMENT), lexbor_read_fragment, lexbor_write_fragment);
534-
}
535-
536-
void lexbor_module_shutdown(void)
537-
{
538-
zend_hash_destroy(&lexbor_property_handlers);
539-
}
540-
541508
zend_result lexbor_request_init(void)
542509
{
543510
lexbor_mraw_t *mraw = lexbor_mraw_create();
544-
lxb_status_t status = lexbor_mraw_init(mraw, 4096 * 2);
511+
lxb_status_t status = lexbor_mraw_init(mraw, LEXBOR_MRAW_BYTE_SIZE);
545512
if (status != LXB_STATUS_OK) {
546513
lexbor_mraw_destroy(mraw, true);
547514
return FAILURE;
@@ -588,7 +555,7 @@ static void lexbor_create_invalid_uri_exception(zval *exception_zv, zval *errors
588555
zval value;
589556
ZVAL_STRING(&value, "URL parsing failed");
590557
zend_update_property_ex(uri_whatwg_invalid_url_exception_ce, Z_OBJ_P(exception_zv), ZSTR_KNOWN(ZEND_STR_MESSAGE), &value);
591-
zval_ptr_dtor(&value);
558+
zval_ptr_dtor_str(&value);
592559

593560
zend_update_property(uri_whatwg_invalid_url_exception_ce, Z_OBJ_P(exception_zv), ZEND_STRL("errors"), errors);
594561
}
@@ -629,3 +596,22 @@ static zend_string *lexbor_uri_to_string(void *uri, uri_recomposition_mode_t rec
629596
static void lexbor_free_uri(void *uri)
630597
{
631598
}
599+
600+
const uri_handler_t lexbor_uri_handler = {
601+
.name = URI_PARSER_WHATWG,
602+
.parse_uri = lexbor_parse_uri,
603+
.create_invalid_uri_exception = lexbor_create_invalid_uri_exception,
604+
.clone_uri = lexbor_clone_uri,
605+
.uri_to_string = lexbor_uri_to_string,
606+
.free_uri = lexbor_free_uri,
607+
{
608+
.scheme = {.read_func = lexbor_read_scheme, .write_func = lexbor_write_scheme},
609+
.username = {.read_func = lexbor_read_username, .write_func = lexbor_write_username},
610+
.password = {.read_func = lexbor_read_password, .write_func = lexbor_write_password},
611+
.host = {.read_func = lexbor_read_host, .write_func = lexbor_write_host},
612+
.port = {.read_func = lexbor_read_port, .write_func = lexbor_write_port},
613+
.path = {.read_func = lexbor_read_path, .write_func = lexbor_write_path},
614+
.query = {.read_func = lexbor_read_query, .write_func = lexbor_write_query},
615+
.fragment = {.read_func = lexbor_read_fragment, .write_func = lexbor_write_fragment},
616+
}
617+
};

0 commit comments

Comments
 (0)