Mercurial > hg > nginx-quic
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 |