[Commit] nickle ChangeLog,1.37,1.38 string.5c,1.5,1.6

Bart Massey commit at keithp.com
Fri Apr 16 11:09:28 PDT 2004


Committed by: bart

Update of /local/src/CVS/nickle
In directory home.keithp.com:/tmp/cvs-serv29159

Modified Files:
	ChangeLog string.5c 
Log Message:
	* string.5c: (parse_csv, _dequote):
	Fixed unclosed string detection case in parse_csv.
	Fixed unclosed string detection in _dequote.
	Fixed function name in parse_csv exception msg.




Index: ChangeLog
===================================================================
RCS file: /local/src/CVS/nickle/ChangeLog,v
retrieving revision 1.37
retrieving revision 1.38
diff -u -d -r1.37 -r1.38
--- a/ChangeLog	16 Apr 2004 09:34:30 -0000	1.37
+++ b/ChangeLog	16 Apr 2004 18:09:26 -0000	1.38
@@ -1,3 +1,10 @@
+2004-04-16  Bart Massey  <bart at cs.pdx.edu>
+
+	* string.5c: (parse_csv, _dequote):
+	Fixed unclosed string detection case in parse_csv.
+	Fixed unclosed string detection in _dequote.
+	Fixed function name in parse_csv exception msg.
+
 2004-04-15  Bart Massey  <bart at cs.pdx.edu>
 
 	* builtin-string.c: (do_String_substr):

Index: string.5c
===================================================================
RCS file: /local/src/CVS/nickle/string.5c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- a/string.5c	16 Apr 2004 09:34:30 -0000	1.5
+++ b/string.5c	16 Apr 2004 18:09:26 -0000	1.6
@@ -61,8 +61,9 @@
     public string _dequote(string s, quote_context q) {
 	string result = "";
 	qstate t = qstate.normal;
+	int c;
 	for (int cur = 0; cur < length(s); cur++) {
-	    int c = s[cur];
+	    c = s[cur];
 	    switch(t) {
 	    case qstate.normal:
 		if (inchars(c, q.oq)) {
@@ -79,6 +80,7 @@
 		if (inchars(c, q.cq)) {
 		    if (cur != length(s) - 1)
 			raise invalid_argument("_dequote: trailing garbage", 0, s);
+		    t = qstate.normal;
 		    continue;
 		}
 		break;
@@ -88,7 +90,7 @@
 	    }
 	    result = result + String::new(c);
 	}
-	if (q.qq == q.cq && t == qstate.xq)
+	if (t == qstate.normal || t == qstate.xq && inchars(c, q.cq))
 	    return result;
 	raise invalid_argument("_dequote: unexpected end of string", 0, s);
     }
@@ -144,8 +146,9 @@
 	    curs = curs + String::new(c);
 	    cur++;
 	}
-	if (t != qstate.normal)
-	    raise invalid_argument("readcsv: unexpected end of csv line", 0, s);
+	if (t == qstate.openq)
+	    raise invalid_argument("parse_csv: unexpected " +
+				   "end of csv line", 0, s);
 	ss[dim(ss)] = curs;
 	return ss;
     }




More information about the Commit mailing list