Annotate

util-src/encodings.c @ 9307:feaef6215bb8

util.stanza: Don't automatically generate ids for iq stanzas Users of this API should provide their own id attribute that meets their uniqueness requirements. The current implementation leaks information (i.e. how many iq stanzas have been sent by the server to other JIDs). Providing any strong guarantees of randomness here would need to pull in additional dependencies that we don't want in this simple library.
author Matthew Wild <mwild1@gmail.com>
date Thu, 13 Sep 2018 16:35:48 +0100
parent 9153:26c5a4a14905
child 9973:640a2b8e7806
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2923
b7049746bd29 Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents: 2572
diff changeset
1 /* Prosody IM
b7049746bd29 Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents: 2572
diff changeset
2 -- Copyright (C) 2008-2010 Matthew Wild
b7049746bd29 Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents: 2572
diff changeset
3 -- Copyright (C) 2008-2010 Waqas Hussain
6591
fe3018a2f187 util.encodings: Perform validation of UTF-8 strings before passing to libidn (Based on code from the utf8 library in Lua 5.3)
Kim Alvefur <zash@zash.se>
parents: 4302
diff changeset
4 -- Copyright (C) 1994-2015 Lua.org, PUC-Rio.
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
5 --
766
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
6 -- This project is MIT/X11 licensed. Please see the
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
7 -- COPYING file in the source package for more information.
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
8 --
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
9 */
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
10
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
11 /*
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
12 * encodings.c
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
13 * Lua library for base64, stringprep and idna encodings
520
e96ac4bb6dd8 and the C files too
Matthew Wild <mwild1@gmail.com>
parents: 474
diff changeset
14 */
e96ac4bb6dd8 and the C files too
Matthew Wild <mwild1@gmail.com>
parents: 474
diff changeset
15
3965
4ae4b2c0e99d util.encodings: Switch comment styles to build ok as ANSI C
Matthew Wild <mwild1@gmail.com>
parents: 3769
diff changeset
16 /* Newer MSVC compilers deprecate strcpy as unsafe, but we use it in a safe way */
766
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
17 #define _CRT_SECURE_NO_DEPRECATE
520
e96ac4bb6dd8 and the C files too
Matthew Wild <mwild1@gmail.com>
parents: 474
diff changeset
18
766
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
19 #include <string.h>
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
20 #include <stdlib.h>
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
21 #include "lua.h"
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
22 #include "lauxlib.h"
3769
9338d0785277 util-src/Makefile, util-src/encodings.c{,pp}: Port ICU code to C, rename encodings.cpp back to .c and amend the Makefile accordingly
Matthew Wild <mwild1@gmail.com>
parents: 3764
diff changeset
23
6789
6b180e77c97a util-src/*.c: Invert Lua 5.2 compat to be 5.2+ by default and a macro to support 5.1
Kim Alvefur <zash@zash.se>
parents: 6643
diff changeset
24 #if (LUA_VERSION_NUM == 501)
6b180e77c97a util-src/*.c: Invert Lua 5.2 compat to be 5.2+ by default and a macro to support 5.1
Kim Alvefur <zash@zash.se>
parents: 6643
diff changeset
25 #define luaL_setfuncs(L, R, N) luaL_register(L, NULL, R)
6413
a552f4170aed util-src/*.c: Add macro for compiling with Lua 5.2
Kim Alvefur <zash@zash.se>
parents: 6412
diff changeset
26 #endif
a552f4170aed util-src/*.c: Add macro for compiling with Lua 5.2
Kim Alvefur <zash@zash.se>
parents: 6412
diff changeset
27
3762
f02bac902a1e util.encodings: Support for ICU for IDNA operations.
Tobias Markmann <tm@ayena.de>
parents: 2923
diff changeset
28 /***************** BASE64 *****************/
766
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
29
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
30 static const char code[] =
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
31 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
766
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
32
7889
b8d694646597 util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents: 7835
diff changeset
33 static void base64_encode(luaL_Buffer *b, unsigned int c1, unsigned int c2, unsigned int c3, int n) {
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
34 unsigned long tuple = c3 + 256UL * (c2 + 256UL * c1);
766
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
35 int i;
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
36 char s[4];
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
37
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
38 for(i = 0; i < 4; i++) {
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
39 s[3 - i] = code[tuple % 64];
766
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
40 tuple /= 64;
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
41 }
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
42
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
43 for(i = n + 1; i < 4; i++) {
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
44 s[i] = '=';
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
45 }
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
46
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
47 luaL_addlstring(b, s, 4);
766
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
48 }
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
49
7889
b8d694646597 util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents: 7835
diff changeset
50 static int Lbase64_encode(lua_State *L) { /** encode(s) */
766
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
51 size_t l;
7889
b8d694646597 util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents: 7835
diff changeset
52 const unsigned char *s = (const unsigned char *)luaL_checklstring(L, 1, &l);
766
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
53 luaL_Buffer b;
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
54 int n;
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
55 luaL_buffinit(L, &b);
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
56
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
57 for(n = l / 3; n--; s += 3) {
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
58 base64_encode(&b, s[0], s[1], s[2], 3);
766
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
59 }
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
60
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
61 switch(l % 3) {
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
62 case 1:
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
63 base64_encode(&b, s[0], 0, 0, 1);
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
64 break;
7889
b8d694646597 util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents: 7835
diff changeset
65
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
66 case 2:
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
67 base64_encode(&b, s[0], s[1], 0, 2);
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
68 break;
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
69 }
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
70
766
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
71 luaL_pushresult(&b);
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
72 return 1;
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
73 }
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
74
7889
b8d694646597 util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents: 7835
diff changeset
75 static void base64_decode(luaL_Buffer *b, int c1, int c2, int c3, int c4, int n) {
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
76 unsigned long tuple = c4 + 64L * (c3 + 64L * (c2 + 64L * c1));
766
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
77 char s[3];
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
78
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
79 switch(--n) {
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
80 case 3:
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
81 s[2] = (char) tuple;
9153
26c5a4a14905 encodings: Explicitly say that base64 decoding falls through in a switch, fixes a warning in gcc 7+.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 8291
diff changeset
82 /* Falls through. */
7889
b8d694646597 util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents: 7835
diff changeset
83
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
84 case 2:
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
85 s[1] = (char)(tuple >> 8);
9153
26c5a4a14905 encodings: Explicitly say that base64 decoding falls through in a switch, fixes a warning in gcc 7+.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 8291
diff changeset
86 /* Falls through. */
7889
b8d694646597 util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents: 7835
diff changeset
87
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
88 case 1:
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
89 s[0] = (char)(tuple >> 16);
766
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
90 }
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
91
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
92 luaL_addlstring(b, s, n);
766
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
93 }
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
94
7889
b8d694646597 util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents: 7835
diff changeset
95 static int Lbase64_decode(lua_State *L) { /** decode(s) */
766
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
96 size_t l;
7889
b8d694646597 util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents: 7835
diff changeset
97 const char *s = luaL_checklstring(L, 1, &l);
766
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
98 luaL_Buffer b;
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
99 int n = 0;
766
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
100 char t[4];
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
101 luaL_buffinit(L, &b);
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
102
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
103 for(;;) {
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
104 int c = *s++;
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
105
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
106 switch(c) {
7889
b8d694646597 util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents: 7835
diff changeset
107 const char *p;
b8d694646597 util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents: 7835
diff changeset
108
766
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
109 default:
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
110 p = strchr(code, c);
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
111
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
112 if(p == NULL) {
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
113 return 0;
766
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
114 }
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
115
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
116 t[n++] = (char)(p - code);
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
117
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
118 if(n == 4) {
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
119 base64_decode(&b, t[0], t[1], t[2], t[3], 4);
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
120 n = 0;
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
121 }
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
122
766
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
123 break;
7889
b8d694646597 util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents: 7835
diff changeset
124
766
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
125 case '=':
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
126
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
127 switch(n) {
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
128 case 1:
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
129 base64_decode(&b, t[0], 0, 0, 0, 1);
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
130 break;
7889
b8d694646597 util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents: 7835
diff changeset
131
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
132 case 2:
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
133 base64_decode(&b, t[0], t[1], 0, 0, 2);
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
134 break;
7889
b8d694646597 util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents: 7835
diff changeset
135
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
136 case 3:
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
137 base64_decode(&b, t[0], t[1], t[2], 0, 3);
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
138 break;
601
6cb908ef01c8 Fixed util.encodings.base64.decode to not truncate results when encountering an '=' before the end of the given input.
Waqas Hussain <waqas20@gmail.com>
parents: 520
diff changeset
139 }
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
140
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
141 n = 0;
766
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
142 break;
7889
b8d694646597 util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents: 7835
diff changeset
143
766
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
144 case 0:
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
145 luaL_pushresult(&b);
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
146 return 1;
7889
b8d694646597 util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents: 7835
diff changeset
147
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
148 case '\n':
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
149 case '\r':
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
150 case '\t':
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
151 case ' ':
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
152 case '\f':
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
153 case '\b':
766
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
154 break;
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
155 }
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
156 }
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
157 }
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
158
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
159 static const luaL_Reg Reg_base64[] = {
766
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
160 { "encode", Lbase64_encode },
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
161 { "decode", Lbase64_decode },
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
162 { NULL, NULL }
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
163 };
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
164
6591
fe3018a2f187 util.encodings: Perform validation of UTF-8 strings before passing to libidn (Based on code from the utf8 library in Lua 5.3)
Kim Alvefur <zash@zash.se>
parents: 4302
diff changeset
165 /******************* UTF-8 ********************/
fe3018a2f187 util.encodings: Perform validation of UTF-8 strings before passing to libidn (Based on code from the utf8 library in Lua 5.3)
Kim Alvefur <zash@zash.se>
parents: 4302
diff changeset
166
fe3018a2f187 util.encodings: Perform validation of UTF-8 strings before passing to libidn (Based on code from the utf8 library in Lua 5.3)
Kim Alvefur <zash@zash.se>
parents: 4302
diff changeset
167 /*
fe3018a2f187 util.encodings: Perform validation of UTF-8 strings before passing to libidn (Based on code from the utf8 library in Lua 5.3)
Kim Alvefur <zash@zash.se>
parents: 4302
diff changeset
168 * Adapted from Lua 5.3
fe3018a2f187 util.encodings: Perform validation of UTF-8 strings before passing to libidn (Based on code from the utf8 library in Lua 5.3)
Kim Alvefur <zash@zash.se>
parents: 4302
diff changeset
169 * Needed because libidn does not validate that input is valid UTF-8
fe3018a2f187 util.encodings: Perform validation of UTF-8 strings before passing to libidn (Based on code from the utf8 library in Lua 5.3)
Kim Alvefur <zash@zash.se>
parents: 4302
diff changeset
170 */
fe3018a2f187 util.encodings: Perform validation of UTF-8 strings before passing to libidn (Based on code from the utf8 library in Lua 5.3)
Kim Alvefur <zash@zash.se>
parents: 4302
diff changeset
171
fe3018a2f187 util.encodings: Perform validation of UTF-8 strings before passing to libidn (Based on code from the utf8 library in Lua 5.3)
Kim Alvefur <zash@zash.se>
parents: 4302
diff changeset
172 #define MAXUNICODE 0x10FFFF
fe3018a2f187 util.encodings: Perform validation of UTF-8 strings before passing to libidn (Based on code from the utf8 library in Lua 5.3)
Kim Alvefur <zash@zash.se>
parents: 4302
diff changeset
173
fe3018a2f187 util.encodings: Perform validation of UTF-8 strings before passing to libidn (Based on code from the utf8 library in Lua 5.3)
Kim Alvefur <zash@zash.se>
parents: 4302
diff changeset
174 /*
fe3018a2f187 util.encodings: Perform validation of UTF-8 strings before passing to libidn (Based on code from the utf8 library in Lua 5.3)
Kim Alvefur <zash@zash.se>
parents: 4302
diff changeset
175 * Decode one UTF-8 sequence, returning NULL if byte sequence is invalid.
fe3018a2f187 util.encodings: Perform validation of UTF-8 strings before passing to libidn (Based on code from the utf8 library in Lua 5.3)
Kim Alvefur <zash@zash.se>
parents: 4302
diff changeset
176 */
7889
b8d694646597 util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents: 7835
diff changeset
177 static const char *utf8_decode(const char *o, int *val) {
7998
604beb13596a util.encodings: Make limit lookup table a const (from Lua f2a813ae)
Kim Alvefur <zash@zash.se>
parents: 7889
diff changeset
178 static const unsigned int limits[] = {0xFF, 0x7F, 0x7FF, 0xFFFF};
7889
b8d694646597 util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents: 7835
diff changeset
179 const unsigned char *s = (const unsigned char *)o;
6591
fe3018a2f187 util.encodings: Perform validation of UTF-8 strings before passing to libidn (Based on code from the utf8 library in Lua 5.3)
Kim Alvefur <zash@zash.se>
parents: 4302
diff changeset
180 unsigned int c = s[0];
fe3018a2f187 util.encodings: Perform validation of UTF-8 strings before passing to libidn (Based on code from the utf8 library in Lua 5.3)
Kim Alvefur <zash@zash.se>
parents: 4302
diff changeset
181 unsigned int res = 0; /* final result */
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
182
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
183 if(c < 0x80) { /* ascii? */
6591
fe3018a2f187 util.encodings: Perform validation of UTF-8 strings before passing to libidn (Based on code from the utf8 library in Lua 5.3)
Kim Alvefur <zash@zash.se>
parents: 4302
diff changeset
184 res = c;
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
185 } else {
6591
fe3018a2f187 util.encodings: Perform validation of UTF-8 strings before passing to libidn (Based on code from the utf8 library in Lua 5.3)
Kim Alvefur <zash@zash.se>
parents: 4302
diff changeset
186 int count = 0; /* to count number of continuation bytes */
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
187
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
188 while(c & 0x40) { /* still have continuation bytes? */
6591
fe3018a2f187 util.encodings: Perform validation of UTF-8 strings before passing to libidn (Based on code from the utf8 library in Lua 5.3)
Kim Alvefur <zash@zash.se>
parents: 4302
diff changeset
189 int cc = s[++count]; /* read next byte */
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
190
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
191 if((cc & 0xC0) != 0x80) { /* not a continuation byte? */
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
192 return NULL; /* invalid byte sequence */
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
193 }
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
194
6591
fe3018a2f187 util.encodings: Perform validation of UTF-8 strings before passing to libidn (Based on code from the utf8 library in Lua 5.3)
Kim Alvefur <zash@zash.se>
parents: 4302
diff changeset
195 res = (res << 6) | (cc & 0x3F); /* add lower 6 bits from cont. byte */
fe3018a2f187 util.encodings: Perform validation of UTF-8 strings before passing to libidn (Based on code from the utf8 library in Lua 5.3)
Kim Alvefur <zash@zash.se>
parents: 4302
diff changeset
196 c <<= 1; /* to test next bit */
fe3018a2f187 util.encodings: Perform validation of UTF-8 strings before passing to libidn (Based on code from the utf8 library in Lua 5.3)
Kim Alvefur <zash@zash.se>
parents: 4302
diff changeset
197 }
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
198
6591
fe3018a2f187 util.encodings: Perform validation of UTF-8 strings before passing to libidn (Based on code from the utf8 library in Lua 5.3)
Kim Alvefur <zash@zash.se>
parents: 4302
diff changeset
199 res |= ((c & 0x7F) << (count * 5)); /* add first byte */
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
200
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
201 if(count > 3 || res > MAXUNICODE || res <= limits[count] || (0xd800 <= res && res <= 0xdfff)) {
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
202 return NULL; /* invalid byte sequence */
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
203 }
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
204
6591
fe3018a2f187 util.encodings: Perform validation of UTF-8 strings before passing to libidn (Based on code from the utf8 library in Lua 5.3)
Kim Alvefur <zash@zash.se>
parents: 4302
diff changeset
205 s += count; /* skip continuation bytes read */
fe3018a2f187 util.encodings: Perform validation of UTF-8 strings before passing to libidn (Based on code from the utf8 library in Lua 5.3)
Kim Alvefur <zash@zash.se>
parents: 4302
diff changeset
206 }
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
207
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
208 if(val) {
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
209 *val = res;
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
210 }
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
211
7889
b8d694646597 util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents: 7835
diff changeset
212 return (const char *)s + 1; /* +1 to include first byte */
6591
fe3018a2f187 util.encodings: Perform validation of UTF-8 strings before passing to libidn (Based on code from the utf8 library in Lua 5.3)
Kim Alvefur <zash@zash.se>
parents: 4302
diff changeset
213 }
fe3018a2f187 util.encodings: Perform validation of UTF-8 strings before passing to libidn (Based on code from the utf8 library in Lua 5.3)
Kim Alvefur <zash@zash.se>
parents: 4302
diff changeset
214
fe3018a2f187 util.encodings: Perform validation of UTF-8 strings before passing to libidn (Based on code from the utf8 library in Lua 5.3)
Kim Alvefur <zash@zash.se>
parents: 4302
diff changeset
215 /*
fe3018a2f187 util.encodings: Perform validation of UTF-8 strings before passing to libidn (Based on code from the utf8 library in Lua 5.3)
Kim Alvefur <zash@zash.se>
parents: 4302
diff changeset
216 * Check that a string is valid UTF-8
fe3018a2f187 util.encodings: Perform validation of UTF-8 strings before passing to libidn (Based on code from the utf8 library in Lua 5.3)
Kim Alvefur <zash@zash.se>
parents: 4302
diff changeset
217 * Returns NULL if not
fe3018a2f187 util.encodings: Perform validation of UTF-8 strings before passing to libidn (Based on code from the utf8 library in Lua 5.3)
Kim Alvefur <zash@zash.se>
parents: 4302
diff changeset
218 */
7889
b8d694646597 util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents: 7835
diff changeset
219 const char *check_utf8(lua_State *L, int idx, size_t *l) {
6591
fe3018a2f187 util.encodings: Perform validation of UTF-8 strings before passing to libidn (Based on code from the utf8 library in Lua 5.3)
Kim Alvefur <zash@zash.se>
parents: 4302
diff changeset
220 size_t pos, len;
8291
fba1ea67f5c0 util.encodings: Use the 'idx' argument correctly [-Wunused-parameter]
Kim Alvefur <zash@zash.se>
parents: 7998
diff changeset
221 const char *s = luaL_checklstring(L, idx, &len);
6591
fe3018a2f187 util.encodings: Perform validation of UTF-8 strings before passing to libidn (Based on code from the utf8 library in Lua 5.3)
Kim Alvefur <zash@zash.se>
parents: 4302
diff changeset
222 pos = 0;
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
223
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
224 while(pos <= len) {
7889
b8d694646597 util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents: 7835
diff changeset
225 const char *s1 = utf8_decode(s + pos, NULL);
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
226
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
227 if(s1 == NULL) { /* conversion error? */
6591
fe3018a2f187 util.encodings: Perform validation of UTF-8 strings before passing to libidn (Based on code from the utf8 library in Lua 5.3)
Kim Alvefur <zash@zash.se>
parents: 4302
diff changeset
228 return NULL;
fe3018a2f187 util.encodings: Perform validation of UTF-8 strings before passing to libidn (Based on code from the utf8 library in Lua 5.3)
Kim Alvefur <zash@zash.se>
parents: 4302
diff changeset
229 }
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
230
6591
fe3018a2f187 util.encodings: Perform validation of UTF-8 strings before passing to libidn (Based on code from the utf8 library in Lua 5.3)
Kim Alvefur <zash@zash.se>
parents: 4302
diff changeset
231 pos = s1 - s;
fe3018a2f187 util.encodings: Perform validation of UTF-8 strings before passing to libidn (Based on code from the utf8 library in Lua 5.3)
Kim Alvefur <zash@zash.se>
parents: 4302
diff changeset
232 }
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
233
6591
fe3018a2f187 util.encodings: Perform validation of UTF-8 strings before passing to libidn (Based on code from the utf8 library in Lua 5.3)
Kim Alvefur <zash@zash.se>
parents: 4302
diff changeset
234 if(l != NULL) {
fe3018a2f187 util.encodings: Perform validation of UTF-8 strings before passing to libidn (Based on code from the utf8 library in Lua 5.3)
Kim Alvefur <zash@zash.se>
parents: 4302
diff changeset
235 *l = len;
fe3018a2f187 util.encodings: Perform validation of UTF-8 strings before passing to libidn (Based on code from the utf8 library in Lua 5.3)
Kim Alvefur <zash@zash.se>
parents: 4302
diff changeset
236 }
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
237
6591
fe3018a2f187 util.encodings: Perform validation of UTF-8 strings before passing to libidn (Based on code from the utf8 library in Lua 5.3)
Kim Alvefur <zash@zash.se>
parents: 4302
diff changeset
238 return s;
fe3018a2f187 util.encodings: Perform validation of UTF-8 strings before passing to libidn (Based on code from the utf8 library in Lua 5.3)
Kim Alvefur <zash@zash.se>
parents: 4302
diff changeset
239 }
fe3018a2f187 util.encodings: Perform validation of UTF-8 strings before passing to libidn (Based on code from the utf8 library in Lua 5.3)
Kim Alvefur <zash@zash.se>
parents: 4302
diff changeset
240
7889
b8d694646597 util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents: 7835
diff changeset
241 static int Lutf8_valid(lua_State *L) {
6592
141afe8a167b util.encodings: Expose UTF-8 validation and length checking functions
Kim Alvefur <zash@zash.se>
parents: 6591
diff changeset
242 lua_pushboolean(L, check_utf8(L, 1, NULL) != NULL);
141afe8a167b util.encodings: Expose UTF-8 validation and length checking functions
Kim Alvefur <zash@zash.se>
parents: 6591
diff changeset
243 return 1;
141afe8a167b util.encodings: Expose UTF-8 validation and length checking functions
Kim Alvefur <zash@zash.se>
parents: 6591
diff changeset
244 }
141afe8a167b util.encodings: Expose UTF-8 validation and length checking functions
Kim Alvefur <zash@zash.se>
parents: 6591
diff changeset
245
7889
b8d694646597 util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents: 7835
diff changeset
246 static int Lutf8_length(lua_State *L) {
6592
141afe8a167b util.encodings: Expose UTF-8 validation and length checking functions
Kim Alvefur <zash@zash.se>
parents: 6591
diff changeset
247 size_t len;
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
248
6592
141afe8a167b util.encodings: Expose UTF-8 validation and length checking functions
Kim Alvefur <zash@zash.se>
parents: 6591
diff changeset
249 if(!check_utf8(L, 1, &len)) {
141afe8a167b util.encodings: Expose UTF-8 validation and length checking functions
Kim Alvefur <zash@zash.se>
parents: 6591
diff changeset
250 lua_pushnil(L);
141afe8a167b util.encodings: Expose UTF-8 validation and length checking functions
Kim Alvefur <zash@zash.se>
parents: 6591
diff changeset
251 lua_pushliteral(L, "invalid utf8");
141afe8a167b util.encodings: Expose UTF-8 validation and length checking functions
Kim Alvefur <zash@zash.se>
parents: 6591
diff changeset
252 return 2;
141afe8a167b util.encodings: Expose UTF-8 validation and length checking functions
Kim Alvefur <zash@zash.se>
parents: 6591
diff changeset
253 }
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
254
6592
141afe8a167b util.encodings: Expose UTF-8 validation and length checking functions
Kim Alvefur <zash@zash.se>
parents: 6591
diff changeset
255 lua_pushinteger(L, len);
141afe8a167b util.encodings: Expose UTF-8 validation and length checking functions
Kim Alvefur <zash@zash.se>
parents: 6591
diff changeset
256 return 1;
141afe8a167b util.encodings: Expose UTF-8 validation and length checking functions
Kim Alvefur <zash@zash.se>
parents: 6591
diff changeset
257 }
141afe8a167b util.encodings: Expose UTF-8 validation and length checking functions
Kim Alvefur <zash@zash.se>
parents: 6591
diff changeset
258
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
259 static const luaL_Reg Reg_utf8[] = {
6592
141afe8a167b util.encodings: Expose UTF-8 validation and length checking functions
Kim Alvefur <zash@zash.se>
parents: 6591
diff changeset
260 { "valid", Lutf8_valid },
141afe8a167b util.encodings: Expose UTF-8 validation and length checking functions
Kim Alvefur <zash@zash.se>
parents: 6591
diff changeset
261 { "length", Lutf8_length },
141afe8a167b util.encodings: Expose UTF-8 validation and length checking functions
Kim Alvefur <zash@zash.se>
parents: 6591
diff changeset
262 { NULL, NULL }
141afe8a167b util.encodings: Expose UTF-8 validation and length checking functions
Kim Alvefur <zash@zash.se>
parents: 6591
diff changeset
263 };
141afe8a167b util.encodings: Expose UTF-8 validation and length checking functions
Kim Alvefur <zash@zash.se>
parents: 6591
diff changeset
264
766
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
265 /***************** STRINGPREP *****************/
4272
0a4ce2086a88 util.encodings: Swap code order ("ifndef" bugs me)
Paul Aurich <paul@darkrain42.org>
parents: 4271
diff changeset
266 #ifdef USE_STRINGPREP_ICU
3769
9338d0785277 util-src/Makefile, util-src/encodings.c{,pp}: Port ICU code to C, rename encodings.cpp back to .c and amend the Makefile accordingly
Matthew Wild <mwild1@gmail.com>
parents: 3764
diff changeset
267
3762
f02bac902a1e util.encodings: Support for ICU for IDNA operations.
Tobias Markmann <tm@ayena.de>
parents: 2923
diff changeset
268 #include <unicode/usprep.h>
3769
9338d0785277 util-src/Makefile, util-src/encodings.c{,pp}: Port ICU code to C, rename encodings.cpp back to .c and amend the Makefile accordingly
Matthew Wild <mwild1@gmail.com>
parents: 3764
diff changeset
269 #include <unicode/ustring.h>
3762
f02bac902a1e util.encodings: Support for ICU for IDNA operations.
Tobias Markmann <tm@ayena.de>
parents: 2923
diff changeset
270 #include <unicode/utrace.h>
f02bac902a1e util.encodings: Support for ICU for IDNA operations.
Tobias Markmann <tm@ayena.de>
parents: 2923
diff changeset
271
7889
b8d694646597 util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents: 7835
diff changeset
272 static int icu_stringprep_prep(lua_State *L, const UStringPrepProfile *profile) {
3769
9338d0785277 util-src/Makefile, util-src/encodings.c{,pp}: Port ICU code to C, rename encodings.cpp back to .c and amend the Makefile accordingly
Matthew Wild <mwild1@gmail.com>
parents: 3764
diff changeset
273 size_t input_len;
9338d0785277 util-src/Makefile, util-src/encodings.c{,pp}: Port ICU code to C, rename encodings.cpp back to .c and amend the Makefile accordingly
Matthew Wild <mwild1@gmail.com>
parents: 3764
diff changeset
274 int32_t unprepped_len, prepped_len, output_len;
7889
b8d694646597 util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents: 7835
diff changeset
275 const char *input;
3769
9338d0785277 util-src/Makefile, util-src/encodings.c{,pp}: Port ICU code to C, rename encodings.cpp back to .c and amend the Makefile accordingly
Matthew Wild <mwild1@gmail.com>
parents: 3764
diff changeset
276 char output[1024];
9338d0785277 util-src/Makefile, util-src/encodings.c{,pp}: Port ICU code to C, rename encodings.cpp back to .c and amend the Makefile accordingly
Matthew Wild <mwild1@gmail.com>
parents: 3764
diff changeset
277
9338d0785277 util-src/Makefile, util-src/encodings.c{,pp}: Port ICU code to C, rename encodings.cpp back to .c and amend the Makefile accordingly
Matthew Wild <mwild1@gmail.com>
parents: 3764
diff changeset
278 UChar unprepped[1024]; /* Temporary unicode buffer (1024 characters) */
9338d0785277 util-src/Makefile, util-src/encodings.c{,pp}: Port ICU code to C, rename encodings.cpp back to .c and amend the Makefile accordingly
Matthew Wild <mwild1@gmail.com>
parents: 3764
diff changeset
279 UChar prepped[1024];
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
280
3762
f02bac902a1e util.encodings: Support for ICU for IDNA operations.
Tobias Markmann <tm@ayena.de>
parents: 2923
diff changeset
281 UErrorCode err = U_ZERO_ERROR;
3769
9338d0785277 util-src/Makefile, util-src/encodings.c{,pp}: Port ICU code to C, rename encodings.cpp back to .c and amend the Makefile accordingly
Matthew Wild <mwild1@gmail.com>
parents: 3764
diff changeset
282
3762
f02bac902a1e util.encodings: Support for ICU for IDNA operations.
Tobias Markmann <tm@ayena.de>
parents: 2923
diff changeset
283 if(!lua_isstring(L, 1)) {
f02bac902a1e util.encodings: Support for ICU for IDNA operations.
Tobias Markmann <tm@ayena.de>
parents: 2923
diff changeset
284 lua_pushnil(L);
f02bac902a1e util.encodings: Support for ICU for IDNA operations.
Tobias Markmann <tm@ayena.de>
parents: 2923
diff changeset
285 return 1;
f02bac902a1e util.encodings: Support for ICU for IDNA operations.
Tobias Markmann <tm@ayena.de>
parents: 2923
diff changeset
286 }
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
287
3769
9338d0785277 util-src/Makefile, util-src/encodings.c{,pp}: Port ICU code to C, rename encodings.cpp back to .c and amend the Makefile accordingly
Matthew Wild <mwild1@gmail.com>
parents: 3764
diff changeset
288 input = lua_tolstring(L, 1, &input_len);
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
289
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
290 if(input_len >= 1024) {
3762
f02bac902a1e util.encodings: Support for ICU for IDNA operations.
Tobias Markmann <tm@ayena.de>
parents: 2923
diff changeset
291 lua_pushnil(L);
3769
9338d0785277 util-src/Makefile, util-src/encodings.c{,pp}: Port ICU code to C, rename encodings.cpp back to .c and amend the Makefile accordingly
Matthew Wild <mwild1@gmail.com>
parents: 3764
diff changeset
292 return 1;
3762
f02bac902a1e util.encodings: Support for ICU for IDNA operations.
Tobias Markmann <tm@ayena.de>
parents: 2923
diff changeset
293 }
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
294
3769
9338d0785277 util-src/Makefile, util-src/encodings.c{,pp}: Port ICU code to C, rename encodings.cpp back to .c and amend the Makefile accordingly
Matthew Wild <mwild1@gmail.com>
parents: 3764
diff changeset
295 u_strFromUTF8(unprepped, 1024, &unprepped_len, input, input_len, &err);
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
296
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
297 if(U_FAILURE(err)) {
4302
bbb0bf0a09f5 util.encodings: Fix small typo introduced in 7f789266b741
Matthew Wild <mwild1@gmail.com>
parents: 4273
diff changeset
298 lua_pushnil(L);
4273
7f789266b741 util.encodings: Check return values before proceeding
Paul Aurich <paul@darkrain42.org>
parents: 4272
diff changeset
299 return 1;
7f789266b741 util.encodings: Check return values before proceeding
Paul Aurich <paul@darkrain42.org>
parents: 4272
diff changeset
300 }
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
301
3769
9338d0785277 util-src/Makefile, util-src/encodings.c{,pp}: Port ICU code to C, rename encodings.cpp back to .c and amend the Makefile accordingly
Matthew Wild <mwild1@gmail.com>
parents: 3764
diff changeset
302 prepped_len = usprep_prepare(profile, unprepped, unprepped_len, prepped, 1024, 0, NULL, &err);
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
303
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
304 if(U_FAILURE(err)) {
3762
f02bac902a1e util.encodings: Support for ICU for IDNA operations.
Tobias Markmann <tm@ayena.de>
parents: 2923
diff changeset
305 lua_pushnil(L);
f02bac902a1e util.encodings: Support for ICU for IDNA operations.
Tobias Markmann <tm@ayena.de>
parents: 2923
diff changeset
306 return 1;
f02bac902a1e util.encodings: Support for ICU for IDNA operations.
Tobias Markmann <tm@ayena.de>
parents: 2923
diff changeset
307 } else {
3769
9338d0785277 util-src/Makefile, util-src/encodings.c{,pp}: Port ICU code to C, rename encodings.cpp back to .c and amend the Makefile accordingly
Matthew Wild <mwild1@gmail.com>
parents: 3764
diff changeset
308 u_strToUTF8(output, 1024, &output_len, prepped, prepped_len, &err);
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
309
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
310 if(U_SUCCESS(err) && output_len < 1024) {
3769
9338d0785277 util-src/Makefile, util-src/encodings.c{,pp}: Port ICU code to C, rename encodings.cpp back to .c and amend the Makefile accordingly
Matthew Wild <mwild1@gmail.com>
parents: 3764
diff changeset
311 lua_pushlstring(L, output, output_len);
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
312 } else {
3769
9338d0785277 util-src/Makefile, util-src/encodings.c{,pp}: Port ICU code to C, rename encodings.cpp back to .c and amend the Makefile accordingly
Matthew Wild <mwild1@gmail.com>
parents: 3764
diff changeset
313 lua_pushnil(L);
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
314 }
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
315
3762
f02bac902a1e util.encodings: Support for ICU for IDNA operations.
Tobias Markmann <tm@ayena.de>
parents: 2923
diff changeset
316 return 1;
f02bac902a1e util.encodings: Support for ICU for IDNA operations.
Tobias Markmann <tm@ayena.de>
parents: 2923
diff changeset
317 }
f02bac902a1e util.encodings: Support for ICU for IDNA operations.
Tobias Markmann <tm@ayena.de>
parents: 2923
diff changeset
318 }
f02bac902a1e util.encodings: Support for ICU for IDNA operations.
Tobias Markmann <tm@ayena.de>
parents: 2923
diff changeset
319
7889
b8d694646597 util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents: 7835
diff changeset
320 UStringPrepProfile *icu_nameprep;
b8d694646597 util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents: 7835
diff changeset
321 UStringPrepProfile *icu_nodeprep;
b8d694646597 util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents: 7835
diff changeset
322 UStringPrepProfile *icu_resourceprep;
b8d694646597 util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents: 7835
diff changeset
323 UStringPrepProfile *icu_saslprep;
3762
f02bac902a1e util.encodings: Support for ICU for IDNA operations.
Tobias Markmann <tm@ayena.de>
parents: 2923
diff changeset
324
f02bac902a1e util.encodings: Support for ICU for IDNA operations.
Tobias Markmann <tm@ayena.de>
parents: 2923
diff changeset
325 /* initialize global ICU stringprep profiles */
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
326 void init_icu() {
3762
f02bac902a1e util.encodings: Support for ICU for IDNA operations.
Tobias Markmann <tm@ayena.de>
parents: 2923
diff changeset
327 UErrorCode err = U_ZERO_ERROR;
f02bac902a1e util.encodings: Support for ICU for IDNA operations.
Tobias Markmann <tm@ayena.de>
parents: 2923
diff changeset
328 utrace_setLevel(UTRACE_VERBOSE);
f02bac902a1e util.encodings: Support for ICU for IDNA operations.
Tobias Markmann <tm@ayena.de>
parents: 2923
diff changeset
329 icu_nameprep = usprep_openByType(USPREP_RFC3491_NAMEPREP, &err);
f02bac902a1e util.encodings: Support for ICU for IDNA operations.
Tobias Markmann <tm@ayena.de>
parents: 2923
diff changeset
330 icu_nodeprep = usprep_openByType(USPREP_RFC3920_NODEPREP, &err);
f02bac902a1e util.encodings: Support for ICU for IDNA operations.
Tobias Markmann <tm@ayena.de>
parents: 2923
diff changeset
331 icu_resourceprep = usprep_openByType(USPREP_RFC3920_RESOURCEPREP, &err);
f02bac902a1e util.encodings: Support for ICU for IDNA operations.
Tobias Markmann <tm@ayena.de>
parents: 2923
diff changeset
332 icu_saslprep = usprep_openByType(USPREP_RFC4013_SASLPREP, &err);
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
333
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
334 if(U_FAILURE(err)) {
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
335 fprintf(stderr, "[c] util.encodings: error: %s\n", u_errorName((UErrorCode)err));
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
336 }
3762
f02bac902a1e util.encodings: Support for ICU for IDNA operations.
Tobias Markmann <tm@ayena.de>
parents: 2923
diff changeset
337 }
f02bac902a1e util.encodings: Support for ICU for IDNA operations.
Tobias Markmann <tm@ayena.de>
parents: 2923
diff changeset
338
f02bac902a1e util.encodings: Support for ICU for IDNA operations.
Tobias Markmann <tm@ayena.de>
parents: 2923
diff changeset
339 #define MAKE_PREP_FUNC(myFunc, prep) \
f02bac902a1e util.encodings: Support for ICU for IDNA operations.
Tobias Markmann <tm@ayena.de>
parents: 2923
diff changeset
340 static int myFunc(lua_State *L) { return icu_stringprep_prep(L, prep); }
f02bac902a1e util.encodings: Support for ICU for IDNA operations.
Tobias Markmann <tm@ayena.de>
parents: 2923
diff changeset
341
f02bac902a1e util.encodings: Support for ICU for IDNA operations.
Tobias Markmann <tm@ayena.de>
parents: 2923
diff changeset
342 MAKE_PREP_FUNC(Lstringprep_nameprep, icu_nameprep) /** stringprep.nameprep(s) */
f02bac902a1e util.encodings: Support for ICU for IDNA operations.
Tobias Markmann <tm@ayena.de>
parents: 2923
diff changeset
343 MAKE_PREP_FUNC(Lstringprep_nodeprep, icu_nodeprep) /** stringprep.nodeprep(s) */
f02bac902a1e util.encodings: Support for ICU for IDNA operations.
Tobias Markmann <tm@ayena.de>
parents: 2923
diff changeset
344 MAKE_PREP_FUNC(Lstringprep_resourceprep, icu_resourceprep) /** stringprep.resourceprep(s) */
f02bac902a1e util.encodings: Support for ICU for IDNA operations.
Tobias Markmann <tm@ayena.de>
parents: 2923
diff changeset
345 MAKE_PREP_FUNC(Lstringprep_saslprep, icu_saslprep) /** stringprep.saslprep(s) */
f02bac902a1e util.encodings: Support for ICU for IDNA operations.
Tobias Markmann <tm@ayena.de>
parents: 2923
diff changeset
346
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
347 static const luaL_Reg Reg_stringprep[] = {
3762
f02bac902a1e util.encodings: Support for ICU for IDNA operations.
Tobias Markmann <tm@ayena.de>
parents: 2923
diff changeset
348 { "nameprep", Lstringprep_nameprep },
f02bac902a1e util.encodings: Support for ICU for IDNA operations.
Tobias Markmann <tm@ayena.de>
parents: 2923
diff changeset
349 { "nodeprep", Lstringprep_nodeprep },
f02bac902a1e util.encodings: Support for ICU for IDNA operations.
Tobias Markmann <tm@ayena.de>
parents: 2923
diff changeset
350 { "resourceprep", Lstringprep_resourceprep },
f02bac902a1e util.encodings: Support for ICU for IDNA operations.
Tobias Markmann <tm@ayena.de>
parents: 2923
diff changeset
351 { "saslprep", Lstringprep_saslprep },
f02bac902a1e util.encodings: Support for ICU for IDNA operations.
Tobias Markmann <tm@ayena.de>
parents: 2923
diff changeset
352 { NULL, NULL }
f02bac902a1e util.encodings: Support for ICU for IDNA operations.
Tobias Markmann <tm@ayena.de>
parents: 2923
diff changeset
353 };
4272
0a4ce2086a88 util.encodings: Swap code order ("ifndef" bugs me)
Paul Aurich <paul@darkrain42.org>
parents: 4271
diff changeset
354 #else /* USE_STRINGPREP_ICU */
3762
f02bac902a1e util.encodings: Support for ICU for IDNA operations.
Tobias Markmann <tm@ayena.de>
parents: 2923
diff changeset
355
f02bac902a1e util.encodings: Support for ICU for IDNA operations.
Tobias Markmann <tm@ayena.de>
parents: 2923
diff changeset
356 /****************** libidn ********************/
3769
9338d0785277 util-src/Makefile, util-src/encodings.c{,pp}: Port ICU code to C, rename encodings.cpp back to .c and amend the Makefile accordingly
Matthew Wild <mwild1@gmail.com>
parents: 3764
diff changeset
357
4272
0a4ce2086a88 util.encodings: Swap code order ("ifndef" bugs me)
Paul Aurich <paul@darkrain42.org>
parents: 4271
diff changeset
358 #include <stringprep.h>
3769
9338d0785277 util-src/Makefile, util-src/encodings.c{,pp}: Port ICU code to C, rename encodings.cpp back to .c and amend the Makefile accordingly
Matthew Wild <mwild1@gmail.com>
parents: 3764
diff changeset
359
7889
b8d694646597 util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents: 7835
diff changeset
360 static int stringprep_prep(lua_State *L, const Stringprep_profile *profile) {
766
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
361 size_t len;
7889
b8d694646597 util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents: 7835
diff changeset
362 const char *s;
4272
0a4ce2086a88 util.encodings: Swap code order ("ifndef" bugs me)
Paul Aurich <paul@darkrain42.org>
parents: 4271
diff changeset
363 char string[1024];
0a4ce2086a88 util.encodings: Swap code order ("ifndef" bugs me)
Paul Aurich <paul@darkrain42.org>
parents: 4271
diff changeset
364 int ret;
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
365
4272
0a4ce2086a88 util.encodings: Swap code order ("ifndef" bugs me)
Paul Aurich <paul@darkrain42.org>
parents: 4271
diff changeset
366 if(!lua_isstring(L, 1)) {
0a4ce2086a88 util.encodings: Swap code order ("ifndef" bugs me)
Paul Aurich <paul@darkrain42.org>
parents: 4271
diff changeset
367 lua_pushnil(L);
0a4ce2086a88 util.encodings: Swap code order ("ifndef" bugs me)
Paul Aurich <paul@darkrain42.org>
parents: 4271
diff changeset
368 return 1;
0a4ce2086a88 util.encodings: Swap code order ("ifndef" bugs me)
Paul Aurich <paul@darkrain42.org>
parents: 4271
diff changeset
369 }
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
370
6591
fe3018a2f187 util.encodings: Perform validation of UTF-8 strings before passing to libidn (Based on code from the utf8 library in Lua 5.3)
Kim Alvefur <zash@zash.se>
parents: 4302
diff changeset
371 s = check_utf8(L, 1, &len);
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
372
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
373 if(s == NULL || len >= 1024 || len != strlen(s)) {
4272
0a4ce2086a88 util.encodings: Swap code order ("ifndef" bugs me)
Paul Aurich <paul@darkrain42.org>
parents: 4271
diff changeset
374 lua_pushnil(L);
0a4ce2086a88 util.encodings: Swap code order ("ifndef" bugs me)
Paul Aurich <paul@darkrain42.org>
parents: 4271
diff changeset
375 return 1; /* TODO return error message */
0a4ce2086a88 util.encodings: Swap code order ("ifndef" bugs me)
Paul Aurich <paul@darkrain42.org>
parents: 4271
diff changeset
376 }
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
377
4272
0a4ce2086a88 util.encodings: Swap code order ("ifndef" bugs me)
Paul Aurich <paul@darkrain42.org>
parents: 4271
diff changeset
378 strcpy(string, s);
0a4ce2086a88 util.encodings: Swap code order ("ifndef" bugs me)
Paul Aurich <paul@darkrain42.org>
parents: 4271
diff changeset
379 ret = stringprep(string, 1024, (Stringprep_profile_flags)0, profile);
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
380
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
381 if(ret == STRINGPREP_OK) {
4272
0a4ce2086a88 util.encodings: Swap code order ("ifndef" bugs me)
Paul Aurich <paul@darkrain42.org>
parents: 4271
diff changeset
382 lua_pushstring(L, string);
766
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
383 return 1;
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
384 } else {
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
385 lua_pushnil(L);
3965
4ae4b2c0e99d util.encodings: Switch comment styles to build ok as ANSI C
Matthew Wild <mwild1@gmail.com>
parents: 3769
diff changeset
386 return 1; /* TODO return error message */
766
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
387 }
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
388 }
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
389
4272
0a4ce2086a88 util.encodings: Swap code order ("ifndef" bugs me)
Paul Aurich <paul@darkrain42.org>
parents: 4271
diff changeset
390 #define MAKE_PREP_FUNC(myFunc, prep) \
0a4ce2086a88 util.encodings: Swap code order ("ifndef" bugs me)
Paul Aurich <paul@darkrain42.org>
parents: 4271
diff changeset
391 static int myFunc(lua_State *L) { return stringprep_prep(L, prep); }
0a4ce2086a88 util.encodings: Swap code order ("ifndef" bugs me)
Paul Aurich <paul@darkrain42.org>
parents: 4271
diff changeset
392
0a4ce2086a88 util.encodings: Swap code order ("ifndef" bugs me)
Paul Aurich <paul@darkrain42.org>
parents: 4271
diff changeset
393 MAKE_PREP_FUNC(Lstringprep_nameprep, stringprep_nameprep) /** stringprep.nameprep(s) */
0a4ce2086a88 util.encodings: Swap code order ("ifndef" bugs me)
Paul Aurich <paul@darkrain42.org>
parents: 4271
diff changeset
394 MAKE_PREP_FUNC(Lstringprep_nodeprep, stringprep_xmpp_nodeprep) /** stringprep.nodeprep(s) */
0a4ce2086a88 util.encodings: Swap code order ("ifndef" bugs me)
Paul Aurich <paul@darkrain42.org>
parents: 4271
diff changeset
395 MAKE_PREP_FUNC(Lstringprep_resourceprep, stringprep_xmpp_resourceprep) /** stringprep.resourceprep(s) */
0a4ce2086a88 util.encodings: Swap code order ("ifndef" bugs me)
Paul Aurich <paul@darkrain42.org>
parents: 4271
diff changeset
396 MAKE_PREP_FUNC(Lstringprep_saslprep, stringprep_saslprep) /** stringprep.saslprep(s) */
0a4ce2086a88 util.encodings: Swap code order ("ifndef" bugs me)
Paul Aurich <paul@darkrain42.org>
parents: 4271
diff changeset
397
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
398 static const luaL_Reg Reg_stringprep[] = {
4272
0a4ce2086a88 util.encodings: Swap code order ("ifndef" bugs me)
Paul Aurich <paul@darkrain42.org>
parents: 4271
diff changeset
399 { "nameprep", Lstringprep_nameprep },
0a4ce2086a88 util.encodings: Swap code order ("ifndef" bugs me)
Paul Aurich <paul@darkrain42.org>
parents: 4271
diff changeset
400 { "nodeprep", Lstringprep_nodeprep },
0a4ce2086a88 util.encodings: Swap code order ("ifndef" bugs me)
Paul Aurich <paul@darkrain42.org>
parents: 4271
diff changeset
401 { "resourceprep", Lstringprep_resourceprep },
0a4ce2086a88 util.encodings: Swap code order ("ifndef" bugs me)
Paul Aurich <paul@darkrain42.org>
parents: 4271
diff changeset
402 { "saslprep", Lstringprep_saslprep },
0a4ce2086a88 util.encodings: Swap code order ("ifndef" bugs me)
Paul Aurich <paul@darkrain42.org>
parents: 4271
diff changeset
403 { NULL, NULL }
0a4ce2086a88 util.encodings: Swap code order ("ifndef" bugs me)
Paul Aurich <paul@darkrain42.org>
parents: 4271
diff changeset
404 };
0a4ce2086a88 util.encodings: Swap code order ("ifndef" bugs me)
Paul Aurich <paul@darkrain42.org>
parents: 4271
diff changeset
405 #endif
0a4ce2086a88 util.encodings: Swap code order ("ifndef" bugs me)
Paul Aurich <paul@darkrain42.org>
parents: 4271
diff changeset
406
0a4ce2086a88 util.encodings: Swap code order ("ifndef" bugs me)
Paul Aurich <paul@darkrain42.org>
parents: 4271
diff changeset
407 /***************** IDNA *****************/
0a4ce2086a88 util.encodings: Swap code order ("ifndef" bugs me)
Paul Aurich <paul@darkrain42.org>
parents: 4271
diff changeset
408 #ifdef USE_STRINGPREP_ICU
3762
f02bac902a1e util.encodings: Support for ICU for IDNA operations.
Tobias Markmann <tm@ayena.de>
parents: 2923
diff changeset
409 #include <unicode/ustdio.h>
f02bac902a1e util.encodings: Support for ICU for IDNA operations.
Tobias Markmann <tm@ayena.de>
parents: 2923
diff changeset
410 #include <unicode/uidna.h>
f02bac902a1e util.encodings: Support for ICU for IDNA operations.
Tobias Markmann <tm@ayena.de>
parents: 2923
diff changeset
411 /* IDNA2003 or IDNA2008 ? ? ? */
7889
b8d694646597 util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents: 7835
diff changeset
412 static int Lidna_to_ascii(lua_State *L) { /** idna.to_ascii(s) */
3762
f02bac902a1e util.encodings: Support for ICU for IDNA operations.
Tobias Markmann <tm@ayena.de>
parents: 2923
diff changeset
413 size_t len;
3769
9338d0785277 util-src/Makefile, util-src/encodings.c{,pp}: Port ICU code to C, rename encodings.cpp back to .c and amend the Makefile accordingly
Matthew Wild <mwild1@gmail.com>
parents: 3764
diff changeset
414 int32_t ulen, dest_len, output_len;
7889
b8d694646597 util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents: 7835
diff changeset
415 const char *s = luaL_checklstring(L, 1, &len);
3769
9338d0785277 util-src/Makefile, util-src/encodings.c{,pp}: Port ICU code to C, rename encodings.cpp back to .c and amend the Makefile accordingly
Matthew Wild <mwild1@gmail.com>
parents: 3764
diff changeset
416 UChar ustr[1024];
3762
f02bac902a1e util.encodings: Support for ICU for IDNA operations.
Tobias Markmann <tm@ayena.de>
parents: 2923
diff changeset
417 UErrorCode err = U_ZERO_ERROR;
f02bac902a1e util.encodings: Support for ICU for IDNA operations.
Tobias Markmann <tm@ayena.de>
parents: 2923
diff changeset
418 UChar dest[1024];
f02bac902a1e util.encodings: Support for ICU for IDNA operations.
Tobias Markmann <tm@ayena.de>
parents: 2923
diff changeset
419 char output[1024];
f02bac902a1e util.encodings: Support for ICU for IDNA operations.
Tobias Markmann <tm@ayena.de>
parents: 2923
diff changeset
420
3769
9338d0785277 util-src/Makefile, util-src/encodings.c{,pp}: Port ICU code to C, rename encodings.cpp back to .c and amend the Makefile accordingly
Matthew Wild <mwild1@gmail.com>
parents: 3764
diff changeset
421 u_strFromUTF8(ustr, 1024, &ulen, s, len, &err);
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
422
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
423 if(U_FAILURE(err)) {
4273
7f789266b741 util.encodings: Check return values before proceeding
Paul Aurich <paul@darkrain42.org>
parents: 4272
diff changeset
424 lua_pushnil(L);
7f789266b741 util.encodings: Check return values before proceeding
Paul Aurich <paul@darkrain42.org>
parents: 4272
diff changeset
425 return 1;
7f789266b741 util.encodings: Check return values before proceeding
Paul Aurich <paul@darkrain42.org>
parents: 4272
diff changeset
426 }
7f789266b741 util.encodings: Check return values before proceeding
Paul Aurich <paul@darkrain42.org>
parents: 4272
diff changeset
427
3769
9338d0785277 util-src/Makefile, util-src/encodings.c{,pp}: Port ICU code to C, rename encodings.cpp back to .c and amend the Makefile accordingly
Matthew Wild <mwild1@gmail.com>
parents: 3764
diff changeset
428 dest_len = uidna_IDNToASCII(ustr, ulen, dest, 1024, UIDNA_USE_STD3_RULES, NULL, &err);
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
429
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
430 if(U_FAILURE(err)) {
3762
f02bac902a1e util.encodings: Support for ICU for IDNA operations.
Tobias Markmann <tm@ayena.de>
parents: 2923
diff changeset
431 lua_pushnil(L);
f02bac902a1e util.encodings: Support for ICU for IDNA operations.
Tobias Markmann <tm@ayena.de>
parents: 2923
diff changeset
432 return 1;
f02bac902a1e util.encodings: Support for ICU for IDNA operations.
Tobias Markmann <tm@ayena.de>
parents: 2923
diff changeset
433 } else {
3769
9338d0785277 util-src/Makefile, util-src/encodings.c{,pp}: Port ICU code to C, rename encodings.cpp back to .c and amend the Makefile accordingly
Matthew Wild <mwild1@gmail.com>
parents: 3764
diff changeset
434 u_strToUTF8(output, 1024, &output_len, dest, dest_len, &err);
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
435
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
436 if(U_SUCCESS(err) && output_len < 1024) {
3769
9338d0785277 util-src/Makefile, util-src/encodings.c{,pp}: Port ICU code to C, rename encodings.cpp back to .c and amend the Makefile accordingly
Matthew Wild <mwild1@gmail.com>
parents: 3764
diff changeset
437 lua_pushlstring(L, output, output_len);
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
438 } else {
3769
9338d0785277 util-src/Makefile, util-src/encodings.c{,pp}: Port ICU code to C, rename encodings.cpp back to .c and amend the Makefile accordingly
Matthew Wild <mwild1@gmail.com>
parents: 3764
diff changeset
439 lua_pushnil(L);
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
440 }
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
441
3762
f02bac902a1e util.encodings: Support for ICU for IDNA operations.
Tobias Markmann <tm@ayena.de>
parents: 2923
diff changeset
442 return 1;
f02bac902a1e util.encodings: Support for ICU for IDNA operations.
Tobias Markmann <tm@ayena.de>
parents: 2923
diff changeset
443 }
f02bac902a1e util.encodings: Support for ICU for IDNA operations.
Tobias Markmann <tm@ayena.de>
parents: 2923
diff changeset
444 }
f02bac902a1e util.encodings: Support for ICU for IDNA operations.
Tobias Markmann <tm@ayena.de>
parents: 2923
diff changeset
445
7889
b8d694646597 util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents: 7835
diff changeset
446 static int Lidna_to_unicode(lua_State *L) { /** idna.to_unicode(s) */
3762
f02bac902a1e util.encodings: Support for ICU for IDNA operations.
Tobias Markmann <tm@ayena.de>
parents: 2923
diff changeset
447 size_t len;
3769
9338d0785277 util-src/Makefile, util-src/encodings.c{,pp}: Port ICU code to C, rename encodings.cpp back to .c and amend the Makefile accordingly
Matthew Wild <mwild1@gmail.com>
parents: 3764
diff changeset
448 int32_t ulen, dest_len, output_len;
7889
b8d694646597 util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents: 7835
diff changeset
449 const char *s = luaL_checklstring(L, 1, &len);
4271
18d888c8c12d util.encodings: Fix idna.to_unicode
Paul Aurich <paul@darkrain42.org>
parents: 3965
diff changeset
450 UChar ustr[1024];
3762
f02bac902a1e util.encodings: Support for ICU for IDNA operations.
Tobias Markmann <tm@ayena.de>
parents: 2923
diff changeset
451 UErrorCode err = U_ZERO_ERROR;
f02bac902a1e util.encodings: Support for ICU for IDNA operations.
Tobias Markmann <tm@ayena.de>
parents: 2923
diff changeset
452 UChar dest[1024];
f02bac902a1e util.encodings: Support for ICU for IDNA operations.
Tobias Markmann <tm@ayena.de>
parents: 2923
diff changeset
453 char output[1024];
f02bac902a1e util.encodings: Support for ICU for IDNA operations.
Tobias Markmann <tm@ayena.de>
parents: 2923
diff changeset
454
3769
9338d0785277 util-src/Makefile, util-src/encodings.c{,pp}: Port ICU code to C, rename encodings.cpp back to .c and amend the Makefile accordingly
Matthew Wild <mwild1@gmail.com>
parents: 3764
diff changeset
455 u_strFromUTF8(ustr, 1024, &ulen, s, len, &err);
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
456
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
457 if(U_FAILURE(err)) {
4273
7f789266b741 util.encodings: Check return values before proceeding
Paul Aurich <paul@darkrain42.org>
parents: 4272
diff changeset
458 lua_pushnil(L);
7f789266b741 util.encodings: Check return values before proceeding
Paul Aurich <paul@darkrain42.org>
parents: 4272
diff changeset
459 return 1;
7f789266b741 util.encodings: Check return values before proceeding
Paul Aurich <paul@darkrain42.org>
parents: 4272
diff changeset
460 }
7f789266b741 util.encodings: Check return values before proceeding
Paul Aurich <paul@darkrain42.org>
parents: 4272
diff changeset
461
3769
9338d0785277 util-src/Makefile, util-src/encodings.c{,pp}: Port ICU code to C, rename encodings.cpp back to .c and amend the Makefile accordingly
Matthew Wild <mwild1@gmail.com>
parents: 3764
diff changeset
462 dest_len = uidna_IDNToUnicode(ustr, ulen, dest, 1024, UIDNA_USE_STD3_RULES, NULL, &err);
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
463
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
464 if(U_FAILURE(err)) {
3762
f02bac902a1e util.encodings: Support for ICU for IDNA operations.
Tobias Markmann <tm@ayena.de>
parents: 2923
diff changeset
465 lua_pushnil(L);
f02bac902a1e util.encodings: Support for ICU for IDNA operations.
Tobias Markmann <tm@ayena.de>
parents: 2923
diff changeset
466 return 1;
f02bac902a1e util.encodings: Support for ICU for IDNA operations.
Tobias Markmann <tm@ayena.de>
parents: 2923
diff changeset
467 } else {
3769
9338d0785277 util-src/Makefile, util-src/encodings.c{,pp}: Port ICU code to C, rename encodings.cpp back to .c and amend the Makefile accordingly
Matthew Wild <mwild1@gmail.com>
parents: 3764
diff changeset
468 u_strToUTF8(output, 1024, &output_len, dest, dest_len, &err);
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
469
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
470 if(U_SUCCESS(err) && output_len < 1024) {
3769
9338d0785277 util-src/Makefile, util-src/encodings.c{,pp}: Port ICU code to C, rename encodings.cpp back to .c and amend the Makefile accordingly
Matthew Wild <mwild1@gmail.com>
parents: 3764
diff changeset
471 lua_pushlstring(L, output, output_len);
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
472 } else {
3769
9338d0785277 util-src/Makefile, util-src/encodings.c{,pp}: Port ICU code to C, rename encodings.cpp back to .c and amend the Makefile accordingly
Matthew Wild <mwild1@gmail.com>
parents: 3764
diff changeset
473 lua_pushnil(L);
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
474 }
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
475
3762
f02bac902a1e util.encodings: Support for ICU for IDNA operations.
Tobias Markmann <tm@ayena.de>
parents: 2923
diff changeset
476 return 1;
f02bac902a1e util.encodings: Support for ICU for IDNA operations.
Tobias Markmann <tm@ayena.de>
parents: 2923
diff changeset
477 }
f02bac902a1e util.encodings: Support for ICU for IDNA operations.
Tobias Markmann <tm@ayena.de>
parents: 2923
diff changeset
478 }
4272
0a4ce2086a88 util.encodings: Swap code order ("ifndef" bugs me)
Paul Aurich <paul@darkrain42.org>
parents: 4271
diff changeset
479
0a4ce2086a88 util.encodings: Swap code order ("ifndef" bugs me)
Paul Aurich <paul@darkrain42.org>
parents: 4271
diff changeset
480 #else /* USE_STRINGPREP_ICU */
0a4ce2086a88 util.encodings: Swap code order ("ifndef" bugs me)
Paul Aurich <paul@darkrain42.org>
parents: 4271
diff changeset
481 /****************** libidn ********************/
0a4ce2086a88 util.encodings: Swap code order ("ifndef" bugs me)
Paul Aurich <paul@darkrain42.org>
parents: 4271
diff changeset
482
0a4ce2086a88 util.encodings: Swap code order ("ifndef" bugs me)
Paul Aurich <paul@darkrain42.org>
parents: 4271
diff changeset
483 #include <idna.h>
0a4ce2086a88 util.encodings: Swap code order ("ifndef" bugs me)
Paul Aurich <paul@darkrain42.org>
parents: 4271
diff changeset
484 #include <idn-free.h>
0a4ce2086a88 util.encodings: Swap code order ("ifndef" bugs me)
Paul Aurich <paul@darkrain42.org>
parents: 4271
diff changeset
485
7889
b8d694646597 util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents: 7835
diff changeset
486 static int Lidna_to_ascii(lua_State *L) { /** idna.to_ascii(s) */
4272
0a4ce2086a88 util.encodings: Swap code order ("ifndef" bugs me)
Paul Aurich <paul@darkrain42.org>
parents: 4271
diff changeset
487 size_t len;
7889
b8d694646597 util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents: 7835
diff changeset
488 const char *s = check_utf8(L, 1, &len);
b8d694646597 util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents: 7835
diff changeset
489 char *output = NULL;
6643
127b9f0c6135 util.encodings: Move declarations to top of function [pedantic]
Kim Alvefur <zash@zash.se>
parents: 6615
diff changeset
490 int ret;
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
491
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
492 if(s == NULL || len != strlen(s)) {
6591
fe3018a2f187 util.encodings: Perform validation of UTF-8 strings before passing to libidn (Based on code from the utf8 library in Lua 5.3)
Kim Alvefur <zash@zash.se>
parents: 4302
diff changeset
493 lua_pushnil(L);
fe3018a2f187 util.encodings: Perform validation of UTF-8 strings before passing to libidn (Based on code from the utf8 library in Lua 5.3)
Kim Alvefur <zash@zash.se>
parents: 4302
diff changeset
494 return 1; /* TODO return error message */
fe3018a2f187 util.encodings: Perform validation of UTF-8 strings before passing to libidn (Based on code from the utf8 library in Lua 5.3)
Kim Alvefur <zash@zash.se>
parents: 4302
diff changeset
495 }
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
496
6643
127b9f0c6135 util.encodings: Move declarations to top of function [pedantic]
Kim Alvefur <zash@zash.se>
parents: 6615
diff changeset
497 ret = idna_to_ascii_8z(s, &output, IDNA_USE_STD3_ASCII_RULES);
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
498
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
499 if(ret == IDNA_SUCCESS) {
4272
0a4ce2086a88 util.encodings: Swap code order ("ifndef" bugs me)
Paul Aurich <paul@darkrain42.org>
parents: 4271
diff changeset
500 lua_pushstring(L, output);
0a4ce2086a88 util.encodings: Swap code order ("ifndef" bugs me)
Paul Aurich <paul@darkrain42.org>
parents: 4271
diff changeset
501 idn_free(output);
0a4ce2086a88 util.encodings: Swap code order ("ifndef" bugs me)
Paul Aurich <paul@darkrain42.org>
parents: 4271
diff changeset
502 return 1;
0a4ce2086a88 util.encodings: Swap code order ("ifndef" bugs me)
Paul Aurich <paul@darkrain42.org>
parents: 4271
diff changeset
503 } else {
0a4ce2086a88 util.encodings: Swap code order ("ifndef" bugs me)
Paul Aurich <paul@darkrain42.org>
parents: 4271
diff changeset
504 lua_pushnil(L);
0a4ce2086a88 util.encodings: Swap code order ("ifndef" bugs me)
Paul Aurich <paul@darkrain42.org>
parents: 4271
diff changeset
505 idn_free(output);
0a4ce2086a88 util.encodings: Swap code order ("ifndef" bugs me)
Paul Aurich <paul@darkrain42.org>
parents: 4271
diff changeset
506 return 1; /* TODO return error message */
0a4ce2086a88 util.encodings: Swap code order ("ifndef" bugs me)
Paul Aurich <paul@darkrain42.org>
parents: 4271
diff changeset
507 }
0a4ce2086a88 util.encodings: Swap code order ("ifndef" bugs me)
Paul Aurich <paul@darkrain42.org>
parents: 4271
diff changeset
508 }
0a4ce2086a88 util.encodings: Swap code order ("ifndef" bugs me)
Paul Aurich <paul@darkrain42.org>
parents: 4271
diff changeset
509
7889
b8d694646597 util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents: 7835
diff changeset
510 static int Lidna_to_unicode(lua_State *L) { /** idna.to_unicode(s) */
4272
0a4ce2086a88 util.encodings: Swap code order ("ifndef" bugs me)
Paul Aurich <paul@darkrain42.org>
parents: 4271
diff changeset
511 size_t len;
7889
b8d694646597 util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents: 7835
diff changeset
512 const char *s = luaL_checklstring(L, 1, &len);
b8d694646597 util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents: 7835
diff changeset
513 char *output = NULL;
4272
0a4ce2086a88 util.encodings: Swap code order ("ifndef" bugs me)
Paul Aurich <paul@darkrain42.org>
parents: 4271
diff changeset
514 int ret = idna_to_unicode_8z8z(s, &output, 0);
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
515
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
516 if(ret == IDNA_SUCCESS) {
4272
0a4ce2086a88 util.encodings: Swap code order ("ifndef" bugs me)
Paul Aurich <paul@darkrain42.org>
parents: 4271
diff changeset
517 lua_pushstring(L, output);
0a4ce2086a88 util.encodings: Swap code order ("ifndef" bugs me)
Paul Aurich <paul@darkrain42.org>
parents: 4271
diff changeset
518 idn_free(output);
0a4ce2086a88 util.encodings: Swap code order ("ifndef" bugs me)
Paul Aurich <paul@darkrain42.org>
parents: 4271
diff changeset
519 return 1;
0a4ce2086a88 util.encodings: Swap code order ("ifndef" bugs me)
Paul Aurich <paul@darkrain42.org>
parents: 4271
diff changeset
520 } else {
0a4ce2086a88 util.encodings: Swap code order ("ifndef" bugs me)
Paul Aurich <paul@darkrain42.org>
parents: 4271
diff changeset
521 lua_pushnil(L);
0a4ce2086a88 util.encodings: Swap code order ("ifndef" bugs me)
Paul Aurich <paul@darkrain42.org>
parents: 4271
diff changeset
522 idn_free(output);
0a4ce2086a88 util.encodings: Swap code order ("ifndef" bugs me)
Paul Aurich <paul@darkrain42.org>
parents: 4271
diff changeset
523 return 1; /* TODO return error message */
0a4ce2086a88 util.encodings: Swap code order ("ifndef" bugs me)
Paul Aurich <paul@darkrain42.org>
parents: 4271
diff changeset
524 }
0a4ce2086a88 util.encodings: Swap code order ("ifndef" bugs me)
Paul Aurich <paul@darkrain42.org>
parents: 4271
diff changeset
525 }
3762
f02bac902a1e util.encodings: Support for ICU for IDNA operations.
Tobias Markmann <tm@ayena.de>
parents: 2923
diff changeset
526 #endif
766
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
527
6615
8e4572a642cb util-src/*.c: astyle --indent=tab --brackets=attach --indent-switches --break-blocks --pad-oper --unpad-paren --add-brackets --align-pointer=type --lineend=linux
Kim Alvefur <zash@zash.se>
parents: 6608
diff changeset
528 static const luaL_Reg Reg_idna[] = {
766
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
529 { "to_ascii", Lidna_to_ascii },
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
530 { "to_unicode", Lidna_to_unicode },
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
531 { NULL, NULL }
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
532 };
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
533
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
534 /***************** end *****************/
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
535
7889
b8d694646597 util-src/*.c: Attach pointer * to name instead of type
Kim Alvefur <zash@zash.se>
parents: 7835
diff changeset
536 LUALIB_API int luaopen_util_encodings(lua_State *L) {
7818
54669df178c2 util-src: Make C modules assert that the Lua runtime matches what it was compiled for
Kim Alvefur <zash@zash.se>
parents: 6789
diff changeset
537 #if (LUA_VERSION_NUM > 501)
54669df178c2 util-src: Make C modules assert that the Lua runtime matches what it was compiled for
Kim Alvefur <zash@zash.se>
parents: 6789
diff changeset
538 luaL_checkversion(L);
54669df178c2 util-src: Make C modules assert that the Lua runtime matches what it was compiled for
Kim Alvefur <zash@zash.se>
parents: 6789
diff changeset
539 #endif
3762
f02bac902a1e util.encodings: Support for ICU for IDNA operations.
Tobias Markmann <tm@ayena.de>
parents: 2923
diff changeset
540 #ifdef USE_STRINGPREP_ICU
f02bac902a1e util.encodings: Support for ICU for IDNA operations.
Tobias Markmann <tm@ayena.de>
parents: 2923
diff changeset
541 init_icu();
f02bac902a1e util.encodings: Support for ICU for IDNA operations.
Tobias Markmann <tm@ayena.de>
parents: 2923
diff changeset
542 #endif
6411
6c8f6364bc48 util-src/*.c: Don't create globals when loaded
Kim Alvefur <zash@zash.se>
parents: 4302
diff changeset
543 lua_newtable(L);
766
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
544
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
545 lua_newtable(L);
6789
6b180e77c97a util-src/*.c: Invert Lua 5.2 compat to be 5.2+ by default and a macro to support 5.1
Kim Alvefur <zash@zash.se>
parents: 6643
diff changeset
546 luaL_setfuncs(L, Reg_base64, 0);
6412
0e94f89d0e62 util-src/*.c: Use the more concise lua_setfield
Kim Alvefur <zash@zash.se>
parents: 6411
diff changeset
547 lua_setfield(L, -2, "base64");
766
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
548
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
549 lua_newtable(L);
6789
6b180e77c97a util-src/*.c: Invert Lua 5.2 compat to be 5.2+ by default and a macro to support 5.1
Kim Alvefur <zash@zash.se>
parents: 6643
diff changeset
550 luaL_setfuncs(L, Reg_stringprep, 0);
6412
0e94f89d0e62 util-src/*.c: Use the more concise lua_setfield
Kim Alvefur <zash@zash.se>
parents: 6411
diff changeset
551 lua_setfield(L, -2, "stringprep");
766
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
552
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
553 lua_newtable(L);
6789
6b180e77c97a util-src/*.c: Invert Lua 5.2 compat to be 5.2+ by default and a macro to support 5.1
Kim Alvefur <zash@zash.se>
parents: 6643
diff changeset
554 luaL_setfuncs(L, Reg_idna, 0);
6412
0e94f89d0e62 util-src/*.c: Use the more concise lua_setfield
Kim Alvefur <zash@zash.se>
parents: 6411
diff changeset
555 lua_setfield(L, -2, "idna");
766
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
556
6592
141afe8a167b util.encodings: Expose UTF-8 validation and length checking functions
Kim Alvefur <zash@zash.se>
parents: 6591
diff changeset
557 lua_newtable(L);
6789
6b180e77c97a util-src/*.c: Invert Lua 5.2 compat to be 5.2+ by default and a macro to support 5.1
Kim Alvefur <zash@zash.se>
parents: 6643
diff changeset
558 luaL_setfuncs(L, Reg_utf8, 0);
6604
478308ee29dd Merge 0.9->0.10 again
Kim Alvefur <zash@zash.se>
parents: 6413 6592
diff changeset
559 lua_setfield(L, -2, "utf8");
6592
141afe8a167b util.encodings: Expose UTF-8 validation and length checking functions
Kim Alvefur <zash@zash.se>
parents: 6591
diff changeset
560
766
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
561 lua_pushliteral(L, "-3.14");
6412
0e94f89d0e62 util-src/*.c: Use the more concise lua_setfield
Kim Alvefur <zash@zash.se>
parents: 6411
diff changeset
562 lua_setfield(L, -2, "version");
766
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
563 return 1;
433a5226267f Licensing/version updates for some files (forgot to commit, doh...)
Matthew Wild <mwild1@gmail.com>
parents: 601
diff changeset
564 }