Poster of Linux kernelThe best gift for a Linux geek
FMTCHECK

FMTCHECK

Section: C Library Functions (3)
Local index Up

BSD mandoc
 

NAME

fmtcheck - sanitizes user-supplied printf(3)Ns-style format string  

LIBRARY

Lb libbsd  

SYNOPSIS

In stdio.h Ft const char * Fn fmtcheck const char *fmt_suspect const char *fmt_default  

DESCRIPTION

The Fn fmtcheck scans Fa fmt_suspect and Fa fmt_default to determine if Fa fmt_suspect will consume the same argument types as Fa fmt_default and to ensure that Fa fmt_suspect is a valid format string.

The printf(3) family of functions cannot verify the types of arguments that they are passed at run-time. In some cases, like catgets(3), it is useful or necessary to use a user-supplied format string with no guarantee that the format string matches the specified arguments.

The Fn fmtcheck was designed to be used in these cases, as in:

printf(fmtcheck(user_format, standard_format), arg1, arg2);

In the check, field widths, fillers, precisions, etc. are ignored (unless the field width or precision is an asterisk `*' instead of a digit string). Also, any text other than the format specifiers is completely ignored.  

RETURN VALUES

If Fa fmt_suspect is a valid format and consumes the same argument types as Fa fmt_default , then the Fn fmtcheck will return Fa fmt_suspect . Otherwise, it will return Fa fmt_default .  

SECURITY CONSIDERATIONS

Note that the formats may be quite different as long as they accept the same arguments. For example, Qq Li %p %o %30s %#llx %-10.*e %n is compatible with Qq Li This number %lu %d%% and string %s has %qd numbers and %.*g floats (%n) . However, Qq Li %o is not equivalent to Qq Li %lx because the first requires an integer and the second requires a long.  

SEE ALSO

printf(3)  

BUGS

The Fn fmtcheck function does not understand all of the conversions that printf(3) does.


 

Index

NAME
LIBRARY
SYNOPSIS
DESCRIPTION
RETURN VALUES
SECURITY CONSIDERATIONS
SEE ALSO
BUGS

This document was created by man2html, using the manual pages.
Time: 21:46:15 GMT, April 16, 2011