Avoid coredumps for CONF_get_...(NULL, ...)
This commit is contained in:
parent
69a03c1799
commit
9eea2be6f1
9
CHANGES
9
CHANGES
@ -3,6 +3,15 @@
|
|||||||
|
|
||||||
Changes between 0.9.6 and 0.9.7 [xx XXX 2000]
|
Changes between 0.9.6 and 0.9.7 [xx XXX 2000]
|
||||||
|
|
||||||
|
*) In the NCONF_...-based implementations for CONF_... queries
|
||||||
|
(crypto/conf/conf_lib.c), if the input LHASH is NULL, avoid using
|
||||||
|
a temporary CONF structure with the data component set to NULL
|
||||||
|
(which gives segmentation faults in lh_retrieve).
|
||||||
|
Instead, use NULL for the CONF pointer in CONF_get_string and
|
||||||
|
CONF_get_number (which may use environment variables) and directly
|
||||||
|
return NULL from CONF_get_section.
|
||||||
|
[Bodo Moeller]
|
||||||
|
|
||||||
*) Fix potential buffer overrun for EBCDIC.
|
*) Fix potential buffer overrun for EBCDIC.
|
||||||
[Ulf Moeller]
|
[Ulf Moeller]
|
||||||
|
|
||||||
|
@ -131,40 +131,63 @@ LHASH *CONF_load_bio(LHASH *conf, BIO *bp,long *eline)
|
|||||||
|
|
||||||
STACK_OF(CONF_VALUE) *CONF_get_section(LHASH *conf,char *section)
|
STACK_OF(CONF_VALUE) *CONF_get_section(LHASH *conf,char *section)
|
||||||
{
|
{
|
||||||
CONF ctmp;
|
if (conf == NULL)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
CONF ctmp;
|
||||||
|
|
||||||
if (default_CONF_method == NULL)
|
if (default_CONF_method == NULL)
|
||||||
default_CONF_method = NCONF_default();
|
default_CONF_method = NCONF_default();
|
||||||
|
|
||||||
default_CONF_method->init(&ctmp);
|
default_CONF_method->init(&ctmp);
|
||||||
ctmp.data = conf;
|
ctmp.data = conf;
|
||||||
return NCONF_get_section(&ctmp, section);
|
return NCONF_get_section(&ctmp, section);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
char *CONF_get_string(LHASH *conf,char *group,char *name)
|
char *CONF_get_string(LHASH *conf,char *group,char *name)
|
||||||
{
|
{
|
||||||
CONF ctmp;
|
if (conf == NULL)
|
||||||
|
{
|
||||||
|
return NCONF_get_string(NULL, group, name);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
CONF ctmp;
|
||||||
|
|
||||||
if (default_CONF_method == NULL)
|
if (default_CONF_method == NULL)
|
||||||
default_CONF_method = NCONF_default();
|
default_CONF_method = NCONF_default();
|
||||||
|
|
||||||
default_CONF_method->init(&ctmp);
|
default_CONF_method->init(&ctmp);
|
||||||
ctmp.data = conf;
|
ctmp.data = conf;
|
||||||
return NCONF_get_string(&ctmp, group, name);
|
return NCONF_get_string(&ctmp, group, name);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
long CONF_get_number(LHASH *conf,char *group,char *name)
|
long CONF_get_number(LHASH *conf,char *group,char *name)
|
||||||
{
|
{
|
||||||
CONF ctmp;
|
|
||||||
int status;
|
int status;
|
||||||
long result = 0;
|
long result = 0;
|
||||||
|
|
||||||
if (default_CONF_method == NULL)
|
if (conf == NULL)
|
||||||
default_CONF_method = NCONF_default();
|
{
|
||||||
|
status = NCONF_get_number_e(NULL, group, name, &result);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
CONF ctmp;
|
||||||
|
|
||||||
|
if (default_CONF_method == NULL)
|
||||||
|
default_CONF_method = NCONF_default();
|
||||||
|
|
||||||
|
default_CONF_method->init(&ctmp);
|
||||||
|
ctmp.data = conf;
|
||||||
|
status = NCONF_get_number_e(&ctmp, group, name, &result);
|
||||||
|
}
|
||||||
|
|
||||||
default_CONF_method->init(&ctmp);
|
|
||||||
ctmp.data = conf;
|
|
||||||
status = NCONF_get_number_e(&ctmp, group, name, &result);
|
|
||||||
if (status == 0)
|
if (status == 0)
|
||||||
{
|
{
|
||||||
/* This function does not believe in errors... */
|
/* This function does not believe in errors... */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user