On Fri, May 22, 2020 at 03:05:50PM -0500, Eric Blake wrote:
 On 5/22/20 2:53 PM, Richard W.M. Jones wrote:
 >Use vector type to store map ranges.
 >
 >Test filenames unique.
 >
 >Remove some unused variables.
 >
 >Break up long lines.
 >---
 
 >@@ -95,7 +95,8 @@ parse_mapfile (const char *filename)
 >        continue;
 >      }
 >-    if (sscanf (line, "%" SCNi64 "\t%" SCNi64 "\t%c",
&offset, &length, &status) == 3) {
 >+    if (sscanf (line, "%" SCNi64 "\t%" SCNi64 "\t%c",
 >+                &offset, &length, &status) == 3) {
 
 sscanf() cannot detect integer overflow.  If you care about
 detecting overflow, you'll have to rewrite this into an open-coded
 loop using things like nbdkit_parse_size(). 
In the rest of nbdkit I've rewritten the easy sscanf cases and left
the difficult ones.  The above would probably count as a difficult
case since you'd have to split up the string etc.
Really would be nice if POSIX/ISO could fix this, hint hint!
Rich.
-- 
Richard Jones, Virtualization Group, Red Hat 
http://people.redhat.com/~rjones
Read my programming and virtualization blog: 
http://rwmj.wordpress.com
Fedora Windows cross-compiler. Compile Windows programs, test, and
build Windows installers. Over 100 libraries supported.
http://fedoraproject.org/wiki/MinGW