[1130] in BarnOwl Developers
[D-O-H] r1082 - trunk/owl
daemon@ATHENA.MIT.EDU (asedeno@MIT.EDU)
Thu Oct 29 18:13:20 2009
Resent-From: nelhage@mit.edu
Resent-To: barnowl-dev-mtg@charon.mit.edu
X-Original-To: nelhage@nelhage.com
To: dirty-owl-hackers@mit.edu
From: asedeno@MIT.EDU
Reply-to: dirty-owl-hackers@MIT.EDU
Date: Mon, 16 Jun 2008 13:52:24 -0400 (EDT)
Author: asedeno
Date: 2008-06-16 13:52:24 -0400 (Mon, 16 Jun 2008)
New Revision: 1082
Modified:
trunk/owl/ChangeLog
trunk/owl/zephyr.c
Log:
Fix a segfault on retrieving zephyr subs when the user doesn't have any or has expired tickets.
Modified: trunk/owl/ChangeLog
===================================================================
--- trunk/owl/ChangeLog 2008-06-09 23:31:27 UTC (rev 1081)
+++ trunk/owl/ChangeLog 2008-06-16 17:52:24 UTC (rev 1082)
@@ -1,6 +1,8 @@
$Id$
1.0.2
+ * Fix a segfault on retrieving zephyr subs when the user doesn't
+ have any or has expired tickets. -asedeno
* Don't complain about non-existant ~/.owl/startup when starting. -asedeno
1.0.1
Modified: trunk/owl/zephyr.c
===================================================================
--- trunk/owl/zephyr.c 2008-06-09 23:31:27 UTC (rev 1081)
+++ trunk/owl/zephyr.c 2008-06-16 17:52:24 UTC (rev 1082)
@@ -1007,34 +1007,50 @@
{
#ifdef HAVE_LIBZEPHYR
int ret, num, i, one;
+ int buffsize;
ZSubscription_t sub;
- char *out, *tmpbuff;
+ char *out;
one=1;
ret=ZRetrieveSubscriptions(0, &num);
if (ret==ZERR_TOOMANYSUBS) {
return(owl_strdup("Zephyr: too many subscriptions\n"));
- } else if (ret) {
+ } else if (ret || (num <= 0)) {
return(owl_strdup("Zephyr: error retriving subscriptions\n"));
}
- out=owl_malloc(num*500);
- tmpbuff=owl_malloc(num*500);
+ buffsize = (num + 1) * 50;
+ out=owl_malloc(buffsize);
strcpy(out, "");
for (i=0; i<num; i++) {
if ((ret = ZGetSubscriptions(&sub, &one)) != ZERR_NONE) {
owl_free(out);
- owl_free(tmpbuff);
ZFlushSubscriptions();
out=owl_strdup("Error while getting subscriptions\n");
return(out);
} else {
- sprintf(tmpbuff, "<%s,%s,%s>\n%s", sub.zsub_class, sub.zsub_classinst, sub.zsub_recipient, out);
+ int tmpbufflen;
+ char *tmpbuff;
+ tmpbuff = owl_sprintf("<%s,%s,%s>\n%s", sub.zsub_class, sub.zsub_classinst, sub.zsub_recipient, out);
+ tmpbufflen = strlen(tmpbuff) + 1;
+ if (tmpbufflen > buffsize) {
+ char *out2;
+ buffsize = tmpbufflen * 2;
+ out2 = owl_realloc(out, buffsize);
+ if (out2 == NULL) {
+ owl_free(out);
+ owl_free(tmpbuff);
+ ZFlushSubscriptions();
+ out=owl_strdup("Realloc error while getting subscriptions\n");
+ return(out);
+ }
+ out = out2;
+ }
strcpy(out, tmpbuff);
+ owl_free(tmpbuff);
}
}
- owl_free(tmpbuff);
ZFlushSubscriptions();
return(out);
#else