diff options
| -rw-r--r-- | Library/Formula/gloox.rb | 64 |
1 files changed, 63 insertions, 1 deletions
diff --git a/Library/Formula/gloox.rb b/Library/Formula/gloox.rb index ebcab075e..56c9570e8 100644 --- a/Library/Formula/gloox.rb +++ b/Library/Formula/gloox.rb @@ -5,6 +5,15 @@ class Gloox <Formula homepage 'http://camaya.net/glooxdownload' md5 'f8eacf1c6476e0a309b453fd04f90e31' + depends_on 'gnutls' + depends_on 'pkg-config' + + def patches + # Fix memory leak + # http://bugs.camaya.net/horde/whups/ticket/?id=181 + DATA + end + def install system "./configure", "--without-openssl", "--with-gnutls", @@ -13,4 +22,57 @@ class Gloox <Formula "--prefix=#{prefix}" system "make install" end -end
\ No newline at end of file +end + +__END__ +diff --git a/src/tlsgnutlsbase.cpp b/src/tlsgnutlsbase.cpp +index d98c802..37f702d 100644 +--- a/src/tlsgnutlsbase.cpp ++++ b/src/tlsgnutlsbase.cpp +@@ -97,7 +97,7 @@ namespace gloox + gnutls_bye( *m_session, GNUTLS_SHUT_RDWR ); + gnutls_db_remove_session( *m_session ); + gnutls_credentials_clear( *m_session ); +- if( m_secure ) ++ if( m_session ) + gnutls_deinit( *m_session ); + + m_secure = false; +diff --git a/src/tlsgnutlsclient.cpp b/src/tlsgnutlsclient.cpp +index c1d24c2..d250f32 100644 +--- a/src/tlsgnutlsclient.cpp ++++ b/src/tlsgnutlsclient.cpp +@@ -33,6 +33,8 @@ namespace gloox + void GnuTLSClient::cleanup() + { + GnuTLSBase::cleanup(); ++ if (m_credentials) ++ gnutls_certificate_free_credentials( m_credentials ); + init(); + } + +@@ -120,6 +122,7 @@ namespace gloox + m_certInfo.status |= CertSignerNotCa; + const gnutls_datum_t* certList = 0; + unsigned int certListSize; ++ unsigned int certListSizeFull; + if( !error && ( ( certList = gnutls_certificate_get_peers( *m_session, &certListSize ) ) == 0 ) ) + error = true; + +@@ -131,6 +134,7 @@ namespace gloox + error = true; + } + ++ certListSizeFull = certListSize; + if( ( gnutls_x509_crt_check_issuer( cert[certListSize-1], cert[certListSize-1] ) > 0 ) + && certListSize > 0 ) + certListSize--; +@@ -189,7 +193,7 @@ namespace gloox + if( !gnutls_x509_crt_check_hostname( cert[0], m_server.c_str() ) ) + m_certInfo.status |= CertWrongPeer; + +- for( unsigned int i = 0; i < certListSize; ++i ) ++ for( unsigned int i = 0; i < certListSizeFull; ++i ) + gnutls_x509_crt_deinit( cert[i] ); + + delete[] cert; |
