Skip to content

Commit c3514e9

Browse files
committed
Fix instanceof type aliases for PHP 7.x in live debugger DSL
PHP 7.x returns "integer" for IS_LONG and "double" for IS_DOUBLE from zend_zval_type_name(), while the debugger DSL uses "int" and "float". Add alias normalization so instanceof checks work across PHP versions.
1 parent 68e11c7 commit c3514e9

1 file changed

Lines changed: 13 additions & 1 deletion

File tree

ext/live_debugger.c

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1591,7 +1591,19 @@ static bool dd_eval_instanceof(void *ctx, const void *zvp, const ddog_CharSlice
15911591
{
15921592
name = zend_zval_type_name(zv);
15931593
}
1594-
return zend_binary_strcasecmp(name, strlen(name), class->ptr, class->len) == 0;
1594+
if (zend_binary_strcasecmp(name, strlen(name), class->ptr, class->len) == 0) {
1595+
return true;
1596+
}
1597+
// PHP 7.x returns "integer"/"double"; normalize aliases for DSL compatibility
1598+
if (Z_TYPE_P(zv) == IS_LONG) {
1599+
return zend_binary_strcasecmp(ZEND_STRL("int"), class->ptr, class->len) == 0
1600+
|| zend_binary_strcasecmp(ZEND_STRL("integer"), class->ptr, class->len) == 0;
1601+
}
1602+
if (Z_TYPE_P(zv) == IS_DOUBLE) {
1603+
return zend_binary_strcasecmp(ZEND_STRL("float"), class->ptr, class->len) == 0
1604+
|| zend_binary_strcasecmp(ZEND_STRL("double"), class->ptr, class->len) == 0;
1605+
}
1606+
return false;
15951607
}
15961608

15971609
const ddog_Evaluator dd_evaluator = {

0 commit comments

Comments
 (0)