Changeset: d5524a5f35f6 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/d5524a5f35f6
Modified Files:
        ctest/tools/monetdbe/example_append_raw.c
        tools/monetdbe/monetdbe.c
Branch: Jul2021
Log Message:

Validate UTF-8 strings on MonetDBe append function


diffs (34 lines):

diff --git a/ctest/tools/monetdbe/example_append_raw.c 
b/ctest/tools/monetdbe/example_append_raw.c
--- a/ctest/tools/monetdbe/example_append_raw.c
+++ b/ctest/tools/monetdbe/example_append_raw.c
@@ -74,6 +74,13 @@ main(void)
        if ((err = monetdbe_append(mdbe, "sys", "test", (monetdbe_column**) 
&dcol, 6)) != NULL)
                error(err)
 
+       // str with wrong utf8
+       char* dstr2[2] = { "\xc3\x28", "\xe2\x28\xa1" };
+       monetdbe_column col12 = { .type = monetdbe_str, .data = &dstr2, .count 
= 2 };
+       monetdbe_column* dcol2[6] = { &col0, &col12, &col2, &col3, &col4, &col5 
};
+       if ((err = monetdbe_append(mdbe, "sys", "test", (monetdbe_column**) 
&dcol2, 6)) == NULL)
+               error("Invalid UTF-8 string expected")
+
        if ((err = monetdbe_query(mdbe, "SELECT * FROM test; ", &result, NULL)) 
!= NULL)
                error(err)
        fprintf(stdout, "Query result after append with %zu cols and %"PRId64" 
rows\n", result->ncols, result->nrows);
diff --git a/tools/monetdbe/monetdbe.c b/tools/monetdbe/monetdbe.c
--- a/tools/monetdbe/monetdbe.c
+++ b/tools/monetdbe/monetdbe.c
@@ -2211,8 +2211,12 @@ remote_cleanup:
                        char **d = (char**)v;
 
                        for (size_t j=0; j<cnt; j++) {
-                               if (!d[j])
+                               if (!d[j]) {
                                        d[j] = (char*) nil;
+                               } else if (!checkUTF8(d[j])) {
+                                       mdbe->msg = createException(SQL, 
"monetdbe.monetdbe_append", "Incorrectly encoded UTF-8");
+                                       goto cleanup;
+                               }
                        }
                        if (store->storage_api.append_col(m->session->tr, c, 
offset, pos, d, cnt, mtype) != 0) {
                                mdbe->msg = createException(SQL, 
"monetdbe.monetdbe_append", "Cannot append values");
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to