2021-01-27 11:47:49 +01:00
|
|
|
|
/*
|
|
|
|
|
* Copyright (c) 2021 Omar Polo <op@omarpolo.com>
|
|
|
|
|
*
|
|
|
|
|
* Permission to use, copy, modify, and distribute this software for any
|
|
|
|
|
* purpose with or without fee is hereby granted, provided that the above
|
|
|
|
|
* copyright notice and this permission notice appear in all copies.
|
|
|
|
|
*
|
|
|
|
|
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
|
|
|
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
|
|
|
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
|
|
|
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
|
|
|
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
|
|
|
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
|
|
|
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
#include <stdio.h>
|
|
|
|
|
#include <string.h>
|
|
|
|
|
|
|
|
|
|
#include "../gmid.h"
|
|
|
|
|
|
2021-02-08 13:43:36 +01:00
|
|
|
|
/* to make the linker happy */
|
|
|
|
|
struct conf conf;
|
2021-03-19 20:21:29 +01:00
|
|
|
|
struct imsgbuf logibuf, servibuf[PROC_MAX];
|
2021-02-08 13:43:36 +01:00
|
|
|
|
|
2022-03-19 12:02:42 +01:00
|
|
|
|
const struct suite {
|
2021-01-27 11:47:49 +01:00
|
|
|
|
const char *src;
|
|
|
|
|
const char *res;
|
|
|
|
|
} t[] = {
|
|
|
|
|
{"foo", "foo"},
|
2021-01-27 16:35:09 +01:00
|
|
|
|
{"h.n", "h.n"},
|
2021-01-27 11:47:49 +01:00
|
|
|
|
{"xn-invalid", "xn-invalid"},
|
|
|
|
|
{"naïve", "naïve"},
|
|
|
|
|
{"xn--8ca", "è"},
|
|
|
|
|
{"xn--caff-8oa", "caffè"},
|
|
|
|
|
{"xn--nave-6pa", "naïve"},
|
|
|
|
|
{"xn--e-0mbbc", "τeστ"},
|
|
|
|
|
{"xn--8ca67lbac", "τèστ"},
|
|
|
|
|
{"xn--28j2a3ar1p", "こんにちは"},
|
|
|
|
|
{"xn--hello--ur7iy09x", "hello-世界"},
|
|
|
|
|
{"xn--hi--hi-rr7iy09x", "hi-世界-hi"},
|
|
|
|
|
{"xn--caf-8la.foo.org", "cafè.foo.org"},
|
|
|
|
|
/* 3 bytes */
|
|
|
|
|
{"xn--j6h", "♨"},
|
|
|
|
|
/* 4 bytes */
|
|
|
|
|
{"xn--x73l", "𩸽"},
|
|
|
|
|
{"xn--x73laaa", "𩸽𩸽𩸽𩸽"},
|
|
|
|
|
{NULL, NULL}
|
|
|
|
|
};
|
|
|
|
|
|
2021-03-20 09:42:08 +01:00
|
|
|
|
void
|
|
|
|
|
sandbox_logger_process(void)
|
|
|
|
|
{
|
|
|
|
|
/* to make the linker happy! */
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2021-01-27 11:47:49 +01:00
|
|
|
|
int
|
|
|
|
|
main(int argc, char **argv)
|
|
|
|
|
{
|
2022-03-19 12:02:42 +01:00
|
|
|
|
const struct suite *i;
|
2021-01-27 11:47:49 +01:00
|
|
|
|
int failed;
|
|
|
|
|
char buf[64]; /* name len */
|
2021-02-01 20:58:04 +01:00
|
|
|
|
const char *parse_err;
|
2021-01-27 11:47:49 +01:00
|
|
|
|
|
|
|
|
|
failed = 0;
|
|
|
|
|
for (i = t; i->src != NULL; ++i) {
|
|
|
|
|
memset(buf, 0, sizeof(buf));
|
2021-01-29 19:51:35 +01:00
|
|
|
|
if (!puny_decode(i->src, buf, sizeof(buf), &parse_err)) {
|
|
|
|
|
printf("decode: failure with %s: %s\n",
|
|
|
|
|
i->src, parse_err);
|
2021-01-27 11:47:49 +01:00
|
|
|
|
failed = 1;
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (strcmp(buf, i->res)) {
|
|
|
|
|
printf("ERR: expected \"%s\", got \"%s\"\n",
|
|
|
|
|
i->res, buf);
|
|
|
|
|
failed = 1;
|
|
|
|
|
continue;
|
|
|
|
|
} else
|
|
|
|
|
printf("OK: %s => %s\n", i->src, buf);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return failed;
|
|
|
|
|
}
|