Index: ext/standard/scanf.c
===================================================================
--- ext/standard/scanf.c	(revision 299276)
+++ ext/standard/scanf.c	(working copy)
@@ -581,7 +581,8 @@
 				int varStart, zval **return_value TSRMLS_DC)
 {
 	int  numVars, nconversions, totalVars = -1;
-	int  i, value, result;
+	int  i, result;
+	long value;
 	int  objIndex;
 	char *end, *baseString;
 	zval **current;
@@ -1059,9 +1060,9 @@
 				 */
 				if (!(flags & SCAN_SUPPRESS)) {
 					*end = '\0';
-					value = (int) (*fn)(buf, NULL, base);
+					value = (long) (*fn)(buf, NULL, base);
 					if ((flags & SCAN_UNSIGNED) && (value < 0)) {
-						snprintf(buf, sizeof(buf), "%u", value); /* INTL: ISO digit */
+						snprintf(buf, sizeof(buf), "%lu", value); /* INTL: ISO digit */
 						if (numVars && objIndex >= argCount) {
 							break;
 						} else if (numVars) {

