Skip to content

Commit 3ebce8e

Browse files
committed
Fix UNKNOWN default values in various extensions
Closes phpGH-5514
1 parent 5bc1e22 commit 3ebce8e

25 files changed

+109
-112
lines changed

Zend/zend_API.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1327,6 +1327,9 @@ ZEND_API ZEND_COLD void ZEND_FASTCALL zend_argument_value_error(uint32_t arg_num
13271327
#define Z_PARAM_BOOL(dest) \
13281328
Z_PARAM_BOOL_EX(dest, _dummy, 0, 0)
13291329

1330+
#define Z_PARAM_BOOL_OR_NULL(dest, is_null) \
1331+
Z_PARAM_BOOL_EX(dest, is_null, 1, 0)
1332+
13301333
/* old "C" */
13311334
#define Z_PARAM_CLASS_EX2(dest, check_null, deref, separate) \
13321335
Z_PARAM_PROLOGUE(deref, separate); \
@@ -1558,6 +1561,9 @@ ZEND_API ZEND_COLD void ZEND_FASTCALL zend_argument_value_error(uint32_t arg_num
15581561
#define Z_PARAM_STR(dest) \
15591562
Z_PARAM_STR_EX(dest, 0, 0)
15601563

1564+
#define Z_PARAM_STR_OR_NULL(dest) \
1565+
Z_PARAM_STR_EX(dest, 1, 0)
1566+
15611567
/* old "z" */
15621568
#define Z_PARAM_ZVAL_EX2(dest, check_null, deref, separate) \
15631569
Z_PARAM_PROLOGUE(deref, separate); \

ext/dom/php_dom.stub.php

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -103,11 +103,10 @@ public function getFeature(string $feature, string $version) {}
103103
public function hasFeature(string $feature, string $version) {}
104104

105105
/** @return DOMDocumentType|false */
106-
public function createDocumentType(
107-
string $qualifiedName, string $publicId = "", string $systemId = "") {}
106+
public function createDocumentType(string $qualifiedName, string $publicId = "", string $systemId = "") {}
108107

109108
/** @return DOMDocument|false */
110-
public function createDocument(string $namespaceURI = "", string $qualifiedName = "", DOMDocumentType $doctype = UNKNOWN) {}
109+
public function createDocument(string $namespaceURI = "", string $qualifiedName = "", ?DOMDocumentType $doctype = null) {}
111110
}
112111

113112
class DOMDocumentFragment implements DOMParentNode
@@ -248,7 +247,7 @@ public function prepend(...$nodes): void {}
248247

249248
class DOMDocument implements DOMParentNode
250249
{
251-
public function __construct(string $version = "1.0", string $encoding = UNKNOWN) {}
250+
public function __construct(string $version = "1.0", string $encoding = "") {}
252251

253252
/** @return DOMAttr|false */
254253
public function createAttribute(string $name) {}

ext/dom/php_dom_arginfo.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ ZEND_END_ARG_INFO()
107107
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_DOMImplementation_createDocument, 0, 0, 0)
108108
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, namespaceURI, IS_STRING, 0, "\"\"")
109109
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, qualifiedName, IS_STRING, 0, "\"\"")
110-
ZEND_ARG_OBJ_INFO(0, doctype, DOMDocumentType, 0)
110+
ZEND_ARG_OBJ_INFO_WITH_DEFAULT_VALUE(0, doctype, DOMDocumentType, 1, "null")
111111
ZEND_END_ARG_INFO()
112112

113113
#define arginfo_class_DOMDocumentFragment___construct arginfo_class_DOMNode_getLineNo
@@ -244,7 +244,7 @@ ZEND_END_ARG_INFO()
244244

245245
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_DOMDocument___construct, 0, 0, 0)
246246
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, version, IS_STRING, 0, "\"1.0\"")
247-
ZEND_ARG_TYPE_INFO(0, encoding, IS_STRING, 0)
247+
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, encoding, IS_STRING, 0, "\"\"")
248248
ZEND_END_ARG_INFO()
249249

250250
#define arginfo_class_DOMDocument_createAttribute arginfo_class_DOMElement_getAttribute

ext/enchant/enchant.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -656,9 +656,9 @@ PHP_FUNCTION(enchant_dict_quick_check)
656656
enchant_dict_free_string_list(pdict->pdict, suggs);
657657
}
658658

