summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Zend/zend_reflection_api.c19
-rw-r--r--ext/reflection/php_reflection.c19
2 files changed, 20 insertions, 18 deletions
diff --git a/Zend/zend_reflection_api.c b/Zend/zend_reflection_api.c
index 4df1f9d438..21c8bf95f7 100644
--- a/Zend/zend_reflection_api.c
+++ b/Zend/zend_reflection_api.c
@@ -80,17 +80,18 @@ string *string_printf(string *str, const char *format, ...)
{
int n;
va_list arg;
- va_start(arg, format);
- n = vsnprintf(str->string + str->len - 1, str->alloced - str->len, format, arg);
- if (n > str->alloced - str->len) {
- while (n + str->len > str->alloced ) {
- str->alloced *= 2;
- }
- str->string = erealloc(str->string, str->alloced + 1);
- n = vsnprintf(str->string + str->len - 1, str->alloced - str->len, format, arg);
+ char *s_tmp;
+
+ va_start(arg, format);
+ n = zend_vspprintf(&s_tmp, 0, format, arg);
+ if (n) {
+ str->alloced += n;
+ str->string = erealloc(str->string, str->alloced);
+ memcpy(str->string + str->len - 1, s_tmp, n);
+ str->len += n;
}
+ efree(s_tmp);
va_end(arg);
- str->len += n;
return str;
}
diff --git a/ext/reflection/php_reflection.c b/ext/reflection/php_reflection.c
index 4df1f9d438..21c8bf95f7 100644
--- a/ext/reflection/php_reflection.c
+++ b/ext/reflection/php_reflection.c
@@ -80,17 +80,18 @@ string *string_printf(string *str, const char *format, ...)
{
int n;
va_list arg;
- va_start(arg, format);
- n = vsnprintf(str->string + str->len - 1, str->alloced - str->len, format, arg);
- if (n > str->alloced - str->len) {
- while (n + str->len > str->alloced ) {
- str->alloced *= 2;
- }
- str->string = erealloc(str->string, str->alloced + 1);
- n = vsnprintf(str->string + str->len - 1, str->alloced - str->len, format, arg);
+ char *s_tmp;
+
+ va_start(arg, format);
+ n = zend_vspprintf(&s_tmp, 0, format, arg);
+ if (n) {
+ str->alloced += n;
+ str->string = erealloc(str->string, str->alloced);
+ memcpy(str->string + str->len - 1, s_tmp, n);
+ str->len += n;
}
+ efree(s_tmp);
va_end(arg);
- str->len += n;
return str;
}