[asterisk-commits] tilghman: trunk r267669 - /trunk/funcs/func_odbc.c

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Thu Jun 3 14:46:49 CDT 2010


Author: tilghman
Date: Thu Jun  3 14:46:42 2010
New Revision: 267669

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=267669
Log:
Handle OOM errors more gracefully.

(closes issue #17084)
 Reported by: falves11
 Patches: 
       issue17084_162_A.diff uploaded by falves11 (license 374)
 Tested by: falves11

Modified:
    trunk/funcs/func_odbc.c

Modified: trunk/funcs/func_odbc.c
URL: http://svnview.digium.com/svn/asterisk/trunk/funcs/func_odbc.c?view=diff&rev=267669&r1=267668&r2=267669
==============================================================================
--- trunk/funcs/func_odbc.c (original)
+++ trunk/funcs/func_odbc.c Thu Jun  3 14:46:42 2010
@@ -221,7 +221,7 @@
 	struct ast_str *insertbuf = ast_str_thread_get(&sql2_buf, 16);
 	const char *status = "FAILURE";
 
-	if (!buf) {
+	if (!buf || !insertbuf) {
 		return -1;
 	}
 
@@ -406,7 +406,7 @@
 	struct ast_str *sql = ast_str_thread_get(&sql_buf, 16);
 	const char *status = "FAILURE";
 
-	if (!sql) {
+	if (!sql || !colnames) {
 		if (chan) {
 			pbx_builtin_setvar_helper(chan, "ODBCSTATUS", status);
 		}
@@ -566,6 +566,21 @@
 			int i;
 			struct ast_str *coldata = ast_str_thread_get(&coldata_buf, 16);
 			char *ptrcoldata;
+
+			if (!coldata) {
+				ast_free(resultset);
+				SQLCloseCursor(stmt);
+				SQLFreeHandle(SQL_HANDLE_STMT, stmt);
+				ast_odbc_release_obj(obj);
+				obj = NULL;
+				pbx_builtin_setvar_helper(chan, "ODBCSTATUS", "MEMERROR");
+				if (chan)
+					ast_autoservice_stop(chan);
+				if (bogus_chan) {
+					ast_channel_release(chan);
+				}
+				return -1;
+			}
 
 			if (y == 0) {
 				char colname[256];
@@ -1126,6 +1141,11 @@
 		char colname[256];
 		SQLULEN maxcol;
 
+		if (!coldata) {
+			AST_RWLIST_UNLOCK(&queries);
+			return CLI_SUCCESS;
+		}
+
 		for (dsn = 0; dsn < 5; dsn++) {
 			if (ast_strlen_zero(query->readhandle[dsn])) {
 				continue;




More information about the asterisk-commits mailing list