[PECL-CVS] [pecl-authentication-krb5] master: Merge branch 'master' into feature/minimum-php70

[email protected] (Tim van Dijen via GitHub) Mon, 8 Jun 2026 15:49:49 +0000
Newsgroups php.pecl.cvs
Message-ID <6g1o1krWaoTWHc7ltTeY7EYeyk6wC2wQ95jYbWwv07w@main.internal.php.net>
Author: Tim van Dijen (tvdijen)
Committer: GitHub (web-flow)
Pusher: mbechler
Date: 2024-07-08T09:27:43+02:00

Commit: https://github.com/php/pecl-authentication-krb5/commit/7f7e5ab87380e8f982e985200668f58b1f169cee
Raw diff: https://github.com/php/pecl-authentication-krb5/commit/7f7e5ab87380e8f982e985200668f58b1f169cee.diff

Merge branch 'master' into feature/minimum-php70

Changed paths:
  M  channel.c
  M  negotiate_auth.c


Diff:

diff --git a/channel.c b/channel.c
index eab9faa..7b7b11c 100644
--- a/channel.c
+++ b/channel.c
@@ -217,8 +217,12 @@ PHP_METHOD(GSSAPIChannelBinding, setApplicationData)
 	} else {
 		zend_string *data = zval_get_string(zdata);
 		object->data.application_data.length = data->len;
+		if ( object->data.application_data.value ) {
+                        efree(object->data.application_data.value);
+		}
 		object->data.application_data.value = emalloc(data->len);
 		memcpy(object->data.application_data.value, data->val, data->len);
+		zend_string_release(data);
 	}
 }
 /* }}} */
@@ -247,8 +251,12 @@ PHP_METHOD(GSSAPIChannelBinding, setInitiatorAddress)
 	} else {
 		zend_string *data = zval_get_string(zdata);
 		object->data.initiator_address.length = data->len;
+		if ( object->data.initiator_address.value ) {
+			efree(object->data.initiator_address.value);
+		}
 		object->data.initiator_address.value = emalloc(data->len);
 		memcpy(object->data.initiator_address.value, data->val, data->len);
+		zend_string_release(data);
 	}
 }
 /* }}} */
@@ -277,8 +285,12 @@ PHP_METHOD(GSSAPIChannelBinding, setAcceptorAddress)
 	} else {
 		zend_string *data = zval_get_string(zdata);
 		object->data.acceptor_address.length = data->len;
+		if ( object->data.acceptor_address.value ) {
+			efree(object->data.acceptor_address.value);
+		}
 		object->data.acceptor_address.value = emalloc(data->len);
 		memcpy(object->data.acceptor_address.value, data->val, data->len);
+		zend_string_release(data);
 	}
 }
 /* }}} */
diff --git a/negotiate_auth.c b/negotiate_auth.c
index 61e270e..080bbe4 100644
--- a/negotiate_auth.c
+++ b/negotiate_auth.c
@@ -38,7 +38,7 @@ typedef struct _krb5_negotiate_auth_object {
 	gss_name_t authed_user;
 	gss_cred_id_t delegated;
 	zend_bool channel_bound;
-	zval* chan_bindings;
+	zval chan_bindings;
 #ifdef HAVE_GSS_ACQUIRE_CRED_FROM
 	gss_key_value_set_desc cred_store;
 #endif
@@ -88,9 +88,8 @@ static void php_krb5_negotiate_auth_object_free_data(krb5_negotiate_auth_object*
 		free(object->servname);
 	}
 
-	if ( object->chan_bindings ) {
-		Z_DELREF_P(object->chan_bindings);
-		object->chan_bindings = NULL;
+	if ( Z_TYPE(object->chan_bindings) != IS_NULL ) {
+		zval_ptr_dtor(&object->chan_bindings);
 	}
 
 	if ( object->delegated != GSS_C_NO_CREDENTIAL ) {
@@ -124,7 +123,6 @@ static void setup_negotiate_auth(krb5_negotiate_auth_object *object TSRMLS_DC) {
 	object->authed_user = GSS_C_NO_NAME;
 	object->servname = GSS_C_NO_NAME;
 	object->delegated = GSS_C_NO_CREDENTIAL;
-	object->chan_bindings = NULL;
 }
 
 /* {{{ */
@@ -137,6 +135,7 @@ zend_object *php_krb5_negotiate_auth_object_new(zend_class_entry *ce TSRMLS_DC)
 
 	zend_object_std_init(&object->std, ce TSRMLS_CC);
 	object_properties_init(&object->std, ce);
+	ZVAL_NULL(&object->chan_bindings);
 	object->std.handlers = &krb5_negotiate_auth_handlers;
 	return &object->std;
 }
@@ -191,8 +190,7 @@ PHP_METHOD(KRB5NegotiateAuth, __construct)
 #endif
 
 	if (zchannel != NULL) {
-		Z_ADDREF_P(zchannel);
-		object->chan_bindings = zchannel;
+		ZVAL_OBJ_COPY(&object->chan_bindings, Z_OBJ_P(zchannel));
 	}
 
 
@@ -356,8 +354,8 @@ PHP_METHOD(KRB5NegotiateAuth, doAuthentication)
 	input_token.length = token->len;
 	input_token.value = token->val;
 
-	if ( object->chan_bindings != NULL ) {
-		krb5_gss_channel_object *zchannelobj = KRB5_GSS_CHANNEL(object->chan_bindings);
+	if ( Z_TYPE(object->chan_bindings) != IS_NULL ) {
+		krb5_gss_channel_object *zchannelobj = KRB5_GSS_CHANNEL(&object->chan_bindings);
                 chan_bindings = &zchannelobj->data;
 	}