Upgrade libxo to 0.1.6.

Summary of changes:
1.  Coverity defect fixes

Obtained from:  https://github.com/Juniper/libxo/releases/tag/0.1.6
This commit is contained in:
Marcel Moolenaar 2014-11-18 18:03:40 +00:00
parent edd14576c4
commit c600d3070d
5 changed files with 57 additions and 32 deletions

View File

@ -12,7 +12,7 @@
#
AC_PREREQ(2.2)
AC_INIT([libxo], [0.1.5], [phil@juniper.net])
AC_INIT([libxo], [0.1.6], [phil@juniper.net])
AM_INIT_AUTOMAKE([-Wall -Werror foreign -Wno-portability])
# Support silent build rules. Requires at least automake-1.11.

View File

@ -317,7 +317,7 @@ xo_init_handle (xo_handle_t *xop)
cp = getenv("LC_ALL");
if (cp == NULL)
cp = "UTF-8"; /* Optimistic? */
cp = setlocale(LC_CTYPE, cp);
(void) setlocale(LC_CTYPE, cp);
}
/*
@ -607,8 +607,10 @@ xo_vsnprintf (xo_handle_t *xop, xo_buffer_t *xbp, const char *fmt, va_list vap)
rc = vsnprintf(xbp->xb_curp, left, fmt, va_local);
if (rc > xbp->xb_size) {
if (!xo_buf_has_room(xbp, rc))
if (!xo_buf_has_room(xbp, rc)) {
va_end(va_local);
return -1;
}
/*
* After we call vsnprintf(), the stage of vap is not defined.
@ -648,8 +650,10 @@ xo_printf_v (xo_handle_t *xop, const char *fmt, va_list vap)
rc = vsnprintf(xbp->xb_curp, left, fmt, va_local);
if (rc > xbp->xb_size) {
if (!xo_buf_has_room(xbp, rc))
if (!xo_buf_has_room(xbp, rc)) {
va_end(va_local);
return -1;
}
va_end(va_local); /* Reset vap to the start */
va_copy(va_local, vap);
@ -974,8 +978,10 @@ xo_warn_hcv (xo_handle_t *xop, int code, int check_warn,
int left = xbp->xb_size - (xbp->xb_curp - xbp->xb_bufp);
int rc = vsnprintf(xbp->xb_curp, left, newfmt, vap);
if (rc > xbp->xb_size) {
if (!xo_buf_has_room(xbp, rc))
if (!xo_buf_has_room(xbp, rc)) {
va_end(va_local);
return;
}
va_end(vap); /* Reset vap to the start */
va_copy(vap, va_local);
@ -1118,8 +1124,10 @@ xo_message_hcv (xo_handle_t *xop, int code, const char *fmt, va_list vap)
int left = xbp->xb_size - (xbp->xb_curp - xbp->xb_bufp);
rc = vsnprintf(xbp->xb_curp, left, fmt, vap);
if (rc > xbp->xb_size) {
if (!xo_buf_has_room(xbp, rc))
if (!xo_buf_has_room(xbp, rc)) {
va_end(va_local);
return;
}
va_end(vap); /* Reset vap to the start */
va_copy(vap, va_local);
@ -1154,14 +1162,15 @@ xo_message_hcv (xo_handle_t *xop, int code, const char *fmt, va_list vap)
va_copy(va_local, vap);
rc = vsnprintf(buf, bufsiz, fmt, va_local);
rc = vsnprintf(bp, bufsiz, fmt, va_local);
if (rc > bufsiz) {
bufsiz = rc + BUFSIZ;
bp = alloca(bufsiz);
va_end(va_local);
va_copy(va_local, vap);
rc = vsnprintf(buf, bufsiz, fmt, va_local);
rc = vsnprintf(bp, bufsiz, fmt, va_local);
}
va_end(va_local);
cp = bp + rc;
if (need_nl) {
@ -1302,9 +1311,9 @@ xo_create_to_file (FILE *fp, xo_style_t style, xo_xof_flags_t flags)
* @xop XO handle to alter (or NULL for default handle)
*/
void
xo_destroy (xo_handle_t *xop)
xo_destroy (xo_handle_t *xop_arg)
{
xop = xo_default(xop);
xo_handle_t *xop = xo_default(xop_arg);
if (xop->xo_close && (xop->xo_flags & XOF_CLOSE_FP))
xop->xo_close(xop->xo_opaque);
@ -1315,7 +1324,7 @@ xo_destroy (xo_handle_t *xop)
xo_buf_cleanup(&xop->xo_predicate);
xo_buf_cleanup(&xop->xo_attrs);
if (xop == &xo_default_handle) {
if (xop_arg == NULL) {
bzero(&xo_default_handle, sizeof(&xo_default_handle));
xo_default_inited = 0;
} else
@ -1743,7 +1752,7 @@ xo_format_string_direct (xo_handle_t *xop, xo_buffer_t *xbp,
int need_enc, int have_enc)
{
int cols = 0;
wchar_t wc;
wchar_t wc = 0;
int ilen, olen, width;
int attr = (flags & XFF_ATTR);
const char *sp;

View File

@ -158,7 +158,7 @@
#define PACKAGE_NAME "libxo"
/* Define to the full name and version of this package. */
#define PACKAGE_STRING "libxo 0.1.5"
#define PACKAGE_STRING "libxo 0.1.6"
/* Define to the one symbol short name of this package. */
#define PACKAGE_TARNAME "libxo"
@ -167,7 +167,7 @@
#define PACKAGE_URL ""
/* Define to the version of this package. */
#define PACKAGE_VERSION "0.1.5"
#define PACKAGE_VERSION "0.1.6"
/* If using the C implementation of alloca, define if you know the
direction of stack growth for your system; otherwise it will be
@ -181,7 +181,7 @@
#define STDC_HEADERS 1
/* Version number of package */
#define VERSION "0.1.5"
#define VERSION "0.1.6"
/* Define to `__inline__' or `__inline' if that's what the C compiler
calls it, or to nothing if 'inline' is not supported under any name. */

View File

@ -18,17 +18,17 @@
/**
* The version string
*/
#define LIBXO_VERSION "0.1.5"
#define LIBXO_VERSION "0.1.6"
/**
* The version number
*/
#define LIBXO_VERSION_NUMBER 1004
#define LIBXO_VERSION_NUMBER 1006
/**
* The version number as a string
*/
#define LIBXO_VERSION_STRING "1004"
#define LIBXO_VERSION_STRING "1006"
/**
* The version number extra info as a string

View File

@ -28,6 +28,19 @@ sub main {
extract_samples() if /^-X/;
}
if ($#ARGV < 0) {
print STDERR "xolint [options] files ...\n";
print STDERR " -c invoke 'cpp' on input\n";
print STDERR " -C flags Pass flags to cpp\n";
print STDERR " -d Show debug output\n";
print STDERR " -D Extract xolint documentation\n";
print STDERR " -I Print xo_info_t data\n";
print STDERR " -p Print input data on errors\n";
print STDERR " -V Print vocabulary (list of tags)\n";
print STDERR " -X Print examples of invalid use\n";
exit(1);
}
for $file (@ARGV) {
parse_file($file);
}
@ -269,9 +282,9 @@ sub check_format {
$last = $prev;
next;
}
$prev = $ch;
}
$prev = $ch;
$build[$phase] .= $ch;
}
@ -346,18 +359,6 @@ sub check_field {
info("potential missing slash after N, L, or T with format")
if $field[1] =~ /%/;
#@ Format cannot be given when content is present (roles: DNLT)
#@ xo_emit("{T:Max/%6.6s}", "Max");
#@ Fields with the D, N, L, or T roles can't have both
#@ static literal content ("{T:Title}") and a
#@ format ("{T:/%s}").
#@ This error will also occur when the content has a backslash
#@ in it, like "{N:Type of I/O}"; backslashes should be escaped,
#@ like "{N:Type of I\\/O}". Note the double backslash, one for
#@ handling 'C' strings, and one for libxo.
error("format cannot be given when content is present")
if $field[1] && $field[2];
#@ An encoding format cannot be given (roles: DNLT)
#@ xo_emit("{T:Max//%s}", "Max");
#@ Fields with the D, N, L, and T roles are not emitted in
@ -367,6 +368,21 @@ sub check_field {
if $field[3];
}
# Field is a decoration, label, or title
if ($field[0] =~ /DLN/) {
#@ Format cannot be given when content is present (roles: DLN)
#@ xo_emit("{N:Max/%6.6s}", "Max");
#@ Fields with the D, L, or N roles can't have both
#@ static literal content ("{L:Label}") and a
#@ format ("{L:/%s}").
#@ This error will also occur when the content has a backslash
#@ in it, like "{N:Type of I/O}"; backslashes should be escaped,
#@ like "{N:Type of I\\/O}". Note the double backslash, one for
#@ handling 'C' strings, and one for libxo.
error("format cannot be given when content is present")
if $field[1] && $field[2];
}
# A value field
if (length($field[0]) == 0 || $field[0] =~ /V/) {
@ -527,7 +543,7 @@ sub check_field_format {
#@ for non-strings. This error may occur from a typo,
#@ like "{:tag/%6..6d}" where only one period should be used.
error("max width only valid for strings")
if $#chunks >= 2 && $fc =~ /[sS]/;
if $#chunks >= 2 && $fc !~ /[sS]/;
}
sub error {