Software /
code /
prosody
Annotate
util-src/encodings.c @ 9751:39ee70fbb009
mod_mam: Perform message expiry based on building an index by date
For each day, store a set of users that have new messages. To expire
messages, we collect the union of sets of users from dates that fall
outside the cleanup range.
The previous algoritm did not work well with many users, especially with
the default settings.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Thu, 03 Jan 2019 17:25:43 +0100 |
parent | 9153:26c5a4a14905 |
child | 9973:640a2b8e7806 |
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 | 14 */ |
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 | 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 | 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 } |