Compare commits
7 Commits
69101eb155
...
d71c47f8ce
| Author | SHA1 | Date | |
|---|---|---|---|
|
d71c47f8ce
|
|||
|
425ea57b17
|
|||
|
8822d06091
|
|||
|
9639777814
|
|||
|
929229a1d7
|
|||
|
53bcebc2f0
|
|||
|
b08cf6c29f
|
@@ -4,9 +4,9 @@ cmake_minimum_required (VERSION 2.8.5)
|
|||||||
# Moar warnings
|
# Moar warnings
|
||||||
if ("${CMAKE_C_COMPILER_ID}" MATCHES "GNU" OR CMAKE_COMPILER_IS_GNUCC)
|
if ("${CMAKE_C_COMPILER_ID}" MATCHES "GNU" OR CMAKE_COMPILER_IS_GNUCC)
|
||||||
# -Wunused-function is pretty annoying here, as everything is static
|
# -Wunused-function is pretty annoying here, as everything is static
|
||||||
set (wdisabled "-Wno-unused-function -Wno-implicit-fallthrough")
|
set (wdisabled "-Wno-unused-function")
|
||||||
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99 -Wall -Wextra ${wdisabled}")
|
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99 -Wall -Wextra ${wdisabled}")
|
||||||
endif ("${CMAKE_C_COMPILER_ID}" MATCHES "GNU" OR CMAKE_COMPILER_IS_GNUCC)
|
endif ()
|
||||||
|
|
||||||
# Dependencies
|
# Dependencies
|
||||||
set (CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
|
set (CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
|
||||||
@@ -16,11 +16,9 @@ find_package (PkgConfig REQUIRED)
|
|||||||
pkg_check_modules (libssl REQUIRED libssl libcrypto)
|
pkg_check_modules (libssl REQUIRED libssl libcrypto)
|
||||||
|
|
||||||
if ("${CMAKE_SYSTEM_NAME}" MATCHES "BSD")
|
if ("${CMAKE_SYSTEM_NAME}" MATCHES "BSD")
|
||||||
include_directories (/usr/local/include)
|
|
||||||
link_directories (/usr/local/lib)
|
|
||||||
# Our POSIX version macros make these undefined
|
# Our POSIX version macros make these undefined
|
||||||
add_definitions (-D__BSD_VISIBLE=1 -D_BSD_SOURCE=1)
|
add_definitions (-D__BSD_VISIBLE=1 -D_BSD_SOURCE=1)
|
||||||
endif ("${CMAKE_SYSTEM_NAME}" MATCHES "BSD")
|
endif ()
|
||||||
|
|
||||||
set (common_libraries ${libssl_LIBRARIES})
|
set (common_libraries ${libssl_LIBRARIES})
|
||||||
include_directories (${libssl_INCLUDE_DIRS})
|
include_directories (${libssl_INCLUDE_DIRS})
|
||||||
@@ -32,8 +30,8 @@ foreach (extra iconv rt)
|
|||||||
find_library (extra_lib_${extra} ${extra})
|
find_library (extra_lib_${extra} ${extra})
|
||||||
if (extra_lib_${extra})
|
if (extra_lib_${extra})
|
||||||
list (APPEND common_libraries ${extra})
|
list (APPEND common_libraries ${extra})
|
||||||
endif (extra_lib_${extra})
|
endif ()
|
||||||
endforeach (extra)
|
endforeach ()
|
||||||
|
|
||||||
# Build some unit tests
|
# Build some unit tests
|
||||||
include_directories (${PROJECT_SOURCE_DIR})
|
include_directories (${PROJECT_SOURCE_DIR})
|
||||||
@@ -43,4 +41,4 @@ foreach (name liberty proto)
|
|||||||
add_threads (test-${name})
|
add_threads (test-${name})
|
||||||
target_link_libraries (test-${name} ${common_libraries})
|
target_link_libraries (test-${name} ${common_libraries})
|
||||||
add_test (NAME test-${name} COMMAND test-${name})
|
add_test (NAME test-${name} COMMAND test-${name})
|
||||||
endforeach (name)
|
endforeach ()
|
||||||
|
|||||||
14
liberty.c
14
liberty.c
@@ -2748,7 +2748,8 @@ utf8_decode (const char **s, size_t len)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// In the middle of a character
|
// In the middle of a character
|
||||||
if (sequence_len == 1)
|
// or an overlong sequence (subset, possibly MUTF-8, not supported)
|
||||||
|
if (sequence_len == 1 || *p == 0xC0 || *p == 0xC1)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
// Check the rest of the sequence
|
// Check the rest of the sequence
|
||||||
@@ -2765,6 +2766,13 @@ utf8_decode (const char **s, size_t len)
|
|||||||
return cp;
|
return cp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline bool
|
||||||
|
utf8_validate_cp (int32_t cp)
|
||||||
|
{
|
||||||
|
// RFC 3629, CESU-8 not allowed
|
||||||
|
return cp >= 0 && cp <= 0x10FFFF && (cp < 0xD800 || cp > 0xDFFF);
|
||||||
|
}
|
||||||
|
|
||||||
/// Very rough UTF-8 validation, just makes sure codepoints can be iterated
|
/// Very rough UTF-8 validation, just makes sure codepoints can be iterated
|
||||||
static bool
|
static bool
|
||||||
utf8_validate (const char *s, size_t len)
|
utf8_validate (const char *s, size_t len)
|
||||||
@@ -2772,7 +2780,7 @@ utf8_validate (const char *s, size_t len)
|
|||||||
const char *end = s + len;
|
const char *end = s + len;
|
||||||
int32_t codepoint;
|
int32_t codepoint;
|
||||||
while ((codepoint = utf8_decode (&s, end - s)) >= 0
|
while ((codepoint = utf8_decode (&s, end - s)) >= 0
|
||||||
&& codepoint <= 0x10FFFF /* TODO: better validations */)
|
&& utf8_validate_cp (codepoint))
|
||||||
;
|
;
|
||||||
return s == end;
|
return s == end;
|
||||||
}
|
}
|
||||||
@@ -4409,7 +4417,7 @@ socket_io_try_write (int socket_fd, struct str *wb)
|
|||||||
// char = [\0-\177] # or any Unicode codepoint in the UTF-8 encoding
|
// char = [\0-\177] # or any Unicode codepoint in the UTF-8 encoding
|
||||||
// escape = [\\"abfnrtv] / [xX][0-9A-Fa-f][0-9A-Fa-f]? / [0-7][0-7]?[0-7]?
|
// escape = [\\"abfnrtv] / [xX][0-9A-Fa-f][0-9A-Fa-f]? / [0-7][0-7]?[0-7]?
|
||||||
//
|
//
|
||||||
// integer = lws '-'? [0-9]+ # whatever strtoll() accepts on your system
|
// integer = lws [-+]? [0-9]+ # whatever strtoll() accepts on your system
|
||||||
// null = lws 'null'
|
// null = lws 'null'
|
||||||
// boolean = lws 'yes' / lws 'YES' / lws 'no' / lws 'NO'
|
// boolean = lws 'yes' / lws 'YES' / lws 'no' / lws 'NO'
|
||||||
// / lws 'on' / lws 'ON' / lws 'off' / lws 'OFF'
|
// / lws 'on' / lws 'ON' / lws 'off' / lws 'OFF'
|
||||||
|
|||||||
@@ -331,10 +331,14 @@ test_utf8 (void)
|
|||||||
soft_assert (utf8_decode (&partial, 1) == -2);
|
soft_assert (utf8_decode (&partial, 1) == -2);
|
||||||
soft_assert (utf8_decode (&empty, 0) == -1);
|
soft_assert (utf8_decode (&empty, 0) == -1);
|
||||||
|
|
||||||
const char valid [] = "2H₂ + O₂ ⇌ 2H₂O, R = 4.7 kΩ, ⌀ 200 mm";
|
const char valid_1[] = "2H₂ + O₂ ⇌ 2H₂O, R = 4.7 kΩ, ⌀ 200 mm";
|
||||||
const char invalid[] = "\xf0\x90\x28\xbc";
|
const char valid_2[] = "\xf0\x93\x82\xb9";
|
||||||
soft_assert ( utf8_validate (valid, sizeof valid));
|
const char invalid_1[] = "\xf0\x90\x28\xbc";
|
||||||
soft_assert (!utf8_validate (invalid, sizeof invalid));
|
const char invalid_2[] = "\xc0\x80";
|
||||||
|
soft_assert ( utf8_validate (valid_1, sizeof valid_1));
|
||||||
|
soft_assert ( utf8_validate (valid_2, sizeof valid_2));
|
||||||
|
soft_assert (!utf8_validate (invalid_1, sizeof invalid_1));
|
||||||
|
soft_assert (!utf8_validate (invalid_2, sizeof invalid_2));
|
||||||
|
|
||||||
struct utf8_iter iter = utf8_iter_make ("fóọ");
|
struct utf8_iter iter = utf8_iter_make ("fóọ");
|
||||||
size_t ch_len;
|
size_t ch_len;
|
||||||
|
|||||||
Reference in New Issue
Block a user