[asterisk-commits] seanbright: branch 1.6.2 r198397 - in /branches/1.6.2: ./ res/res_jabber.c

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Sat May 30 15:22:52 CDT 2009


Author: seanbright
Date: Sat May 30 15:22:48 2009
New Revision: 198397

URL: http://svn.asterisk.org/svn-view/asterisk?view=rev&rev=198397
Log:
Merged revisions 198375 via svnmerge from 
https://origsvn.digium.com/svn/asterisk/trunk

........
  r198375 | seanbright | 2009-05-30 16:11:33 -0400 (Sat, 30 May 2009) | 13 lines
  
  Properly terminate the receive buffer before sending to iksemel.
  
  aji_io_recv takes the maximum number of bytes to read (instead of the total
  buffer size), so we have to subtract 1 from our buffer size.  Without this, when
  we receive packets that are larger than our buffer, iksemel will choke and
  things get wonky.
  
  (closes issue #15232)
  Reported by: lp0
  Patches:
        05302009_res_jabber.c.patch uploaded by seanbright (license 71)
  Tested by: seanbright, lp0
........

Modified:
    branches/1.6.2/   (props changed)
    branches/1.6.2/res/res_jabber.c

Propchange: branches/1.6.2/
------------------------------------------------------------------------------
Binary property 'trunk-merged' - no diff available.

Modified: branches/1.6.2/res/res_jabber.c
URL: http://svn.asterisk.org/svn-view/asterisk/branches/1.6.2/res/res_jabber.c?view=diff&rev=198397&r1=198396&r2=198397
==============================================================================
--- branches/1.6.2/res/res_jabber.c (original)
+++ branches/1.6.2/res/res_jabber.c Sat May 30 15:22:48 2009
@@ -725,8 +725,8 @@
 static int aji_recv (struct aji_client *client, int timeout)
 {
 	int len, ret;
-	char buf[NET_IO_BUF_SIZE -1];
-	char newbuf[NET_IO_BUF_SIZE -1];
+	char buf[NET_IO_BUF_SIZE - 1];
+	char newbuf[NET_IO_BUF_SIZE - 1];
 	int pos = 0;
 	int newbufpos = 0;
 	unsigned char c;
@@ -735,7 +735,7 @@
 	memset(newbuf, 0, sizeof(newbuf));
 
 	while (1) {
-		len = aji_io_recv(client, buf, NET_IO_BUF_SIZE - 1, timeout);
+		len = aji_io_recv(client, buf, NET_IO_BUF_SIZE - 2, timeout);
 		if (len < 0) return IKS_NET_RWERR;
 		if (len == 0) return IKS_NET_EXPIRED;
 		buf[len] = '\0';
@@ -768,8 +768,18 @@
 		ret = iks_parse(client->p, newbuf, 0, 0);
 		memset(newbuf, 0, sizeof(newbuf));
 
+		switch (ret) {
+		case IKS_NOMEM:
+			ast_log(LOG_WARNING, "Parsing failure: Out of memory.\n");
+			break;
+		case IKS_BADXML:
+			ast_log(LOG_WARNING, "Parsing failure: Invalid XML.\n");
+			break;
+		case IKS_HOOK:
+			ast_log(LOG_WARNING, "Parsing failure: Hook returned an error.\n");
+			break;
+		}
 		if (ret != IKS_OK) {
-			ast_log(LOG_WARNING, "XML parsing failed\n");
 			return ret;
 		}
 		ast_debug(3, "XML parsing successful\n");	




More information about the asterisk-commits mailing list