summaryrefslogtreecommitdiffstats
path: root/Modules
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>1993-11-05 10:14:49 (GMT)
committerGuido van Rossum <guido@python.org>1993-11-05 10:14:49 (GMT)
commit572d2d994df1b865296a1f09bdfeaccf4f51bbd9 (patch)
tree1785fafcd006428fcccfc6d267e26d1ccfc3df60 /Modules
parente77a757094f68351f336044654cd91575c677896 (diff)
downloadcpython-572d2d994df1b865296a1f09bdfeaccf4f51bbd9.zip
cpython-572d2d994df1b865296a1f09bdfeaccf4f51bbd9.tar.gz
cpython-572d2d994df1b865296a1f09bdfeaccf4f51bbd9.tar.bz2
Fix memory leaks in join & joinfields
Diffstat (limited to 'Modules')
-rw-r--r--Modules/stropmodule.c36
1 files changed, 25 insertions, 11 deletions
diff --git a/Modules/stropmodule.c b/Modules/stropmodule.c
index 477d14d..fe67ca0 100644
--- a/Modules/stropmodule.c
+++ b/Modules/stropmodule.c
@@ -37,7 +37,7 @@ strop_split(self, args)
object *self; /* Not used */
object *args;
{
- int len, i, j;
+ int len, i, j, err;
char *s;
char c;
object *list, *item;
@@ -61,7 +61,13 @@ strop_split(self, args)
}
if (j < i) {
item = newsizedstringobject(s+j, (int)(i-j));
- if (item == NULL || addlistitem(list, item) < 0) {
+ if (item == NULL) {
+ DECREF(list);
+ return NULL;
+ }
+ err = addlistitem(list, item);
+ DECREF(item);
+ if (err < 0) {
DECREF(list);
return NULL;
}
@@ -77,7 +83,7 @@ strop_splitfields(self, args)
object *self; /* Not used */
object *args;
{
- int len, n, i, j;
+ int len, n, i, j, err;
char *s, *sub;
object *list, *item;
@@ -96,22 +102,30 @@ strop_splitfields(self, args)
while (i+n <= len) {
if (s[i] == sub[0] && (n == 1 || strncmp(s+i, sub, n) == 0)) {
item = newsizedstringobject(s+j, (int)(i-j));
- if (item == NULL || addlistitem(list, item) < 0) {
- DECREF(list);
- return NULL;
- }
+ if (item == NULL)
+ goto fail;
+ err = addlistitem(list, item);
+ DECREF(item);
+ if (err < 0)
+ goto fail;
i = j = i + n;
}
else
i++;
}
item = newsizedstringobject(s+j, (int)(len-j));
- if (item == NULL || addlistitem(list, item) < 0) {
- DECREF(list);
- return NULL;
- }
+ if (item == NULL)
+ goto fail;
+ err = addlistitem(list, item);
+ DECREF(item);
+ if (err < 0)
+ goto fail;
return list;
+
+ fail:
+ DECREF(list);
+ return NULL;
}