Skip to content

Commit 86bdc84

Browse files
committed
Return null from getTokenName() if token unknown
1 parent 2bca555 commit 86bdc84

File tree

6 files changed

+24
-8
lines changed

6 files changed

+24
-8
lines changed

ext/tokenizer/tests/PhpToken_methods.phpt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,10 @@ try {
7070
echo $e->getMessage(), "\n";
7171
}
7272

73+
echo "\nName of unknown token:\n";
74+
$token = new PhpToken(100000, "foo");
75+
var_dump($token->getTokenName());
76+
7377
?>
7478
--EXPECT--
7579
[ 0] T_OPEN_TAG ignorable
@@ -110,3 +114,6 @@ Typed property PhpToken::$id must not be accessed before initialization
110114
Typed property PhpToken::$text must not be accessed before initialization
111115
Typed property PhpToken::$id must not be accessed before initialization
112116
Typed property PhpToken::$text must not be accessed before initialization
117+
118+
Name of unknown token:
119+
NULL

ext/tokenizer/tokenizer.c

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -237,7 +237,12 @@ PHP_METHOD(PhpToken, getTokenName)
237237
if (Z_LVAL_P(id_zval) < 256) {
238238
RETURN_INTERNED_STR(ZSTR_CHAR(Z_LVAL_P(id_zval)));
239239
} else {
240-
RETURN_STRING(get_token_type_name(Z_LVAL_P(id_zval)));
240+
const char *token_name = get_token_type_name(Z_LVAL_P(id_zval));
241+
if (!token_name) {
242+
RETURN_NULL();
243+
}
244+
245+
RETURN_STRING(token_name);
241246
}
242247
}
243248

@@ -531,6 +536,10 @@ PHP_FUNCTION(token_name)
531536
Z_PARAM_LONG(type)
532537
ZEND_PARSE_PARAMETERS_END();
533538

534-
RETVAL_STRING(get_token_type_name(type));
539+
const char *token_name = get_token_type_name(type);
540+
if (!token_name) {
541+
token_name = "UNKNOWN";
542+
}
543+
RETURN_STRING(token_name);
535544
}
536545
/* }}} */

ext/tokenizer/tokenizer.stub.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,5 @@ public function is($kind): bool;
1515

1616
public function isIgnorable(): bool;
1717

18-
public function getTokenName(): string;
18+
public function getTokenName(): ?string;
1919
}

ext/tokenizer/tokenizer_arginfo.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,5 +28,5 @@ ZEND_END_ARG_INFO()
2828
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_PhpToken_isIgnorable, 0, 0, _IS_BOOL, 0)
2929
ZEND_END_ARG_INFO()
3030

31-
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_PhpToken_getTokenName, 0, 0, IS_STRING, 0)
31+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_PhpToken_getTokenName, 0, 0, IS_STRING, 1)
3232
ZEND_END_ARG_INFO()

ext/tokenizer/tokenizer_data.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,6 @@ void tokenizer_register_constants(INIT_FUNC_ARGS) {
7070
REGISTER_LONG_CONSTANT("T_BOOL_CAST", T_BOOL_CAST, CONST_CS | CONST_PERSISTENT);
7171
REGISTER_LONG_CONSTANT("T_UNSET_CAST", T_UNSET_CAST, CONST_CS | CONST_PERSISTENT);
7272
REGISTER_LONG_CONSTANT("T_POW", T_POW, CONST_CS | CONST_PERSISTENT);
73-
REGISTER_LONG_CONSTANT("T_NEW", T_NEW, CONST_CS | CONST_PERSISTENT);
7473
REGISTER_LONG_CONSTANT("T_CLONE", T_CLONE, CONST_CS | CONST_PERSISTENT);
7574
REGISTER_LONG_CONSTANT("T_ELSEIF", T_ELSEIF, CONST_CS | CONST_PERSISTENT);
7675
REGISTER_LONG_CONSTANT("T_ELSE", T_ELSE, CONST_CS | CONST_PERSISTENT);
@@ -86,6 +85,7 @@ void tokenizer_register_constants(INIT_FUNC_ARGS) {
8685
REGISTER_LONG_CONSTANT("T_EVAL", T_EVAL, CONST_CS | CONST_PERSISTENT);
8786
REGISTER_LONG_CONSTANT("T_INC", T_INC, CONST_CS | CONST_PERSISTENT);
8887
REGISTER_LONG_CONSTANT("T_DEC", T_DEC, CONST_CS | CONST_PERSISTENT);
88+
REGISTER_LONG_CONSTANT("T_NEW", T_NEW, CONST_CS | CONST_PERSISTENT);
8989
REGISTER_LONG_CONSTANT("T_EXIT", T_EXIT, CONST_CS | CONST_PERSISTENT);
9090
REGISTER_LONG_CONSTANT("T_IF", T_IF, CONST_CS | CONST_PERSISTENT);
9191
REGISTER_LONG_CONSTANT("T_ENDIF", T_ENDIF, CONST_CS | CONST_PERSISTENT);
@@ -213,7 +213,6 @@ char *get_token_type_name(int token_type)
213213
case T_BOOL_CAST: return "T_BOOL_CAST";
214214
case T_UNSET_CAST: return "T_UNSET_CAST";
215215
case T_POW: return "T_POW";
216-
case T_NEW: return "T_NEW";
217216
case T_CLONE: return "T_CLONE";
218217
case T_ELSEIF: return "T_ELSEIF";
219218
case T_ELSE: return "T_ELSE";
@@ -229,6 +228,7 @@ char *get_token_type_name(int token_type)
229228
case T_EVAL: return "T_EVAL";
230229
case T_INC: return "T_INC";
231230
case T_DEC: return "T_DEC";
231+
case T_NEW: return "T_NEW";
232232
case T_EXIT: return "T_EXIT";
233233
case T_IF: return "T_IF";
234234
case T_ENDIF: return "T_ENDIF";
@@ -306,6 +306,6 @@ char *get_token_type_name(int token_type)
306306
case T_BAD_CHARACTER: return "T_BAD_CHARACTER";
307307

308308
}
309-
return "UNKNOWN";
309+
return NULL;
310310
}
311311

ext/tokenizer/tokenizer_data_gen.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ awk '
7171

7272
echo '
7373
}
74-
return "UNKNOWN";
74+
return NULL;
7575
}
7676
' >> $outfile
7777

0 commit comments

Comments
 (0)