Merge pull request #1 from remicollet/issue-fix

For PHP 8
This commit is contained in:
Johannes Findeisen 2021-02-09 17:47:35 +01:00 committed by GitHub
commit 1c91afe164
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

67
pcsc.c
View file

@ -1,8 +1,6 @@
/* /*
+----------------------------------------------------------------------+ +----------------------------------------------------------------------+
| PHP Version 5 | | Copyright (c) The PHP Group |
+----------------------------------------------------------------------+
| Copyright (c) 1997-2006 The PHP Group |
+----------------------------------------------------------------------+ +----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, | | This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is | | that is bundled with this package in the file LICENSE, and is |
@ -46,24 +44,49 @@ ZEND_BEGIN_ARG_INFO_EX(php_pcsc_scard_connect_arginfo, 0, 0, 2)
ZEND_ARG_INFO(1, active_protocol) ZEND_ARG_INFO(1, active_protocol)
ZEND_END_ARG_INFO() ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO_EX(php_pcsc_scard_void, 0, 0, 0)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO_EX(php_pcsc_scard_context, 0, 0, 1)
ZEND_ARG_INFO(0, context)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO_EX(php_pcsc_scard_disconnect, 0, 0, 1)
ZEND_ARG_INFO(0, card)
ZEND_ARG_INFO(0, disposition)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO_EX(php_pcsc_scard_transmit, 0, 0, 2)
ZEND_ARG_INFO(0, card)
ZEND_ARG_INFO(0, command)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO_EX(php_pcsc_scard_card, 0, 0, 1)
ZEND_ARG_INFO(0, card)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO_EX(php_pcsc_scard_errstr, 0, 0, 1)
ZEND_ARG_INFO(0, errno)
ZEND_END_ARG_INFO()
/* {{{ pcsc_functions[] /* {{{ pcsc_functions[]
* *
* Every user visible function must have an entry in pcsc_functions[]. * Every user visible function must have an entry in pcsc_functions[].
*/ */
zend_function_entry pcsc_functions[] = { zend_function_entry pcsc_functions[] = {
PHP_FE(scard_establish_context, NULL) PHP_FE(scard_establish_context, php_pcsc_scard_void)
PHP_FE(scard_release_context, NULL) PHP_FE(scard_release_context, php_pcsc_scard_context)
PHP_FE(scard_is_valid_context, NULL) PHP_FE(scard_is_valid_context, php_pcsc_scard_context)
PHP_FE(scard_list_readers, NULL) PHP_FE(scard_list_readers, php_pcsc_scard_context)
PHP_FE(scard_connect, php_pcsc_scard_connect_arginfo) PHP_FE(scard_connect, php_pcsc_scard_connect_arginfo)
//PHP_FE(scard_reconnect, NULL) //PHP_FE(scard_reconnect, NULL)
PHP_FE(scard_disconnect, NULL) PHP_FE(scard_disconnect, php_pcsc_scard_disconnect)
PHP_FE(scard_transmit, NULL) PHP_FE(scard_transmit, php_pcsc_scard_transmit)
PHP_FE(scard_status, NULL) PHP_FE(scard_status, php_pcsc_scard_card)
//PHP_FE(scard_get_status_change, NULL) //PHP_FE(scard_get_status_change, NULL)
PHP_FE(scard_last_errno, NULL) PHP_FE(scard_last_errno, php_pcsc_scard_void)
PHP_FE(scard_errstr, NULL) PHP_FE(scard_errstr, php_pcsc_scard_errstr)
{NULL, NULL, NULL} PHP_FE_END
}; };
/* }}} */ /* }}} */
@ -102,13 +125,13 @@ static void php_pcsc_ctx_res_dtor(zend_resource *rsrc) {
context=(SCARDCONTEXT)rsrc->ptr; context=(SCARDCONTEXT)rsrc->ptr;
rc = SCardIsValidContext(context); rc = SCardIsValidContext(context);
if (rc != SCARD_S_SUCCESS) { if (rc != SCARD_S_SUCCESS) {
php_error_docref(NULL, E_WARNING, "PC/SC context dtor: SCardIsValidContext returned %s (0x%x)", php_pcsc_error_to_string(rc), rc); php_error_docref(NULL, E_WARNING, "PC/SC context dtor: SCardIsValidContext returned %s (0x%lx)", php_pcsc_error_to_string(rc), rc);
return; return;
} }
rc = SCardReleaseContext(context); rc = SCardReleaseContext(context);
if (rc != SCARD_S_SUCCESS) { if (rc != SCARD_S_SUCCESS) {
php_error_docref(NULL, E_WARNING, "PC/SC context dtor: SCardReleaseContext returned %s (0x%x)", php_pcsc_error_to_string(rc), rc); php_error_docref(NULL, E_WARNING, "PC/SC context dtor: SCardReleaseContext returned %s (0x%lx)", php_pcsc_error_to_string(rc), rc);
return; return;
} }
return; return;
@ -127,7 +150,7 @@ static void php_pcsc_conn_res_dtor(zend_resource *rsrc) {
rc = SCardDisconnect(hCard, SCARD_LEAVE_CARD); rc = SCardDisconnect(hCard, SCARD_LEAVE_CARD);
if (rc != SCARD_S_SUCCESS) { if (rc != SCARD_S_SUCCESS) {
php_error_docref(NULL, E_WARNING, "PC/SC connection dtor: SCardDisconnect returned %s (0x%x)", php_pcsc_error_to_string(rc), rc); php_error_docref(NULL, E_WARNING, "PC/SC connection dtor: SCardDisconnect returned %s (0x%lx)", php_pcsc_error_to_string(rc), rc);
} }
} }
@ -502,6 +525,10 @@ PHP_FUNCTION(scard_establish_context)
SCARDCONTEXT scard_context = 0; SCARDCONTEXT scard_context = 0;
LONG rc = 0; LONG rc = 0;
if (zend_parse_parameters_none() == FAILURE) {
return;
}
rc = SCardEstablishContext(SCARD_SCOPE_SYSTEM, NULL, NULL, &scard_context); rc = SCardEstablishContext(SCARD_SCOPE_SYSTEM, NULL, NULL, &scard_context);
if (rc != SCARD_S_SUCCESS) if (rc != SCARD_S_SUCCESS)
{ {
@ -539,7 +566,6 @@ PHP_FUNCTION(scard_is_valid_context)
Invalidate the PC/SC context */ Invalidate the PC/SC context */
PHP_FUNCTION(scard_release_context) PHP_FUNCTION(scard_release_context)
{ {
LONG rc = 0;
zval* ctx_res; zval* ctx_res;
SCARDCONTEXT context; SCARDCONTEXT context;
@ -547,6 +573,7 @@ PHP_FUNCTION(scard_release_context)
RETURN_NULL(); RETURN_NULL();
} }
ZEND_FETCH_RESOURCE(context, SCARDCONTEXT, &ctx_res, -1, PHP_PCSC_CTX_RES_NAME, le_pcsc_ctx_res); ZEND_FETCH_RESOURCE(context, SCARDCONTEXT, &ctx_res, -1, PHP_PCSC_CTX_RES_NAME, le_pcsc_ctx_res);
(void)context;
zend_hash_index_del(&EG(regular_list), Z_RES_HANDLE_P(ctx_res)); zend_hash_index_del(&EG(regular_list), Z_RES_HANDLE_P(ctx_res));
RETURN_TRUE; RETURN_TRUE;
@ -669,7 +696,7 @@ PHP_FUNCTION(scard_transmit)
SCARD_IO_REQUEST *recvPci = NULL; SCARD_IO_REQUEST *recvPci = NULL;
BYTE *sendBuffer; BYTE *sendBuffer;
BYTE *recvBuffer; BYTE *recvBuffer;
DWORD sendLen, recvLen; DWORD sendLen = 0, recvLen;
LONG rc; LONG rc;
char *apdu; char *apdu;
size_t apduLen; size_t apduLen;
@ -734,7 +761,6 @@ PHP_FUNCTION(scard_status)
{ {
zval* conn_res; zval* conn_res;
SCARDHANDLE hCard = 0; SCARDHANDLE hCard = 0;
char *strReader = NULL;
DWORD dwProtocol, dwState; DWORD dwProtocol, dwState;
BYTE atrBuffer[32]; BYTE atrBuffer[32];
DWORD atrLen; DWORD atrLen;
@ -799,6 +825,9 @@ PHP_FUNCTION(scard_status)
Retrieve last error code */ Retrieve last error code */
PHP_FUNCTION(scard_last_errno) PHP_FUNCTION(scard_last_errno)
{ {
if (zend_parse_parameters_none() == FAILURE) {
return;
}
RETURN_LONG(PCSC_G(last_errno)); RETURN_LONG(PCSC_G(last_errno));
} }
/* }}} */ /* }}} */