From 6773bf9571d715e20aa1725e3cec3b02726300c5 Mon Sep 17 00:00:00 2001
From: ehofman <ehofman>
Date: Sun, 11 Dec 2005 13:12:26 +0000
Subject: [PATCH] Additional checks to io arguments. This prevents fg from
 crashing on invalid arguments.

---
 src/Main/fg_io.cxx | 21 +++++++++++++++++++--
 1 file changed, 19 insertions(+), 2 deletions(-)

diff --git a/src/Main/fg_io.cxx b/src/Main/fg_io.cxx
index dea77dec2..827993b0c 100644
--- a/src/Main/fg_io.cxx
+++ b/src/Main/fg_io.cxx
@@ -203,7 +203,11 @@ FGIO::parse_port_config( const string& config )
 	delete io;
 	return 0;
     }
-
+    
+    if (tokens.size() < 3) {
+      SG_LOG( SG_IO, SG_ALERT, "Incompatible number of network arguments.");
+      return NULL;
+    }
     string medium = tokens[1];
     SG_LOG( SG_IO, SG_INFO, "  medium = " << medium );
 
@@ -217,6 +221,10 @@ FGIO::parse_port_config( const string& config )
     SG_LOG( SG_IO, SG_INFO, "  hertz = " << hertz );
 
     if ( medium == "serial" ) {
+        if ( tokens.size() < 5) {
+          SG_LOG( SG_IO, SG_ALERT, "Incompatible number of arguments for serial communications.");
+	  return NULL;
+        }
 	// device name
 	string device = tokens[4];
 	SG_LOG( SG_IO, SG_INFO, "  device = " << device );
@@ -229,13 +237,22 @@ FGIO::parse_port_config( const string& config )
 	io->set_io_channel( ch );
     } else if ( medium == "file" ) {
 	// file name
+        if ( tokens.size() < 4) {
+          SG_LOG( SG_IO, SG_ALERT, "Incompatible number of arguments for file I/O.");
+	  return NULL;
+        }
+	  
 	string file = tokens[4];
 	SG_LOG( SG_IO, SG_INFO, "  file name = " << file );
 
 	SGFile *ch = new SGFile( file );
 	io->set_io_channel( ch );
     } else if ( medium == "socket" ) {
-	string hostname = tokens[4];
+        if ( tokens.size() < 6) {
+          SG_LOG( SG_IO, SG_ALERT, "Incompatible number of arguments for socket communications.");
+	  return NULL;
+        }
+      	string hostname = tokens[4];
 	string port = tokens[5];
 	string style = tokens[6];