Mercurial > hg > octave-nkf
diff src/file-io.cc @ 1086:75fc98220389
[project @ 1995-01-31 04:17:15 by jwe]
author | jwe |
---|---|
date | Tue, 31 Jan 1995 04:17:15 +0000 |
parents | e34efb49a229 |
children | b2b7c5264ac2 |
line wrap: on
line diff
--- a/src/file-io.cc +++ b/src/file-io.cc @@ -165,7 +165,7 @@ if (! error_state) { - if ((double) NINT (file_num) != file_num) + if (D_NINT (file_num) != file_num) error ("file number not an integer value"); else { @@ -398,6 +398,12 @@ if (error_state) return retval; + if (xisnan (dlen)) + { + error ("fgets: NaN invalid as length"); + return retval; + } + int length = NINT (dlen); if ((double) length != dlen) @@ -620,6 +626,12 @@ if (error_state) return retval; + if (xisnan (doff)) + { + error ("fseek: NaN invalid as offset"); + return retval; + } + long offset = NINT (doff); if ((double) offset != doff) @@ -635,6 +647,12 @@ if (error_state) return retval; + if (xisnan (dorig)) + { + error ("fseek: NaN invalid as origin"); + return retval; + } + origin = NINT (dorig); if ((double) dorig != origin) @@ -774,7 +792,7 @@ double tmp_len = args(fmt_arg_count++).double_value (); - if (error_state) + if (error_state || xisnan (tmp_len)) { error ("%s: `*' must be replaced by an integer", type); return -1; @@ -815,7 +833,7 @@ double tmp_len = args(fmt_arg_count++).double_value (); - if (error_state) + if (error_state || xisnan (tmp_len)) { error ("%s: `*' must be replaced by an integer", type); return -1; @@ -858,9 +876,12 @@ { double d = args(fmt_arg_count++).double_value (); + if (error_state || xisnan (d)) + goto invalid_conversion; + int val = NINT (d); - if (error_state || (double) val != d) + if ((double) val != d) goto invalid_conversion; else { @@ -1618,24 +1639,53 @@ if (xisinf (dnr)) { - nc = NINT (dnc); - int n = num_items_remaining (fptr, prec); - nr = n / nc; - if (n > nr * nc) - nr++; + if (xisnan (dnc)) + { + error ("fread: NaN invalid as the number of columns"); + return retval; + } + else + { + nc = NINT (dnc); + int n = num_items_remaining (fptr, prec); + nr = n / nc; + if (n > nr * nc) + nr++; + } } else if (xisinf (dnc)) { - nr = NINT (dnr); - int n = num_items_remaining (fptr, prec); - nc = n / nr; - if (n > nc * nr) - nc++; + if (xisnan (dnr)) + { + error ("fread: NaN invalid as the number of rows"); + return retval; + } + else + { + nr = NINT (dnr); + int n = num_items_remaining (fptr, prec); + nc = n / nr; + if (n > nc * nr) + nc++; + } } else { - nr = NINT (dnr); - nc = NINT (dnc); + if (xisnan (dnr)) + { + error ("fread: NaN invalid as the number of rows"); + return retval; + } + else + nr = NINT (dnr); + + if (xisnan (dnc)) + { + error ("fread: NaN invalid as the number of columns"); + return retval; + } + else + nc = NINT (dnc); } } else