diff --git a/src/strings.c b/src/strings.c
index 20ca65d..b8ea00b 100644
--- a/src/strings.c
+++ b/src/strings.c
@@ -2497,7 +2497,8 @@
 get_unsigned_int(
     const char *pstart,
     const char **p,
-    unsigned int *uj)
+    unsigned int *uj,
+    int overflow_err)
 {
     *uj = **p - '0';
     ++*p;
@@ -2510,8 +2511,13 @@
 
     if (*uj > MAX_ALLOWED_STRING_WIDTH)
     {
-	format_overflow_error(pstart);
-	return FAIL;
+	if (overflow_err)
+	{
+	    format_overflow_error(pstart);
+	    return FAIL;
+	}
+	else
+	    *uj = MAX_ALLOWED_STRING_WIDTH;
     }
 
     return OK;
@@ -2584,7 +2590,7 @@
 		// Positional argument
 		unsigned int uj;
 
-		if (get_unsigned_int(pstart, &p, &uj) == FAIL)
+		if (get_unsigned_int(pstart, &p, &uj, tvs != NULL) == FAIL)
 		    goto error;
 
 		pos_arg = uj;
@@ -2625,7 +2631,7 @@
 		    // Positional argument field width
 		    unsigned int uj;
 
-		    if (get_unsigned_int(arg + 1, &p, &uj) == FAIL)
+		    if (get_unsigned_int(arg + 1, &p, &uj, tvs != NULL) == FAIL)
 			goto error;
 
 		    if (*p != '$')
@@ -2656,7 +2662,7 @@
 		const char *digstart = p;
 		unsigned int uj;
 
-		if (get_unsigned_int(digstart, &p, &uj) == FAIL)
+		if (get_unsigned_int(digstart, &p, &uj, tvs != NULL) == FAIL)
 		    goto error;
 
 		if (*p == '$')
@@ -2680,7 +2686,7 @@
 			// Parse precision
 			unsigned int uj;
 
-			if (get_unsigned_int(arg + 1, &p, &uj) == FAIL)
+			if (get_unsigned_int(arg + 1, &p, &uj, tvs != NULL) == FAIL)
 			    goto error;
 
 			if (*p == '$')
@@ -2712,7 +2718,7 @@
 		    const char *digstart = p;
 		    unsigned int uj;
 
-		    if (get_unsigned_int(digstart, &p, &uj) == FAIL)
+		    if (get_unsigned_int(digstart, &p, &uj, tvs != NULL) == FAIL)
 			goto error;
 
 		    if (*p == '$')
@@ -3025,7 +3031,7 @@
 		const char *digstart = p;
 		unsigned int uj;
 
-		if (get_unsigned_int(digstart, &p, &uj) == FAIL)
+		if (get_unsigned_int(digstart, &p, &uj, tvs != NULL) == FAIL)
 		    goto error;
 
 		pos_arg = uj;
@@ -3067,7 +3073,7 @@
 		    // Positional argument field width
 		    unsigned int uj;
 
-		    if (get_unsigned_int(digstart, &p, &uj) == FAIL)
+		    if (get_unsigned_int(digstart, &p, &uj, tvs != NULL) == FAIL)
 			goto error;
 
 		    arg_idx = uj;
@@ -3085,8 +3091,13 @@
 
 		if (j > MAX_ALLOWED_STRING_WIDTH)
 		{
-		    format_overflow_error(digstart);
-		    goto error;
+		    if (tvs != NULL)
+		    {
+			format_overflow_error(digstart);
+			goto error;
+		    }
+		    else
+			j = MAX_ALLOWED_STRING_WIDTH;
 		}
 
 		if (j >= 0)
@@ -3104,15 +3115,9 @@
 		const char *digstart = p;
 		unsigned int uj;
 
-		if (get_unsigned_int(digstart, &p, &uj) == FAIL)
+		if (get_unsigned_int(digstart, &p, &uj, tvs != NULL) == FAIL)
 		    goto error;
 
-		if (uj > MAX_ALLOWED_STRING_WIDTH)
-		{
-		    format_overflow_error(digstart);
-		    goto error;
-		}
-
 		min_field_width = uj;
 	    }
 
@@ -3129,15 +3134,9 @@
 		    const char *digstart = p;
 		    unsigned int uj;
 
-		    if (get_unsigned_int(digstart, &p, &uj) == FAIL)
+		    if (get_unsigned_int(digstart, &p, &uj, tvs != NULL) == FAIL)
 			goto error;
 
-		    if (uj > MAX_ALLOWED_STRING_WIDTH)
-		    {
-			format_overflow_error(digstart);
-			goto error;
-		    }
-
 		    precision = uj;
 		}
 		else if (*p == '*')
@@ -3152,7 +3151,7 @@
 			// positional argument
 			unsigned int uj;
 
-			if (get_unsigned_int(digstart, &p, &uj) == FAIL)
+			if (get_unsigned_int(digstart, &p, &uj, tvs != NULL) == FAIL)
 			    goto error;
 
 			arg_idx = uj;
@@ -3170,8 +3169,13 @@
 
 		    if (j > MAX_ALLOWED_STRING_WIDTH)
 		    {
-			format_overflow_error(digstart);
-			goto error;
+			if (tvs != NULL)
+			{
+			    format_overflow_error(digstart);
+			    goto error;
+			}
+			else
+			    j = MAX_ALLOWED_STRING_WIDTH;
 		    }
 
 		    if (j >= 0)
