Release v0.8.0
-----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAABCgAGBQJVw3EoAAoJEAgwLbaiZwQovbwQAKmQA8xrnTau05LUyyffyi1Q qKNMqXQFKeAJWfJ0tYCHi0vh6wLRUDPL/Xxa4DUoN5Lj8KsHqQOPGk41iScRm6ff xSGYzMxznQOcS9rhq+VcwHq/JvEPk9KDKH9gctJNdPQqY4uVfP+Vd7vxCuJZXeRK rj7oTVmojzLjWj2MYG1qJJD+EZroRiMFfbNplLZL7547Q1YJ30tcrs8zyqRIm7UI YeThQc4MutXG9TvPX+Bja+HWYWg4aKBddLpnmjfF/7gkQGASbCPvvVRflIDK6y13 mfDgpF3C5/j4Zp5D3W9KlgRKAZH4zUuKh5Yv03TgEZBqSd8+M7kMP57qMcLIrmOt 3HQY/als0Ct7BBS5XeE+PmzeX6njJ/GYjTghzOIlo1hKFXvqMtSFVwFDfsCuKiGq 2v6+537oRmTnSNCjQR+n/gswV4SjmAf2yHnEJ/sNtRUQyDSG/2Zca5v4Q0E41oWv ys1BNGKG3SOb+pQG5UwzcS88rk1PrP6C4fMz/Y8KSIfkGHoQNA7FC6VqaskwtvMV DdtM3CICGyrG59DdFW4Tehyx6DbKgYR97EQtuSbGYw+/1tMM61bzh6eYOWpXCrkr Gk48/fhTsMVqXUg42J5WMtoxNp2EWJ0dfj9pXTrSLFYneAm2BI57XZ7sPCtzLkO+ 2iEa7H1VnNzWzARvcTOd =/73c -----END PGP SIGNATURE----- Merge tag 'libpsl-0.8.0' into debian Release v0.8.0
This commit is contained in:
commit
9883a5af6d
|
@ -1,7 +1,16 @@
|
|||
*.gz
|
||||
*.o
|
||||
*.lo
|
||||
*.la
|
||||
*.exe
|
||||
*~
|
||||
Makefile
|
||||
Makefile.in
|
||||
*/.deps
|
||||
*/.libs
|
||||
*.cache
|
||||
*.plist
|
||||
*.stamp
|
||||
aclocal.m4
|
||||
ar-lib
|
||||
autom4te.cache/
|
||||
compile
|
||||
config.guess
|
||||
|
@ -12,19 +21,33 @@ config.rpath
|
|||
config.status
|
||||
config.sub
|
||||
configure
|
||||
data/Makefile
|
||||
data/Makefile.in
|
||||
data
|
||||
depcomp
|
||||
include/Makefile
|
||||
include/Makefile.in
|
||||
docs/libpsl/html/
|
||||
docs/libpsl/libpsl-decl-list.txt
|
||||
docs/libpsl/libpsl-decl.txt
|
||||
docs/libpsl/libpsl-overrides.txt
|
||||
docs/libpsl/libpsl-undeclared.txt
|
||||
docs/libpsl/libpsl-undocumented.txt
|
||||
docs/libpsl/libpsl-unused.txt
|
||||
docs/libpsl/libpsl.3
|
||||
docs/libpsl/libpsl.args
|
||||
docs/libpsl/libpsl.hierarchy
|
||||
docs/libpsl/libpsl.interfaces
|
||||
docs/libpsl/libpsl.prerequisites
|
||||
docs/libpsl/libpsl.signals
|
||||
docs/libpsl/version.xml
|
||||
docs/libpsl/xml/
|
||||
gtk-doc.make
|
||||
install-sh
|
||||
libpsl-*.pc
|
||||
libpsl.pc
|
||||
libtool
|
||||
ltmain.sh
|
||||
m4/
|
||||
Makefile
|
||||
Makefile.in
|
||||
missing
|
||||
po/Makefile
|
||||
po/Makefile.in
|
||||
nbproject/
|
||||
po/Makefile.in.in
|
||||
po/Makevars.template
|
||||
po/POTFILES
|
||||
|
@ -34,24 +57,21 @@ po/en@boldquot.header
|
|||
po/en@quot.header
|
||||
po/insert-header.sin
|
||||
po/psl.pot
|
||||
po/libpsl.pot
|
||||
po/quot.sed
|
||||
po/remove-potcdate.sin
|
||||
po/remove-potcdate.sed
|
||||
po/stamp-po
|
||||
src/.deps/
|
||||
src/.libs/
|
||||
src/Makefile
|
||||
src/Makefile.in
|
||||
src/libpsl-*.la
|
||||
src/libpsl_*_la-psl.lo
|
||||
src/psl2c
|
||||
src/suffixes.c
|
||||
stamp-h1
|
||||
test-driver
|
||||
tests/.deps/
|
||||
tests/Makefile
|
||||
tests/Makefile.in
|
||||
tests/*.log
|
||||
tests/*.trs
|
||||
tests/test-is-cookie-domain-acceptable
|
||||
tests/test-is-public
|
||||
tests/test-is-public-all
|
||||
tests/test-is-public-builtin
|
||||
tests/test-is-tld
|
||||
tests/test-is-tld.log
|
||||
tests/test-is-tld.o
|
||||
tests/test-is-tld.trs
|
||||
tests/test-suite.log
|
||||
psl-*.tar.gz
|
||||
tests/test-registrable-domain
|
||||
tools/psl
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
[submodule "list"]
|
||||
path = list
|
||||
url = https://github.com/publicsuffix/list
|
2
AUTHORS
2
AUTHORS
|
@ -13,3 +13,5 @@ Daniel Stenberg (Discussion, Ideas)
|
|||
Darshit Shah (Patching Wget to work with libpsl)
|
||||
Dagobert Michelsen (Fixed Solaris building)
|
||||
Christopher Meng (Fedora building)
|
||||
Jakub Čajka
|
||||
Giuseppe Scrivano
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# got some hints from https://gitorious.org/openismus-playground/examplelib/source
|
||||
|
||||
SUBDIRS = po include src tools data $(LIBPSL_DOCS) tests
|
||||
SUBDIRS = po include src tools $(LIBPSL_DOCS) tests
|
||||
|
||||
ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
|
||||
|
||||
|
@ -14,4 +14,4 @@ ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
|
|||
pkgconfigdir = $(libdir)/pkgconfig
|
||||
pkgconfig_DATA = libpsl.pc
|
||||
|
||||
EXTRA_DIST = config.rpath
|
||||
EXTRA_DIST = config.rpath LICENSE list/public_suffix_list.dat list/tests/test_psl.txt
|
||||
|
|
8
NEWS
8
NEWS
|
@ -1,5 +1,13 @@
|
|||
Copyright (C) 2014 Tim Rühsen
|
||||
|
||||
06.08.2015 Release V0.8.0
|
||||
* Add https://github.com/publicsuffix as git submodule
|
||||
* Support Debian 'Reproducible Builds'
|
||||
* Fix generation of docs
|
||||
* Check UTF-8 sequences for validity (for libidn<=1.30)
|
||||
* Add LICENSE to distribution tarball
|
||||
* Fix compatibility function strndup
|
||||
|
||||
21.02.2015 Release V0.7.1
|
||||
* include configured PSL file into tarball
|
||||
|
||||
|
|
|
@ -6,6 +6,12 @@ if test $? -ne 0; then
|
|||
exit 1
|
||||
fi
|
||||
|
||||
GIT=`which git 2>/dev/null`
|
||||
if test $? -ne 0; then
|
||||
echo "No 'git' found. You must install the git package."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# create m4 before gtkdocize
|
||||
mkdir m4 2>/dev/null
|
||||
|
||||
|
@ -21,6 +27,8 @@ else
|
|||
$GTKDOCIZE || exit $?
|
||||
fi
|
||||
|
||||
$GIT submodule init
|
||||
$GIT submodule update
|
||||
$AUTORECONF --install --force --symlink || exit $?
|
||||
|
||||
echo
|
||||
|
|
14
configure.ac
14
configure.ac
|
@ -1,5 +1,5 @@
|
|||
|
||||
AC_INIT([libpsl], [0.7.1], [tim.ruehsen@gmx.de], [libpsl], [http://github.com/rockdaboot/libpsl])
|
||||
AC_INIT([libpsl], [0.8.0], [tim.ruehsen@gmx.de], [libpsl], [http://github.com/rockdaboot/libpsl])
|
||||
AC_PREREQ([2.59])
|
||||
AM_INIT_AUTOMAKE([1.10 -Wall no-define foreign])
|
||||
|
||||
|
@ -37,8 +37,7 @@ AM_CONDITIONAL([GTK_DOC_USE_LIBTOOL], false)
|
|||
])
|
||||
|
||||
if test x"$have_gtk_doc" = xyes -a x"$enable_gtk_doc" = xyes; then
|
||||
docdir_makefile=docs/libpsl/Makefile
|
||||
docdir_version_xml=docs/libpsl/version.xml
|
||||
AC_CONFIG_FILES([docs/libpsl/Makefile docs/libpsl/version.xml])
|
||||
AC_SUBST([LIBPSL_DOCS], [docs/libpsl])
|
||||
fi
|
||||
|
||||
|
@ -77,7 +76,7 @@ PKG_PROG_PKG_CONFIG
|
|||
# 4. If any interfaces have been added, removed, or changed since the last update, increment current, and set revision to 0.
|
||||
# 5. If any interfaces have been added since the last public release, then increment age.
|
||||
# 6. If any existing interfaces have been removed or changed since the last public release, then set age to 0.
|
||||
AC_SUBST([LIBPSL_SO_VERSION], [2:4:2])
|
||||
AC_SUBST([LIBPSL_SO_VERSION], [2:5:2])
|
||||
AC_SUBST([LIBPSL_VERSION], $VERSION)
|
||||
|
||||
# Check for enable/disable builtin PSL data
|
||||
|
@ -232,14 +231,14 @@ fi
|
|||
AC_ARG_WITH(psl-file,
|
||||
AC_HELP_STRING([--with-psl-file=[PATH]], [path to PSL file]),
|
||||
PSL_FILE=$withval,
|
||||
PSL_FILE="\$(top_srcdir)/data/effective_tld_names.dat")
|
||||
PSL_FILE="\$(top_srcdir)/list/public_suffix_list.dat")
|
||||
AC_SUBST(PSL_FILE)
|
||||
|
||||
# Check for custom PSL test file
|
||||
AC_ARG_WITH(psl-testfile,
|
||||
AC_HELP_STRING([--with-psl-testfile=[PATH]], [path to PSL test file]),
|
||||
PSL_TESTFILE=$withval,
|
||||
PSL_TESTFILE="\$(top_srcdir)/data/test_psl.txt")
|
||||
PSL_TESTFILE="\$(top_srcdir)/list/tests/test_psl.txt")
|
||||
AC_SUBST(PSL_TESTFILE)
|
||||
|
||||
# check for alloca / alloca.h
|
||||
|
@ -253,9 +252,6 @@ AC_CONFIG_FILES([Makefile
|
|||
src/Makefile
|
||||
tools/Makefile
|
||||
po/Makefile.in
|
||||
${docdir_makefile}
|
||||
${docdir_version_xml}
|
||||
data/Makefile
|
||||
tests/Makefile
|
||||
libpsl.pc:libpsl.pc.in])
|
||||
AC_OUTPUT
|
||||
|
|
|
@ -0,0 +1,67 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# Do some checking before 'git push'.
|
||||
|
||||
# Set a stricter bash mode
|
||||
set -e
|
||||
set -u
|
||||
|
||||
CORES=$(grep -c ^processor /proc/cpuinfo 2> /dev/null || echo 0)
|
||||
if [ $CORES -lt 1 ]; then CORES=1; fi
|
||||
|
||||
echo "Running: make distclean"
|
||||
make distclean > /dev/null || true
|
||||
|
||||
# We define _GNU_SOURCE to avoid warnings with missing prototypes.
|
||||
# C89 does not know snprintf, strdup, strndup, popen, pclose
|
||||
CFLAGS="-std=c89 -pedantic -O2 -g -Wall -Wextra -Wstrict-prototypes -Wold-style-definition -Wwrite-strings -Wshadow -Wformat -Wformat-security -Wunreachable-code -Wstrict-prototypes -Wmissing-prototypes -Wold-style-definition -D_GNU_SOURCE"
|
||||
|
||||
CACHEFILE=$PWD/config_check.cache
|
||||
|
||||
# measure time consumed and print it at the end of the script
|
||||
START=$(date +%s.%N)
|
||||
|
||||
# avoid annoying ar warning
|
||||
export ARFLAGS="cr"
|
||||
export AR_FLAGS="cr"
|
||||
|
||||
echo "Running: ./autogen.sh"
|
||||
./autogen.sh > /dev/null
|
||||
echo
|
||||
|
||||
for CC in gcc clang; do
|
||||
export CC
|
||||
echo
|
||||
echo "*** Testing with CC=$CC"
|
||||
|
||||
# the compiler changed, so we have to remove the cache file here
|
||||
rm -f $CACHEFILE
|
||||
|
||||
for options in \
|
||||
"--enable-runtime=libicu --enable-builtin=libicu" \
|
||||
"--enable-runtime=libidn2 --enable-builtin=libidn2" \
|
||||
"--enable-runtime=libidn --enable-builtin=libidn"; do
|
||||
export DISTCHECK_CONFIGURE_FLAGS="-C --cache-file=$CACHEFILE $options"
|
||||
echo
|
||||
echo " *** ./configure $DISTCHECK_CONFIGURE_FLAGS"
|
||||
./configure $DISTCHECK_CONFIGURE_FLAGS CFLAGS="$CFLAGS" > /dev/null
|
||||
|
||||
for xVALGRIND in 0 1; do
|
||||
for xLCALL in C tr_TR.utf8; do
|
||||
export TESTS_ENVIRONMENT="LC_ALL=$xLCALL VALGRIND_TESTS=$xVALGRIND"
|
||||
echo " *** TESTS_ENVIRONMENT=\"$TESTS_ENVIRONMENT\"" make check -j$CORES
|
||||
make check -j$CORES > /dev/null
|
||||
done
|
||||
done
|
||||
|
||||
unset TESTS_ENVIRONMENT
|
||||
export TESTS_ENVIRONMENT
|
||||
echo
|
||||
echo " *** make distcheck CFLAGS=$CFLAGS -j$CORES"
|
||||
make distcheck CFLAGS="$CFLAGS" -j$CORES > /dev/null
|
||||
done
|
||||
done
|
||||
|
||||
END=$(date +%s.%N)
|
||||
echo
|
||||
echo "Duration: "$(echo "$END - $START" | bc)
|
|
@ -1,3 +0,0 @@
|
|||
filesdir = $(datadir)/@PACKAGE@
|
||||
files_DATA = $(PSL_FILE) test_psl.txt
|
||||
EXTRA_DIST = $(files_DATA)
|
File diff suppressed because it is too large
Load Diff
|
@ -1,98 +0,0 @@
|
|||
// Any copyright is dedicated to the Public Domain.
|
||||
// http://creativecommons.org/publicdomain/zero/1.0/
|
||||
|
||||
// null input.
|
||||
checkPublicSuffix(null, null);
|
||||
// Mixed case.
|
||||
checkPublicSuffix('COM', null);
|
||||
checkPublicSuffix('example.COM', 'example.com');
|
||||
checkPublicSuffix('WwW.example.COM', 'example.com');
|
||||
// Leading dot.
|
||||
checkPublicSuffix('.com', null);
|
||||
checkPublicSuffix('.example', null);
|
||||
checkPublicSuffix('.example.com', null);
|
||||
checkPublicSuffix('.example.example', null);
|
||||
// Unlisted TLD.
|
||||
checkPublicSuffix('example', null);
|
||||
checkPublicSuffix('example.example', 'example.example');
|
||||
checkPublicSuffix('b.example.example', 'example.example');
|
||||
checkPublicSuffix('a.b.example.example', 'example.example');
|
||||
// Listed, but non-Internet, TLD.
|
||||
//checkPublicSuffix('local', null);
|
||||
//checkPublicSuffix('example.local', null);
|
||||
//checkPublicSuffix('b.example.local', null);
|
||||
//checkPublicSuffix('a.b.example.local', null);
|
||||
// TLD with only 1 rule.
|
||||
checkPublicSuffix('biz', null);
|
||||
checkPublicSuffix('domain.biz', 'domain.biz');
|
||||
checkPublicSuffix('b.domain.biz', 'domain.biz');
|
||||
checkPublicSuffix('a.b.domain.biz', 'domain.biz');
|
||||
// TLD with some 2-level rules.
|
||||
checkPublicSuffix('com', null);
|
||||
checkPublicSuffix('example.com', 'example.com');
|
||||
checkPublicSuffix('b.example.com', 'example.com');
|
||||
checkPublicSuffix('a.b.example.com', 'example.com');
|
||||
checkPublicSuffix('uk.com', null);
|
||||
checkPublicSuffix('example.uk.com', 'example.uk.com');
|
||||
checkPublicSuffix('b.example.uk.com', 'example.uk.com');
|
||||
checkPublicSuffix('a.b.example.uk.com', 'example.uk.com');
|
||||
checkPublicSuffix('test.ac', 'test.ac');
|
||||
// TLD with only 1 (wildcard) rule.
|
||||
checkPublicSuffix('cy', null);
|
||||
checkPublicSuffix('c.cy', null);
|
||||
checkPublicSuffix('b.c.cy', 'b.c.cy');
|
||||
checkPublicSuffix('a.b.c.cy', 'b.c.cy');
|
||||
// More complex TLD.
|
||||
checkPublicSuffix('jp', null);
|
||||
checkPublicSuffix('test.jp', 'test.jp');
|
||||
checkPublicSuffix('www.test.jp', 'test.jp');
|
||||
checkPublicSuffix('ac.jp', null);
|
||||
checkPublicSuffix('test.ac.jp', 'test.ac.jp');
|
||||
checkPublicSuffix('www.test.ac.jp', 'test.ac.jp');
|
||||
checkPublicSuffix('kyoto.jp', null);
|
||||
checkPublicSuffix('test.kyoto.jp', 'test.kyoto.jp');
|
||||
checkPublicSuffix('ide.kyoto.jp', null);
|
||||
checkPublicSuffix('b.ide.kyoto.jp', 'b.ide.kyoto.jp');
|
||||
checkPublicSuffix('a.b.ide.kyoto.jp', 'b.ide.kyoto.jp');
|
||||
checkPublicSuffix('c.kobe.jp', null);
|
||||
checkPublicSuffix('b.c.kobe.jp', 'b.c.kobe.jp');
|
||||
checkPublicSuffix('a.b.c.kobe.jp', 'b.c.kobe.jp');
|
||||
checkPublicSuffix('city.kobe.jp', 'city.kobe.jp');
|
||||
checkPublicSuffix('www.city.kobe.jp', 'city.kobe.jp');
|
||||
// TLD with a wildcard rule and exceptions.
|
||||
checkPublicSuffix('ck', null);
|
||||
checkPublicSuffix('test.ck', null);
|
||||
checkPublicSuffix('b.test.ck', 'b.test.ck');
|
||||
checkPublicSuffix('a.b.test.ck', 'b.test.ck');
|
||||
checkPublicSuffix('www.ck', 'www.ck');
|
||||
checkPublicSuffix('www.www.ck', 'www.ck');
|
||||
// US K12.
|
||||
checkPublicSuffix('us', null);
|
||||
checkPublicSuffix('test.us', 'test.us');
|
||||
checkPublicSuffix('www.test.us', 'test.us');
|
||||
checkPublicSuffix('ak.us', null);
|
||||
checkPublicSuffix('test.ak.us', 'test.ak.us');
|
||||
checkPublicSuffix('www.test.ak.us', 'test.ak.us');
|
||||
checkPublicSuffix('k12.ak.us', null);
|
||||
checkPublicSuffix('test.k12.ak.us', 'test.k12.ak.us');
|
||||
checkPublicSuffix('www.test.k12.ak.us', 'test.k12.ak.us');
|
||||
// IDN labels.
|
||||
checkPublicSuffix('食狮.com.cn', '食狮.com.cn');
|
||||
checkPublicSuffix('食狮.公司.cn', '食狮.公司.cn');
|
||||
checkPublicSuffix('www.食狮.公司.cn', '食狮.公司.cn');
|
||||
checkPublicSuffix('shishi.公司.cn', 'shishi.公司.cn');
|
||||
checkPublicSuffix('公司.cn', null);
|
||||
checkPublicSuffix('食狮.中国', '食狮.中国');
|
||||
checkPublicSuffix('www.食狮.中国', '食狮.中国');
|
||||
checkPublicSuffix('shishi.中国', 'shishi.中国');
|
||||
checkPublicSuffix('中国', null);
|
||||
// Same as above, but punycoded.
|
||||
checkPublicSuffix('xn--85x722f.com.cn', 'xn--85x722f.com.cn');
|
||||
checkPublicSuffix('xn--85x722f.xn--55qx5d.cn', 'xn--85x722f.xn--55qx5d.cn');
|
||||
checkPublicSuffix('www.xn--85x722f.xn--55qx5d.cn', 'xn--85x722f.xn--55qx5d.cn');
|
||||
checkPublicSuffix('shishi.xn--55qx5d.cn', 'shishi.xn--55qx5d.cn');
|
||||
checkPublicSuffix('xn--55qx5d.cn', null);
|
||||
checkPublicSuffix('xn--85x722f.xn--fiqs8s', 'xn--85x722f.xn--fiqs8s');
|
||||
checkPublicSuffix('www.xn--85x722f.xn--fiqs8s', 'xn--85x722f.xn--fiqs8s');
|
||||
checkPublicSuffix('shishi.xn--fiqs8s', 'shishi.xn--fiqs8s');
|
||||
checkPublicSuffix('xn--fiqs8s', null);
|
|
@ -0,0 +1 @@
|
|||
Subproject commit f1c4849aefa4c61257aba5b595be5d552c99144d
|
|
@ -22,7 +22,7 @@ endif
|
|||
|
||||
noinst_PROGRAMS = psl2c
|
||||
psl2c_SOURCES = psl2c.c
|
||||
psl2c_CPPFLAGS = -I$(top_srcdir)/include -D _GNU_SOURCE
|
||||
psl2c_CPPFLAGS = -I$(top_srcdir)/include
|
||||
if BUILTIN_GENERATOR_LIBICU
|
||||
psl2c_LDADD = -licuuc
|
||||
endif
|
||||
|
|
58
src/psl.c
58
src/psl.c
|
@ -28,11 +28,6 @@
|
|||
*
|
||||
*/
|
||||
|
||||
/* need _GNU_SOURCE for qsort_r() */
|
||||
#ifndef _GNU_SOURCE
|
||||
# define _GNU_SOURCE
|
||||
#endif
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
@ -94,11 +89,17 @@
|
|||
#define countof(a) (sizeof(a)/sizeof(*(a)))
|
||||
|
||||
#ifndef HAVE_STRNDUP
|
||||
// I found no strndup on my old SUSE 7.3 test system (gcc 2.95)
|
||||
/* I found no strndup on my old SUSE 7.3 test system (gcc 2.95) */
|
||||
|
||||
static char *strndup(const char *s, size_t n)
|
||||
{
|
||||
char *dst = malloc(n + 1);
|
||||
char *dst;
|
||||
size_t s_len = strlen(s);
|
||||
|
||||
if (s_len > n)
|
||||
n = s_len;
|
||||
|
||||
dst = malloc(n + 1);
|
||||
|
||||
if (dst) {
|
||||
memcpy(dst, s, n);
|
||||
|
@ -509,6 +510,44 @@ static int _str_is_ascii(const char *s)
|
|||
return !*s;
|
||||
}
|
||||
|
||||
#if defined(WITH_LIBIDN)
|
||||
/*
|
||||
* Work around a libidn <= 1.30 vulnerability.
|
||||
*
|
||||
* The function checks for a valid UTF-8 character sequence before
|
||||
* passing it to idna_to_ascii_8z().
|
||||
*
|
||||
* [1] http://lists.gnu.org/archive/html/help-libidn/2015-05/msg00002.html
|
||||
* [2] https://lists.gnu.org/archive/html/bug-wget/2015-06/msg00002.html
|
||||
* [3] http://curl.haxx.se/mail/lib-2015-06/0143.html
|
||||
*/
|
||||
static int _utf8_is_valid(const char *utf8)
|
||||
{
|
||||
const unsigned char *s = (const unsigned char *) utf8;
|
||||
|
||||
while (*s) {
|
||||
if ((*s & 0x80) == 0) /* 0xxxxxxx ASCII char */
|
||||
s++;
|
||||
else if ((*s & 0xE0) == 0xC0) /* 110xxxxx 10xxxxxx */ {
|
||||
if ((s[1] & 0xC0) != 0x80)
|
||||
return 0;
|
||||
s += 2;
|
||||
} else if ((*s & 0xF0) == 0xE0) /* 1110xxxx 10xxxxxx 10xxxxxx */ {
|
||||
if ((s[1] & 0xC0) != 0x80 || (s[2] & 0xC0) != 0x80)
|
||||
return 0;
|
||||
s += 3;
|
||||
} else if ((*s & 0xF8) == 0xF0) /* 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx */ {
|
||||
if ((s[1] & 0xC0) != 0x80 || (s[2] & 0xC0) != 0x80 || (s[3] & 0xC0) != 0x80)
|
||||
return 0;
|
||||
s += 4;
|
||||
} else
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(WITH_LIBICU)
|
||||
static void _add_punycode_if_needed(UIDNA *idna, _psl_vector_t *v, _psl_entry_t *e)
|
||||
{
|
||||
|
@ -598,6 +637,11 @@ static void _add_punycode_if_needed(_psl_vector_t *v, _psl_entry_t *e)
|
|||
if (_str_is_ascii(e->label_buf))
|
||||
return;
|
||||
|
||||
if (!_utf8_is_valid(e->label_buf)) {
|
||||
/* fprintf(_(stderr, "Invalid UTF-8 sequence not converted: '%s'\n"), e->label_buf); */
|
||||
return;
|
||||
}
|
||||
|
||||
/* idna_to_ascii_8z() automatically converts UTF-8 to lowercase */
|
||||
|
||||
if ((rc = idna_to_ascii_8z(e->label_buf, &lookupname, IDNA_USE_STD3_ASCII_RULES)) == IDNA_SUCCESS) {
|
||||
|
|
|
@ -143,7 +143,7 @@ int main(int argc, const char **argv)
|
|||
|
||||
if (argc != 3) {
|
||||
fprintf(stderr, "Usage: psl2c <infile> <outfile>\n");
|
||||
fprintf(stderr, " <infile> is the 'effective_tld_names.dat' (aka Public Suffix List), lowercase UTF-8 encoded\n");
|
||||
fprintf(stderr, " <infile> is the 'public_suffix_list.dat', lowercase UTF-8 encoded\n");
|
||||
fprintf(stderr, " <outfile> is the the C filename to be generated from <infile>\n");
|
||||
return 1;
|
||||
}
|
||||
|
@ -157,6 +157,7 @@ int main(int argc, const char **argv)
|
|||
struct stat st;
|
||||
size_t cmdsize = 16 + strlen(argv[1]);
|
||||
char *cmd = alloca(cmdsize), checksum[64] = "";
|
||||
const char *source_date_epoch = NULL;
|
||||
|
||||
#if 0
|
||||
/* include library code did not generate punycode, so let's do it for the builtin data */
|
||||
|
@ -177,7 +178,10 @@ int main(int argc, const char **argv)
|
|||
if (stat(argv[1], &st) != 0)
|
||||
st.st_mtime = 0;
|
||||
fprintf(fpout, "static time_t _psl_file_time = %lu;\n", st.st_mtime);
|
||||
fprintf(fpout, "static time_t _psl_compile_time = %lu;\n", time(NULL));
|
||||
if ((source_date_epoch = getenv("SOURCE_DATE_EPOCH")))
|
||||
fprintf(fpout, "static time_t _psl_compile_time = %lu;\n", atol(source_date_epoch));
|
||||
else
|
||||
fprintf(fpout, "static time_t _psl_compile_time = %lu;\n", time(NULL));
|
||||
fprintf(fpout, "static const char _psl_sha1_checksum[] = \"%s\";\n", checksum);
|
||||
fprintf(fpout, "static const char _psl_filename[] = \"%s\";\n", argv[1]);
|
||||
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
*
|
||||
* This file is part of the test suite of libpsl.
|
||||
*
|
||||
* Test psl_is_public_suffix() for all entries in effective_tld_names.dat
|
||||
* Test psl_is_public_suffix() for all entries in public_suffix_list.dat
|
||||
*
|
||||
* Changelog
|
||||
* 19.03.2014 Tim Ruehsen created
|
||||
|
|
Loading…
Reference in New Issue