Line | Count | Source (jump to first uncovered line) |
1 | | |
2 | | /* |
3 | | * Copyright (C) Igor Sysoev |
4 | | * Copyright (C) NGINX, Inc. |
5 | | */ |
6 | | |
7 | | #ifndef _NXT_UTF8_H_INCLUDED_ |
8 | | #define _NXT_UTF8_H_INCLUDED_ |
9 | | |
10 | | |
11 | | /* |
12 | | * Since the maximum valid Unicode character is 0x0010FFFF, the maximum |
13 | | * difference between Unicode characters is lesser 0x0010FFFF and |
14 | | * 0x0EEE0EEE can be used as value to indicate UTF-8 encoding error. |
15 | | */ |
16 | 59 | #define NXT_UTF8_SORT_INVALID 0x0EEE0EEE |
17 | | |
18 | | |
19 | | NXT_EXPORT u_char *nxt_utf8_encode(u_char *p, uint32_t u); |
20 | | NXT_EXPORT uint32_t nxt_utf8_decode(const u_char **start, const u_char *end); |
21 | | NXT_EXPORT uint32_t nxt_utf8_decode2(const u_char **start, const u_char *end); |
22 | | NXT_EXPORT nxt_int_t nxt_utf8_casecmp(const u_char *start1, |
23 | | const u_char *start2, size_t len1, size_t len2); |
24 | | NXT_EXPORT uint32_t nxt_utf8_lowcase(const u_char **start, const u_char *end); |
25 | | NXT_EXPORT ssize_t nxt_utf8_length(const u_char *p, size_t len); |
26 | | NXT_EXPORT nxt_bool_t nxt_utf8_is_valid(const u_char *p, size_t len); |
27 | | |
28 | | |
29 | | /* nxt_utf8_next() expects a valid UTF-8 string. */ |
30 | | |
31 | | nxt_inline const u_char * |
32 | | nxt_utf8_next(const u_char *p, const u_char *end) |
33 | 0 | { |
34 | 0 | u_char c; |
35 | 0 |
|
36 | 0 | c = *p++; |
37 | 0 |
|
38 | 0 | if ((c & 0x80) != 0) { |
39 | 0 |
|
40 | 0 | do { |
41 | 0 | /* |
42 | 0 | * The first UTF-8 byte is either 0xxxxxxx or 11xxxxxx. |
43 | 0 | * The next UTF-8 bytes are 10xxxxxx. |
44 | 0 | */ |
45 | 0 | c = *p; |
46 | 0 |
|
47 | 0 | if ((c & 0xC0) != 0x80) { |
48 | 0 | return p; |
49 | 0 | } |
50 | 0 |
|
51 | 0 | p++; |
52 | 0 |
|
53 | 0 | } while (p < end); |
54 | 0 | } |
55 | 0 |
|
56 | 0 | return p; |
57 | 0 | } Unexecuted instantiation: nxt_json_fuzz.c:nxt_utf8_next Unexecuted instantiation: nxt_lib.c:nxt_utf8_next Unexecuted instantiation: nxt_errno.c:nxt_utf8_next Unexecuted instantiation: nxt_malloc.c:nxt_utf8_next Unexecuted instantiation: nxt_file.c:nxt_utf8_next Unexecuted instantiation: nxt_process.c:nxt_utf8_next Unexecuted instantiation: nxt_process_title.c:nxt_utf8_next Unexecuted instantiation: nxt_port_socket.c:nxt_utf8_next Unexecuted instantiation: nxt_port_memory.c:nxt_utf8_next Unexecuted instantiation: nxt_port_rpc.c:nxt_utf8_next Unexecuted instantiation: nxt_port.c:nxt_utf8_next Unexecuted instantiation: nxt_random.c:nxt_utf8_next Unexecuted instantiation: nxt_mp.c:nxt_utf8_next Unexecuted instantiation: nxt_string.c:nxt_utf8_next Unexecuted instantiation: nxt_sprintf.c:nxt_utf8_next Unexecuted instantiation: nxt_log.c:nxt_utf8_next Unexecuted instantiation: nxt_murmur_hash.c:nxt_utf8_next Unexecuted instantiation: nxt_lvlhsh.c:nxt_utf8_next Unexecuted instantiation: nxt_array.c:nxt_utf8_next Unexecuted instantiation: nxt_buf.c:nxt_utf8_next Unexecuted instantiation: nxt_sendbuf.c:nxt_utf8_next Unexecuted instantiation: nxt_thread.c:nxt_utf8_next Unexecuted instantiation: nxt_thread_mutex.c:nxt_utf8_next Unexecuted instantiation: nxt_spinlock.c:nxt_utf8_next Unexecuted instantiation: nxt_thread_time.c:nxt_utf8_next Unexecuted instantiation: nxt_work_queue.c:nxt_utf8_next Unexecuted instantiation: nxt_service.c:nxt_utf8_next Unexecuted instantiation: nxt_log_moderation.c:nxt_utf8_next Unexecuted instantiation: nxt_event_engine.c:nxt_utf8_next Unexecuted instantiation: nxt_timer.c:nxt_utf8_next Unexecuted instantiation: nxt_runtime.c:nxt_utf8_next Unexecuted instantiation: nxt_conf.c:nxt_utf8_next Unexecuted instantiation: nxt_conf_validation.c:nxt_utf8_next Unexecuted instantiation: nxt_main_process.c:nxt_utf8_next Unexecuted instantiation: nxt_signal_handlers.c:nxt_utf8_next Unexecuted instantiation: nxt_controller.c:nxt_utf8_next Unexecuted instantiation: nxt_router.c:nxt_utf8_next Unexecuted instantiation: nxt_router_access_log.c:nxt_utf8_next Unexecuted instantiation: nxt_h1proto.c:nxt_utf8_next Unexecuted instantiation: nxt_status.c:nxt_utf8_next Unexecuted instantiation: nxt_http_request.c:nxt_utf8_next Unexecuted instantiation: nxt_http_response.c:nxt_utf8_next Unexecuted instantiation: nxt_http_error.c:nxt_utf8_next Unexecuted instantiation: nxt_http_route.c:nxt_utf8_next Unexecuted instantiation: nxt_http_route_addr.c:nxt_utf8_next Unexecuted instantiation: nxt_http_rewrite.c:nxt_utf8_next Unexecuted instantiation: nxt_http_set_headers.c:nxt_utf8_next Unexecuted instantiation: nxt_http_return.c:nxt_utf8_next Unexecuted instantiation: nxt_http_static.c:nxt_utf8_next Unexecuted instantiation: nxt_http_proxy.c:nxt_utf8_next Unexecuted instantiation: nxt_http_chunk_parse.c:nxt_utf8_next Unexecuted instantiation: nxt_http_variables.c:nxt_utf8_next Unexecuted instantiation: nxt_application.c:nxt_utf8_next Unexecuted instantiation: nxt_external.c:nxt_utf8_next Unexecuted instantiation: nxt_port_hash.c:nxt_utf8_next Unexecuted instantiation: nxt_websocket_accept.c:nxt_utf8_next Unexecuted instantiation: nxt_http_websocket.c:nxt_utf8_next Unexecuted instantiation: nxt_h1proto_websocket.c:nxt_utf8_next Unexecuted instantiation: nxt_fs.c:nxt_utf8_next Unexecuted instantiation: nxt_http_compression.c:nxt_utf8_next Unexecuted instantiation: nxt_epoll_engine.c:nxt_utf8_next Unexecuted instantiation: nxt_poll_engine.c:nxt_utf8_next Unexecuted instantiation: nxt_select_engine.c:nxt_utf8_next Unexecuted instantiation: nxt_linux_sendfile.c:nxt_utf8_next Unexecuted instantiation: nxt_clone.c:nxt_utf8_next Unexecuted instantiation: nxt_gmtime.c:nxt_utf8_next Unexecuted instantiation: nxt_time.c:nxt_utf8_next Unexecuted instantiation: nxt_mem_map.c:nxt_utf8_next Unexecuted instantiation: nxt_socket.c:nxt_utf8_next Unexecuted instantiation: nxt_socketpair.c:nxt_utf8_next Unexecuted instantiation: nxt_socket_msg.c:nxt_utf8_next Unexecuted instantiation: nxt_credential.c:nxt_utf8_next Unexecuted instantiation: nxt_isolation.c:nxt_utf8_next Unexecuted instantiation: nxt_signal.c:nxt_utf8_next Unexecuted instantiation: nxt_rbtree.c:nxt_utf8_next Unexecuted instantiation: nxt_utf8.c:nxt_utf8_next Unexecuted instantiation: nxt_parse.c:nxt_utf8_next Unexecuted instantiation: nxt_var.c:nxt_utf8_next Unexecuted instantiation: nxt_tstr.c:nxt_utf8_next Unexecuted instantiation: nxt_file_name.c:nxt_utf8_next Unexecuted instantiation: nxt_djb_hash.c:nxt_utf8_next Unexecuted instantiation: nxt_list.c:nxt_utf8_next Unexecuted instantiation: nxt_thread_pool.c:nxt_utf8_next Unexecuted instantiation: nxt_conn.c:nxt_utf8_next Unexecuted instantiation: nxt_conn_connect.c:nxt_utf8_next Unexecuted instantiation: nxt_conn_accept.c:nxt_utf8_next Unexecuted instantiation: nxt_conn_read.c:nxt_utf8_next Unexecuted instantiation: nxt_conn_write.c:nxt_utf8_next Unexecuted instantiation: nxt_conn_close.c:nxt_utf8_next Unexecuted instantiation: nxt_sockaddr.c:nxt_utf8_next Unexecuted instantiation: nxt_listen_socket.c:nxt_utf8_next Unexecuted instantiation: nxt_upstream.c:nxt_utf8_next Unexecuted instantiation: nxt_upstream_round_robin.c:nxt_utf8_next Unexecuted instantiation: nxt_http_parse.c:nxt_utf8_next Unexecuted instantiation: nxt_capability.c:nxt_utf8_next Unexecuted instantiation: nxt_sha1.c:nxt_utf8_next Unexecuted instantiation: nxt_websocket.c:nxt_utf8_next Unexecuted instantiation: nxt_fs_mount.c:nxt_utf8_next Unexecuted instantiation: nxt_recvbuf.c:nxt_utf8_next Unexecuted instantiation: nxt_semaphore.c:nxt_utf8_next Unexecuted instantiation: nxt_http_h1p_fuzz.c:nxt_utf8_next Unexecuted instantiation: nxt_http_h1p_peer_fuzz.c:nxt_utf8_next Unexecuted instantiation: nxt_basic_fuzz.c:nxt_utf8_next Unexecuted instantiation: nxt_time_parse.c:nxt_utf8_next Unexecuted instantiation: nxt_http_controller_fuzz.c:nxt_utf8_next |
58 | | |
59 | | |
60 | | #endif /* _NXT_UTF8_H_INCLUDED_ */ |