Explicitly check for weird values after calling pow().
diff --git a/Objects/floatobject.c b/Objects/floatobject.c
index 77015b9..43cefda 100644
--- a/Objects/floatobject.c
+++ b/Objects/floatobject.c
@@ -37,6 +37,14 @@
 #include <ctype.h>
 #include <math.h>
 
+#ifdef HUGE_VAL
+#define CHECK(x) if (errno != 0) ; \
+	else if (-HUGE_VAL <= (x) && (x) <= HUGE_VAL) ; \
+	else errno = ERANGE
+#else
+#define CHECK(x) /* Don't know how to check */
+#endif
+
 #ifndef THINK_C
 extern double fmod PROTO((double, double));
 extern double pow PROTO((double, double));
@@ -262,6 +270,7 @@
 	}
 	errno = 0;
 	ix = pow(iv, iw);
+	CHECK(ix);
 	if (errno != 0) {
 		/* XXX could it be another type of error? */
 		err_errno(OverflowError);