diff options
author | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2003-10-01 15:11:26 +0000 |
---|---|---|
committer | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2003-10-01 15:11:26 +0000 |
commit | af15da7a2d647bc1c22ff4b268dce0116ba98266 (patch) | |
tree | 686bdef2817c5912bfa03b84db1fdc529805b555 | |
parent | 76ddf1c658833618343a94aff44034514ad2f01c (diff) | |
download | gnutls-af15da7a2d647bc1c22ff4b268dce0116ba98266.tar.gz |
Corrected some unaligned accesses in IA64. Initial patch by Ian Wienand <ianw@gelato.unsw.edu.au>.
-rw-r--r-- | lib/gnutls_handshake.c | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/lib/gnutls_handshake.c b/lib/gnutls_handshake.c index 7eba3be1ac..bc8fea6bbc 100644 --- a/lib/gnutls_handshake.c +++ b/lib/gnutls_handshake.c @@ -500,9 +500,11 @@ int _gnutls_server_find_pk_algos_in_ciphersuites( opaque* data, int datalen) { int j; gnutls_pk_algorithm algo=-1, prev_algo = 0; gnutls_kx_algorithm kx; +GNUTLS_CipherSuite cs; for (j = 0; j < datalen; j += 2) { - kx = _gnutls_cipher_suite_get_kx_algo(*((GNUTLS_CipherSuite *) & data[j])); + memcpy( &cs.CipherSuite, &data[j], 2); + kx = _gnutls_cipher_suite_get_kx_algo( cs); if ( _gnutls_map_kx_get_cred( kx, 1) == GNUTLS_CRD_CERTIFICATE) { algo = _gnutls_map_pk_get_pk( kx); @@ -522,7 +524,7 @@ gnutls_kx_algorithm kx; int _gnutls_server_select_suite(gnutls_session session, opaque *data, int datalen) { int x, i, j; - GNUTLS_CipherSuite *ciphers; + GNUTLS_CipherSuite *ciphers, cs; int retval, err; gnutls_pk_algorithm pk_algo; /* will hold the pk algorithms * supported by the peer. @@ -549,11 +551,12 @@ int _gnutls_server_select_suite(gnutls_session session, opaque *data, int datale } #ifdef HANDSHAKE_DEBUG + memcpy( &cs.CipherSuite, &data[j], 2); + _gnutls_handshake_log("HSK[%x]: Requested cipher suites: \n", session); for (j = 0; j < datalen; j += 2) _gnutls_handshake_log("\t%s\n", - _gnutls_cipher_suite_get_name(* - ((GNUTLS_CipherSuite *) & data[j]))); + _gnutls_cipher_suite_get_name(cs)); _gnutls_handshake_log("HSK[%x]: Supported cipher suites: \n", session); for (j = 0; j < x; j++) _gnutls_handshake_log("\t%s\n", @@ -567,9 +570,10 @@ int _gnutls_server_select_suite(gnutls_session session, opaque *data, int datale for (i = 0; i < x; i++) { if (memcmp(ciphers[i].CipherSuite, &data[j], 2) == 0) { + memcpy( &cs.CipherSuite, &data[j], 2); + _gnutls_handshake_log("HSK[%x]: Selected cipher suite: %s\n", - session, _gnutls_cipher_suite_get_name(* - ((GNUTLS_CipherSuite *) & data[j]))); + session, _gnutls_cipher_suite_get_name(cs)); memcpy(session->security_parameters.current_cipher_suite.CipherSuite, ciphers[i].CipherSuite, 2); retval = 0; goto finish; @@ -2289,7 +2293,7 @@ int _gnutls_remove_unwanted_ciphersuites(gnutls_session session, { int ret = 0; - GNUTLS_CipherSuite *newSuite; + GNUTLS_CipherSuite *newSuite, cs; int newSuiteSize = 0, i, j, keep; const gnutls_certificate_credentials x509_cred; const gnutls_cert* cert = NULL; @@ -2376,19 +2380,19 @@ int _gnutls_remove_unwanted_ciphersuites(gnutls_session session, } } + memcpy( &cs.CipherSuite, &(*cipherSuites)[i].CipherSuite, 2); + if (keep == 0) { _gnutls_handshake_log("HSK[%x]: Keeping ciphersuite: %s\n", session, - _gnutls_cipher_suite_get_name(* - ((GNUTLS_CipherSuite *) & (*cipherSuites)[i].CipherSuite))); + _gnutls_cipher_suite_get_name(cs)); memcpy(newSuite[newSuiteSize].CipherSuite, (*cipherSuites)[i].CipherSuite, 2); newSuiteSize++; } else { _gnutls_handshake_log("HSK[%x]: Removing ciphersuite: %s\n", session, - _gnutls_cipher_suite_get_name(* - ((GNUTLS_CipherSuite *) & (*cipherSuites)[i].CipherSuite))); + _gnutls_cipher_suite_get_name(cs)); } } |