You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@celix.apache.org by pe...@apache.org on 2026/08/10 04:38:46 UTC
(celix) 16/35: Fix corrupted Ragel-generated state machine tables in SMTP address validator and update email format tests
This is an automated email from the ASF dual-hosted git repository.
PengZheng pushed a commit to branch feature/json-schema
in repository https://gitbox.apache.org/repos/asf/celix.git
commit 23d738f559fc81db0a83f7c26638c1a52290a10e
Author: PengZheng <ho...@gmail.com>
AuthorDate: Fri Aug 7 19:31:13 2026 +0800
Fix corrupted Ragel-generated state machine tables in SMTP address validator and update email format tests
---
.../gtest/src/test_format_check_extended.cpp | 17 +-
libs/jansson_ext/gtest/src/test_suite.cpp | 3 -
.../jansson_ext/src/celix_smtp_address_validator.c | 249 ++++++++++++---------
3 files changed, 153 insertions(+), 116 deletions(-)
diff --git a/libs/jansson_ext/gtest/src/test_format_check_extended.cpp b/libs/jansson_ext/gtest/src/test_format_check_extended.cpp
index b330cedae..f3630d1d0 100644
--- a/libs/jansson_ext/gtest/src/test_format_check_extended.cpp
+++ b/libs/jansson_ext/gtest/src/test_format_check_extended.cpp
@@ -101,24 +101,25 @@ TEST(FormatCheckTest, Time) {
*/
TEST(FormatCheckTest, Email) {
- /* NOTE: The Ragel-generated SMTP address validator (celix_smtp_address_validator.c)
- * returns false for EVERY input — verified empirically with a probe harness, and
- * consistent with the JSON Schema Test Suite treating email.json as expected-fail.
- * The OK return path of check_email is therefore unreachable until the validator
- * is fixed (separate investigation comparing with pboettch/json-schema-validator).
- * Non-ASCII input fails earlier in is_ascii and is covered here. */
+ /* Valid ASCII address */
+ EXPECT_EQ(CELIX_JANSSON_SCHEMA_OK, celix_jansson_check_email("joe.bloggs@example.com"));
+ EXPECT_EQ(CELIX_JANSSON_SCHEMA_OK, celix_jansson_check_email("a@b.com"));
+ /* Non-ASCII input fails the is_ascii pre-check */
+ EXPECT_NE(CELIX_JANSSON_SCHEMA_OK, celix_jansson_check_email("\xc3\xbc@example.com")); /* ü@example.com */
+ /* Clearly invalid inputs */
EXPECT_NE(CELIX_JANSSON_SCHEMA_OK, celix_jansson_check_email("not-an-email"));
EXPECT_NE(CELIX_JANSSON_SCHEMA_OK, celix_jansson_check_email("user@"));
EXPECT_NE(CELIX_JANSSON_SCHEMA_OK, celix_jansson_check_email("@example.com"));
- EXPECT_NE(CELIX_JANSSON_SCHEMA_OK, celix_jansson_check_email("\xc3\xbc@example.com")); /* ü@example.com — non-ASCII */
}
/* ── International Email (RFC 6531) ──────────────────────────────────────── */
TEST(FormatCheckTest, IdnEmail) {
+ /* No is_ascii pre-check — UTF-8 addresses are passed to the SMTP validator */
+ EXPECT_EQ(CELIX_JANSSON_SCHEMA_OK, celix_jansson_check_idn_email("joe.bloggs@example.com"));
+ EXPECT_EQ(CELIX_JANSSON_SCHEMA_OK, celix_jansson_check_idn_email("\xc3\xbc@example.com"));
EXPECT_NE(CELIX_JANSSON_SCHEMA_OK, celix_jansson_check_idn_email("not-an-email"));
EXPECT_NE(CELIX_JANSSON_SCHEMA_OK, celix_jansson_check_idn_email("user@"));
- EXPECT_NE(CELIX_JANSSON_SCHEMA_OK, celix_jansson_check_idn_email("\xc3\xbc@example.com"));
}
/* ── Hostname (RFC 3986 Appendix A labels) ──────────────────────────────── */
diff --git a/libs/jansson_ext/gtest/src/test_suite.cpp b/libs/jansson_ext/gtest/src/test_suite.cpp
index 185e4bca3..0da3dfcd9 100644
--- a/libs/jansson_ext/gtest/src/test_suite.cpp
+++ b/libs/jansson_ext/gtest/src/test_suite.cpp
@@ -44,9 +44,6 @@ static bool is_expected_fail(const std::string& fn) {
"unicode",
"content",
"zeroTerminatedFloats",
- /* Format checkers with known limitations */
- "email",
- "idn-email",
"ref.json",
NULL};
for (const char** p = list; *p; p++)
diff --git a/libs/jansson_ext/src/celix_smtp_address_validator.c b/libs/jansson_ext/src/celix_smtp_address_validator.c
index 0b8ade938..48c23c7f6 100644
--- a/libs/jansson_ext/src/celix_smtp_address_validator.c
+++ b/libs/jansson_ext/src/celix_smtp_address_validator.c
@@ -19,7 +19,15 @@
#include "celix_smtp_address_validator.h"
/*
- * Ragel-generated state machine tables — verbatim from the original.
+ * Ragel-generated state machine tables.
+ *
+ * The _address_trans_keys and _address_cond_actions tables were corrupted in
+ * the C port of this machine (an 8-byte fragment inserted into trans_keys at
+ * offset 642, and the EOF actions for final states 196/197 changed from
+ * no-op to "result = false"). The values here are taken from the working
+ * C++ original (Gene Hightower's smtp-address-validator.cpp, MIT licensed,
+ * as vendored in https://github.com/pboettch/json-schema-validator); all
+ * other tables and the execution loop are unchanged from that source.
*
* Portions of this file were originally derived from Gene Hightower's
* MIT-licensed smtp-address-validator.cpp, available at:
@@ -42,76 +50,76 @@ static const short _address_key_offsets[] = {
1359, 1361, 1363, 1365, 1367, 1368, 1370, 1388, 0};
static const signed char _address_trans_keys[] = {
- -32, -19, -16, -12, 34, 45, 61, 63, -62, -33, -31, -17, -15, -13, 33, 39, 42, 43, 47, 57,
- 65, 90, 94, 126, -128, -65, -32, -19, -16, -12, 33, 46, 61, 64, -62, -33, -31, -17, -15, -13,
- 35, 39, 42, 43, 45, 57, 63, 90, 94, 126, -96, -65, -128, -65, -128, -97, -112, -65, -128, -65,
- -128, -113, -32, -19, -16, -12, 33, 45, 61, 63, -62, -33, -31, -17, -15, -13, 35, 39, 42, 43,
- 47, 57, 65, 90, 94, 126, -32, -19, -16, -12, 91, -62, -33, -31, -17, -15, -13, 48, 57, 65,
- 90, 97, 122, -128, -65, -96, -65, -128, -65, -128, -97, -112, -65, -128, -65, -128, -113, -32, -19, -16,
- -12, 45, -62, -33, -31, -17, -15, -13, 48, 57, 65, 90, 97, 122, -32, -19, -16, -12, -62, -33,
- -31, -17, -15, -13, 48, 57, 65, 90, 97, 122, 45, 48, 49, 50, 73, 51, 57, 65, 90, 97,
- 122, 45, 48, 57, 65, 90, 97, 122, 45, 58, 48, 57, 65, 90, 97, 122, 33, 90, 94, 126,
- 93, 45, 46, 58, 48, 57, 65, 90, 97, 122, 48, 49, 50, 51, 57, 46, 48, 49, 50, 51,
- 57, 46, 48, 49, 50, 51, 57, 93, 48, 57, 93, 48, 57, 53, 93, 48, 52, 54, 57, 93,
- 48, 53, 46, 48, 57, 46, 48, 57, 46, 53, 48, 52, 54, 57, 46, 48, 53, 46, 48, 57,
- 46, 48, 57, 46, 53, 48, 52, 54, 57, 46, 48, 53, 45, 46, 58, 48, 57, 65, 90, 97,
- 122, 45, 46, 58, 48, 57, 65, 90, 97, 122, 45, 46, 53, 58, 48, 52, 54, 57, 65, 90,
- 97, 122, 45, 46, 58, 48, 53, 54, 57, 65, 90, 97, 122, 45, 58, 80, 48, 57, 65, 90,
- 97, 122, 45, 58, 118, 48, 57, 65, 90, 97, 122, 45, 54, 58, 48, 57, 65, 90, 97, 122,
- 45, 58, 48, 57, 65, 90, 97, 122, 58, 33, 47, 48, 57, 59, 64, 65, 70, 71, 90, 94,
- 96, 97, 102, 103, 126, 58, 93, 48, 57, 65, 70, 97, 102, 58, 48, 57, 65, 70, 97, 102,
- 58, 48, 57, 65, 70, 97, 102, 58, 58, 48, 57, 65, 70, 97, 102, 58, 48, 57, 65, 70,
- 97, 102, 58, 48, 57, 65, 70, 97, 102, 58, 48, 57, 65, 70, 97, 102, 58, 58, 48, 57,
- 65, 70, 97, 102, 58, 48, 57, 65, 70, 97, 102, 58, 48, 57, 65, 70, 97, 102, 58, 48,
- 57, 65, 70, 97, 102, 58, 58, 48, 57, 65, 70, 97, 102, 58, 48, 57, 65, 70, 97, 102,
- 58, 48, 57, 65, 70, 97, 102, 58, 48, 57, 65, 70, 97, 102, 58, 58, 48, 57, 65, 70,
- 97, 102, 58, 48, 57, 65, 70, 97, 102, 58, 48, 57, 65, 70, 97, 102, 58, 48, 57, 65,
- 70, 97, 102, 58, 58, 48, 57, 65, 70, 97, 102, 58, 48, 57, 65, 70, 97, 102, 58, 48,
- 57, 65, 70, 97, 102, 58, 48, 57, 65, 70, 97, 102, 58, 48, 49, 50, 58, 51, 57, 65,
- 70, 97, 102, 46, 58, 48, 57, 65, 70, 97, 102, 58, 48, 57, 65, 70, 97, 102, 58, 48,
- 57, 65, 70, 97, 102, 58, 48, 57, 65, 70, 97, 102, 93, 48, 57, 65, 70, 97, 102, 93,
- 48, 57, 65, 70, 97, 102, 93, 48, 57, 65, 70, 97, 102, 46, 58, 48, 57, 65, 70, 97,
- 102, 46, 58, 48, 57, 65, 70, 97, 102, 46, 58, 48, 57, 65, 70, 97, 102, 46, 53, 58,
- 48, 52, 54, 57, 65, 70, 97, 102, 46, 58, 48, 53, 54, 57, 65, 70, 97, 102, 46, 58,
- 48, 57, 65, 70, 97, 102, 46, 58, 48, 57, 65, 70, 97, 102, 93, 48, 57, 65, 70, 97,
- 102, 58, 93, 48, 57, 65, 70, 97, 102, 58, 93, 48, 57, 65, 70, 97, 102, 58, 93, 48,
- 57, 65, 70, 97, 102, 58, 93, 48, 57, 65, 70, 97, 102, 58, 93, 48, 57, 65, 70, 97,
- 102, 58, 93, 48, 57, 65, 70, 97, 102, 58, 93, 48, 57, 65, 70, 97, 102, 58, 93, 48,
- 57, 65, 70, 97, 102, 58, 93, 48, 57, 65, 70, 97, 102, 58, 93, 48, 57, 65, 70, 97,
- 102, 58, 93, 48, 57, 65, 70, 97, 102, 58, 93, 48, 57, 65, 70, 97, 102, 58, 93, 48,
- 57, 65, 70, 97, 102, 58, 93, 48, 57, 65, 70, 97, 102, 58, 93, 48, 57, 65, 70, 97,
- 102, 58, 93, 48, 57, 65, 70, 97, 102, 58, 93, 48, 57, 65, 70, 97, 102, 58, 93, 48,
- 57, 65, 70, 97, 102, 58, 93, 48, 57, 65, 70, 97, 102, 58, 93, 48, 57, 65, 70, 97,
- 102, 58, 93, 58, 48, 57, 65, 70, 97, 102, 48, 49, 50, 93, 51, 57, 65, 70, 97, 102,
- 46, 58, 93, 48, 57, 65, 70, 97, 102, 58, 93, 48, 57, 65, 70, 97, 102, 58, 93, 48,
- 57, 65, 70, 97, 102, 58, 93, 48, 49, 50, 51, 57, 65, 70, 97, 102, 46, 58, 93, 48,
- 57, 65, 70, 97, 102, 58, 93, 48, 57, 65, 70, 97, 102, 58, 93, 48, 57, 65, 70, 97,
- 102, 58, 93, 48, 49, 50, 51, 57, 65, 70, 97, 102, 46, 58, 93, 48, 57, 65, 70, 97,
- 102, 58, 93, 48, 57, 65, 70, 97, 102, 58, 93, 48, 57, 65, 70, 97, 102, 58, 93, 48,
- 49, 50, 51, 57, 65, 70, 97, 102, 46, 58, 93, 48, 57, 65, 70, 97, 102, 58, 93, 48,
- 57, 65, 70, 97, 102, 58, 93, 48, 57, 65, 70, 97, 102, 58, 93, 48, 49, 50, 51, 57,
- 65, 70, 97, 102, 46, 58, 93, 48, 57, 65, 70, 97, 102, 46, 58, 93, 48, 57, 65, 70,
- 97, 102, 46, 58, 93, 48, 57, 65, 70, 97, 102, 46, 58, 93, 48, 57, 65, 70, 97, 102,
- 46, 53, 58, 93, 48, 52, 54, 57, 65, 70, 97, 102, 46, 58, 93, 48, 53, 54, 57, 65,
- 70, 97, 102, 46, 58, 93, 48, 57, 65, 70, 97, 102, 46, 58, 93, 48, 57, 65, 70, 97,
- 102, 46, 58, 93, 48, 57, 65, 70, 97, 102, 46, 58, 93, 48, 57, 65, 70, 97, 102, 46,
- 58, 93, 48, 57, 65, 70, 97, 102, 46, 53, 58, 93, 48, 52, 54, 57, 65, 70, 97, 102,
- 46, 58, 93, 48, 53, 54, 57, 65, 70, 97, 102, 46, 58, 93, 48, 57, 65, 70, 97, 102,
- 46, 58, 93, 48, 57, 65, 70, 97, 102, 58, 93, 48, 57, 65, 70, 97, 102, 46, 58, 93,
- 48, 57, 65, 70, 97, 102, 46, 58, 93, 48, 57, 65, 70, 97, 102, 46, 58, 93, 48, 57,
- 65, 70, 97, 102, 46, 53, 58, 93, 48, 52, 54, 57, 65, 70, 97, 102, 46, 58, 93, 48,
- 53, 54, 57, 65, 70, 97, 102, 46, 58, 93, 48, 57, 65, 70, 97, 102, 46, 58, 93, 48,
- 57, 65, 70, 97, 102, 58, 93, 48, 57, 65, 70, 97, 102, 46, 58, 93, 48, 57, 65, 70,
- 97, 102, 46, 58, 93, 48, 57, 65, 70, 97, 102, 46, 58, 93, 48, 57, 65, 70, 97, 102,
- 46, 53, 58, 93, 48, 52, 54, 57, 65, 70, 97, 102, 46, 58, 93, 48, 53, 54, 57, 65,
- 70, 97, 102, 46, 58, 93, 48, 57, 65, 70, 97, 102, 46, 58, 93, 48, 57, 65, 70, 97,
- 102, 58, 93, 48, 57, 65, 70, 97, 102, 46, 58, 93, 48, 57, 65, 70, 97, 102, 46, 58,
- 93, 48, 57, 65, 70, 97, 102, 46, 58, 93, 48, 57, 65, 70, 97, 102, 46, 53, 58, 93,
- 48, 52, 54, 57, 65, 70, 97, 102, 46, 58, 93, 48, 53, 54, 57, 65, 70, 97, 102, 46,
- 58, 93, 48, 57, 65, 70, 97, 102, 46, 58, 93, 48, 57, 65, 70, 97, 102, 58, 93, 48,
- 57, 65, 70, 97, 102, 58, 93, -32, -19, -16, -12, 34, 92, -62, -33, -31, -17, -15, -13, 32,
- 126, -128, -65, -96, -65, -128, -65, -128, -97, -112, -65, -128, -65, -128, -113, 64, 32, 126, -32, -19,
- -16, -12, 45, 46, -62, -33, -31, -17, -15, -13, 48, 57, 65, 90, 97, 122, 0};
+ -32, -19, -16, -12, 34, 45, 61, 63, -62, -33, -31, -17, -15, -13, 33, 39, 42, 43, 47, 57,
+ 65, 90, 94, 126, -128, -65, -32, -19, -16, -12, 33, 46, 61, 64, -62, -33, -31, -17, -15, -13,
+ 35, 39, 42, 43, 45, 57, 63, 90, 94, 126, -96, -65, -128, -65, -128, -97, -112, -65, -128, -65,
+ -128, -113, -32, -19, -16, -12, 33, 45, 61, 63, -62, -33, -31, -17, -15, -13, 35, 39, 42, 43,
+ 47, 57, 65, 90, 94, 126, -32, -19, -16, -12, 91, -62, -33, -31, -17, -15, -13, 48, 57, 65,
+ 90, 97, 122, -128, -65, -96, -65, -128, -65, -128, -97, -112, -65, -128, -65, -128, -113, -32, -19, -16,
+ -12, 45, -62, -33, -31, -17, -15, -13, 48, 57, 65, 90, 97, 122, -32, -19, -16, -12, -62, -33,
+ -31, -17, -15, -13, 48, 57, 65, 90, 97, 122, 45, 48, 49, 50, 73, 51, 57, 65, 90, 97,
+ 122, 45, 48, 57, 65, 90, 97, 122, 45, 58, 48, 57, 65, 90, 97, 122, 33, 90, 94, 126,
+ 93, 45, 46, 58, 48, 57, 65, 90, 97, 122, 48, 49, 50, 51, 57, 46, 48, 49, 50, 51,
+ 57, 46, 48, 49, 50, 51, 57, 93, 48, 57, 93, 48, 57, 53, 93, 48, 52, 54, 57, 93,
+ 48, 53, 46, 48, 57, 46, 48, 57, 46, 53, 48, 52, 54, 57, 46, 48, 53, 46, 48, 57,
+ 46, 48, 57, 46, 53, 48, 52, 54, 57, 46, 48, 53, 45, 46, 58, 48, 57, 65, 90, 97,
+ 122, 45, 46, 58, 48, 57, 65, 90, 97, 122, 45, 46, 53, 58, 48, 52, 54, 57, 65, 90,
+ 97, 122, 45, 46, 58, 48, 53, 54, 57, 65, 90, 97, 122, 45, 58, 80, 48, 57, 65, 90,
+ 97, 122, 45, 58, 118, 48, 57, 65, 90, 97, 122, 45, 54, 58, 48, 57, 65, 90, 97, 122,
+ 45, 58, 48, 57, 65, 90, 97, 122, 58, 33, 47, 48, 57, 59, 64, 65, 70, 71, 90, 94,
+ 96, 97, 102, 103, 126, 58, 93, 48, 57, 65, 70, 97, 102, 58, 48, 57, 65, 70, 97, 102,
+ 58, 48, 57, 65, 70, 97, 102, 58, 58, 48, 57, 65, 70, 97, 102, 58, 48, 57, 65, 70,
+ 97, 102, 58, 48, 57, 65, 70, 97, 102, 58, 48, 57, 65, 70, 97, 102, 58, 58, 48, 57,
+ 65, 70, 97, 102, 58, 48, 57, 65, 70, 97, 102, 58, 48, 57, 65, 70, 97, 102, 58, 48,
+ 57, 65, 70, 97, 102, 58, 58, 48, 57, 65, 70, 97, 102, 58, 48, 57, 65, 70, 97, 102,
+ 58, 48, 57, 65, 70, 97, 102, 58, 48, 57, 65, 70, 97, 102, 58, 58, 48, 57, 65, 70,
+ 97, 102, 58, 48, 57, 65, 70, 97, 102, 58, 48, 57, 65, 70, 97, 102, 58, 48, 57, 65,
+ 70, 97, 102, 58, 58, 48, 57, 65, 70, 97, 102, 58, 48, 57, 65, 70, 97, 102, 58, 48,
+ 57, 65, 70, 97, 102, 58, 48, 57, 65, 70, 97, 102, 58, 48, 49, 50, 58, 51, 57, 65,
+ 70, 97, 102, 46, 58, 48, 57, 65, 70, 97, 102, 58, 48, 57, 65, 70, 97, 102, 58, 48,
+ 57, 65, 70, 97, 102, 58, 48, 57, 65, 70, 97, 102, 93, 48, 57, 65, 70, 97, 102, 93,
+ 48, 57, 65, 70, 97, 102, 93, 48, 57, 65, 70, 97, 102, 46, 58, 48, 57, 65, 70, 97,
+ 102, 46, 58, 48, 57, 65, 70, 97, 102, 46, 58, 48, 57, 65, 70, 97, 102, 46, 53, 58,
+ 48, 52, 54, 57, 65, 70, 97, 102, 46, 58, 48, 53, 54, 57, 65, 70, 97, 102, 46, 58,
+ 48, 57, 65, 70, 97, 102, 46, 58, 48, 57, 65, 70, 97, 102, 93, 48, 57, 65, 70, 97,
+ 102, 58, 93, 48, 57, 65, 70, 97, 102, 58, 93, 48, 57, 65, 70, 97, 102, 58, 93, 48,
+ 57, 65, 70, 97, 102, 58, 93, 48, 57, 65, 70, 97, 102, 58, 93, 48, 57, 65, 70, 97,
+ 102, 58, 93, 48, 57, 65, 70, 97, 102, 58, 93, 48, 57, 65, 70, 97, 102, 58, 93, 48,
+ 57, 65, 70, 97, 102, 58, 93, 48, 57, 65, 70, 97, 102, 58, 93, 48, 57, 65, 70, 97,
+ 102, 58, 93, 48, 57, 65, 70, 97, 102, 58, 93, 48, 57, 65, 70, 97, 102, 58, 93, 48,
+ 57, 65, 70, 97, 102, 58, 93, 48, 57, 65, 70, 97, 102, 58, 93, 48, 57, 65, 70, 97,
+ 102, 58, 93, 48, 57, 65, 70, 97, 102, 58, 93, 48, 57, 65, 70, 97, 102, 58, 93, 48,
+ 57, 65, 70, 97, 102, 58, 93, 48, 57, 65, 70, 97, 102, 58, 93, 58, 48, 57, 65, 70,
+ 97, 102, 48, 49, 50, 93, 51, 57, 65, 70, 97, 102, 46, 58, 93, 48, 57, 65, 70, 97,
+ 102, 58, 93, 48, 57, 65, 70, 97, 102, 58, 93, 48, 57, 65, 70, 97, 102, 58, 93, 48,
+ 49, 50, 51, 57, 65, 70, 97, 102, 46, 58, 93, 48, 57, 65, 70, 97, 102, 58, 93, 48,
+ 57, 65, 70, 97, 102, 58, 93, 48, 57, 65, 70, 97, 102, 58, 93, 48, 49, 50, 51, 57,
+ 65, 70, 97, 102, 46, 58, 93, 48, 57, 65, 70, 97, 102, 58, 93, 48, 57, 65, 70, 97,
+ 102, 58, 93, 48, 57, 65, 70, 97, 102, 58, 93, 48, 49, 50, 51, 57, 65, 70, 97, 102,
+ 46, 58, 93, 48, 57, 65, 70, 97, 102, 58, 93, 48, 57, 65, 70, 97, 102, 58, 93, 48,
+ 57, 65, 70, 97, 102, 58, 93, 48, 49, 50, 51, 57, 65, 70, 97, 102, 46, 58, 93, 48,
+ 57, 65, 70, 97, 102, 46, 58, 93, 48, 57, 65, 70, 97, 102, 46, 58, 93, 48, 57, 65,
+ 70, 97, 102, 46, 58, 93, 48, 57, 65, 70, 97, 102, 46, 53, 58, 93, 48, 52, 54, 57,
+ 65, 70, 97, 102, 46, 58, 93, 48, 53, 54, 57, 65, 70, 97, 102, 46, 58, 93, 48, 57,
+ 65, 70, 97, 102, 46, 58, 93, 48, 57, 65, 70, 97, 102, 46, 58, 93, 48, 57, 65, 70,
+ 97, 102, 46, 58, 93, 48, 57, 65, 70, 97, 102, 46, 58, 93, 48, 57, 65, 70, 97, 102,
+ 46, 53, 58, 93, 48, 52, 54, 57, 65, 70, 97, 102, 46, 58, 93, 48, 53, 54, 57, 65,
+ 70, 97, 102, 46, 58, 93, 48, 57, 65, 70, 97, 102, 46, 58, 93, 48, 57, 65, 70, 97,
+ 102, 58, 93, 48, 57, 65, 70, 97, 102, 46, 58, 93, 48, 57, 65, 70, 97, 102, 46, 58,
+ 93, 48, 57, 65, 70, 97, 102, 46, 58, 93, 48, 57, 65, 70, 97, 102, 46, 53, 58, 93,
+ 48, 52, 54, 57, 65, 70, 97, 102, 46, 58, 93, 48, 53, 54, 57, 65, 70, 97, 102, 46,
+ 58, 93, 48, 57, 65, 70, 97, 102, 46, 58, 93, 48, 57, 65, 70, 97, 102, 58, 93, 48,
+ 57, 65, 70, 97, 102, 46, 58, 93, 48, 57, 65, 70, 97, 102, 46, 58, 93, 48, 57, 65,
+ 70, 97, 102, 46, 58, 93, 48, 57, 65, 70, 97, 102, 46, 53, 58, 93, 48, 52, 54, 57,
+ 65, 70, 97, 102, 46, 58, 93, 48, 53, 54, 57, 65, 70, 97, 102, 46, 58, 93, 48, 57,
+ 65, 70, 97, 102, 46, 58, 93, 48, 57, 65, 70, 97, 102, 58, 93, 48, 57, 65, 70, 97,
+ 102, 46, 58, 93, 48, 57, 65, 70, 97, 102, 46, 58, 93, 48, 57, 65, 70, 97, 102, 46,
+ 58, 93, 48, 57, 65, 70, 97, 102, 46, 53, 58, 93, 48, 52, 54, 57, 65, 70, 97, 102,
+ 46, 58, 93, 48, 53, 54, 57, 65, 70, 97, 102, 46, 58, 93, 48, 57, 65, 70, 97, 102,
+ 46, 58, 93, 48, 57, 65, 70, 97, 102, 58, 93, 48, 57, 65, 70, 97, 102, 58, 93, -32,
+ -19, -16, -12, 34, 92, -62, -33, -31, -17, -15, -13, 32, 126, -128, -65, -96, -65, -128, -65, -128,
+ -97, -112, -65, -128, -65, -128, -113, 64, 32, 126, -32, -19, -16, -12, 45, 46, -62, -33, -31, -17,
+ -15, -13, 48, 57, 65, 90, 97, 122, 0};
static const signed char _address_single_lengths[] = {
0, 8, 0, 8, 0, 0, 0, 0, 0, 0, 8, 5, 0, 0, 0, 0, 0, 0, 0, 5, 4, 5, 1, 2, 0, 1, 3, 3, 1, 3, 1, 3, 1, 1,
@@ -201,40 +209,71 @@ static const short _address_cond_targs[] = {
180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 0};
static const signed char _address_cond_actions[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3,
- 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,
- 3, 1, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 3,
- 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0, 3, 1, 3, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 3, 0,
- 3, 0, 0, 0, 0, 3, 0, 3, 0, 0, 0, 0, 3, 1, 0, 3, 1, 0, 3, 0, 1, 0, 0, 3, 1, 0, 3, 0, 0, 3, 0, 0, 3, 0, 0, 0, 0, 3,
- 0, 0, 3, 0, 0, 3, 0, 0, 3, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0,
- 0, 3, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 1, 0, 0, 0, 3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 3, 0, 3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 3, 0,
- 0, 0, 0, 3, 0, 0, 0, 0, 3, 0, 3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 3, 0, 3, 0, 0, 0, 0, 3,
- 0, 0, 0, 0, 3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 3, 0, 3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 3, 0,
- 3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 3, 0, 3, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0,
- 0, 0, 0, 3, 0, 0, 0, 0, 3, 0, 3, 0, 0, 0, 3, 1, 0, 0, 0, 3, 1, 0, 0, 0, 3, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0,
- 0, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 3, 1,
- 0, 0, 0, 3, 0, 1, 0, 0, 0, 3, 0, 1, 0, 0, 0, 3, 0, 1, 0, 0, 0, 3, 0, 1, 3, 0, 0, 0, 3, 0, 1, 0, 0, 0, 3, 0, 1, 0,
- 0, 0, 3, 0, 1, 0, 0, 0, 3, 0, 1, 3, 0, 0, 0, 3, 0, 1, 0, 0, 0, 3, 0, 1, 0, 0, 0, 3, 0, 1, 0, 0, 0, 3, 0, 1, 3, 0,
- 0, 0, 3, 0, 1, 0, 0, 0, 3, 0, 1, 0, 0, 0, 3, 0, 1, 0, 0, 0, 3, 0, 1, 3, 0, 0, 0, 3, 0, 1, 0, 0, 0, 3, 0, 1, 0, 0,
- 0, 3, 0, 1, 0, 0, 0, 3, 0, 1, 3, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 1, 0, 0, 0, 3, 0, 1, 0, 0, 0, 3, 0,
- 1, 0, 0, 0, 3, 0, 1, 3, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 0, 0, 0, 3, 0, 1, 0, 0, 0, 3, 0, 1, 0, 0, 0, 3, 0, 1, 3, 0,
- 0, 0, 0, 0, 0, 3, 0, 0, 1, 0, 0, 0, 3, 0, 1, 0, 0, 0, 3, 0, 1, 0, 0, 0, 3, 0, 1, 3, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1,
- 0, 0, 0, 3, 0, 1, 0, 0, 0, 3, 0, 1, 0, 0, 0, 3, 0, 1, 3, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 0, 0, 0, 3, 0, 0, 1, 0, 0,
- 0, 3, 0, 0, 1, 0, 0, 0, 3, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 3, 0, 0, 1, 0, 0, 0, 0, 3, 0, 0, 1, 0, 0,
- 0, 3, 0, 0, 1, 0, 0, 0, 3, 0, 0, 1, 0, 0, 0, 3, 0, 0, 1, 0, 0, 0, 3, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0,
- 3, 0, 0, 1, 0, 0, 0, 0, 3, 0, 0, 1, 0, 0, 0, 3, 0, 0, 1, 0, 0, 0, 3, 0, 1, 0, 0, 0, 3, 0, 0, 1, 0, 0, 0, 3, 0, 0,
- 1, 0, 0, 0, 3, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 3, 0, 0, 1, 0, 0, 0, 0, 3, 0, 0, 1, 0, 0, 0, 3, 0, 0,
- 1, 0, 0, 0, 3, 0, 1, 0, 0, 0, 3, 0, 0, 1, 0, 0, 0, 3, 0, 0, 1, 0, 0, 0, 3, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0,
- 0, 0, 3, 0, 0, 1, 0, 0, 0, 0, 3, 0, 0, 1, 0, 0, 0, 3, 0, 0, 1, 0, 0, 0, 3, 0, 1, 0, 0, 0, 3, 0, 0, 1, 0, 0, 0, 3,
- 0, 0, 1, 0, 0, 0, 3, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 3, 0, 0, 1, 0, 0, 0, 0, 3, 0, 0, 1, 0, 0, 0, 3,
- 0, 0, 1, 0, 0, 0, 3, 0, 1, 0, 0, 0, 3, 0, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0,
- 3, 0, 3, 0, 3, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 3, 3, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0};
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3, 0, 3,
+ 0, 3, 0, 3, 0, 3, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 3, 1, 3, 0,
+ 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+ 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 3, 0, 0, 0, 0, 0, 0,
+ 0, 0, 3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0, 3, 1, 3, 0,
+ 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 3, 0, 3, 0, 0, 0, 0, 3, 0, 3,
+ 0, 0, 0, 0, 3, 1, 0, 3, 1, 0, 3, 0, 1, 0, 0, 3, 1, 0, 3, 0,
+ 0, 3, 0, 0, 3, 0, 0, 0, 0, 3, 0, 0, 3, 0, 0, 3, 0, 0, 3, 0,
+ 0, 0, 0, 3, 0, 0, 3, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0,
+ 3, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0,
+ 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 3, 0,
+ 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 1, 0, 0, 0,
+ 3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 3, 0, 3, 0, 0, 0, 0, 3, 0, 0,
+ 0, 0, 3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 3, 0, 3, 0, 0, 0, 0, 3,
+ 0, 0, 0, 0, 3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 3, 0, 3, 0, 0, 0,
+ 0, 3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 3, 0, 3, 0,
+ 0, 0, 0, 3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 3, 0,
+ 3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 3, 0, 0, 0, 0,
+ 3, 0, 3, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0, 0,
+ 0, 3, 0, 0, 0, 0, 3, 0, 3, 0, 0, 0, 3, 1, 0, 0, 0, 3, 1, 0,
+ 0, 0, 3, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 3,
+ 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0,
+ 3, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 3, 1, 0, 0, 0, 3, 0, 1,
+ 0, 0, 0, 3, 0, 1, 0, 0, 0, 3, 0, 1, 0, 0, 0, 3, 0, 1, 3, 0,
+ 0, 0, 3, 0, 1, 0, 0, 0, 3, 0, 1, 0, 0, 0, 3, 0, 1, 0, 0, 0,
+ 3, 0, 1, 3, 0, 0, 0, 3, 0, 1, 0, 0, 0, 3, 0, 1, 0, 0, 0, 3,
+ 0, 1, 0, 0, 0, 3, 0, 1, 3, 0, 0, 0, 3, 0, 1, 0, 0, 0, 3, 0,
+ 1, 0, 0, 0, 3, 0, 1, 0, 0, 0, 3, 0, 1, 3, 0, 0, 0, 3, 0, 1,
+ 0, 0, 0, 3, 0, 1, 0, 0, 0, 3, 0, 1, 0, 0, 0, 3, 0, 1, 3, 0,
+ 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 1, 0, 0, 0, 3, 0,
+ 1, 0, 0, 0, 3, 0, 1, 0, 0, 0, 3, 0, 1, 3, 0, 0, 0, 0, 0, 0,
+ 3, 0, 0, 1, 0, 0, 0, 3, 0, 1, 0, 0, 0, 3, 0, 1, 0, 0, 0, 3,
+ 0, 1, 3, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 0, 0, 0, 3, 0, 1, 0,
+ 0, 0, 3, 0, 1, 0, 0, 0, 3, 0, 1, 3, 0, 0, 0, 0, 0, 0, 3, 0,
+ 0, 1, 0, 0, 0, 3, 0, 1, 0, 0, 0, 3, 0, 1, 0, 0, 0, 3, 0, 1,
+ 3, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 0, 0, 0, 3, 0, 0, 1, 0, 0,
+ 0, 3, 0, 0, 1, 0, 0, 0, 3, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1,
+ 0, 0, 0, 0, 3, 0, 0, 1, 0, 0, 0, 0, 3, 0, 0, 1, 0, 0, 0, 3,
+ 0, 0, 1, 0, 0, 0, 3, 0, 0, 1, 0, 0, 0, 3, 0, 0, 1, 0, 0, 0,
+ 3, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 3, 0, 0, 1,
+ 0, 0, 0, 0, 3, 0, 0, 1, 0, 0, 0, 3, 0, 0, 1, 0, 0, 0, 3, 0,
+ 1, 0, 0, 0, 3, 0, 0, 1, 0, 0, 0, 3, 0, 0, 1, 0, 0, 0, 3, 0,
+ 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 3, 0, 0, 1, 0, 0,
+ 0, 0, 3, 0, 0, 1, 0, 0, 0, 3, 0, 0, 1, 0, 0, 0, 3, 0, 1, 0,
+ 0, 0, 3, 0, 0, 1, 0, 0, 0, 3, 0, 0, 1, 0, 0, 0, 3, 0, 0, 1,
+ 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 3, 0, 0, 1, 0, 0, 0, 0,
+ 3, 0, 0, 1, 0, 0, 0, 3, 0, 0, 1, 0, 0, 0, 3, 0, 1, 0, 0, 0,
+ 3, 0, 0, 1, 0, 0, 0, 3, 0, 0, 1, 0, 0, 0, 3, 0, 0, 1, 0, 0,
+ 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 3, 0, 0, 1, 0, 0, 0, 0, 3, 0,
+ 0, 1, 0, 0, 0, 3, 0, 0, 1, 0, 0, 0, 3, 0, 1, 0, 0, 0, 3, 0,
+ 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3, 0, 3, 0, 3, 0,
+ 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 3, 3, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 0, 0, 0};
static const short _address_eof_trans[] = {
1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104,