Coverage Report

Created: 2025-07-12 06:16

/src/unit/src/nxt_utf8.h
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_ */