diff --git a/Python/getargs.c b/Python/getargs.c
index 0579aff..f949da8 100644
--- a/Python/getargs.c
+++ b/Python/getargs.c
@@ -471,6 +471,16 @@
 			long ival = PyInt_AsLong(arg);
 			if (ival == -1 && PyErr_Occurred())
 				return "integer<b>";
+			else if (ival < CHAR_MIN) {
+				PyErr_SetString(PyExc_OverflowError,
+					"byte integer is less than minimum");
+				return "integer<b>";
+			}
+			else if (ival > CHAR_MAX && ival >= 256) {
+				PyErr_SetString(PyExc_OverflowError,
+				    "byte integer is greater than maximum");
+				return "integer<b>";
+			}
 			else
 				*p = (char) ival;
 			break;
@@ -482,6 +492,16 @@
 			long ival = PyInt_AsLong(arg);
 			if (ival == -1 && PyErr_Occurred())
 				return "integer<h>";
+			else if (ival < SHRT_MIN) {
+				PyErr_SetString(PyExc_OverflowError,
+					"short integer is less than minimum");
+				return "integer<h>";
+			}
+			else if (ival > SHRT_MAX) {
+				PyErr_SetString(PyExc_OverflowError,
+				  "short integer is greater than maximum");
+				return "integer<h>";
+			}
 			else
 				*p = (short) ival;
 			break;
@@ -493,6 +513,16 @@
 			long ival = PyInt_AsLong(arg);
 			if (ival == -1 && PyErr_Occurred())
 				return "integer<i>";
+			else if (ival < INT_MIN) {
+				PyErr_SetString(PyExc_OverflowError,
+					"integer is less than minimum");
+				return "integer<i>";
+			}
+			else if (ival > INT_MAX) {
+				PyErr_SetString(PyExc_OverflowError,
+				  "integer is greater than maximum");
+				return "integer<i>";
+			}
 			else
 				*p = ival;
 			break;
@@ -572,8 +602,8 @@
 	case 's': /* string */
 		{
 			if (*format == '#') { /* any buffer-like object */
-			        void **p = (void **)va_arg(*p_va, char **);
-			        PyBufferProcs *pb = arg->ob_type->tp_as_buffer;
+				void **p = (void **)va_arg(*p_va, char **);
+				PyBufferProcs *pb = arg->ob_type->tp_as_buffer;
 				int *q = va_arg(*p_va, int *);
 				int count;
 
@@ -589,9 +619,9 @@
 				*q = count;
 				format++;
 			} else {
-			        char **p = va_arg(*p_va, char **);
+				char **p = va_arg(*p_va, char **);
 			
-			        if (PyString_Check(arg))
+				if (PyString_Check(arg))
 				    *p = PyString_AS_STRING(arg);
 				else if (PyUnicode_Check(arg)) {
 				    arg = _PyUnicode_AsUTF8String(arg, NULL);
@@ -610,8 +640,8 @@
 	case 'z': /* string, may be NULL (None) */
 		{
 			if (*format == '#') { /* any buffer-like object */
-			        void **p = (void **)va_arg(*p_va, char **);
-			        PyBufferProcs *pb = arg->ob_type->tp_as_buffer;
+				void **p = (void **)va_arg(*p_va, char **);
+				PyBufferProcs *pb = arg->ob_type->tp_as_buffer;
 				int *q = va_arg(*p_va, int *);
 				int count;
 
@@ -632,9 +662,9 @@
 				}
 				format++;
 			} else {
-			        char **p = va_arg(*p_va, char **);
+				char **p = va_arg(*p_va, char **);
 			
-			        if (arg == Py_None)
+				if (arg == Py_None)
 				  *p = 0;
 				else if (PyString_Check(arg))
 				  *p = PyString_AsString(arg);
@@ -780,8 +810,8 @@
 	case 'u': /* raw unicode buffer (Py_UNICODE *) */
 		{
 			if (*format == '#') { /* any buffer-like object */
-			        void **p = (void **)va_arg(*p_va, char **);
-			        PyBufferProcs *pb = arg->ob_type->tp_as_buffer;
+				void **p = (void **)va_arg(*p_va, char **);
+				PyBufferProcs *pb = arg->ob_type->tp_as_buffer;
 				int *q = va_arg(*p_va, int *);
 				int count;
 
@@ -799,9 +829,9 @@
 				*q = count/(sizeof(Py_UNICODE)); 
 				format++;
 			} else {
-			        Py_UNICODE **p = va_arg(*p_va, Py_UNICODE **);
+				Py_UNICODE **p = va_arg(*p_va, Py_UNICODE **);
 			
-			        if (PyUnicode_Check(arg))
+				if (PyUnicode_Check(arg))
 				    *p = PyUnicode_AS_UNICODE(arg);
 				else
 				  return "unicode";
@@ -850,7 +880,7 @@
 				if ((*pred)(arg)) 
 					*p = arg;
 				else
-				         return "(unspecified)";
+					return "(unspecified)";
 				
 			}
 			else if (*format == '&') {
@@ -1161,7 +1191,7 @@
 			}
 			if (!match) {
 				sprintf(msgbuf,
-		         "%s is an invalid keyword argument for this function",
+			"%s is an invalid keyword argument for this function",
 					ks);
 				PyErr_SetString(PyExc_TypeError, msgbuf);
 				return 0;