659-
660659
RETURN_FALSE;
661660
}
661+
662662
RETURN_TRUE;
663663
}
664664
/* }}} */

ext/enchant/enchant.stub.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ function enchant_broker_set_ordering($broker, string $tag, string $ordering): bo
5454
function enchant_broker_describe($broker): array {}
5555

5656
/** @param resource $dict */
57-
function enchant_dict_quick_check($dict, string $word, &$suggestions = UNKNOWN): bool {}
57+
function enchant_dict_quick_check($dict, string $word, &$suggestions = null): bool {}
5858

5959
/** @param resource $dict */
6060
function enchant_dict_check($dict, string $word): bool {}

ext/enchant/enchant_arginfo.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ ZEND_END_ARG_INFO()
5656
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_enchant_dict_quick_check, 0, 2, _IS_BOOL, 0)
5757
ZEND_ARG_INFO(0, dict)
5858
ZEND_ARG_TYPE_INFO(0, word, IS_STRING, 0)
59-
ZEND_ARG_INFO(1, suggestions)
59+
ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, suggestions, "null")
6060
ZEND_END_ARG_INFO()
6161

6262
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_enchant_dict_check, 0, 2, _IS_BOOL, 0)

ext/ffi/ffi.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2835,7 +2835,7 @@ ZEND_METHOD(FFI, cdef) /* {{{ */
28352835
ZEND_PARSE_PARAMETERS_START(0, 2)
28362836
Z_PARAM_OPTIONAL
28372837
Z_PARAM_STR(code)
2838-
Z_PARAM_STR(lib)
2838+
Z_PARAM_STR_OR_NULL(lib)
28392839
ZEND_PARSE_PARAMETERS_END();
28402840

28412841
if (lib) {
@@ -2854,7 +2854,7 @@ ZEND_METHOD(FFI, cdef) /* {{{ */
28542854
FFI_G(symbols) = NULL;
28552855
FFI_G(tags) = NULL;
28562856

2857-
if (code) {
2857+
if (code && ZSTR_LEN(code)) {
28582858
/* Parse C definitions */
28592859
FFI_G(default_type_attr) = ZEND_FFI_ATTR_STORED;
28602860

ext/ffi/ffi.stub.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
final class FFI
66
{
7-
public static function cdef(string $code = UNKNOWN, string $lib = UNKNOWN): FFI {}
7+
public static function cdef(string $code = "", ?string $lib = null): FFI {}
88

99
public static function load(string $filename): ?FFI {}
1010

ext/ffi/ffi_arginfo.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
/* This is a generated file, edit the .stub.php file instead. */
22

33
ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_FFI_cdef, 0, 0, FFI, 0)
4-
ZEND_ARG_TYPE_INFO(0, code, IS_STRING, 0)
5-
ZEND_ARG_TYPE_INFO(0, lib, IS_STRING, 0)
4+
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, code, IS_STRING, 0, "\"\"")
5+
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, lib, IS_STRING, 1, "null")
66
ZEND_END_ARG_INFO()
77

88
ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_FFI_load, 0, 1, FFI, 1)

ext/ftp/ftp.stub.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ function ftp_rmdir($ftp, string $directory): bool {}
3838
function ftp_chmod($ftp, int $mode, string $filename): int|false {}
3939

4040
/** @param resource $ftp */
41-
function ftp_alloc($ftp, int $size, &$response = UNKNOWN): bool {}
41+
function ftp_alloc($ftp, int $size, &$response = null): bool {}
4242

4343
/** @param resource $ftp */
4444
function ftp_nlist($ftp, string $directory): array|false {}

ext/ftp/ftp_arginfo.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ ZEND_END_ARG_INFO()
5959
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ftp_alloc, 0, 2, _IS_BOOL, 0)
6060
ZEND_ARG_INFO(0, ftp)
6161
ZEND_ARG_TYPE_INFO(0, size, IS_LONG, 0)
62-
ZEND_ARG_INFO(1, response)
62+
ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, response, "null")
6363
ZEND_END_ARG_INFO()
6464

6565
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_ftp_nlist, 0, 2, MAY_BE_ARRAY|MAY_BE_FALSE)

ext/hash/hash.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -481,13 +481,13 @@ PHP_FUNCTION(hash_update_file)
481481
{
482482
zval *zhash, *zcontext = NULL;
483483
php_hashcontext_object *hash;
484-
php_stream_context *context;
484+
php_stream_context *context = NULL;
485485
php_stream *stream;
486486
zend_string *filename;
487487
char buf[1024];
488488
ssize_t n;
489489

490-
if (zend_parse_parameters(ZEND_NUM_ARGS(), "OP|r", &zhash, php_hashcontext_ce, &filename, &zcontext) == FAILURE) {
490+
if (zend_parse_parameters(ZEND_NUM_ARGS(), "OP|r!", &zhash, php_hashcontext_ce, &filename, &zcontext) == FAILURE) {
491491
RETURN_THROWS();
492492
}
493493

ext/hash/hash.stub.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,15 @@ function hash_hmac(string $algo, string $data, string $key, bool $raw_output = f
1010

1111
function hash_hmac_file(string $algo, string $data, string $key, bool $raw_output = false): string|false {}
1212

13-
function hash_init(string $algo, int $options = 0, string $key = UNKNOWN): HashContext {}
13+
function hash_init(string $algo, int $options = 0, string $key = ""): HashContext {}
1414

1515
function hash_update(HashContext $context, string $data): bool {}
1616

1717
/** @param resource $handle */
1818
function hash_update_stream(HashContext $context, $handle, int $length = -1): int {}
1919

2020
/** @param resource $stream_context */
21-
function hash_update_file(HashContext $context, string $filename, $stream_context = UNKNOWN): bool {}
21+
function hash_update_file(HashContext $context, string $filename, $stream_context = null): bool {}
2222

2323
function hash_final(HashContext $context, bool $raw_output = false): string {}
2424

ext/hash/hash_arginfo.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ ZEND_END_ARG_INFO()
2424
ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_hash_init, 0, 1, HashContext, 0)
2525
ZEND_ARG_TYPE_INFO(0, algo, IS_STRING, 0)
2626
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, options, IS_LONG, 0, "0")
27-
ZEND_ARG_TYPE_INFO(0, key, IS_STRING, 0)
27+
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, key, IS_STRING, 0, "\"\"")
2828
ZEND_END_ARG_INFO()
2929

3030
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_hash_update, 0, 2, _IS_BOOL, 0)
@@ -41,7 +41,7 @@ ZEND_END_ARG_INFO()
4141
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_hash_update_file, 0, 2, _IS_BOOL, 0)
4242
ZEND_ARG_OBJ_INFO(0, context, HashContext, 0)
4343
ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0)
44-
ZEND_ARG_INFO(0, stream_context)
44+
ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, stream_context, "null")
4545
ZEND_END_ARG_INFO()
4646

4747
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_hash_final, 0, 1, IS_STRING, 0)

ext/iconv/iconv.c

Lines changed: 36 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1826,20 +1826,22 @@ static void _php_iconv_show_error(php_iconv_err_t err, const char *out_charset,
18261826
Returns the character count of str */
18271827
PHP_FUNCTION(iconv_strlen)
18281828
{
1829-
const char *charset = get_internal_encoding();
1830-
size_t charset_len = 0;
1829+
const char *charset = NULL;
1830+
size_t charset_len;
18311831
zend_string *str;
18321832

18331833
php_iconv_err_t err;
18341834

18351835
size_t retval;
18361836

1837-
if (zend_parse_parameters(ZEND_NUM_ARGS(), "S|s",
1837+
if (zend_parse_parameters(ZEND_NUM_ARGS(), "S|s!",
18381838
&str, &charset, &charset_len) == FAILURE) {
18391839
RETURN_THROWS();
18401840
}
18411841

1842-
if (charset_len >= ICONV_CSNMAXLEN) {
1842+
if (charset == NULL) {
1843+
charset = get_internal_encoding();
1844+
} else if (charset_len >= ICONV_CSNMAXLEN) {
18431845
php_error_docref(NULL, E_WARNING, "Charset parameter exceeds the maximum allowed length of %d characters", ICONV_CSNMAXLEN);
18441846
RETURN_FALSE;
18451847
}
@@ -1858,8 +1860,8 @@ PHP_FUNCTION(iconv_strlen)
18581860
Returns specified part of a string */
18591861
PHP_FUNCTION(iconv_substr)
18601862
{
1861-
const char *charset = get_internal_encoding();
1862-
size_t charset_len = 0;
1863+
const char *charset = NULL;
1864+
size_t charset_len;
18631865
zend_string *str;
18641866
zend_long offset, length = 0;
18651867
zend_bool len_is_null = 1;
@@ -1868,13 +1870,15 @@ PHP_FUNCTION(iconv_substr)
18681870

18691871
smart_str retval = {0};
18701872

1871-
if (zend_parse_parameters(ZEND_NUM_ARGS(), "Sl|l!s",
1873+
if (zend_parse_parameters(ZEND_NUM_ARGS(), "Sl|l!s!",
18721874
&str, &offset, &length, &len_is_null,
18731875
&charset, &charset_len) == FAILURE) {
18741876
RETURN_THROWS();
18751877
}
18761878

1877-
if (charset_len >= ICONV_CSNMAXLEN) {
1879+
if (charset == NULL) {
1880+
charset = get_internal_encoding();
1881+
} else if (charset_len >= ICONV_CSNMAXLEN) {
18781882
php_error_docref(NULL, E_WARNING, "Charset parameter exceeds the maximum allowed length of %d characters", ICONV_CSNMAXLEN);
18791883
RETURN_FALSE;
18801884
}
@@ -1898,8 +1902,8 @@ PHP_FUNCTION(iconv_substr)
18981902
Finds position of first occurrence of needle within part of haystack beginning with offset */
18991903
PHP_FUNCTION(iconv_strpos)
19001904
{
1901-
const char *charset = get_internal_encoding();
1902-
size_t charset_len = 0, haystk_len;
1905+
const char *charset = NULL;
1906+
size_t charset_len, haystk_len;
19031907
zend_string *haystk;
19041908
zend_string *ndl;
19051909
zend_long offset = 0;
@@ -1908,13 +1912,15 @@ PHP_FUNCTION(iconv_strpos)
19081912

19091913
size_t retval;
19101914

1911-
if (zend_parse_parameters(ZEND_NUM_ARGS(), "SS|ls",
1915+
if (zend_parse_parameters(ZEND_NUM_ARGS(), "SS|ls!",
19121916
&haystk, &ndl,
19131917
&offset, &charset, &charset_len) == FAILURE) {
19141918
RETURN_THROWS();
19151919
}
19161920

1917-
if (charset_len >= ICONV_CSNMAXLEN) {
1921+
if (charset == NULL) {
1922+
charset = get_internal_encoding();
1923+
} else if (charset_len >= ICONV_CSNMAXLEN) {
19181924
php_error_docref(NULL, E_WARNING, "Charset parameter exceeds the maximum allowed length of %d characters", ICONV_CSNMAXLEN);
19191925
RETURN_FALSE;
19201926
}
@@ -1953,16 +1959,16 @@ PHP_FUNCTION(iconv_strpos)
19531959
Finds position of last occurrence of needle within part of haystack beginning with offset */
19541960
PHP_FUNCTION(iconv_strrpos)
19551961
{
1956-
const char *charset = get_internal_encoding();
1957-
size_t charset_len = 0;
1962+
const char *charset = NULL;
1963+
size_t charset_len;
19581964
zend_string *haystk;
19591965
zend_string *ndl;
19601966

19611967
php_iconv_err_t err;
19621968

19631969
size_t retval;
19641970

1965-
if (zend_parse_parameters(ZEND_NUM_ARGS(), "SS|s",
1971+
if (zend_parse_parameters(ZEND_NUM_ARGS(), "SS|s!",
19661972
&haystk, &ndl,
19671973
&charset, &charset_len) == FAILURE) {
19681974
RETURN_THROWS();
@@ -1972,7 +1978,9 @@ PHP_FUNCTION(iconv_strrpos)
19721978
RETURN_FALSE;
19731979
}
19741980

1975-
if (charset_len >= ICONV_CSNMAXLEN) {
1981+
if (charset == NULL) {
1982+
charset = get_internal_encoding();
1983+
} else if (charset_len >= ICONV_CSNMAXLEN) {
19761984
php_error_docref(NULL, E_WARNING, "Charset parameter exceeds the maximum allowed length of %d characters", ICONV_CSNMAXLEN);
19771985
RETURN_FALSE;
19781986
}
@@ -2097,21 +2105,23 @@ PHP_FUNCTION(iconv_mime_encode)
20972105
PHP_FUNCTION(iconv_mime_decode)
20982106
{
20992107
zend_string *encoded_str;
2100-
const char *charset = get_internal_encoding();
2101-
size_t charset_len = 0;
2108+
const char *charset = NULL;
2109+
size_t charset_len;
21022110
zend_long mode = 0;
21032111

21042112
smart_str retval = {0};
21052113

21062114
php_iconv_err_t err;
21072115

2108-
if (zend_parse_parameters(ZEND_NUM_ARGS(), "S|ls",
2116+
if (zend_parse_parameters(ZEND_NUM_ARGS(), "S|ls!",
21092117
&encoded_str, &mode, &charset, &charset_len) == FAILURE) {
21102118

21112119
RETURN_THROWS();
21122120
}
21132121

2114-
if (charset_len >= ICONV_CSNMAXLEN) {
2122+
if (charset == NULL) {
2123+
charset = get_internal_encoding();
2124+
} else if (charset_len >= ICONV_CSNMAXLEN) {
21152125
php_error_docref(NULL, E_WARNING, "Charset parameter exceeds the maximum allowed length of %d characters", ICONV_CSNMAXLEN);
21162126
RETURN_FALSE;
21172127
}
@@ -2137,21 +2147,23 @@ PHP_FUNCTION(iconv_mime_decode)
21372147
PHP_FUNCTION(iconv_mime_decode_headers)
21382148
{
21392149
zend_string *encoded_str;
2140-
const char *charset = get_internal_encoding();
2141-
size_t charset_len = 0;
2150+
const char *charset = NULL;
2151+
size_t charset_len;
21422152
zend_long mode = 0;
21432153
char *enc_str_tmp;
21442154
size_t enc_str_len_tmp;
21452155

21462156
php_iconv_err_t err = PHP_ICONV_ERR_SUCCESS;
21472157

2148-
if (zend_parse_parameters(ZEND_NUM_ARGS(), "S|ls",
2158+
if (zend_parse_parameters(ZEND_NUM_ARGS(), "S|ls!",
21492159
&encoded_str, &mode, &charset, &charset_len) == FAILURE) {
21502160

21512161
RETURN_THROWS();
21522162
}
21532163

2154-
if (charset_len >= ICONV_CSNMAXLEN) {
2164+
if (charset == NULL) {
2165+
charset = get_internal_encoding();
2166+
} else if (charset_len >= ICONV_CSNMAXLEN) {
21552167
php_error_docref(NULL, E_WARNING, "Charset parameter exceeds the maximum allowed length of %d characters", ICONV_CSNMAXLEN);
21562168
RETURN_FALSE;
21572169
}

ext/iconv/iconv.stub.php

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,22 @@
22

33
/** @generate-function-entries */
44

5-
function iconv_strlen(string $str, string $charset = UNKNOWN): int|false {}
5+
function iconv_strlen(string $str, ?string $charset = null): int|false {}
66

7-
function iconv_substr(string $str, int $offset, ?int $length = null, string $charset = UNKNOWN): string|false {}
7+
function iconv_substr(string $str, int $offset, ?int $length = null, ?string $charset = null): string|false {}
88

9-
function iconv_strpos(string $haystack, string $needle, int $offset = 0, string $charset = UNKNOWN): int|false {}
9+
function iconv_strpos(string $haystack, string $needle, int $offset = 0, ?string $charset = null): int|false {}
1010

11-
function iconv_strrpos(string $haystack, string $needle, string $charset = UNKNOWN): int|false {}
11+
function iconv_strrpos(string $haystack, string $needle, ?string $charset = null): int|false {}
1212

1313
function iconv_mime_encode(string $field_name, string $field_value, array $preference = []): string|false {}
1414

15-
function iconv_mime_decode(string $encoded_string, int $mode = 0, string $charset = UNKNOWN): string|false {}
15+
function iconv_mime_decode(string $encoded_string, int $mode = 0, ?string $charset = null): string|false {}
1616

17-
function iconv_mime_decode_headers(string $headers, int $mode = 0, string $charset = UNKNOWN): array|false {}
17+
function iconv_mime_decode_headers(string $headers, int $mode = 0, ?string $charset = null): array|false {}
1818

1919
function iconv(string $in_charset, string $out_charset, string $str): string|false {}
2020

2121
function iconv_set_encoding(string $type, string $charset): bool {}
2222

23-
function iconv_get_encoding(string $type = 'all'): array|string|false {}
23+
function iconv_get_encoding(string $type = "all"): array|string|false {}

0 commit comments

Comments
 (0)