diff options
author | Olly Betts <olly@survex.com> | 2022-06-09 09:06:12 +1200 |
---|---|---|
committer | Olly Betts <olly@survex.com> | 2022-06-09 09:06:12 +1200 |
commit | d7ed1a8b97cb0c4e3c27167a85d165990f15ca31 (patch) | |
tree | 7c04a099580f301c24bb72e20804c6e928662e36 /Lib/php | |
parent | 97a109ecc9bc6f6cd8575b052d753ad78c2b96bd (diff) | |
download | swig-d7ed1a8b97cb0c4e3c27167a85d165990f15ca31.tar.gz |
[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.
Diffstat (limited to 'Lib/php')
-rw-r--r-- | Lib/php/php.swg | 16 | ||||
-rw-r--r-- | Lib/php/typemaps.i | 24 |
2 files changed, 10 insertions, 30 deletions
diff --git a/Lib/php/php.swg b/Lib/php/php.swg index bf388a75a..ffcffde70 100644 --- a/Lib/php/php.swg +++ b/Lib/php/php.swg @@ -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))); } %} diff --git a/Lib/php/typemaps.i b/Lib/php/typemaps.i index 321b1202c..2f7819097 100644 --- a/Lib/php/typemaps.i +++ b/Lib/php/typemaps.i @@ -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))); } %} |