[svn-commits] rmudgett: branch 1.4 r305888 - in /branches/1.4: apps/ channels/ main/

SVN commits to the Digium repositories svn-commits at lists.digium.com
Wed Feb 2 18:02:50 CST 2011


Author: rmudgett
Date: Wed Feb  2 18:02:43 2011
New Revision: 305888

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=305888
Log:
Minor AST_FRAME_TEXT related issues.

* Include the null terminator in the buffer length.  When the frame is
queued it is copied.  If the null terminator is not part of the frame
buffer length, the receiver could see garbage appended onto it.

* Add channel lock protection with ast_sendtext().

Modified:
    branches/1.4/apps/app_sendtext.c
    branches/1.4/channels/chan_sip.c
    branches/1.4/main/channel.c

Modified: branches/1.4/apps/app_sendtext.c
URL: http://svnview.digium.com/svn/asterisk/branches/1.4/apps/app_sendtext.c?view=diff&rev=305888&r1=305887&r2=305888
==============================================================================
--- branches/1.4/apps/app_sendtext.c (original)
+++ branches/1.4/apps/app_sendtext.c Wed Feb  2 18:02:43 2011
@@ -105,10 +105,10 @@
 		return 0;
 	}
 	status = "FAILURE";
-	ast_channel_unlock(chan);
 	res = ast_sendtext(chan, args.text);
 	if (!res)
 		status = "SUCCESS";
+	ast_channel_unlock(chan);
 	pbx_builtin_setvar_helper(chan, "SENDTEXTSTATUS", status);
 	ast_module_user_remove(u);
 	return 0;

Modified: branches/1.4/channels/chan_sip.c
URL: http://svnview.digium.com/svn/asterisk/branches/1.4/channels/chan_sip.c?view=diff&rev=305888&r1=305887&r2=305888
==============================================================================
--- branches/1.4/channels/chan_sip.c (original)
+++ branches/1.4/channels/chan_sip.c Wed Feb  2 18:02:43 2011
@@ -11044,7 +11044,7 @@
 		f.subclass = 0;
 		f.offset = 0;
 		f.data = buf;
-		f.datalen = strlen(buf);
+		f.datalen = strlen(buf) + 1;
 		ast_queue_frame(p->owner, &f);
 		transmit_response(p, "202 Accepted", req); /* We respond 202 accepted, since we relay the message */
 	} else { /* Message outside of a call, we do not support that */

Modified: branches/1.4/main/channel.c
URL: http://svnview.digium.com/svn/asterisk/branches/1.4/main/channel.c?view=diff&rev=305888&r1=305887&r2=305888
==============================================================================
--- branches/1.4/main/channel.c (original)
+++ branches/1.4/main/channel.c Wed Feb  2 18:02:43 2011
@@ -2905,13 +2905,18 @@
 int ast_sendtext(struct ast_channel *chan, const char *text)
 {
 	int res = 0;
+
+	ast_channel_lock(chan);
 	/* Stop if we're a zombie or need a soft hangup */
-	if (ast_test_flag(chan, AST_FLAG_ZOMBIE) || ast_check_hangup(chan))
+	if (ast_test_flag(chan, AST_FLAG_ZOMBIE) || ast_check_hangup(chan)) {
+		ast_channel_unlock(chan);
 		return -1;
+	}
 	CHECK_BLOCKING(chan);
 	if (chan->tech->send_text)
 		res = chan->tech->send_text(chan, text);
 	ast_clear_flag(chan, AST_FLAG_BLOCKING);
+	ast_channel_unlock(chan);
 	return res;
 }
 




More information about the svn-commits mailing list