aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPřemysl Eric Janouch <p@janouch.name>2021-10-06 22:10:26 +0200
committerPřemysl Eric Janouch <p@janouch.name>2021-10-06 22:11:21 +0200
commit3881725904473cd9fdbd3e60cd1de2010f14d767 (patch)
treeacb491873cd73ab9924d7ae0776e9add3da94208
parent6c364dc99766bfd3bd86cd262db37b1a766dca1e (diff)
downloadtdv-3881725904473cd9fdbd3e60cd1de2010f14d767.tar.gz
tdv-3881725904473cd9fdbd3e60cd1de2010f14d767.tar.xz
tdv-3881725904473cd9fdbd3e60cd1de2010f14d767.zip
tabfile: remember to check UTF-8, glibize
-rw-r--r--src/tabfile.c20
1 files changed, 11 insertions, 9 deletions
diff --git a/src/tabfile.c b/src/tabfile.c
index 0bcbff3..10700b0 100644
--- a/src/tabfile.c
+++ b/src/tabfile.c
@@ -31,7 +31,7 @@
#include "utils.h"
static gboolean
-set_data_error (GError **error, const char *message)
+set_data_error (GError **error, const gchar *message)
{
g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_INVALID_DATA, message);
return FALSE;
@@ -40,11 +40,11 @@ set_data_error (GError **error, const char *message)
static const gchar escapes[256] = { ['n'] = '\n', ['t'] = '\t', ['\\'] = '\\' };
static gboolean
-inplace_unescape (char *line, GError **error)
+inplace_unescape (gchar *line, GError **error)
{
gboolean escape = FALSE;
- char *dest = line;
- for (char *src = line; *src; src++)
+ gchar *dest = line;
+ for (gchar *src = line; *src; src++)
{
if (escape)
{
@@ -65,12 +65,14 @@ inplace_unescape (char *line, GError **error)
}
static gboolean
-import_line (Generator *generator, char *line, size_t len, GError **error)
+import_line (Generator *generator, gchar *line, gsize len, GError **error)
{
if (!len)
return TRUE;
+ if (!g_utf8_validate_len (line, len, NULL))
+ return set_data_error (error, "not valid UTF-8");
- char *separator = strchr (line, '\t');
+ gchar *separator = strchr (line, '\t');
if (!separator)
return set_data_error (error, "keyword separator not found");
@@ -79,7 +81,7 @@ import_line (Generator *generator, char *line, size_t len, GError **error)
// The index wouldn't be sorted correctly with our method
return set_data_error (error, "escapes not allowed in keywords");
- char *newline = strpbrk (separator, "\r\n");
+ gchar *newline = strpbrk (separator, "\r\n");
if (newline)
*newline = 0;
@@ -95,8 +97,8 @@ import_line (Generator *generator, char *line, size_t len, GError **error)
static gboolean
transform (FILE *fsorted, Generator *generator, GError **error)
{
- char *line = NULL;
- size_t size = 0, ln = 1;
+ gchar *line = NULL;
+ gsize size = 0, ln = 1;
for (ssize_t read; (read = getline (&line, &size, fsorted)) >= 0; ln++)
if (!import_line (generator, line, read, error))
break;