fix free memory reads in dictlookup et al

This commit is contained in:
Guido van Rossum 1995-12-08 01:16:31 +00:00
parent e5fe4af070
commit 992ded8f12
2 changed files with 14 additions and 20 deletions

View File

@ -761,7 +761,7 @@ typeobject Mappingtype = {
/* For backward compatibility with old dictionary interface */
static object *last_name_object;
static char *last_name_char;
static char *last_name_char; /* NULL or == getstringvalue(last_name_object) */
object *
getattro(v, name)
@ -797,15 +797,14 @@ dictlookup(v, key)
object *v;
char *key;
{
if (key != last_name_char ||
strcmp(key, getstringvalue(last_name_object)) != 0) {
if (key != last_name_char) {
XDECREF(last_name_object);
last_name_object = newstringobject(key);
if (last_name_object == NULL) {
last_name_char = NULL;
return NULL;
}
last_name_char = key;
last_name_char = getstringvalue(last_name_object);
}
return mappinglookup(v, last_name_object);
}
@ -816,15 +815,14 @@ dictinsert(v, key, item)
char *key;
object *item;
{
if (key != last_name_char ||
strcmp(key, getstringvalue(last_name_object)) != 0) {
if (key != last_name_char) {
XDECREF(last_name_object);
last_name_object = newstringobject(key);
if (last_name_object == NULL) {
last_name_char = NULL;
return -1;
}
last_name_char = key;
last_name_char = getstringvalue(last_name_object);
}
return mappinginsert(v, last_name_object, item);
}
@ -834,15 +832,14 @@ dictremove(v, key)
object *v;
char *key;
{
if (key != last_name_char ||
strcmp(key, getstringvalue(last_name_object)) != 0) {
if (key != last_name_char) {
XDECREF(last_name_object);
last_name_object = newstringobject(key);
if (last_name_object == NULL) {
last_name_char = NULL;
return -1;
}
last_name_char = key;
last_name_char = getstringvalue(last_name_object);
}
return mappingremove(v, last_name_object);
}

View File

@ -761,7 +761,7 @@ typeobject Mappingtype = {
/* For backward compatibility with old dictionary interface */
static object *last_name_object;
static char *last_name_char;
static char *last_name_char; /* NULL or == getstringvalue(last_name_object) */
object *
getattro(v, name)
@ -797,15 +797,14 @@ dictlookup(v, key)
object *v;
char *key;
{
if (key != last_name_char ||
strcmp(key, getstringvalue(last_name_object)) != 0) {
if (key != last_name_char) {
XDECREF(last_name_object);
last_name_object = newstringobject(key);
if (last_name_object == NULL) {
last_name_char = NULL;
return NULL;
}
last_name_char = key;
last_name_char = getstringvalue(last_name_object);
}
return mappinglookup(v, last_name_object);
}
@ -816,15 +815,14 @@ dictinsert(v, key, item)
char *key;
object *item;
{
if (key != last_name_char ||
strcmp(key, getstringvalue(last_name_object)) != 0) {
if (key != last_name_char) {
XDECREF(last_name_object);
last_name_object = newstringobject(key);
if (last_name_object == NULL) {
last_name_char = NULL;
return -1;
}
last_name_char = key;
last_name_char = getstringvalue(last_name_object);
}
return mappinginsert(v, last_name_object, item);
}
@ -834,15 +832,14 @@ dictremove(v, key)
object *v;
char *key;
{
if (key != last_name_char ||
strcmp(key, getstringvalue(last_name_object)) != 0) {
if (key != last_name_char) {
XDECREF(last_name_object);
last_name_object = newstringobject(key);
if (last_name_object == NULL) {
last_name_char = NULL;
return -1;
}
last_name_char = key;
last_name_char = getstringvalue(last_name_object);
}
return mappingremove(v, last_name_object);
}