From 04a7075290bcfaa16a9150255e4bed5c604d3d80 Mon Sep 17 00:00:00 2001 From: Frank Morgner Date: Wed, 2 Aug 2017 23:12:58 +0200 Subject: [PATCH] fixed compiler warnings --- configure.ac | 4 ++-- src/common/compat___iob_func.c | 14 ++++++++++---- src/libopensc/card-cardos.c | 4 ++-- src/libopensc/card-sc-hsm.c | 11 +++++++---- src/libopensc/ef-gdo.c | 3 ++- src/libopensc/iso7816.c | 8 ++++++-- src/libopensc/reader-tr03119.c | 6 +++--- src/libopensc/sec.c | 2 +- src/minidriver/minidriver.c | 2 +- src/pkcs11/framework-pkcs15.c | 4 +++- src/sm/sm-eac.c | 5 +++-- src/sm/sm-iso.c | 6 +++--- src/tools/Makefile.am | 10 ++++++++-- src/tools/cardos-tool.c | 2 +- src/tools/cryptoflex-tool.c | 2 +- src/tools/egk-tool.c | 6 +++--- src/tools/eidenv.c | 2 ++ src/tools/gids-tool.c | 2 +- src/tools/iasecc-tool.c | 2 +- src/tools/opensc-explorer.c | 2 +- src/tools/opensc-notify.c | 1 - src/tools/opensc-tool.c | 2 +- src/tools/piv-tool.c | 2 +- src/tools/pkcs15-crypt.c | 2 +- src/tools/pkcs15-tool.c | 2 +- src/tools/sc-hsm-tool.c | 2 +- src/ui/strings.c | 3 ++- 27 files changed, 68 insertions(+), 43 deletions(-) diff --git a/configure.ac b/configure.ac index 3cdd4342..af5b2570 100644 --- a/configure.ac +++ b/configure.ac @@ -133,8 +133,8 @@ case "${host}" in ;; esac -AX_CHECK_COMPILE_FLAG(-Wno-error=unused-but-set-variable, [have_unused_but_set_variable="yes"], [have_unused_but_set_variable="no"], [-Werror -Wunknown-warning-option]) -AM_CONDITIONAL([HAVE_UNUSED_BUT_SET_VARIABLE], [test "${have_unused_but_set_variable}" = "yes"]) +AX_CHECK_COMPILE_FLAG(-Wunknown-warning-option, [have_unknown_warning_option="yes"], [have_unknown_warning_option="no"], [-Werror]) +AM_CONDITIONAL([HAVE_UNKNOWN_WARNING_OPTION], [test "${have_unknown_warning_option}" = "yes"]) AC_ARG_ENABLE( [strict], diff --git a/src/common/compat___iob_func.c b/src/common/compat___iob_func.c index 86a1d39f..b7702433 100644 --- a/src/common/compat___iob_func.c +++ b/src/common/compat___iob_func.c @@ -7,14 +7,20 @@ #if defined(_MSC_VER) && (_MSC_VER >= 1900) // needed for OpenSSL static link // only for vs 2015 or later +// +// this is a horrible hack, the correct fix would be to recompile OpenSSL with +// VS 2015 or later. However, since in OpenSC, we don't need OpenSSL to send +// output to any of these buffers, we don't need to cope with runtime errors +// induced by this hack. See https://stackoverflow.com/a/34655235 for details. +// #pragma comment(lib, "legacy_stdio_definitions.lib") #include FILE * __cdecl __iob_func(void) { - static FILE *my_iob[3]; - my_iob[0] = stdin; - my_iob[1] = stdout; - my_iob[2] = stderr; + static FILE my_iob[3]; + my_iob[0] = *stdin; + my_iob[1] = *stdout; + my_iob[2] = *stderr; return my_iob; } #endif diff --git a/src/libopensc/card-cardos.c b/src/libopensc/card-cardos.c index 07719173..4d2ad6f3 100644 --- a/src/libopensc/card-cardos.c +++ b/src/libopensc/card-cardos.c @@ -559,8 +559,8 @@ static int cardos_set_file_attributes(sc_card_t *card, sc_file_t *file) status[0] = 0x01; if (file->type == SC_FILE_TYPE_DF) { - status[1] = file->size >> 8; - status[2] = file->size; + status[1] = (file->size >> 8) & 0xFF; + status[2] = file->size & 0xFF; } else { status[1] = status[2] = 0x00; /* not used */ } diff --git a/src/libopensc/card-sc-hsm.c b/src/libopensc/card-sc-hsm.c index fc741924..e415a12a 100644 --- a/src/libopensc/card-sc-hsm.c +++ b/src/libopensc/card-sc-hsm.c @@ -805,15 +805,15 @@ static int sc_hsm_write_ef(sc_card_t *card, *p++ = idx & 0xFF; *p++ = 0x53; if (count < 128) { - *p++ = count; + *p++ = (u8) count; len = 6; } else if (count < 256) { *p++ = 0x81; - *p++ = count; + *p++ = (u8) count; len = 7; } else { *p++ = 0x82; - *p++ = count >> 8; + *p++ = (count >> 8) & 0xFF; *p++ = count & 0xFF; len = 8; } @@ -1199,8 +1199,11 @@ static int sc_hsm_initialize(sc_card_t *card, sc_cardctl_sc_hsm_init_param_t *pa memcpy(p, params->options, 2); p += 2; + if (params->user_pin_len > 0xFF) { + return SC_ERROR_INVALID_ARGUMENTS; + } *p++ = 0x81; // User PIN - *p++ = params->user_pin_len; + *p++ = (u8) params->user_pin_len; memcpy(p, params->user_pin, params->user_pin_len); p += params->user_pin_len; diff --git a/src/libopensc/ef-gdo.c b/src/libopensc/ef-gdo.c index 4d7a86ba..d1017f75 100644 --- a/src/libopensc/ef-gdo.c +++ b/src/libopensc/ef-gdo.c @@ -21,8 +21,9 @@ #include "config.h" #endif -#include "internal.h" #include "asn1.h" +#include "internal.h" +#include static int sc_parse_ef_gdo_content(const unsigned char *gdo, size_t gdo_len, diff --git a/src/libopensc/iso7816.c b/src/libopensc/iso7816.c index cc9a7c31..1fa4860c 100644 --- a/src/libopensc/iso7816.c +++ b/src/libopensc/iso7816.c @@ -828,8 +828,10 @@ iso7816_set_security_env(struct sc_card *card, *p++ = env->algorithm_ref & 0xFF; } if (env->flags & SC_SEC_ENV_FILE_REF_PRESENT) { + if (env->file_ref.len > 0xFF) + return SC_ERROR_INVALID_ARGUMENTS; *p++ = 0x81; - *p++ = env->file_ref.len; + *p++ = (u8) env->file_ref.len; assert(sizeof(sbuf) - (p - sbuf) >= env->file_ref.len); memcpy(p, env->file_ref.value, env->file_ref.len); p += env->file_ref.len; @@ -839,7 +841,9 @@ iso7816_set_security_env(struct sc_card *card, *p++ = 0x83; else *p++ = 0x84; - *p++ = env->key_ref_len; + if (env->key_ref_len > 0xFF) + return SC_ERROR_INVALID_ARGUMENTS; + *p++ = env->key_ref_len & 0xFF; assert(sizeof(sbuf) - (p - sbuf) >= env->key_ref_len); memcpy(p, env->key_ref, env->key_ref_len); p += env->key_ref_len; diff --git a/src/libopensc/reader-tr03119.c b/src/libopensc/reader-tr03119.c index 7a9d4a45..c3d2dcc5 100644 --- a/src/libopensc/reader-tr03119.c +++ b/src/libopensc/reader-tr03119.c @@ -494,7 +494,7 @@ static int escape_pin_cmd_to_buf(sc_context_t *ctx, /* GLP PIN length is encoded in 4 bits and block size is always 8 bytes */ bmPINBlockString = 0x40 | 0x08; } else if (pin_ref->encoding == SC_PIN_ENCODING_ASCII && data->flags & SC_PIN_CMD_NEED_PADDING) { - bmPINBlockString = pin_ref->pad_length; + bmPINBlockString = (uint8_t) pin_ref->pad_length; } else { bmPINBlockString = 0x00; } @@ -566,11 +566,11 @@ static int escape_pin_cmd_to_buf(sc_context_t *ctx, modify->bmPINLengthFormat = bmPINLengthFormat; if (!(data->flags & SC_PIN_CMD_IMPLICIT_CHANGE) && data->pin1.offset) { - modify->bInsertionOffsetOld = data->pin1.offset - 5; + modify->bInsertionOffsetOld = (uint8_t) data->pin1.offset - 5; } else { modify->bInsertionOffsetOld = 0; } - modify->bInsertionOffsetNew = data->pin2.offset ? data->pin2.offset - 5 : 0; + modify->bInsertionOffsetNew = data->pin2.offset ? (uint8_t) data->pin2.offset - 5 : 0; modify->wPINMaxExtraDigit = wPINMaxExtraDigit; modify->bConfirmPIN = CCID_PIN_CONFIRM_NEW | (data->flags & SC_PIN_CMD_IMPLICIT_CHANGE ? 0 : CCID_PIN_INSERT_OLD); diff --git a/src/libopensc/sec.c b/src/libopensc/sec.c index 7cfd9fd8..2af61225 100644 --- a/src/libopensc/sec.c +++ b/src/libopensc/sec.c @@ -244,7 +244,7 @@ int sc_build_pin(u8 *buf, size_t buflen, struct sc_pin_cmd_pin *pin, int pad) if (pin->data[i] < '0' || pin->data[i] > '9') return SC_ERROR_INVALID_ARGUMENTS; } - buf[0] = 0x20 | pin_len; + buf[0] = 0x20 | (u8) pin_len; buf++; buflen--; } diff --git a/src/minidriver/minidriver.c b/src/minidriver/minidriver.c index 7f952888..6478ff9b 100644 --- a/src/minidriver/minidriver.c +++ b/src/minidriver/minidriver.c @@ -2864,7 +2864,7 @@ static const char *md_get_ui_str(PCARD_DATA pCardData, enum ui_str id) return str; } -static INT_PTR CALLBACK md_dialog_proc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam, LONG_PTR dwRefData) +static HRESULT CALLBACK md_dialog_proc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam, LONG_PTR dwRefData) { LONG_PTR param; int timeout; diff --git a/src/pkcs11/framework-pkcs15.c b/src/pkcs11/framework-pkcs15.c index 34d92cb5..ad398d8f 100644 --- a/src/pkcs11/framework-pkcs15.c +++ b/src/pkcs11/framework-pkcs15.c @@ -175,6 +175,7 @@ static const struct { const CK_BYTE gostr3411_94_cryptopro_paramset_encoded_oid[] = { 0x06, 0x07, 0x2a, 0x85, 0x03, 0x02, 0x02, 0x1e, 0x01 }; const unsigned int gostr3411_94_cryptopro_paramset_oid[] = {1, 2, 643, 2, 2, 30, 1, (unsigned int)-1}; +#ifdef USE_PKCS15_INIT static const struct { const CK_BYTE *encoded_oid; const unsigned int encoded_oid_size; @@ -186,6 +187,7 @@ static const struct { &gostr3411_94_cryptopro_paramset_oid[0], sizeof(gostr3411_94_cryptopro_paramset_oid)} }; +#endif static int __pkcs15_release_object(struct pkcs15_any_object *); static CK_RV register_mechanisms(struct sc_pkcs11_card *p11card); @@ -978,7 +980,7 @@ pkcs15_add_object(struct sc_pkcs11_slot *slot, struct pkcs15_any_object *obj, unsigned int i; struct pkcs15_fw_data *card_fw_data; CK_OBJECT_HANDLE handle = - (CK_OBJECT_HANDLE)obj; /* cast pointer to long, will truncate on Win64 */ + (CK_OBJECT_HANDLE)(uintptr_t)obj; /* cast pointer to long, will truncate on Win64 */ if (obj == NULL || slot == NULL) return; diff --git a/src/sm/sm-eac.c b/src/sm/sm-eac.c index 89712bd7..4c66ff76 100644 --- a/src/sm/sm-eac.c +++ b/src/sm/sm-eac.c @@ -1684,8 +1684,9 @@ static int npa_gen_auth_ca(sc_card_t *card, const BUF_MEM *eph_pub_key, } c_data->eph_pub_key = ASN1_OCTET_STRING_new(); if (!c_data->eph_pub_key - || !ASN1_OCTET_STRING_set( c_data->eph_pub_key, - eph_pub_key->data, eph_pub_key->length)) { + || !ASN1_OCTET_STRING_set(c_data->eph_pub_key, + (const unsigned char *) eph_pub_key->data, + eph_pub_key->length)) { ssl_error(card->ctx); r = SC_ERROR_INTERNAL; goto err; diff --git a/src/sm/sm-iso.c b/src/sm/sm-iso.c index 2f419cbf..b702a2f4 100644 --- a/src/sm/sm-iso.c +++ b/src/sm/sm-iso.c @@ -156,15 +156,15 @@ static int format_le(size_t le, struct sc_asn1_entry *le_entry, switch (*le_len) { case 1: - p[0] = le; + p[0] = le & 0xff; break; case 2: - p[0] = le >> 8; + p[0] = (le >> 8) & 0xff; p[1] = le & 0xff; break; case 3: p[0] = 0x00; - p[1] = le >> 8; + p[1] = (le >> 8) & 0xff; p[2] = le & 0xff; break; default: diff --git a/src/tools/Makefile.am b/src/tools/Makefile.am index 98fb4488..6d823c6e 100644 --- a/src/tools/Makefile.am +++ b/src/tools/Makefile.am @@ -113,7 +113,10 @@ npa-tool.1: opensc_notify_SOURCES = opensc-notify.c $(OPENSC_NOTIFY_BUILT_SOURCES) opensc_notify_LDADD = $(top_builddir)/src/libopensc/libopensc.la $(OPTIONAL_NOTIFY_LIBS) opensc_notify_CFLAGS = -I$(top_srcdir)/src $(OPTIONAL_NOTIFY_CFLAGS) -opensc_notify_CFLAGS += -Wno-unused-but-set-variable -Wno-unknown-warning-option +opensc_notify_CFLAGS += -Wno-unused-but-set-variable +if HAVE_UNKNOWN_WARNING_OPTION +opensc_notify_CFLAGS += -Wno-unknown-warning-option +endif opensc-notify.c: $(abs_builddir)/opensc-notify.ggo $(OPENSC_NOTIFY_BUILT_SOURCES) @@ -137,7 +140,10 @@ opensc-notify.1: egk_tool_SOURCES = egk-tool.c $(EGK_TOOL_BUILT_SOURCES) egk_tool_LDADD = $(top_builddir)/src/libopensc/libopensc.la $(OPTIONAL_ZLIB_LIBS) egk_tool_CFLAGS = -I$(top_srcdir)/src $(OPTIONAL_ZLIB_CFLAGS) -egk_tool_CFLAGS += -Wno-unused-but-set-variable -Wno-unknown-warning-option +egk_tool_CFLAGS += -Wno-unused-but-set-variable +if HAVE_UNKNOWN_WARNING_OPTION +egk_tool_CFLAGS += -Wno-unknown-warning-option +endif egk-tool.c: $(abs_builddir)/egk-tool.ggo $(EGK_TOOL_BUILT_SOURCES) diff --git a/src/tools/cardos-tool.c b/src/tools/cardos-tool.c index cccc76d3..c90bf035 100644 --- a/src/tools/cardos-tool.c +++ b/src/tools/cardos-tool.c @@ -1027,7 +1027,7 @@ static int cardos_change_startkey(const char *change_startkey_apdu) { } #endif -int main(int argc, char *const argv[]) +int main(int argc, char *argv[]) { int err = 0, r, c, long_optind = 0; int do_info = 0; diff --git a/src/tools/cryptoflex-tool.c b/src/tools/cryptoflex-tool.c index ed9255e0..21b0baa1 100644 --- a/src/tools/cryptoflex-tool.c +++ b/src/tools/cryptoflex-tool.c @@ -978,7 +978,7 @@ static int create_pin(void) return create_pin_file(&path, opt_pin_num, ""); } -int main(int argc, char * const argv[]) +int main(int argc, char *argv[]) { int err = 0, r, c, long_optind = 0; int action_count = 0; diff --git a/src/tools/egk-tool.c b/src/tools/egk-tool.c index 8424e9c6..0a8834b6 100644 --- a/src/tools/egk-tool.c +++ b/src/tools/egk-tool.c @@ -60,8 +60,8 @@ int uncompress_gzip(void* uncompressed, size_t *uncompressed_len, return SC_SUCCESS; } #else -int uncompress_gzip(const void* compressed, size_t compressed_len, - void* uncompressed, size_t *uncompressed_len) +int uncompress_gzip(void* uncompressed, size_t *uncompressed_len, + const void* compressed, size_t compressed_len) { return SC_ERROR_NOT_SUPPORTED; } @@ -196,7 +196,7 @@ main (int argc, char **argv) struct gengetopt_args_info cmdline; struct sc_path path; struct sc_context *ctx; - struct sc_reader *reader; + struct sc_reader *reader = NULL; struct sc_card *card; unsigned char *data = NULL; size_t data_len = 0; diff --git a/src/tools/eidenv.c b/src/tools/eidenv.c index 4d2029b3..7caaa136 100644 --- a/src/tools/eidenv.c +++ b/src/tools/eidenv.c @@ -23,6 +23,8 @@ #include #ifndef _WIN32 #include +#else +#include #endif #include #include diff --git a/src/tools/gids-tool.c b/src/tools/gids-tool.c index 48084d8c..58e77e1f 100644 --- a/src/tools/gids-tool.c +++ b/src/tools/gids-tool.c @@ -466,7 +466,7 @@ static int print_info(sc_card_t *card) { return SC_SUCCESS; } -int main(int argc, char * const argv[]) +int main(int argc, char * argv[]) { int err = 0, r, c, long_optind = 0; int action_count = 0; diff --git a/src/tools/iasecc-tool.c b/src/tools/iasecc-tool.c index 6b79494b..d8a31faa 100644 --- a/src/tools/iasecc-tool.c +++ b/src/tools/iasecc-tool.c @@ -197,7 +197,7 @@ static int list_apps(FILE *fout) return 0; } -int main(int argc, char * const argv[]) +int main(int argc, char *argv[]) { int err = 0, r, c, long_optind = 0; int do_list_sdos = 0; diff --git a/src/tools/opensc-explorer.c b/src/tools/opensc-explorer.c index 8ec63cf6..0a66bcb5 100644 --- a/src/tools/opensc-explorer.c +++ b/src/tools/opensc-explorer.c @@ -1867,7 +1867,7 @@ static char *read_cmdline(FILE *script, char *prompt) return buf; } -int main(int argc, char * const argv[]) +int main(int argc, char *argv[]) { int r, c, long_optind = 0, err = 0; char *line; diff --git a/src/tools/opensc-notify.c b/src/tools/opensc-notify.c index 244047ab..5a586911 100644 --- a/src/tools/opensc-notify.c +++ b/src/tools/opensc-notify.c @@ -173,7 +173,6 @@ WinMain(HINSTANCE hInstance, HINSTANCE prevInstance, LPSTR lpCmdLine, int nShowC LPWSTR *wargv = NULL; char **argv = NULL; int argc = 0, i; - struct gengetopt_args_info cmdline; wargv = CommandLineToArgvW(GetCommandLineW(), &argc); if (wargv == NULL) { diff --git a/src/tools/opensc-tool.c b/src/tools/opensc-tool.c index 4d7efc7a..102492c6 100644 --- a/src/tools/opensc-tool.c +++ b/src/tools/opensc-tool.c @@ -668,7 +668,7 @@ static int card_reset(const char *reset_type) return 0; } -int main(int argc, char * const argv[]) +int main(int argc, char *argv[]) { int err = 0, r, c, long_optind = 0; int do_info = 0; diff --git a/src/tools/piv-tool.c b/src/tools/piv-tool.c index 89581064..bab5fb80 100644 --- a/src/tools/piv-tool.c +++ b/src/tools/piv-tool.c @@ -459,7 +459,7 @@ static void print_serial(sc_card_t *in_card) util_hex_dump_asc(stdout, serial.value, serial.len, -1); } -int main(int argc, char * const argv[]) +int main(int argc, char *argv[]) { int err = 0, r, c, long_optind = 0; int do_send_apdu = 0; diff --git a/src/tools/pkcs15-crypt.c b/src/tools/pkcs15-crypt.c index 8d5be6d5..05ee99a1 100644 --- a/src/tools/pkcs15-crypt.c +++ b/src/tools/pkcs15-crypt.c @@ -352,7 +352,7 @@ static int get_key(unsigned int usage, sc_pkcs15_object_t **result) return 0; } -int main(int argc, char * const argv[]) +int main(int argc, char *argv[]) { int err = 0, r, c, long_optind = 0; int do_decipher = 0; diff --git a/src/tools/pkcs15-tool.c b/src/tools/pkcs15-tool.c index 15ddde07..9fef9a68 100644 --- a/src/tools/pkcs15-tool.c +++ b/src/tools/pkcs15-tool.c @@ -2031,7 +2031,7 @@ end: return 0; } -int main(int argc, char * const argv[]) +int main(int argc, char *argv[]) { int err = 0, r, c, long_optind = 0; int do_read_cert = 0; diff --git a/src/tools/sc-hsm-tool.c b/src/tools/sc-hsm-tool.c index 938a8955..6ae21163 100644 --- a/src/tools/sc-hsm-tool.c +++ b/src/tools/sc-hsm-tool.c @@ -1654,7 +1654,7 @@ static int unwrap_key(sc_card_t *card, int keyid, const char *inf, const char *p -int main(int argc, char * const argv[]) +int main(int argc, char *argv[]) { int err = 0, r, c, long_optind = 0; int action_count = 0; diff --git a/src/ui/strings.c b/src/ui/strings.c index e129e911..d98dbe3a 100644 --- a/src/ui/strings.c +++ b/src/ui/strings.c @@ -20,8 +20,9 @@ #include "libopensc/internal.h" #include "ui/strings.h" -#include #include +#include +#include enum ui_langs { EN,