Index: gnupg-2.0.16/common/pka.c =================================================================== --- gnupg-2.0.16/common/pka.c +++ gnupg-2.0.16/common/pka.c @@ -173,7 +173,11 @@ return buffer; #else /*!USE_ADNS*/ - unsigned char answer[PACKETSZ]; + union + { + signed char p[PACKETSZ]; + HEADER h; + } answer; int anslen; int qdcount, ancount, nscount, arcount; int rc; @@ -192,11 +196,11 @@ memcpy (name, address, domain - address); strcpy (stpcpy (name + (domain-address), "._pka."), domain+1); - anslen = res_query (name, C_IN, T_TXT, answer, PACKETSZ); + anslen = res_query (name, C_IN, T_TXT, answer.p, PACKETSZ); xfree (name); if (anslen < sizeof(HEADER)) return NULL; /* DNS resolver returned a too short answer. */ - if ( (rc=((HEADER*)answer)->rcode) != NOERROR ) + if ( (rc=answer.h.rcode) != NOERROR ) return NULL; /* DNS resolver returned an error. */ /* We assume that PACKETSZ is large enough and don't do dynmically @@ -204,16 +208,16 @@ if (anslen > PACKETSZ) return NULL; /* DNS resolver returned a too long answer */ - qdcount = ntohs (((HEADER*)answer)->qdcount); - ancount = ntohs (((HEADER*)answer)->ancount); - nscount = ntohs (((HEADER*)answer)->nscount); - arcount = ntohs (((HEADER*)answer)->arcount); + qdcount = ntohs (answer.h.qdcount); + ancount = ntohs (answer.h.ancount); + nscount = ntohs (answer.h.nscount); + arcount = ntohs (answer.h.arcount); if (!ancount) return NULL; /* Got no answer. */ - p = answer + sizeof (HEADER); - pend = answer + anslen; /* Actually points directly behind the buffer. */ + p = answer.p + sizeof (HEADER); + pend = answer.p + anslen; /* Actually points directly behind the buffer. */ while (qdcount-- && p < pend) { Index: gnupg-2.0.16/g10/import.c =================================================================== --- gnupg-2.0.16/g10/import.c +++ gnupg-2.0.16/g10/import.c @@ -182,7 +182,10 @@ const char *fname = fnames? fnames[i] : NULL; IOBUF inp2 = iobuf_open(fname); if( !fname ) + { fname = "[stdin]"; + i = nnames - 1; /* Break out of the loop */ + } if (inp2 && is_secured_file (iobuf_get_fd (inp2))) { iobuf_close (inp2); @@ -201,8 +204,6 @@ log_error("import from `%s' failed: %s\n", fname, g10_errstr(rc) ); } - if( !fname ) - break; } } if (!stats_handle) { Index: gnupg-2.0.16/g10/keygen.c =================================================================== --- gnupg-2.0.16/g10/keygen.c +++ gnupg-2.0.16/g10/keygen.c @@ -2247,7 +2247,7 @@ xfree(answer); } xfree(answer); - if( !amail && !acomment && !amail ) + if( !aname && !acomment && !amail ) break; xfree(uid); uid = NULL; } Index: gnupg-2.0.16/g10/sign.c =================================================================== --- gnupg-2.0.16/g10/sign.c +++ gnupg-2.0.16/g10/sign.c @@ -867,8 +867,8 @@ { if (sk_rover->sk->pubkey_algo == PUBKEY_ALGO_DSA) { - int temp_hashlen = gcry_mpi_get_nbits - (sk_rover->sk->skey[1])+7/8; + int temp_hashlen = (gcry_mpi_get_nbits + (sk_rover->sk->skey[1])+7)/8; /* Pick a hash that is large enough for our largest q */ Index: gnupg-2.0.16/keyserver/gpgkeys_curl.c =================================================================== --- gnupg-2.0.16/keyserver/gpgkeys_curl.c +++ gnupg-2.0.16/keyserver/gpgkeys_curl.c @@ -259,7 +259,7 @@ if(opt->timeout && register_timeout()==-1) { fprintf(console,"gpgkeys: unable to register timeout handler\n"); - return KEYSERVER_INTERNAL_ERROR; + goto fail; } curl_global_init(CURL_GLOBAL_DEFAULT); Index: gnupg-2.0.16/keyserver/gpgkeys_hkp.c =================================================================== --- gnupg-2.0.16/keyserver/gpgkeys_hkp.c +++ gnupg-2.0.16/keyserver/gpgkeys_hkp.c @@ -707,7 +707,7 @@ if(opt->timeout && register_timeout()==-1) { fprintf(console,"gpgkeys: unable to register timeout handler\n"); - return KEYSERVER_INTERNAL_ERROR; + goto fail; } curl_global_init(CURL_GLOBAL_DEFAULT); Index: gnupg-2.0.16/keyserver/gpgkeys_ldap.c =================================================================== --- gnupg-2.0.16/keyserver/gpgkeys_ldap.c +++ gnupg-2.0.16/keyserver/gpgkeys_ldap.c @@ -1995,7 +1995,7 @@ if(opt->timeout && register_timeout()==-1) { fprintf(console,"gpgkeys: unable to register timeout handler\n"); - return KEYSERVER_INTERNAL_ERROR; + goto fail; } #if defined(LDAP_OPT_X_TLS_CACERTFILE) && defined(HAVE_LDAP_SET_OPTION) @@ -2375,5 +2375,9 @@ free(basekeyspacedn); + free(bindpw); + + free(binddn); + return ret; }