[asterisk-commits] kmoore: branch 10-digiumphones r374931 - /branches/10-digiumphones/apps/

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Fri Oct 12 16:57:03 CDT 2012


Author: kmoore
Date: Fri Oct 12 16:56:59 2012
New Revision: 374931

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=374931
Log:
Avoid a segfault on invalid format names

If a format name was not found by ast_getformatbyname, a NULL pointer
would be passed into ast_format_rate and immediately dereferenced.
This ensures that a valid pointer is used since the structure is
already allocated on the stack.

(closes issue DPH-523)
Reported-by: Steve Pitts

Modified:
    branches/10-digiumphones/apps/app_voicemail.c

Modified: branches/10-digiumphones/apps/app_voicemail.c
URL: http://svnview.digium.com/svn/asterisk/branches/10-digiumphones/apps/app_voicemail.c?view=diff&rev=374931&r1=374930&r2=374931
==============================================================================
--- branches/10-digiumphones/apps/app_voicemail.c (original)
+++ branches/10-digiumphones/apps/app_voicemail.c Fri Oct 12 16:56:59 2012
@@ -5694,12 +5694,13 @@
 	if ((recording_fs = ast_readfile(recdata->recording_file, recdata->recording_ext, NULL, 0, 0, VOICEMAIL_DIR_MODE))) {
 		if (!ast_seekstream(recording_fs, 0, SEEK_END)) {
 			long framelength = ast_tellstream(recording_fs);
-			struct ast_format result;
+			struct ast_format result = {0,};
 			/* XXX This use of ast_getformatbyname seems incorrect here. The file extension does not necessarily correspond
 			 * to the name of the format. For instance, if "raw" were passed in, I don't think ast_getformatbyname would
 			 * find the slinear format
 			 */
-			duration = (int) (framelength / ast_format_rate(ast_getformatbyname(recdata->recording_ext, &result)));
+			ast_getformatbyname(recdata->recording_ext, &result);
+			duration = (int) (framelength / ast_format_rate(&result));
 		}
 	}
 




More information about the asterisk-commits mailing list