fix free memory reads in dictlookup et al
This commit is contained in:
parent
e5fe4af070
commit
992ded8f12
|
@ -761,7 +761,7 @@ typeobject Mappingtype = {
|
||||||
/* For backward compatibility with old dictionary interface */
|
/* For backward compatibility with old dictionary interface */
|
||||||
|
|
||||||
static object *last_name_object;
|
static object *last_name_object;
|
||||||
static char *last_name_char;
|
static char *last_name_char; /* NULL or == getstringvalue(last_name_object) */
|
||||||
|
|
||||||
object *
|
object *
|
||||||
getattro(v, name)
|
getattro(v, name)
|
||||||
|
@ -797,15 +797,14 @@ dictlookup(v, key)
|
||||||
object *v;
|
object *v;
|
||||||
char *key;
|
char *key;
|
||||||
{
|
{
|
||||||
if (key != last_name_char ||
|
if (key != last_name_char) {
|
||||||
strcmp(key, getstringvalue(last_name_object)) != 0) {
|
|
||||||
XDECREF(last_name_object);
|
XDECREF(last_name_object);
|
||||||
last_name_object = newstringobject(key);
|
last_name_object = newstringobject(key);
|
||||||
if (last_name_object == NULL) {
|
if (last_name_object == NULL) {
|
||||||
last_name_char = NULL;
|
last_name_char = NULL;
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
last_name_char = key;
|
last_name_char = getstringvalue(last_name_object);
|
||||||
}
|
}
|
||||||
return mappinglookup(v, last_name_object);
|
return mappinglookup(v, last_name_object);
|
||||||
}
|
}
|
||||||
|
@ -816,15 +815,14 @@ dictinsert(v, key, item)
|
||||||
char *key;
|
char *key;
|
||||||
object *item;
|
object *item;
|
||||||
{
|
{
|
||||||
if (key != last_name_char ||
|
if (key != last_name_char) {
|
||||||
strcmp(key, getstringvalue(last_name_object)) != 0) {
|
|
||||||
XDECREF(last_name_object);
|
XDECREF(last_name_object);
|
||||||
last_name_object = newstringobject(key);
|
last_name_object = newstringobject(key);
|
||||||
if (last_name_object == NULL) {
|
if (last_name_object == NULL) {
|
||||||
last_name_char = NULL;
|
last_name_char = NULL;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
last_name_char = key;
|
last_name_char = getstringvalue(last_name_object);
|
||||||
}
|
}
|
||||||
return mappinginsert(v, last_name_object, item);
|
return mappinginsert(v, last_name_object, item);
|
||||||
}
|
}
|
||||||
|
@ -834,15 +832,14 @@ dictremove(v, key)
|
||||||
object *v;
|
object *v;
|
||||||
char *key;
|
char *key;
|
||||||
{
|
{
|
||||||
if (key != last_name_char ||
|
if (key != last_name_char) {
|
||||||
strcmp(key, getstringvalue(last_name_object)) != 0) {
|
|
||||||
XDECREF(last_name_object);
|
XDECREF(last_name_object);
|
||||||
last_name_object = newstringobject(key);
|
last_name_object = newstringobject(key);
|
||||||
if (last_name_object == NULL) {
|
if (last_name_object == NULL) {
|
||||||
last_name_char = NULL;
|
last_name_char = NULL;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
last_name_char = key;
|
last_name_char = getstringvalue(last_name_object);
|
||||||
}
|
}
|
||||||
return mappingremove(v, last_name_object);
|
return mappingremove(v, last_name_object);
|
||||||
}
|
}
|
||||||
|
|
|
@ -761,7 +761,7 @@ typeobject Mappingtype = {
|
||||||
/* For backward compatibility with old dictionary interface */
|
/* For backward compatibility with old dictionary interface */
|
||||||
|
|
||||||
static object *last_name_object;
|
static object *last_name_object;
|
||||||
static char *last_name_char;
|
static char *last_name_char; /* NULL or == getstringvalue(last_name_object) */
|
||||||
|
|
||||||
object *
|
object *
|
||||||
getattro(v, name)
|
getattro(v, name)
|
||||||
|
@ -797,15 +797,14 @@ dictlookup(v, key)
|
||||||
object *v;
|
object *v;
|
||||||
char *key;
|
char *key;
|
||||||
{
|
{
|
||||||
if (key != last_name_char ||
|
if (key != last_name_char) {
|
||||||
strcmp(key, getstringvalue(last_name_object)) != 0) {
|
|
||||||
XDECREF(last_name_object);
|
XDECREF(last_name_object);
|
||||||
last_name_object = newstringobject(key);
|
last_name_object = newstringobject(key);
|
||||||
if (last_name_object == NULL) {
|
if (last_name_object == NULL) {
|
||||||
last_name_char = NULL;
|
last_name_char = NULL;
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
last_name_char = key;
|
last_name_char = getstringvalue(last_name_object);
|
||||||
}
|
}
|
||||||
return mappinglookup(v, last_name_object);
|
return mappinglookup(v, last_name_object);
|
||||||
}
|
}
|
||||||
|
@ -816,15 +815,14 @@ dictinsert(v, key, item)
|
||||||
char *key;
|
char *key;
|
||||||
object *item;
|
object *item;
|
||||||
{
|
{
|
||||||
if (key != last_name_char ||
|
if (key != last_name_char) {
|
||||||
strcmp(key, getstringvalue(last_name_object)) != 0) {
|
|
||||||
XDECREF(last_name_object);
|
XDECREF(last_name_object);
|
||||||
last_name_object = newstringobject(key);
|
last_name_object = newstringobject(key);
|
||||||
if (last_name_object == NULL) {
|
if (last_name_object == NULL) {
|
||||||
last_name_char = NULL;
|
last_name_char = NULL;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
last_name_char = key;
|
last_name_char = getstringvalue(last_name_object);
|
||||||
}
|
}
|
||||||
return mappinginsert(v, last_name_object, item);
|
return mappinginsert(v, last_name_object, item);
|
||||||
}
|
}
|
||||||
|
@ -834,15 +832,14 @@ dictremove(v, key)
|
||||||
object *v;
|
object *v;
|
||||||
char *key;
|
char *key;
|
||||||
{
|
{
|
||||||
if (key != last_name_char ||
|
if (key != last_name_char) {
|
||||||
strcmp(key, getstringvalue(last_name_object)) != 0) {
|
|
||||||
XDECREF(last_name_object);
|
XDECREF(last_name_object);
|
||||||
last_name_object = newstringobject(key);
|
last_name_object = newstringobject(key);
|
||||||
if (last_name_object == NULL) {
|
if (last_name_object == NULL) {
|
||||||
last_name_char = NULL;
|
last_name_char = NULL;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
last_name_char = key;
|
last_name_char = getstringvalue(last_name_object);
|
||||||
}
|
}
|
||||||
return mappingremove(v, last_name_object);
|
return mappingremove(v, last_name_object);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue