diff extra/NaN/src/str2array.cpp @ 7068:08be2816321a octave-forge

bug fix for uninitialized u[k] causing seg-faults
author schloegl
date Mon, 26 Apr 2010 14:15:23 +0000
parents e49443313691
children b9f35668b55e
line wrap: on
line diff
--- a/extra/NaN/src/str2array.cpp	Mon Apr 26 14:06:03 2010 +0000
+++ b/extra/NaN/src/str2array.cpp	Mon Apr 26 14:15:23 2010 +0000
@@ -250,16 +250,16 @@
 	}		
 
 	/* identify separators */
-	u = (uint8_t*) mxMalloc(slen+1);
+	u = (uint8_t*) mxCalloc(1,slen+1);
 	for (k = 0; k < slen; ) {
 		if (strchr(cdelim,s[k]) != NULL) {
-			u[k] = 1;	// column delimiter
-			while (s[++k]==' ');        // ignore extra space characters
+			u[k] = 1;      // column delimiter
+			while (s[++k]==' ');    // ignore extra space characters
 		}	
 		else if (strchr(rdelim,s[k]) != NULL)
-			u[k++] = 2;	// row delimiter
+			u[k++] = 2;    // row delimiter
 		else 
-			u[k++] = 0; 	// ordinary character 
+			k++; 	       // ordinary character 
 	}
 
 	/* count dimensions and set delimiter elements to 0 */
@@ -271,22 +271,16 @@
 	}	
 	for (k = 0; k < slen; ) {
 		if (u[k]==2) {
-			while ((u[k]==2) && s[k]) {
-				s[k++]=0; 
-				nr++;
-			}
-
+			s[k] = 0; 
+			nr++;
 			if (nc > maxcol) maxcol=nc;
 			nc = 0; 
 		}
 		else if (u[k]==1) {
-			while ((u[k]==1) && s[k]) {
-				s[k++]=0;
-				nc++;
-			}
+			s[k] = 0;
+			nc++;
 		}
-		else 
-			while ((u[k]==0) && s[k]) k++;
+		k++; 
 	}
 	if (nc > maxcol) maxcol=nc;
 	maxcol += (slen>0);