--- src/sparse.c.orig	2007-06-27 16:30:32.000000000 +0300
+++ src/sparse.c	2008-04-24 20:24:44.000000000 +0300
@@ -246,7 +246,15 @@ sparse_scan_file (struct tar_sparse_file
 	{
 	  if (sp.numbytes == 0)
 	    sp.offset = offset;
-	  sp.numbytes += count;
+	  // Split too big ones. Don't use SIZE_MAX, to make archives
+	  if (sp.numbytes >= 0xffffffff - count) // extractable on 32bit
+	    {
+	      sparse_add_map (st, &sp);
+	      sp.numbytes = count;
+	      sp.offset = offset;
+	    }
+	  else
+	    sp.numbytes += count;
 	  st->archive_file_size += count;
 	  if (!tar_sparse_scan (file, scan_block, buffer))
 	    return false;
