mirror of
https://git.gnunet.org/libmicrohttpd.git
synced 2026-09-25 04:09:31 +03:00
-fix theoretical use-after-free in test on error path
This commit is contained in:
@@ -56,11 +56,11 @@
|
|||||||
#endif /* ! MHD_STATICSTR_LEN_ */
|
#endif /* ! MHD_STATICSTR_LEN_ */
|
||||||
|
|
||||||
#ifndef CURL_VERSION_BITS
|
#ifndef CURL_VERSION_BITS
|
||||||
#define CURL_VERSION_BITS(x,y,z) ((x)<<16|(y)<<8|(z))
|
#define CURL_VERSION_BITS(x,y,z) ((x) << 16 | (y) << 8 | (z))
|
||||||
#endif /* ! CURL_VERSION_BITS */
|
#endif /* ! CURL_VERSION_BITS */
|
||||||
#ifndef CURL_AT_LEAST_VERSION
|
#ifndef CURL_AT_LEAST_VERSION
|
||||||
#define CURL_AT_LEAST_VERSION(x,y,z) \
|
#define CURL_AT_LEAST_VERSION(x,y,z) \
|
||||||
(LIBCURL_VERSION_NUM >= CURL_VERSION_BITS(x, y, z))
|
(LIBCURL_VERSION_NUM >= CURL_VERSION_BITS (x, y, z))
|
||||||
#endif /* ! CURL_AT_LEAST_VERSION */
|
#endif /* ! CURL_AT_LEAST_VERSION */
|
||||||
|
|
||||||
#ifndef _MHD_INSTRMACRO
|
#ifndef _MHD_INSTRMACRO
|
||||||
@@ -74,47 +74,48 @@
|
|||||||
|
|
||||||
#if defined(HAVE___FUNC__)
|
#if defined(HAVE___FUNC__)
|
||||||
#define externalErrorExit(ignore) \
|
#define externalErrorExit(ignore) \
|
||||||
_externalErrorExit_func(NULL, __func__, __LINE__)
|
_externalErrorExit_func (NULL, __func__, __LINE__)
|
||||||
#define externalErrorExitDesc(errDesc) \
|
#define externalErrorExitDesc(errDesc) \
|
||||||
_externalErrorExit_func(errDesc, __func__, __LINE__)
|
_externalErrorExit_func (errDesc, __func__, __LINE__)
|
||||||
#define libcurlErrorExit(ignore) \
|
#define libcurlErrorExit(ignore) \
|
||||||
_libcurlErrorExit_func(NULL, __func__, __LINE__)
|
_libcurlErrorExit_func (NULL, __func__, __LINE__)
|
||||||
#define libcurlErrorExitDesc(errDesc) \
|
#define libcurlErrorExitDesc(errDesc) \
|
||||||
_libcurlErrorExit_func(errDesc, __func__, __LINE__)
|
_libcurlErrorExit_func (errDesc, __func__, __LINE__)
|
||||||
#define mhdErrorExit(ignore) \
|
#define mhdErrorExit(ignore) \
|
||||||
_mhdErrorExit_func(NULL, __func__, __LINE__)
|
_mhdErrorExit_func (NULL, __func__, __LINE__)
|
||||||
#define mhdErrorExitDesc(errDesc) \
|
#define mhdErrorExitDesc(errDesc) \
|
||||||
_mhdErrorExit_func(errDesc, __func__, __LINE__)
|
_mhdErrorExit_func (errDesc, __func__, __LINE__)
|
||||||
#define checkCURLE_OK(libcurlcall) \
|
#define checkCURLE_OK(libcurlcall) \
|
||||||
_checkCURLE_OK_func((libcurlcall), _MHD_STRMACRO(libcurlcall), \
|
_checkCURLE_OK_func ((libcurlcall), _MHD_STRMACRO (libcurlcall), \
|
||||||
__func__, __LINE__)
|
__func__, __LINE__)
|
||||||
#elif defined(HAVE___FUNCTION__)
|
#elif defined(HAVE___FUNCTION__)
|
||||||
#define externalErrorExit(ignore) \
|
#define externalErrorExit(ignore) \
|
||||||
_externalErrorExit_func(NULL, __FUNCTION__, __LINE__)
|
_externalErrorExit_func (NULL, __FUNCTION__, __LINE__)
|
||||||
#define externalErrorExitDesc(errDesc) \
|
#define externalErrorExitDesc(errDesc) \
|
||||||
_externalErrorExit_func(errDesc, __FUNCTION__, __LINE__)
|
_externalErrorExit_func (errDesc, __FUNCTION__, __LINE__)
|
||||||
#define libcurlErrorExit(ignore) \
|
#define libcurlErrorExit(ignore) \
|
||||||
_libcurlErrorExit_func(NULL, __FUNCTION__, __LINE__)
|
_libcurlErrorExit_func (NULL, __FUNCTION__, __LINE__)
|
||||||
#define libcurlErrorExitDesc(errDesc) \
|
#define libcurlErrorExitDesc(errDesc) \
|
||||||
_libcurlErrorExit_func(errDesc, __FUNCTION__, __LINE__)
|
_libcurlErrorExit_func (errDesc, __FUNCTION__, __LINE__)
|
||||||
#define mhdErrorExit(ignore) \
|
#define mhdErrorExit(ignore) \
|
||||||
_mhdErrorExit_func(NULL, __FUNCTION__, __LINE__)
|
_mhdErrorExit_func (NULL, __FUNCTION__, __LINE__)
|
||||||
#define mhdErrorExitDesc(errDesc) \
|
#define mhdErrorExitDesc(errDesc) \
|
||||||
_mhdErrorExit_func(errDesc, __FUNCTION__, __LINE__)
|
_mhdErrorExit_func (errDesc, __FUNCTION__, __LINE__)
|
||||||
#define checkCURLE_OK(libcurlcall) \
|
#define checkCURLE_OK(libcurlcall) \
|
||||||
_checkCURLE_OK_func((libcurlcall), _MHD_STRMACRO(libcurlcall), \
|
_checkCURLE_OK_func ((libcurlcall), _MHD_STRMACRO (libcurlcall), \
|
||||||
__FUNCTION__, __LINE__)
|
__FUNCTION__, __LINE__)
|
||||||
#else
|
#else
|
||||||
#define externalErrorExit(ignore) _externalErrorExit_func(NULL, NULL, __LINE__)
|
#define externalErrorExit(ignore) _externalErrorExit_func (NULL, NULL, __LINE__)
|
||||||
#define externalErrorExitDesc(errDesc) \
|
#define externalErrorExitDesc(errDesc) \
|
||||||
_externalErrorExit_func(errDesc, NULL, __LINE__)
|
_externalErrorExit_func (errDesc, NULL, __LINE__)
|
||||||
#define libcurlErrorExit(ignore) _libcurlErrorExit_func(NULL, NULL, __LINE__)
|
#define libcurlErrorExit(ignore) _libcurlErrorExit_func (NULL, NULL, __LINE__)
|
||||||
#define libcurlErrorExitDesc(errDesc) \
|
#define libcurlErrorExitDesc(errDesc) \
|
||||||
_libcurlErrorExit_func(errDesc, NULL, __LINE__)
|
_libcurlErrorExit_func (errDesc, NULL, __LINE__)
|
||||||
#define mhdErrorExit(ignore) _mhdErrorExit_func(NULL, NULL, __LINE__)
|
#define mhdErrorExit(ignore) _mhdErrorExit_func (NULL, NULL, __LINE__)
|
||||||
#define mhdErrorExitDesc(errDesc) _mhdErrorExit_func(errDesc, NULL, __LINE__)
|
#define mhdErrorExitDesc(errDesc) _mhdErrorExit_func (errDesc, NULL, __LINE__)
|
||||||
#define checkCURLE_OK(libcurlcall) \
|
#define checkCURLE_OK(libcurlcall) \
|
||||||
_checkCURLE_OK_func((libcurlcall), _MHD_STRMACRO(libcurlcall), NULL, __LINE__)
|
_checkCURLE_OK_func ((libcurlcall), _MHD_STRMACRO (libcurlcall), NULL, \
|
||||||
|
__LINE__)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
@@ -388,7 +389,6 @@ ahc_echo (void *cls,
|
|||||||
mhdErrorExitDesc ("'userhash_hex' is NOT zero");
|
mhdErrorExitDesc ("'userhash_hex' is NOT zero");
|
||||||
else if (NULL != creds->userhash_bin)
|
else if (NULL != creds->userhash_bin)
|
||||||
mhdErrorExitDesc ("'userhash_bin' is NOT NULL");
|
mhdErrorExitDesc ("'userhash_bin' is NOT NULL");
|
||||||
MHD_free (creds);
|
|
||||||
|
|
||||||
dinfo = MHD_digest_auth_get_request_info3 (connection);
|
dinfo = MHD_digest_auth_get_request_info3 (connection);
|
||||||
if (NULL == dinfo)
|
if (NULL == dinfo)
|
||||||
@@ -488,6 +488,7 @@ ahc_echo (void *cls,
|
|||||||
dinfo->realm);
|
dinfo->realm);
|
||||||
mhdErrorExitDesc ("Wrong 'realm'");
|
mhdErrorExitDesc ("Wrong 'realm'");
|
||||||
}
|
}
|
||||||
|
MHD_free (creds);
|
||||||
MHD_free (dinfo);
|
MHD_free (dinfo);
|
||||||
|
|
||||||
check_res = MHD_digest_auth_check3 (connection, REALM, USERNAME,
|
check_res = MHD_digest_auth_check3 (connection, REALM, USERNAME,
|
||||||
|
|||||||
Reference in New Issue
Block a user