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