Fix seg fault parsing invalid exponents

Add error message when exponents are incomplete,
for example 5e and 5.e
diff --git a/CHANGES.current b/CHANGES.current
index 07ab418..0618e97 100644
--- a/CHANGES.current
+++ b/CHANGES.current
@@ -7,6 +7,9 @@
 Version 4.0.0 (in progress)
 ===========================
 
+2018-01-14: wsfulton
+            Fix issue #1172. Seg fault parsing invalid exponents in the preprocessor.
+
 2018-01-12: Liryna
             [C#] Patch #1128. Add ToArray function to std::vector wrappers.
 
diff --git a/Examples/test-suite/errors/cpp_invalid_exponents1.i b/Examples/test-suite/errors/cpp_invalid_exponents1.i
new file mode 100644
index 0000000..1ff2c36
--- /dev/null
+++ b/Examples/test-suite/errors/cpp_invalid_exponents1.i
@@ -0,0 +1,4 @@
+%module xxx
+
+void bad(double nn = 5e);
+
diff --git a/Examples/test-suite/errors/cpp_invalid_exponents1.stderr b/Examples/test-suite/errors/cpp_invalid_exponents1.stderr
new file mode 100644
index 0000000..6096114
--- /dev/null
+++ b/Examples/test-suite/errors/cpp_invalid_exponents1.stderr
@@ -0,0 +1,2 @@
+cpp_invalid_exponents1.i:3: Error: Exponent does not have any digits
+cpp_invalid_exponents1.i:3: Error: Syntax error in input(1).
diff --git a/Examples/test-suite/errors/cpp_invalid_exponents2.i b/Examples/test-suite/errors/cpp_invalid_exponents2.i
new file mode 100644
index 0000000..2e07487
--- /dev/null
+++ b/Examples/test-suite/errors/cpp_invalid_exponents2.i
@@ -0,0 +1,4 @@
+%module xxx
+
+void bad(double nn = 6.6e);
+
diff --git a/Examples/test-suite/errors/cpp_invalid_exponents2.stderr b/Examples/test-suite/errors/cpp_invalid_exponents2.stderr
new file mode 100644
index 0000000..e7d1bf0
--- /dev/null
+++ b/Examples/test-suite/errors/cpp_invalid_exponents2.stderr
@@ -0,0 +1,2 @@
+cpp_invalid_exponents2.i:3: Error: Exponent does not have any digits
+cpp_invalid_exponents2.i:3: Error: Syntax error in input(1).
diff --git a/Examples/test-suite/errors/pp_invalid_exponents.i b/Examples/test-suite/errors/pp_invalid_exponents.i
new file mode 100644
index 0000000..73dcdb1
--- /dev/null
+++ b/Examples/test-suite/errors/pp_invalid_exponents.i
@@ -0,0 +1,7 @@
+%module xxx
+
+#if 123e
+#endif
+
+#if 456.e
+#endif
diff --git a/Examples/test-suite/errors/pp_invalid_exponents.stderr b/Examples/test-suite/errors/pp_invalid_exponents.stderr
new file mode 100644
index 0000000..735a31c
--- /dev/null
+++ b/Examples/test-suite/errors/pp_invalid_exponents.stderr
@@ -0,0 +1,6 @@
+:EOF: Error: Exponent does not have any digits
+pp_invalid_exponents.i:3: Warning 202: Could not evaluate expression '123e'
+pp_invalid_exponents.i:3: Warning 202: Error: 'Syntax error'
+:EOF: Error: Exponent does not have any digits
+pp_invalid_exponents.i:6: Warning 202: Could not evaluate expression '456.e'
+pp_invalid_exponents.i:6: Warning 202: Error: 'Syntax error'
diff --git a/Source/Swig/scanner.c b/Source/Swig/scanner.c
index f62ddda..af4a38a 100644
--- a/Source/Swig/scanner.c
+++ b/Source/Swig/scanner.c
@@ -1118,27 +1118,29 @@
       break;
     case 82:
       if ((c = nextchar(s)) == 0) {
-	retract(s, 1);
-	return SWIG_TOKEN_INT;
+	Swig_error(cparse_file, cparse_start_line, "Exponent does not have any digits\n");
+	return SWIG_TOKEN_ERROR;
       }
       if ((isdigit(c)) || (c == '-') || (c == '+'))
 	state = 86;
       else {
 	retract(s, 2);
-	return (SWIG_TOKEN_INT);
+	Swig_error(cparse_file, cparse_start_line, "Exponent does not have any digits\n");
+	return SWIG_TOKEN_ERROR;
       }
       break;
     case 820:
       /* Like case 82, but we've seen a decimal point. */
       if ((c = nextchar(s)) == 0) {
-	retract(s, 1);
-	return SWIG_TOKEN_DOUBLE;
+	Swig_error(cparse_file, cparse_start_line, "Exponent does not have any digits\n");
+	return SWIG_TOKEN_ERROR;
       }
       if ((isdigit(c)) || (c == '-') || (c == '+'))
 	state = 86;
       else {
 	retract(s, 2);
-	return (SWIG_TOKEN_DOUBLE);
+	Swig_error(cparse_file, cparse_start_line, "Exponent does not have any digits\n");
+	return SWIG_TOKEN_ERROR;
       }
       break;
     case 83: