Hoping to avoid a crash in OSX for a problem blitzrage found
authorSteve Murphy <murf@digium.com>
Tue, 6 Nov 2007 19:40:33 +0000 (19:40 +0000)
committerSteve Murphy <murf@digium.com>
Tue, 6 Nov 2007 19:40:33 +0000 (19:40 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@89051 65c4cc65-6c06-0410-ace0-fbb531ad65f3

main/ast_expr2.fl
main/ast_expr2f.c

index 9f2d993..8d422ad 100644 (file)
@@ -264,13 +264,17 @@ int ast_expr(char *expr, char *buf, int length, struct ast_channel *chan)
                        res_length = snprintf(buf, length, FP___PRINTF, io.val->u.i);
                        return_value = (res_length <= length) ? res_length : length;
                } else {
+                       if (io.val->u.s)
 #if defined(STANDALONE) || defined(LOW_MEMORY) || defined(STANDALONE_AEL)
-                       strncpy(buf, io.val->u.s, length - 1);
+                               strncpy(buf, io.val->u.s, length - 1);
 #else /* !STANDALONE && !LOW_MEMORY */
-                       ast_copy_string(buf, io.val->u.s, length);
+                               ast_copy_string(buf, io.val->u.s, length);
 #endif /* STANDALONE || LOW_MEMORY */
+                       else
+                               buf[0] = 0;
                        return_value = strlen(buf);
-                       free(io.val->u.s);
+                       if (io.val->u.s)
+                               free(io.val->u.s);
                }
                free(io.val);
        }
index 2430465..c9ae8de 100644 (file)
@@ -3207,13 +3207,17 @@ int ast_expr(char *expr, char *buf, int length, struct ast_channel *chan)
                        res_length = snprintf(buf, length, FP___PRINTF, io.val->u.i);
                        return_value = (res_length <= length) ? res_length : length;
                } else {
+                       if (io.val->u.s)
 #if defined(STANDALONE) || defined(LOW_MEMORY) || defined(STANDALONE_AEL)
-                       strncpy(buf, io.val->u.s, length - 1);
+                               strncpy(buf, io.val->u.s, length - 1);
 #else /* !STANDALONE && !LOW_MEMORY */
-                       ast_copy_string(buf, io.val->u.s, length);
+                               ast_copy_string(buf, io.val->u.s, length);
 #endif /* STANDALONE || LOW_MEMORY */
+                       else
+                               buf[0] = 0;
                        return_value = strlen(buf);
-                       free(io.val->u.s);
+                       if (io.val->u.s)
+                               free(io.val->u.s);
                }
                free(io.val);
        }