From: Guido van Rossum Date: Fri, 8 Dec 1995 01:16:31 +0000 (+0000) Subject: fix free memory reads in dictlookup et al X-Git-Tag: v1.4b1~455 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=992ded8f12bbf8fdbb2bdc59f85b44657bd74629;p=thirdparty%2FPython%2Fcpython.git fix free memory reads in dictlookup et al --- diff --git a/Objects/dictobject.c b/Objects/dictobject.c index 11d344a9742e..42e68d80076a 100644 --- a/Objects/dictobject.c +++ b/Objects/dictobject.c @@ -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); } diff --git a/Objects/mappingobject.c b/Objects/mappingobject.c index 11d344a9742e..42e68d80076a 100644 --- a/Objects/mappingobject.c +++ b/Objects/mappingobject.c @@ -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); }