diff --git a/kafka_error_exception.c b/kafka_error_exception.c index f740a0d..005d11b 100644 --- a/kafka_error_exception.c +++ b/kafka_error_exception.c @@ -34,9 +34,9 @@ void create_kafka_error(zval *return_value, const rd_kafka_error_t *error) /* {{ { object_init_ex(return_value, ce_kafka_error); - zend_string *message = zend_strpprintf(0, "%s (RD_KAFKA_RESP_ERR_%s)", rd_kafka_error_string(error), rd_kafka_error_name(error)); - zend_update_property_str(ce_kafka_error, Z_RDKAFKA_PROP_OBJ(return_value), ZEND_STRL("message"), message); - zend_string_release(message); + char message[1024]; + snprintf(message, sizeof(message), "%s (RD_KAFKA_RESP_ERR_%s)", rd_kafka_error_string(error), rd_kafka_error_name(error)); + zend_update_property_string(ce_kafka_error, Z_RDKAFKA_PROP_OBJ(return_value), ZEND_STRL("message"), message); zend_update_property_long(ce_kafka_error, Z_RDKAFKA_PROP_OBJ(return_value), ZEND_STRL("code"), rd_kafka_error_code(error)); zend_update_property_string(ce_kafka_error, Z_RDKAFKA_PROP_OBJ(return_value), ZEND_STRL("error_string"), rd_kafka_error_string(error)); diff --git a/php_rdkafka_priv.h b/php_rdkafka_priv.h index 695a273..ee6b440 100644 --- a/php_rdkafka_priv.h +++ b/php_rdkafka_priv.h @@ -79,7 +79,21 @@ static zend_always_inline void *zend_object_alloc(size_t obj_size, zend_class_en memset(obj, 0, obj_size - sizeof(zval)); return obj; } -#endif + +static zend_always_inline zend_string *zval_get_tmp_string(zval *op, zend_string **tmp) { + if (EXPECTED(Z_TYPE_P(op) == IS_STRING)) { + *tmp = NULL; + return Z_STR_P(op); + } else { + return *tmp = _zval_get_string_func(op); + } +} +static zend_always_inline void zend_tmp_string_release(zend_string *tmp) { + if (UNEXPECTED(tmp)) { + zend_string_release(tmp); + } +} +#endif // PHP_MINOR_VERSION < 3 #endif // PHP 7 diff --git a/rdkafka.c b/rdkafka.c index 2826c9c..a3c0410 100644 --- a/rdkafka.c +++ b/rdkafka.c @@ -482,9 +482,7 @@ PHP_METHOD(RdKafka, oauthbearerSetToken) zend_string *tmp_extension_val_str; zend_string *extension_val_str = zval_get_tmp_string(extension_zval, &tmp_extension_val_str); extensions[pos++] = estrdup(ZSTR_VAL(extension_val_str)); - if (tmp_extension_val_str) { - zend_string_release(tmp_extension_val_str); - } + zend_tmp_string_release(tmp_extension_val_str); } ZEND_HASH_FOREACH_END(); } diff --git a/tests/oauthbearer_integration.phpt b/tests/oauthbearer_integration.phpt index 036d229..e2b5317 100644 --- a/tests/oauthbearer_integration.phpt +++ b/tests/oauthbearer_integration.phpt @@ -20,7 +20,7 @@ function generateJws($scope = 'required-scope', $expiresInSeconds = 60) $principal, $expirySeconds, $nowSeconds - 10, - $scope, + $scope ); $headerJwsSegment = 'eyJhbGciOiJub25lIn0'; $claimsJwsSegment = base64_encode($claimsJson);