[php] Eliminate sprintf to temp buffer to create ZVAL
Use zend_strpprintf() which handles this more cleanly without risk of buffer overflow and without a fixed length limit.
This commit is contained in:
parent
97a109ecc9
commit
d7ed1a8b97
3 changed files with 11 additions and 33 deletions
|
|
@ -240,9 +240,7 @@
|
|||
if ((long long)LONG_MIN <= $1 && $1 <= (long long)LONG_MAX) {
|
||||
RETVAL_LONG((long)($1));
|
||||
} else {
|
||||
char temp[256];
|
||||
sprintf(temp, "%lld", (long long)$1);
|
||||
RETVAL_STRING(temp);
|
||||
RETVAL_NEW_STR(zend_strpprintf(0, "%lld", (long long)$1));
|
||||
}
|
||||
%}
|
||||
%typemap(out, phptype="int|string") unsigned long long
|
||||
|
|
@ -250,9 +248,7 @@
|
|||
if ($1 <= (unsigned long long)LONG_MAX) {
|
||||
RETVAL_LONG((long)($1));
|
||||
} else {
|
||||
char temp[256];
|
||||
sprintf(temp, "%llu", (unsigned long long)$1);
|
||||
RETVAL_STRING(temp);
|
||||
RETVAL_NEW_STR(zend_strpprintf(0, "%llu", (unsigned long long)$1));
|
||||
}
|
||||
%}
|
||||
|
||||
|
|
@ -286,9 +282,7 @@
|
|||
if ((long long)LONG_MIN <= *$1 && *$1 <= (long long)LONG_MAX) {
|
||||
RETVAL_LONG((long)(*$1));
|
||||
} else {
|
||||
char temp[256];
|
||||
sprintf(temp, "%lld", (long long)(*$1));
|
||||
RETVAL_STRING(temp);
|
||||
RETVAL_NEW_STR(zend_strpprintf(0, "%lld", (long long)(*$1)));
|
||||
}
|
||||
%}
|
||||
%typemap(out, phptype="int|string") const unsigned long long &
|
||||
|
|
@ -296,9 +290,7 @@
|
|||
if (*$1 <= (unsigned long long)LONG_MAX) {
|
||||
RETVAL_LONG((long)(*$1));
|
||||
} else {
|
||||
char temp[256];
|
||||
sprintf(temp, "%llu", (unsigned long long)(*$1));
|
||||
RETVAL_STRING(temp);
|
||||
RETVAL_NEW_STR(zend_strpprintf(0, "%llu", (unsigned long long)(*$1)));
|
||||
}
|
||||
%}
|
||||
|
||||
|
|
|
|||
|
|
@ -122,9 +122,7 @@ INT_TYPEMAP(long long);
|
|||
if ((long long)LONG_MIN <= temp$argnum && temp$argnum <= (long long)LONG_MAX) {
|
||||
ZVAL_LONG(&o, (long)temp$argnum);
|
||||
} else {
|
||||
char temp[256];
|
||||
sprintf(temp, "%lld", (long long)temp$argnum);
|
||||
ZVAL_STRING(&o, temp);
|
||||
ZVAL_NEW_STR(&o, zend_strpprintf(0, "%lld", (long long)temp$argnum));
|
||||
}
|
||||
t_output_helper($result, &o);
|
||||
}
|
||||
|
|
@ -138,9 +136,7 @@ INT_TYPEMAP(long long);
|
|||
if ((long long)LONG_MIN <= lvalue$argnum && lvalue$argnum <= (long long)LONG_MAX) {
|
||||
ZVAL_LONG(&$arg, (long)temp$argnum);
|
||||
} else {
|
||||
char temp[256];
|
||||
sprintf(temp, "%lld", (long long)lvalue$argnum);
|
||||
ZVAL_STRING(&$arg, temp);
|
||||
ZVAL_NEW_STR(&$arg, zend_strpprintf(0, "%lld", (long long)lvalue$argnum));
|
||||
}
|
||||
%}
|
||||
%typemap(argout) long long &OUTPUT
|
||||
|
|
@ -148,9 +144,7 @@ INT_TYPEMAP(long long);
|
|||
if ((long long)LONG_MIN <= *arg$argnum && *arg$argnum <= (long long)LONG_MAX) {
|
||||
ZVAL_LONG($result, (long)(*arg$argnum));
|
||||
} else {
|
||||
char temp[256];
|
||||
sprintf(temp, "%lld", (long long)(*arg$argnum));
|
||||
ZVAL_STRING($result, temp);
|
||||
ZVAL_NEW_STR($result, zend_strpprintf(0, "%lld", (long long)(*arg$argnum)));
|
||||
}
|
||||
%}
|
||||
|
||||
|
|
@ -161,9 +155,7 @@ INT_TYPEMAP(unsigned long long);
|
|||
if (temp$argnum <= (unsigned long long)LONG_MAX) {
|
||||
ZVAL_LONG(&o, temp$argnum);
|
||||
} else {
|
||||
char temp[256];
|
||||
sprintf(temp, "%llu", (unsigned long long)temp$argnum);
|
||||
ZVAL_STRING(&o, temp);
|
||||
ZVAL_NEW_STR(&o, zend_strpprintf(0, "%llu", (unsigned long long)temp$argnum));
|
||||
}
|
||||
t_output_helper($result, &o);
|
||||
}
|
||||
|
|
@ -177,9 +169,7 @@ INT_TYPEMAP(unsigned long long);
|
|||
if (lvalue$argnum <= (unsigned long long)LONG_MAX) {
|
||||
ZVAL_LONG($arg, (long)(lvalue$argnum));
|
||||
} else {
|
||||
char temp[256];
|
||||
sprintf(temp, "%llu", (unsigned long long)lvalue$argnum);
|
||||
ZVAL_STRING((*$arg), temp);
|
||||
ZVAL_NEW_STR((*$arg), zend_strpprintf(0, "%llu", (unsigned long long)lvalue$argnum));
|
||||
}
|
||||
%}
|
||||
%typemap(argout) unsigned long long &OUTPUT
|
||||
|
|
@ -187,9 +177,7 @@ INT_TYPEMAP(unsigned long long);
|
|||
if (*arg$argnum <= (unsigned long long)LONG_MAX) {
|
||||
ZVAL_LONG($result, (long)(*arg$argnum));
|
||||
} else {
|
||||
char temp[256];
|
||||
sprintf(temp, "%llu", (unsigned long long)(*arg$argnum));
|
||||
ZVAL_STRING($result, temp);
|
||||
ZVAL_NEW_STR($result, zend_strpprintf(0, "%llu", (unsigned long long)(*arg$argnum)));
|
||||
}
|
||||
%}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue