[Gnucash-changes] r13416 - gnucash/trunk - Bug#332804: fix infinite loop in parsing malformed functions (e.g. "ipmt(1:2:)").

Joshua Sled jsled at cvs.gnucash.org
Mon Feb 27 20:26:44 EST 2006


Author: jsled
Date: 2006-02-27 20:26:43 -0500 (Mon, 27 Feb 2006)
New Revision: 13416
Trac: http://svn.gnucash.org/trac/changeset/13416

Modified:
   gnucash/trunk/ChangeLog
   gnucash/trunk/src/calculation/expression_parser.c
Log:
Bug#332804: fix infinite loop in parsing malformed functions (e.g. "ipmt(1:2:)").


Modified: gnucash/trunk/ChangeLog
===================================================================
--- gnucash/trunk/ChangeLog	2006-02-28 01:01:44 UTC (rev 13415)
+++ gnucash/trunk/ChangeLog	2006-02-28 01:26:43 UTC (rev 13416)
@@ -1,5 +1,8 @@
 2006-02-27  Joshua Sled  <jsled at asynchronous.org>
 
+	* src/calculation/expression_parser.c (primary_exp): Fix infinite
+	loop in parsing malformed functions (e.g. "ipmt(1:2:)"). Bug#332804.
+
 	* src/app-utils/gnc-exp-parser.c (func_op): No longer crashes on
 	an invalid formula, though it's also not very clear what's going
 	on.  Basically fixes Bug#137885.

Modified: gnucash/trunk/src/calculation/expression_parser.c
===================================================================
--- gnucash/trunk/src/calculation/expression_parser.c	2006-02-28 01:01:44 UTC (rev 13415)
+++ gnucash/trunk/src/calculation/expression_parser.c	2006-02-28 01:26:43 UTC (rev 13416)
@@ -832,9 +832,9 @@
 
     *nstr = EOS;
     if ( funcFlag ) {
-      add_token( pe, FN_TOKEN );
+      add_token(pe, FN_TOKEN);
     } else {
-      add_token (pe, VAR_TOKEN);
+      add_token(pe, VAR_TOKEN);
     }
 
   }
@@ -1147,13 +1147,12 @@
         assignment_op(pe);
         if ( pe->error_code )
           return;
-
-        funcArgCount++;
-        if ( pe->Token == ')' ) {
+        if (!pe->Token || pe->Token == ')') {
           break;
         }
+        funcArgCount++;
         next_token(pe);
-      } while ( pe->Token != ARG_TOKEN );
+      } while (pe->Token != ARG_TOKEN);
 
       if ( pe->Token != ')' ) {
         add_token( pe, EOS );



More information about the gnucash-changes mailing list