[libvirt] [php PATCH] Use long variable type for zend_parse_parameters.

Michal Novotny mignov at gmail.com
Wed Jun 18 18:38:37 UTC 2014


Hi Dawid,

I've applied it to the libvirt-php git repository.

See:
http://libvirt.org/git/?p=libvirt-php.git;a=commit;h=d3b3afa7d37541984d1e80e4ab46cd3e582ea60d

Thanks,
Michal


2014-06-18 19:11 GMT+02:00 Dawid Zamirski <dzamirski at dattobackup.com>:


2014-06-18 19:11 GMT+02:00 Dawid Zamirski <dzamirski at dattobackup.com>:

> This patch fixes a bug where zend_parse_parameters would segfault on
> certain PHP version (spotted on PHP 5.3.2 64bit) where type specifier is
> long "l" and variable reference is int or unsigned int. Changing the
> variable type from int or unsigned int to long fixes the problem for me
> and is a known issue [1]. This did not happen in newer PHP version
> (5.3.10).
>
> [1] https://bugs.php.net/bug.php?id=59289
> ---
>  src/libvirt-php.c | 32 ++++++++++++++++----------------
>  1 file changed, 16 insertions(+), 16 deletions(-)
>
> diff --git a/src/libvirt-php.c b/src/libvirt-php.c
> index 07ae137..224943d 100644
> --- a/src/libvirt-php.c
> +++ b/src/libvirt-php.c
> @@ -3283,8 +3283,8 @@ PHP_FUNCTION(libvirt_domain_get_metadata)
>  {
>         php_libvirt_domain *domain = NULL;
>         zval *zdomain;
> -       int type = 0;
> -       unsigned int flags = 0;
> +       long type = 0;
> +       long flags = 0;
>         char *uri = NULL;
>         int uri_len;
>         char *ret = NULL;
> @@ -3328,8 +3328,8 @@ PHP_FUNCTION(libvirt_domain_set_metadata)
>         char *metadata = NULL;
>         char *key = NULL;
>         char *uri = NULL;
> -       int type = 0;
> -       unsigned int flags = 0;
> +       long type = 0;
> +       long flags = 0;
>         int rc;
>
>         GET_DOMAIN_FROM_ARGS ("rlsssl", &zdomain, &type, &metadata,
> &metadata_len, &key, &key_len, &uri, &uri_len, &flags);
> @@ -3566,7 +3566,7 @@ PHP_FUNCTION(libvirt_domain_get_screenshot_api)
>  {
>         php_libvirt_domain *domain=NULL;
>         zval *zdomain;
> -       unsigned int screen = 0;
> +       long screen = 0;
>         int fd = -1;
>         char file[] = "/tmp/libvirt-php-tmp-XXXXXX";
>         virStreamPtr st = NULL;
> @@ -3668,7 +3668,7 @@ PHP_FUNCTION(libvirt_domain_get_screenshot)
>         int port = -1;
>         char *hostname = NULL;
>         int hostname_len;
> -       int scancode = 10;
> +       long scancode = 10;
>         char *path;
>         char name[1024] = { 0 };
>         int use_builtin = 0;
> @@ -3908,9 +3908,9 @@ PHP_FUNCTION(libvirt_domain_send_pointer_event)
>         char *xml = NULL;
>         char *hostname = NULL;
>         int hostname_len;
> -       int pos_x = 0;
> -       int pos_y = 0;
> -       int clicked = 0;
> +       long pos_x = 0;
> +       long pos_y = 0;
> +       long clicked = 0;
>         int release = 1;
>         int ret;
>
> @@ -4352,12 +4352,12 @@ PHP_FUNCTION(libvirt_domain_new)
>         // char *emulator;
>         char *iso_image = NULL;
>         int iso_image_len;
> -       int vcpus = -1;
> -       int memMB = -1;
> +       long vcpus = -1;
> +       long memMB = -1;
>         zval *disks, *networks;
>         tVMDisk *vmDisks = NULL;
>         tVMNetwork *vmNetworks = NULL;
> -       int maxmemMB = -1;
> +       long maxmemMB = -1;
>         HashTable *arr_hash;
>         int numDisks, numNets, i;
>         zval **data; // removed **zvalue
> @@ -4642,7 +4642,7 @@ PHP_FUNCTION(libvirt_domain_get_interface_devices)
>  */
>  PHP_FUNCTION(libvirt_domain_change_vcpus)
>  {
> -       int numCpus, flags = 0;
> +       long numCpus, flags = 0;
>         php_libvirt_domain *domain=NULL;
>         zval *zdomain;
>
> @@ -6266,7 +6266,7 @@ PHP_FUNCTION(libvirt_domain_snapshot_delete)
>  {
>         zval *zsnapshot;
>         php_libvirt_snapshot *snapshot;
> -       int flags = 0;
> +       long flags = 0;
>         int retval;
>
>         GET_SNAPSHOT_FROM_ARGS("r|l",&zsnapshot, &flags);
> @@ -6766,7 +6766,7 @@ PHP_FUNCTION(libvirt_storagevolume_delete)
>  {
>         php_libvirt_volume *volume=NULL;
>         zval *zvolume;
> -       int flags = 0;
> +       long flags = 0;
>         int retval = 0;
>
>         GET_VOLUME_FROM_ARGS("r|l",&zvolume,&flags);
> @@ -7057,7 +7057,7 @@ PHP_FUNCTION(libvirt_storagepool_refresh)
>  {
>         php_libvirt_storagepool *pool = NULL;
>         zval *zpool;
> -       unsigned long flags = 0;
> +       long flags = 0;
>         int retval;
>
>         GET_STORAGEPOOL_FROM_ARGS ("r|l", &zpool, &flags);
> --
> 1.9.3
>
> --
> libvir-list mailing list
> libvir-list at redhat.com
> https://www.redhat.com/mailman/listinfo/libvir-list
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20140618/83790c48/attachment-0001.htm>


More information about the libvir-list mailing list