diff options
-rwxr-xr-x | configure | 20 | ||||
-rw-r--r-- | configure.ac | 2 | ||||
-rw-r--r-- | doc/changelog.rst | 17 | ||||
-rw-r--r-- | include/libHX/libxml_helper.h | 2 | ||||
-rw-r--r-- | src/format.c | 5 | ||||
-rw-r--r-- | src/io.c | 3 | ||||
-rw-r--r-- | src/map.c | 2 | ||||
-rw-r--r-- | src/proc.c | 2 | ||||
-rw-r--r-- | src/socket.c | 7 | ||||
-rw-r--r-- | src/tc-socket.c | 31 | ||||
-rw-r--r-- | src/tc-string.c | 4 |
11 files changed, 77 insertions, 18 deletions
@@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.71 for libHX 4.12. +# Generated by GNU Autoconf 2.71 for libHX 4.14. # # # Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation, @@ -618,8 +618,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='libHX' PACKAGE_TARNAME='libhx' -PACKAGE_VERSION='4.12' -PACKAGE_STRING='libHX 4.12' +PACKAGE_VERSION='4.14' +PACKAGE_STRING='libHX 4.14' PACKAGE_BUGREPORT='' PACKAGE_URL='' @@ -1375,7 +1375,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures libHX 4.12 to adapt to many kinds of systems. +\`configure' configures libHX 4.14 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1446,7 +1446,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of libHX 4.12:";; + short | recursive ) echo "Configuration of libHX 4.14:";; esac cat <<\_ACEOF @@ -1561,7 +1561,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -libHX configure 4.12 +libHX configure 4.14 generated by GNU Autoconf 2.71 Copyright (C) 2021 Free Software Foundation, Inc. @@ -2195,7 +2195,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by libHX $as_me 4.12, which was +It was created by libHX $as_me 4.14, which was generated by GNU Autoconf 2.71. Invocation command line was $ $0$ac_configure_args_raw @@ -3684,7 +3684,7 @@ fi # Define the identity of the package. PACKAGE='libhx' - VERSION='4.12' + VERSION='4.14' printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h @@ -18771,7 +18771,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by libHX $as_me 4.12, which was +This file was extended by libHX $as_me 4.14, which was generated by GNU Autoconf 2.71. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -18839,7 +18839,7 @@ ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ -libHX config.status 4.12 +libHX config.status 4.14 configured by $0, generated by GNU Autoconf 2.71, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index f569ade..92c72c7 100644 --- a/configure.ac +++ b/configure.ac @@ -1,4 +1,4 @@ -AC_INIT([libHX], [4.12]) +AC_INIT([libHX], [4.14]) AC_CONFIG_AUX_DIR([build-aux]) AC_CONFIG_HEADERS([config.h]) AC_CONFIG_MACRO_DIR([m4]) diff --git a/doc/changelog.rst b/doc/changelog.rst index 30f2d28..26c4d06 100644 --- a/doc/changelog.rst +++ b/doc/changelog.rst @@ -1,3 +1,20 @@ +v4.14 (2023-07-14) +================== + +Fixes: + +* socket: make HX_addrport_split work on portless bracketed hostspec + + +v4.13 (2023-06-21) +================== + +Fixes: + +* io: do not fail HX_mkdir when a component is a symlink to a directory +* xml_helper: fix infinite recursion in xml_getnsprop + + v4.12 (2023-02-27) ================== diff --git a/include/libHX/libxml_helper.h b/include/libHX/libxml_helper.h index 08a0a07..5a02bf0 100644 --- a/include/libHX/libxml_helper.h +++ b/include/libHX/libxml_helper.h @@ -118,7 +118,7 @@ static __inline__ const char *xml_getprop(const xmlNode *node, const char *attr) static __inline__ char *xml_getnsprop(const xmlNode *node, const char *nsprefix, const char *attr) { - return xml_getnsprop(const_cast<const xmlNode *>(node), nsprefix, attr); + return xml_getnsprop(const_cast<xmlNode *>(node), nsprefix, attr); } #endif diff --git a/src/format.c b/src/format.c index 25c09d6..e924c6a 100644 --- a/src/format.c +++ b/src/format.c @@ -7,6 +7,7 @@ * General Public License as published by the Free Software Foundation; * either version 2.1 or (at your option) any later version. */ +#include <assert.h> #include <errno.h> #include <stdbool.h> #include <stddef.h> @@ -681,6 +682,7 @@ EXPORT_SYMBOL ssize_t HXformat3_aprintf(const struct HXformat_map *blk, out: ret = -errno; HXmc_free(out); + *resultp = nullptr; return ret; } @@ -716,7 +718,7 @@ EXPORT_SYMBOL int HXformat_sprintf(const struct HXformat_map *ftable, EXPORT_SYMBOL ssize_t HXformat3_sprintf(const struct HXformat_map *ftable, char *dest, size_t size, const char *fmt) { - hxmc_t *str; + hxmc_t *str = nullptr; ssize_t ret; if ((ret = HXformat_aprintf(ftable, &str, fmt)) < 0) @@ -725,6 +727,7 @@ EXPORT_SYMBOL ssize_t HXformat3_sprintf(const struct HXformat_map *ftable, *dest = '\0'; return 0; } + assert(str != nullptr); strncpy(dest, str, size); size_t xl = strlen(dest); HXmc_free(str); @@ -66,7 +66,7 @@ static int mkdir_gen(const char *d, unsigned int mode) return 1; if (errno != EEXIST) return -errno; - if (lstat(d, &sb) == 0) { + if (stat(d, &sb) == 0) { #if defined(_WIN32) if (sb.st_mode & S_IFDIR) #else @@ -424,6 +424,7 @@ HX_realpath_symres(struct HX_realpath_state *state, const char *path) return -ELOOP; #endif + assert(state->link_target != nullptr); if (*state->link_target == '/') { *state->dest = '\0'; if (HXmc_setlen(&state->dest, 0) == NULL) @@ -1145,7 +1145,7 @@ static const struct HXmap_node *HXumap_traverse(struct HXumap_trav *trav) while (trav->head == &hmap->bk_array[trav->bk_current]) { if (++trav->bk_current >= HXhash_primes[hmap->power]) - return false; + return NULL; trav->head = hmap->bk_array[trav->bk_current].next; } @@ -69,7 +69,7 @@ static int HXproc_switch_group(const struct passwd *pw, const char *group) return HXproc_switch_gid(pw, gr->gr_gid); } -EXPORT_SYMBOL int HXproc_switch_user(const char *user, const char *group) +EXPORT_SYMBOL enum HXproc_su_status HXproc_switch_user(const char *user, const char *group) { const struct passwd *pw = NULL; if (user != NULL && *user != '\0') { diff --git a/src/socket.c b/src/socket.c index 9b5d78a..0b6f674 100644 --- a/src/socket.c +++ b/src/socket.c @@ -86,8 +86,11 @@ int HX_addrport_split(const char *spec, char *host, unsigned long hlen = end - spec; if (hlen >= hbufsz) return -E2BIG; - if (*++end == '\0') + if (*++end == '\0') { + memmove(host, spec, hlen); + host[hlen] = '\0'; return 1; + } if (*end++ != ':') return -EINVAL; char *nend = nullptr; @@ -146,6 +149,8 @@ int HX_inet_connect(const char *host, uint16_t port, unsigned int oflags) struct addrinfo *aires = nullptr; int ret = HX_inet_lookup(host, port, AI_ADDRCONFIG, &aires); int saved_errno = 0; + if (ret != 0) + ; for (const struct addrinfo *r = aires; r != nullptr; r = r->ai_next) { int fd = socket(r->ai_family, r->ai_socktype, r->ai_protocol); if (fd < 0) { diff --git a/src/tc-socket.c b/src/tc-socket.c index 9904ba8..3cdeb90 100644 --- a/src/tc-socket.c +++ b/src/tc-socket.c @@ -12,12 +12,30 @@ #ifndef AI_V4MAPPED # define AI_V4MAPPED 0 #endif +#include "internal.h" -int main(void) +static int t_parse(void) +{ + char host[32] = "bogus"; + if (HX_addrport_split("[::1]", host, sizeof(host), nullptr) != 1 || + strcmp(host, "::1") != 0) + return 1; + if (HX_addrport_split("[]", host, sizeof(host), nullptr) != 1 || + strcmp(host, "") != 0) + return 1; + if (HX_addrport_split("", host, sizeof(host), nullptr) != 1 || + strcmp(host, "") != 0) + return 1; + return 0; +} + +static int t_local(void) { static const char *addrs[] = { "::1", "::2", "::ffff:127.0.0.1", "::", + "[::1]", "[::2]", "[::ffff:127.0.0.1]", "[::]", "127.0.0.1", "127.0.0.2", "1.1.1.1", "255.255.255.255", + "[127.0.0.1]", "[127.0.0.2]", "[1.1.1.1]", "[255.255.255.255]", }; for (size_t i = 0; i < ARRAY_SIZE(addrs); ++i) { char host[32] = {}; @@ -73,3 +91,14 @@ int main(void) } return EXIT_SUCCESS; } + +int main(void) +{ + int ret = t_parse(); + if (ret != 0) + return ret; + ret = t_local(); + if (ret != EXIT_SUCCESS) + return ret; + return EXIT_SUCCESS; +} diff --git a/src/tc-string.c b/src/tc-string.c index 77235c2..9bf668b 100644 --- a/src/tc-string.c +++ b/src/tc-string.c @@ -84,12 +84,16 @@ static void t_strncat(void) { char data[5] = "DATA"; +#ifndef __clang__ #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wformat-truncation" +#endif if (snprintf(data, sizeof(data), "12345678") >= static_cast(ssize_t, sizeof(data))) printf("Not enough space\n"); +#ifndef __clang__ #pragma GCC diagnostic pop +#endif printf("String: >%s<\n", data); HX_strlcat(data, "pqrstuv__", 2); |