Fix callbacks prototype, to match exactly what expected.

This is broken on ZTS, as the additional parameter (TRSMLS)
will never be sent by libgpgme.

The cast was badly hdding the warning about this.
This commit is contained in:
Remi Collet 2016-06-16 11:09:56 +02:00
parent d09269f41b
commit 32203934c7

20
gnupg.c
View file

@ -395,14 +395,16 @@ PHP_MINFO_FUNCTION(gnupg)
/* {{{ passphrase_cb */ /* {{{ passphrase_cb */
gpgme_error_t passphrase_cb( gpgme_error_t passphrase_cb(
PHPC_THIS_DECLARE(gnupg), void *hook,
const char *uid_hint, const char *passphrase_info, const char *uid_hint, const char *passphrase_info,
int last_was_bad, int fd TSRMLS_DC) int last_was_bad, int fd)
{ {
char uid[17]; char uid[17];
int idx; int idx;
char *passphrase = NULL; char *passphrase = NULL;
zval *return_value = NULL; zval *return_value = NULL;
PHPC_THIS_DECLARE(gnupg) = hook;
TSRMLS_FETCH();
if (last_was_bad) { if (last_was_bad) {
GNUPG_ERR("Incorrent passphrase"); GNUPG_ERR("Incorrent passphrase");
@ -431,14 +433,16 @@ gpgme_error_t passphrase_cb(
/* {{{ passphrase_decrypt_cb */ /* {{{ passphrase_decrypt_cb */
gpgme_error_t passphrase_decrypt_cb ( gpgme_error_t passphrase_decrypt_cb (
PHPC_THIS_DECLARE(gnupg), void *hook,
const char *uid_hint, const char *passphrase_info, const char *uid_hint, const char *passphrase_info,
int last_was_bad, int fd TSRMLS_DC) int last_was_bad, int fd)
{ {
char uid[17]; char uid[17];
int idx; int idx;
char *passphrase = NULL; char *passphrase = NULL;
zval *return_value = NULL; zval *return_value = NULL;
PHPC_THIS_DECLARE(gnupg) = hook;
TSRMLS_FETCH();
if (last_was_bad) { if (last_was_bad) {
GNUPG_ERR("Incorrent passphrase"); GNUPG_ERR("Incorrent passphrase");
@ -927,7 +931,7 @@ PHP_FUNCTION(gnupg_sign)
GNUPG_RES_FETCH(); GNUPG_RES_FETCH();
} }
gpgme_set_passphrase_cb(PHPC_THIS->ctx, (void *)passphrase_cb, PHPC_THIS); gpgme_set_passphrase_cb(PHPC_THIS->ctx, passphrase_cb, PHPC_THIS);
if ((PHPC_THIS->err = gpgme_data_new_from_mem(&in, value, value_len, 0)) != GPG_ERR_NO_ERROR) { if ((PHPC_THIS->err = gpgme_data_new_from_mem(&in, value, value_len, 0)) != GPG_ERR_NO_ERROR) {
GNUPG_ERR("could not create in-data buffer"); GNUPG_ERR("could not create in-data buffer");
return; return;
@ -1063,7 +1067,7 @@ PHP_FUNCTION(gnupg_encryptsign)
GNUPG_ERR("no key for encryption set"); GNUPG_ERR("no key for encryption set");
return; return;
} }
gpgme_set_passphrase_cb(PHPC_THIS->ctx, (void *)passphrase_cb, PHPC_THIS); gpgme_set_passphrase_cb(PHPC_THIS->ctx, passphrase_cb, PHPC_THIS);
if ((PHPC_THIS->err = gpgme_data_new_from_mem (&in, value, value_len, 0)) != GPG_ERR_NO_ERROR) { if ((PHPC_THIS->err = gpgme_data_new_from_mem (&in, value, value_len, 0)) != GPG_ERR_NO_ERROR) {
GNUPG_ERR("could not create in-data buffer"); GNUPG_ERR("could not create in-data buffer");
return; return;
@ -1227,7 +1231,7 @@ PHP_FUNCTION(gnupg_decrypt)
GNUPG_RES_FETCH(); GNUPG_RES_FETCH();
} }
gpgme_set_passphrase_cb(PHPC_THIS->ctx, (void *)passphrase_decrypt_cb, PHPC_THIS); gpgme_set_passphrase_cb(PHPC_THIS->ctx, passphrase_decrypt_cb, PHPC_THIS);
if ((PHPC_THIS->err = gpgme_data_new_from_mem(&in, enctxt, enctxt_len, 0)) != GPG_ERR_NO_ERROR) { if ((PHPC_THIS->err = gpgme_data_new_from_mem(&in, enctxt, enctxt_len, 0)) != GPG_ERR_NO_ERROR) {
GNUPG_ERR("could not create in-data buffer"); GNUPG_ERR("could not create in-data buffer");
@ -1291,7 +1295,7 @@ PHP_FUNCTION(gnupg_decryptverify)
} }
PHPC_PZVAL_DEREF(plaintext); PHPC_PZVAL_DEREF(plaintext);
gpgme_set_passphrase_cb(PHPC_THIS->ctx, (void *)passphrase_decrypt_cb, PHPC_THIS); gpgme_set_passphrase_cb(PHPC_THIS->ctx, passphrase_decrypt_cb, PHPC_THIS);
if ((PHPC_THIS->err = gpgme_data_new_from_mem(&in, enctxt, enctxt_len, 0)) != GPG_ERR_NO_ERROR) { if ((PHPC_THIS->err = gpgme_data_new_from_mem(&in, enctxt, enctxt_len, 0)) != GPG_ERR_NO_ERROR) {
GNUPG_ERR("could not create in-data buffer"); GNUPG_ERR("could not create in-data buffer");