Convert all functions to use objects and drop a resource (#64)

This is a breaking changes but impact should be quite small - only users
that use is_resource will need to update code.
This commit is contained in:
Jakub Zelenka 2026-01-07 19:59:02 +01:00 committed by GitHub
parent 5081dab5fc
commit 9ccd9aadfa
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 111 additions and 105 deletions

View file

@ -2,7 +2,8 @@
List of all features for the release
## 1.6.0
## 2.0.0
- Convert all functions to use objects and drop resource
- Removed compatibility with PHP 7.1 and older.
## 1.5.4

View file

@ -2,8 +2,9 @@
This document lists backward incompatible change in the extension
## 1.6.0
## 2.0.0
- minimal PHP version bumped to 7.2
- gnupg resource has been removed and the object is used instead in all functions
## 1.5.0
- no backward incompatible changes

210
gnupg.c
View file

@ -27,8 +27,6 @@
#include "php_gnupg_keylistiterator.h"
static int le_gnupg;
static zend_class_entry *gnupg_class_entry;
static zend_object_handlers gnupg_object_handlers;
@ -44,7 +42,6 @@ static inline gnupg_object *gnupg_object_from_zobj(zend_object *obj) {
#define GNUPG_GETOBJ() \
zval *this = getThis(); \
gnupg_object *intern = NULL; \
zval *res = NULL; \
do { \
if (this) { \
intern = Z_GNUPG_P(this); \
@ -57,9 +54,6 @@ static inline gnupg_object *gnupg_object_from_zobj(zend_object *obj) {
} while (0)
/* }}} */
#define GNUPG_RES_FETCH() \
intern = (gnupg_object *) zend_fetch_resource(Z_RES_P(res), "ctx", le_gnupg)
/* {{{ GNUPG_ERR */
#define GNUPG_ERR(error) \
if (intern) { \
@ -177,15 +171,6 @@ static void php_gnupg_make(gnupg_object *intern, zval *options)
}
/* }}} */
/* {{{ php_gnupg_res_dtor */
static void php_gnupg_res_dtor(zend_resource *rsrc)
{
gnupg_object *intern = rsrc->ptr;
php_gnupg_free(intern);
efree(intern);
}
/* }}} */
/* {{{ free gnupg object */
static void gnupg_object_free(zend_object *object)
{
@ -356,9 +341,9 @@ const zend_function_entry gnupg_methods[] = {
};
/* }}} */
/* {{{ arginfo for gnupg function with no parameter */
/* {{{ arginfo for gnupg function with gnupg parameter */
ZEND_BEGIN_ARG_INFO(arginfo_gnupg_void_function, 0)
ZEND_ARG_INFO(0, res)
ZEND_ARG_OBJ_INFO(0, gnupg, gnupg, 0)
ZEND_END_ARG_INFO()
/* }}} */
@ -370,35 +355,35 @@ ZEND_END_ARG_INFO()
/* {{{ arginfo for gnupg function with armor parameter */
ZEND_BEGIN_ARG_INFO(arginfo_gnupg_armor_function, 0)
ZEND_ARG_INFO(0, res)
ZEND_ARG_OBJ_INFO(0, gnupg, gnupg, 0)
ZEND_ARG_INFO(0, armor)
ZEND_END_ARG_INFO()
/* }}} */
/* {{{ arginfo for gnupg functions with enctext parameter */
ZEND_BEGIN_ARG_INFO(arginfo_gnupg_enctext_function, 0)
ZEND_ARG_INFO(0, res)
ZEND_ARG_OBJ_INFO(0, gnupg, gnupg, 0)
ZEND_ARG_INFO(0, enctext)
ZEND_END_ARG_INFO()
/* }}} */
/* {{{ arginfo for gnupg functions with text parameter */
ZEND_BEGIN_ARG_INFO(arginfo_gnupg_text_function, 0)
ZEND_ARG_INFO(0, res)
ZEND_ARG_OBJ_INFO(0, gnupg, gnupg, 0)
ZEND_ARG_INFO(0, text)
ZEND_END_ARG_INFO()
/* }}} */
/* {{{ arginfo for gnupg functions with key parameter */
ZEND_BEGIN_ARG_INFO(arginfo_gnupg_key_function, 0)
ZEND_ARG_INFO(0, res)
ZEND_ARG_OBJ_INFO(0, gnupg, gnupg, 0)
ZEND_ARG_INFO(0, key)
ZEND_END_ARG_INFO()
/* }}} */
/* {{{ arginfo for gnupg functions with deletekey parameter */
ZEND_BEGIN_ARG_INFO_EX(arginfo_gnupg_deletekey_function, 0, 0, 2)
ZEND_ARG_INFO(0, res)
ZEND_ARG_OBJ_INFO(0, gnupg, gnupg, 0)
ZEND_ARG_INFO(0, key)
ZEND_ARG_INFO(0, allow_secret)
ZEND_END_ARG_INFO()
@ -406,7 +391,7 @@ ZEND_END_ARG_INFO()
/* {{{ arginfo for gnupg functions with adddecryptkey parameter */
ZEND_BEGIN_ARG_INFO(arginfo_gnupg_key_passphrase_function, 0)
ZEND_ARG_INFO(0, res)
ZEND_ARG_OBJ_INFO(0, gnupg, gnupg, 0)
ZEND_ARG_INFO(0, key)
ZEND_ARG_INFO(0, passphrase)
ZEND_END_ARG_INFO()
@ -414,14 +399,14 @@ ZEND_END_ARG_INFO()
/* {{{ arginfo for gnupg functions with keyid parameter */
ZEND_BEGIN_ARG_INFO(arginfo_gnupg_keyid_function, 0)
ZEND_ARG_INFO(0, res)
ZEND_ARG_OBJ_INFO(0, gnupg, gnupg, 0)
ZEND_ARG_INFO(0, keyid)
ZEND_END_ARG_INFO()
/* }}} */
/* {{{ arginfo for gnupg_keyinfo function */
ZEND_BEGIN_ARG_INFO_EX(arginfo_gnupg_keyinfo_function, 0, 0, 2)
ZEND_ARG_INFO(0, res)
ZEND_ARG_OBJ_INFO(0, gnupg, gnupg, 0)
ZEND_ARG_INFO(0, pattern)
ZEND_ARG_INFO(0, secret_only)
ZEND_END_ARG_INFO()
@ -429,28 +414,28 @@ ZEND_END_ARG_INFO()
/* {{{ arginfo for gnupg functions with pattern parameter */
ZEND_BEGIN_ARG_INFO(arginfo_gnupg_pattern_function, 0)
ZEND_ARG_INFO(0, res)
ZEND_ARG_OBJ_INFO(0, gnupg, gnupg, 0)
ZEND_ARG_INFO(0, pattern)
ZEND_END_ARG_INFO()
/* }}} */
/* {{{ arginfo for gnupg functions with errmode parameter */
ZEND_BEGIN_ARG_INFO(arginfo_gnupg_errmode_function, 0)
ZEND_ARG_INFO(0, res)
ZEND_ARG_OBJ_INFO(0, gnupg, gnupg, 0)
ZEND_ARG_INFO(0, errormode)
ZEND_END_ARG_INFO()
/* }}} */
/* {{{ arginfo for gnupg functions with signmode parameter */
ZEND_BEGIN_ARG_INFO(arginfo_gnupg_signmode_function, 0)
ZEND_ARG_INFO(0, res)
ZEND_ARG_OBJ_INFO(0, gnupg, gnupg, 0)
ZEND_ARG_INFO(0, signmode)
ZEND_END_ARG_INFO()
/* }}} */
/* {{{ arginfo gnupg_verify_function */
ZEND_BEGIN_ARG_INFO_EX(arginfo_gnupg_verify_function, 0, 0, 3)
ZEND_ARG_INFO(0, res)
ZEND_ARG_OBJ_INFO(0, gnupg, gnupg, 0)
ZEND_ARG_INFO(0, text)
ZEND_ARG_INFO(0, signature)
ZEND_ARG_INFO(1, plaintext)
@ -459,7 +444,7 @@ ZEND_END_ARG_INFO()
/* {{{ arginfo gnupg_decryptverify_function */
ZEND_BEGIN_ARG_INFO_EX(arginfo_gnupg_decryptverify_function, 0, 0, 3)
ZEND_ARG_INFO(0, res)
ZEND_ARG_OBJ_INFO(0, gnupg, gnupg, 0)
ZEND_ARG_INFO(0, enctext)
ZEND_ARG_INFO(1, plaintext)
ZEND_END_ARG_INFO()
@ -549,9 +534,6 @@ PHP_MINIT_FUNCTION(gnupg)
gnupg_object_handlers.offset = XtOffsetOf(gnupg_object, std);
gnupg_object_handlers.free_obj = gnupg_object_free;
/* register resource */
le_gnupg = zend_register_list_destructors_ex(php_gnupg_res_dtor, NULL, "ctx", module_number);
if (SUCCESS != gnupg_keylistiterator_init(type, module_number)) {
return FAILURE;
}
@ -767,7 +749,7 @@ int gnupg_fetchsignatures(gpgme_signature_t gpgme_signatures, zval *main_arr)
/* }}} */
/* {{{ proto gnupg::__construct(array options = NULL)
* inits gnupg and returns a resource
* construct gnupg object
*/
PHP_METHOD(gnupg, __construct)
{
@ -783,22 +765,20 @@ PHP_METHOD(gnupg, __construct)
}
/* }}} */
/* {{{ proto resource gnupg_init(array options = NULL)
* inits gnupg and returns a resource
/* {{{ proto object gnupg_init(array options = NULL)
* inits gnupg and returns an object
*/
PHP_FUNCTION(gnupg_init)
{
zval *options = NULL;
gnupg_object *intern;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "|a", &options) == FAILURE) {
return;
}
intern = emalloc(sizeof(gnupg_object));
php_gnupg_init(intern);
object_init_ex(return_value, gnupg_class_entry);
gnupg_object *intern = Z_GNUPG_P(return_value);
php_gnupg_make(intern, options);
RETURN_RES(zend_register_resource(intern, le_gnupg));
}
/* }}} */
@ -809,6 +789,7 @@ PHP_FUNCTION(gnupg_init)
* */
PHP_FUNCTION(gnupg_setarmor)
{
zval *object = NULL;
zend_long armor;
GNUPG_GETOBJ();
@ -818,10 +799,10 @@ PHP_FUNCTION(gnupg_setarmor)
return;
}
} else {
if (zend_parse_parameters(ZEND_NUM_ARGS(), "rl", &res, &armor) == FAILURE) {
if (zend_parse_parameters(ZEND_NUM_ARGS(), "Ol", &object, gnupg_class_entry, &armor) == FAILURE) {
return;
}
GNUPG_RES_FETCH();
intern = Z_GNUPG_P(object);
}
if (armor > 1) {
@ -836,6 +817,7 @@ PHP_FUNCTION(gnupg_setarmor)
/* {{{ proto bool gnupg_seterrormode(int errormode) */
PHP_FUNCTION(gnupg_seterrormode)
{
zval *object = NULL;
zend_long errormode;
GNUPG_GETOBJ();
@ -845,10 +827,10 @@ PHP_FUNCTION(gnupg_seterrormode)
return;
}
} else {
if (zend_parse_parameters(ZEND_NUM_ARGS(), "rl", &res, &errormode) == FAILURE) {
if (zend_parse_parameters(ZEND_NUM_ARGS(), "Ol", &object, gnupg_class_entry, &errormode) == FAILURE) {
return;
}
GNUPG_RES_FETCH();
intern = Z_GNUPG_P(object);
}
switch (errormode) {
@ -871,6 +853,7 @@ PHP_FUNCTION(gnupg_seterrormode)
*/
PHP_FUNCTION(gnupg_setsignmode)
{
zval *object = NULL;
zend_long signmode;
GNUPG_GETOBJ();
@ -880,10 +863,10 @@ PHP_FUNCTION(gnupg_setsignmode)
return;
}
} else {
if (zend_parse_parameters(ZEND_NUM_ARGS(), "rl", &res, &signmode) == FAILURE) {
if (zend_parse_parameters(ZEND_NUM_ARGS(), "Ol", &object, gnupg_class_entry, &signmode) == FAILURE) {
return;
}
GNUPG_RES_FETCH();
intern = Z_GNUPG_P(object);
}
switch (signmode) {
case GPGME_SIG_MODE_NORMAL:
@ -906,14 +889,15 @@ PHP_FUNCTION(gnupg_setsignmode)
*/
PHP_FUNCTION(gnupg_getengineinfo)
{
zval *object = NULL;
gpgme_engine_info_t info;
GNUPG_GETOBJ();
if (!this) {
if (zend_parse_parameters(ZEND_NUM_ARGS(), "r", &res) == FAILURE) {
if (zend_parse_parameters(ZEND_NUM_ARGS(), "O", &object, gnupg_class_entry) == FAILURE) {
return;
}
GNUPG_RES_FETCH();
intern = Z_GNUPG_P(object);
}
info = gpgme_ctx_get_engine_info(intern->ctx);
@ -930,13 +914,14 @@ PHP_FUNCTION(gnupg_getengineinfo)
*/
PHP_FUNCTION(gnupg_geterror)
{
zval *object = NULL;
GNUPG_GETOBJ();
if (!this) {
if (zend_parse_parameters(ZEND_NUM_ARGS(), "r", &res) == FAILURE) {
if (zend_parse_parameters(ZEND_NUM_ARGS(), "O", &object, gnupg_class_entry) == FAILURE) {
return;
}
GNUPG_RES_FETCH();
intern = Z_GNUPG_P(object);
}
if (!intern->errortxt) {
RETURN_FALSE;
@ -951,13 +936,14 @@ PHP_FUNCTION(gnupg_geterror)
*/
PHP_FUNCTION(gnupg_geterrorinfo)
{
zval *object = NULL;
GNUPG_GETOBJ();
if (!this) {
if (zend_parse_parameters(ZEND_NUM_ARGS(), "r", &res) == FAILURE) {
if (zend_parse_parameters(ZEND_NUM_ARGS(), "O", &object, gnupg_class_entry) == FAILURE) {
return;
}
GNUPG_RES_FETCH();
intern = Z_GNUPG_P(object);
}
array_init(return_value);
@ -987,6 +973,7 @@ PHP_FUNCTION(gnupg_getprotocol) {
*/
PHP_FUNCTION(gnupg_keyinfo)
{
zval *object = NULL;
char *searchkey = NULL;
size_t searchkey_len;
zval subarr, userid, userids, subkey, subkeys;
@ -1003,11 +990,11 @@ PHP_FUNCTION(gnupg_keyinfo)
return;
}
} else {
if (zend_parse_parameters(ZEND_NUM_ARGS(), "rs|b",
&res, &searchkey, &searchkey_len, &secret_only) == FAILURE) {
if (zend_parse_parameters(ZEND_NUM_ARGS(), "Os|b",
&object, gnupg_class_entry, &searchkey, &searchkey_len, &secret_only) == FAILURE) {
return;
}
GNUPG_RES_FETCH();
intern = Z_GNUPG_P(object);
}
intern->err = gpgme_op_keylist_start(intern->ctx, searchkey, secret_only);
@ -1104,6 +1091,7 @@ PHP_FUNCTION(gnupg_keyinfo)
/* {{{ proto bool gnupg_addsignkey(string key) */
PHP_FUNCTION(gnupg_addsignkey)
{
zval *object = NULL;
char *key_id = NULL;
size_t key_id_len;
char *passphrase = NULL;
@ -1119,11 +1107,11 @@ PHP_FUNCTION(gnupg_addsignkey)
return;
}
} else {
if (zend_parse_parameters(ZEND_NUM_ARGS(), "rs|s",
&res, &key_id, &key_id_len, &passphrase, &passphrase_len) == FAILURE) {
if (zend_parse_parameters(ZEND_NUM_ARGS(), "Os|s",
&object, gnupg_class_entry, &key_id, &key_id_len, &passphrase, &passphrase_len) == FAILURE) {
return;
}
GNUPG_RES_FETCH();
intern = Z_GNUPG_P(object);
}
if (!PHP_GNUPG_DO(gpgme_get_key(intern->ctx, key_id, &gpgme_key, 1))) {
@ -1151,6 +1139,7 @@ PHP_FUNCTION(gnupg_addsignkey)
/* {{{ proto bool gnupg_adddecryptkey(string key) */
PHP_FUNCTION(gnupg_adddecryptkey)
{
zval *object = NULL;
char *key_id = NULL;
size_t key_id_len;
char *passphrase = NULL;
@ -1166,11 +1155,11 @@ PHP_FUNCTION(gnupg_adddecryptkey)
return;
}
} else {
if (zend_parse_parameters(ZEND_NUM_ARGS(), "rss",
&res, &key_id, &key_id_len, &passphrase, &passphrase_len) == FAILURE) {
if (zend_parse_parameters(ZEND_NUM_ARGS(), "Oss",
&object, gnupg_class_entry, &key_id, &key_id_len, &passphrase, &passphrase_len) == FAILURE) {
return;
}
GNUPG_RES_FETCH();
intern = Z_GNUPG_P(object);
}
if (!PHP_GNUPG_DO(gpgme_get_key(intern->ctx, key_id, &gpgme_key, 1))) {
GNUPG_ERR("get_key failed");
@ -1191,6 +1180,7 @@ PHP_FUNCTION(gnupg_adddecryptkey)
/* {{{ proto bool gnupg_addencryptkey(string key) */
PHP_FUNCTION(gnupg_addencryptkey)
{
zval *object = NULL;
char *key_id = NULL;
size_t key_id_len;
gpgme_key_t gpgme_key = NULL;
@ -1204,11 +1194,11 @@ PHP_FUNCTION(gnupg_addencryptkey)
return;
}
} else {
if (zend_parse_parameters(ZEND_NUM_ARGS(), "rs",
&res, &key_id, &key_id_len) == FAILURE) {
if (zend_parse_parameters(ZEND_NUM_ARGS(), "Os",
&object, gnupg_class_entry, &key_id, &key_id_len) == FAILURE) {
return;
}
GNUPG_RES_FETCH();
intern = Z_GNUPG_P(object);
}
if (!PHP_GNUPG_DO(gpgme_get_key(intern->ctx, key_id, &gpgme_key, 0))) {
@ -1234,13 +1224,14 @@ PHP_FUNCTION(gnupg_addencryptkey)
*/
PHP_FUNCTION(gnupg_clearsignkeys)
{
zval *object = NULL;
GNUPG_GETOBJ();
if (!this) {
if (zend_parse_parameters(ZEND_NUM_ARGS(), "r", &res) == FAILURE) {
if (zend_parse_parameters(ZEND_NUM_ARGS(), "O", &object, gnupg_class_entry) == FAILURE) {
return;
}
GNUPG_RES_FETCH();
intern = Z_GNUPG_P(object);
}
gpgme_signers_clear(intern->ctx);
@ -1254,13 +1245,14 @@ PHP_FUNCTION(gnupg_clearsignkeys)
*/
PHP_FUNCTION(gnupg_clearencryptkeys)
{
zval *object = NULL;
GNUPG_GETOBJ();
if (!this) {
if (zend_parse_parameters(ZEND_NUM_ARGS(), "r", &res) == FAILURE) {
if (zend_parse_parameters(ZEND_NUM_ARGS(), "O", &object, gnupg_class_entry) == FAILURE) {
return;
}
GNUPG_RES_FETCH();
intern = Z_GNUPG_P(object);
}
php_gnupg_free_encryptkeys(intern);
@ -1273,13 +1265,14 @@ PHP_FUNCTION(gnupg_clearencryptkeys)
*/
PHP_FUNCTION(gnupg_cleardecryptkeys)
{
zval *object = NULL;
GNUPG_GETOBJ();
if (!this) {
if (zend_parse_parameters(ZEND_NUM_ARGS(), "r", &res) == FAILURE) {
if (zend_parse_parameters(ZEND_NUM_ARGS(), "O", &object, gnupg_class_entry) == FAILURE) {
return;
}
GNUPG_RES_FETCH();
intern = Z_GNUPG_P(object);
}
zend_hash_clean(intern->decryptkeys);
@ -1294,6 +1287,7 @@ PHP_FUNCTION(gnupg_cleardecryptkeys)
*/
PHP_FUNCTION(gnupg_sign)
{
zval *object = NULL;
char *value = NULL;
size_t value_len;
char *userret;
@ -1309,11 +1303,11 @@ PHP_FUNCTION(gnupg_sign)
return;
}
} else {
if (zend_parse_parameters(ZEND_NUM_ARGS(), "rs",
&res, &value, &value_len) == FAILURE) {
if (zend_parse_parameters(ZEND_NUM_ARGS(), "Os",
&object, gnupg_class_entry, &value, &value_len) == FAILURE) {
return;
}
GNUPG_RES_FETCH();
intern = Z_GNUPG_P(object);
}
gpgme_set_passphrase_cb(intern->ctx, passphrase_cb, intern);
@ -1365,6 +1359,7 @@ PHP_FUNCTION(gnupg_sign)
*/
PHP_FUNCTION(gnupg_encrypt)
{
zval *object = NULL;
char *value = NULL;
size_t value_len;
char *userret = NULL;
@ -1380,11 +1375,11 @@ PHP_FUNCTION(gnupg_encrypt)
return;
}
} else {
if (zend_parse_parameters(ZEND_NUM_ARGS(), "rs",
&res, &value, &value_len) == FAILURE) {
if (zend_parse_parameters(ZEND_NUM_ARGS(), "Os",
&object, gnupg_class_entry, &value, &value_len) == FAILURE) {
return;
}
GNUPG_RES_FETCH();
intern = Z_GNUPG_P(object);
}
if (!intern->encryptkeys) {
GNUPG_ERR("no key for encryption set");
@ -1429,6 +1424,7 @@ PHP_FUNCTION(gnupg_encrypt)
*/
PHP_FUNCTION(gnupg_encryptsign)
{
zval *object = NULL;
char *value = NULL;
size_t value_len;
char *userret = NULL;
@ -1445,11 +1441,11 @@ PHP_FUNCTION(gnupg_encryptsign)
return;
}
} else {
if (zend_parse_parameters(ZEND_NUM_ARGS(), "rs",
&res, &value, &value_len) == FAILURE) {
if (zend_parse_parameters(ZEND_NUM_ARGS(), "Os",
&object, gnupg_class_entry, &value, &value_len) == FAILURE) {
return;
}
GNUPG_RES_FETCH();
intern = Z_GNUPG_P(object);
}
if (!intern->encryptkeys) {
@ -1514,6 +1510,7 @@ PHP_FUNCTION(gnupg_encryptsign)
*/
PHP_FUNCTION(gnupg_verify)
{
zval *object = NULL;
gpgme_data_t gpgme_text, gpgme_sig;
gpgme_verify_result_t gpgme_result;
/* text without the signature, if its a detached one, or the text incl the sig */
@ -1533,11 +1530,11 @@ PHP_FUNCTION(gnupg_verify)
return;
}
} else {
if (zend_parse_parameters(ZEND_NUM_ARGS(), "rzz|z",
&res, &signed_text, &signature, &plain_text) == FAILURE) {
if (zend_parse_parameters(ZEND_NUM_ARGS(), "Ozz|z",
&object, gnupg_class_entry, &signed_text, &signature, &plain_text) == FAILURE) {
return;
}
GNUPG_RES_FETCH();
intern = Z_GNUPG_P(object);
}
if (Z_TYPE_P(signature) == IS_STRING) { /* detached signature */
/* setup signature-databuffer for gpgme */
@ -1606,6 +1603,7 @@ PHP_FUNCTION(gnupg_verify)
*/
PHP_FUNCTION(gnupg_decrypt)
{
zval *object = NULL;
char *enctxt;
size_t enctxt_len;
char *userret;
@ -1621,11 +1619,11 @@ PHP_FUNCTION(gnupg_decrypt)
return;
}
} else {
if (zend_parse_parameters(ZEND_NUM_ARGS(), "rs",
&res, &enctxt, &enctxt_len) == FAILURE) {
if (zend_parse_parameters(ZEND_NUM_ARGS(), "Os",
&object, gnupg_class_entry, &enctxt, &enctxt_len) == FAILURE) {
return;
}
GNUPG_RES_FETCH();
intern = Z_GNUPG_P(object);
}
gpgme_set_passphrase_cb(intern->ctx, passphrase_decrypt_cb, intern);
@ -1671,6 +1669,7 @@ PHP_FUNCTION(gnupg_decrypt)
*/
PHP_FUNCTION(gnupg_decryptverify)
{
zval *object = NULL;
char *enctxt;
size_t enctxt_len;
zval *plaintext;
@ -1688,11 +1687,11 @@ PHP_FUNCTION(gnupg_decryptverify)
return;
}
} else {
if (zend_parse_parameters(ZEND_NUM_ARGS(), "rsz",
&res, &enctxt, &enctxt_len, &plaintext) == FAILURE) {
if (zend_parse_parameters(ZEND_NUM_ARGS(), "Osz",
&object, gnupg_class_entry, &enctxt, &enctxt_len, &plaintext) == FAILURE) {
return;
}
GNUPG_RES_FETCH();
intern = Z_GNUPG_P(object);
}
ZVAL_DEREF(plaintext);
@ -1740,6 +1739,7 @@ PHP_FUNCTION(gnupg_decryptverify)
*/
PHP_FUNCTION(gnupg_export)
{
zval *object = NULL;
char *searchkey = NULL;
size_t searchkey_len;
char *userret;
@ -1754,11 +1754,11 @@ PHP_FUNCTION(gnupg_export)
return;
}
} else {
if (zend_parse_parameters(ZEND_NUM_ARGS(), "rs",
&res, &searchkey, &searchkey_len) == FAILURE) {
if (zend_parse_parameters(ZEND_NUM_ARGS(), "Os",
&object, gnupg_class_entry, &searchkey, &searchkey_len) == FAILURE) {
return;
}
GNUPG_RES_FETCH();
intern = Z_GNUPG_P(object);
}
if (!PHP_GNUPG_DO(gpgme_data_new(&out))) {
GNUPG_ERR("could not create data buffer");
@ -1784,6 +1784,7 @@ PHP_FUNCTION(gnupg_export)
*/
PHP_FUNCTION(gnupg_import)
{
zval *object = NULL;
char *importkey = NULL;
size_t importkey_len;
gpgme_data_t in;
@ -1797,11 +1798,11 @@ PHP_FUNCTION(gnupg_import)
return;
}
} else {
if (zend_parse_parameters(ZEND_NUM_ARGS(), "rs",
&res, &importkey, &importkey_len) == FAILURE) {
if (zend_parse_parameters(ZEND_NUM_ARGS(), "Os",
&object, gnupg_class_entry, &importkey, &importkey_len) == FAILURE) {
return;
}
GNUPG_RES_FETCH();
intern = Z_GNUPG_P(object);
}
if (!PHP_GNUPG_DO(gpgme_data_new_from_mem(&in, importkey, importkey_len, 0))) {
GNUPG_ERR("could not create in-data buffer");
@ -1842,6 +1843,7 @@ PHP_FUNCTION(gnupg_import)
*/
PHP_FUNCTION(gnupg_deletekey)
{
zval *object = NULL;
char *key;
size_t key_len;
zend_bool allow_secret = 0;
@ -1856,11 +1858,11 @@ PHP_FUNCTION(gnupg_deletekey)
return;
}
} else {
if (zend_parse_parameters(ZEND_NUM_ARGS(), "rs|b",
&res, &key, &key_len, &allow_secret) == FAILURE) {
if (zend_parse_parameters(ZEND_NUM_ARGS(), "Os|b",
&object, gnupg_class_entry, &key, &key_len, &allow_secret) == FAILURE) {
return;
}
GNUPG_RES_FETCH();
intern = Z_GNUPG_P(object);
}
if (!PHP_GNUPG_DO(gpgme_get_key(intern->ctx, key, &gpgme_key, 0))) {
@ -1887,6 +1889,7 @@ PHP_FUNCTION(gnupg_deletekey)
*/
PHP_FUNCTION(gnupg_gettrustlist)
{
zval *object = NULL;
char *pattern;
size_t pattern_len;
zval sub_arr;
@ -1900,11 +1903,11 @@ PHP_FUNCTION(gnupg_gettrustlist)
return;
}
} else {
if (zend_parse_parameters(ZEND_NUM_ARGS(), "rs",
&res, &pattern, &pattern_len) == FAILURE) {
if (zend_parse_parameters(ZEND_NUM_ARGS(), "Os",
&object, gnupg_class_entry, &pattern, &pattern_len) == FAILURE) {
return;
}
GNUPG_RES_FETCH();
intern = Z_GNUPG_P(object);
}
if (!PHP_GNUPG_DO(gpgme_op_trustlist_start(intern->ctx, pattern, 0))) {
GNUPG_ERR("could not start trustlist");
@ -1931,6 +1934,7 @@ PHP_FUNCTION(gnupg_gettrustlist)
/* {{{ proto array gnupg_listsignatures(string keyid) */
PHP_FUNCTION(gnupg_listsignatures)
{
zval *object = NULL;
char *keyid;
size_t keyid_len;
@ -1949,11 +1953,11 @@ PHP_FUNCTION(gnupg_listsignatures)
return;
}
} else {
if (zend_parse_parameters(ZEND_NUM_ARGS(), "rs",
&res, &keyid, &keyid_len) == FAILURE) {
if (zend_parse_parameters(ZEND_NUM_ARGS(), "Os",
&object, gnupg_class_entry, &keyid, &keyid_len) == FAILURE) {
return;
}
GNUPG_RES_FETCH();
intern = Z_GNUPG_P(object);
}
if (!PHP_GNUPG_DO(gpgme_set_keylist_mode(intern->ctx, GPGME_KEYLIST_MODE_SIGS))) {
GNUPG_ERR("could not switch to sigmode");