comparison src/event/ngx_event_openssl.c @ 1974:f32cc6df6bd6

fix memory leak when ssl_verify_client is on
author Igor Sysoev <igor@sysoev.ru>
date Wed, 23 Apr 2008 18:57:25 +0000
parents 52b6be1e2cab
children c4d8867f0162
comparison
equal deleted inserted replaced
1973:54e4d1b6c183 1974:f32cc6df6bd6
1776 return NGX_OK; 1776 return NGX_OK;
1777 } 1777 }
1778 1778
1779 name = X509_get_subject_name(cert); 1779 name = X509_get_subject_name(cert);
1780 if (name == NULL) { 1780 if (name == NULL) {
1781 X509_free(cert);
1781 return NGX_ERROR; 1782 return NGX_ERROR;
1782 } 1783 }
1783 1784
1784 p = X509_NAME_oneline(name, NULL, 0); 1785 p = X509_NAME_oneline(name, NULL, 0);
1785 1786
1787 1788
1788 s->len = len; 1789 s->len = len;
1789 s->data = ngx_palloc(pool, len); 1790 s->data = ngx_palloc(pool, len);
1790 if (s->data == NULL) { 1791 if (s->data == NULL) {
1791 OPENSSL_free(p); 1792 OPENSSL_free(p);
1793 X509_free(cert);
1792 return NGX_ERROR; 1794 return NGX_ERROR;
1793 } 1795 }
1794 1796
1795 ngx_memcpy(s->data, p, len); 1797 ngx_memcpy(s->data, p, len);
1796 1798
1797 OPENSSL_free(p); 1799 OPENSSL_free(p);
1800 X509_free(cert);
1798 1801
1799 return NGX_OK; 1802 return NGX_OK;
1800 } 1803 }
1801 1804
1802 1805
1815 return NGX_OK; 1818 return NGX_OK;
1816 } 1819 }
1817 1820
1818 name = X509_get_issuer_name(cert); 1821 name = X509_get_issuer_name(cert);
1819 if (name == NULL) { 1822 if (name == NULL) {
1823 X509_free(cert);
1820 return NGX_ERROR; 1824 return NGX_ERROR;
1821 } 1825 }
1822 1826
1823 p = X509_NAME_oneline(name, NULL, 0); 1827 p = X509_NAME_oneline(name, NULL, 0);
1824 1828
1826 1830
1827 s->len = len; 1831 s->len = len;
1828 s->data = ngx_palloc(pool, len); 1832 s->data = ngx_palloc(pool, len);
1829 if (s->data == NULL) { 1833 if (s->data == NULL) {
1830 OPENSSL_free(p); 1834 OPENSSL_free(p);
1835 X509_free(cert);
1831 return NGX_ERROR; 1836 return NGX_ERROR;
1832 } 1837 }
1833 1838
1834 ngx_memcpy(s->data, p, len); 1839 ngx_memcpy(s->data, p, len);
1835 1840
1836 OPENSSL_free(p); 1841 OPENSSL_free(p);
1842 X509_free(cert);
1837 1843
1838 return NGX_OK; 1844 return NGX_OK;
1839 } 1845 }
1840 1846
1841 1847
1853 return NGX_OK; 1859 return NGX_OK;
1854 } 1860 }
1855 1861
1856 bio = BIO_new(BIO_s_mem()); 1862 bio = BIO_new(BIO_s_mem());
1857 if (bio == NULL) { 1863 if (bio == NULL) {
1864 X509_free(cert);
1858 return NGX_ERROR; 1865 return NGX_ERROR;
1859 } 1866 }
1860 1867
1861 i2a_ASN1_INTEGER(bio, X509_get_serialNumber(cert)); 1868 i2a_ASN1_INTEGER(bio, X509_get_serialNumber(cert));
1862 len = BIO_pending(bio); 1869 len = BIO_pending(bio);
1863 1870
1864 s->len = len; 1871 s->len = len;
1865 s->data = ngx_palloc(pool, len); 1872 s->data = ngx_palloc(pool, len);
1866 if (s->data == NULL) { 1873 if (s->data == NULL) {
1867 BIO_free(bio); 1874 BIO_free(bio);
1875 X509_free(cert);
1868 return NGX_ERROR; 1876 return NGX_ERROR;
1869 } 1877 }
1870 1878
1871 BIO_read(bio, s->data, len); 1879 BIO_read(bio, s->data, len);
1872 BIO_free(bio); 1880 BIO_free(bio);
1881 X509_free(cert);
1873 1882
1874 return NGX_OK; 1883 return NGX_OK;
1875 } 1884 }
1876 1885
1877 1886