From 6fdeeb2ae3059ac1bc5ff99fd1655b4e94576151 Mon Sep 17 00:00:00 2001 From: Khaled Hosny Date: Thu, 19 Apr 2018 23:41:37 +0300 Subject: [PATCH] [util] Check all specified shapers are known (#993) A bit brute force and requires all shapers to be known, not just one. Fixes https://github.com/harfbuzz/harfbuzz/issues/956 --- util/options.cc | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/util/options.cc b/util/options.cc index c625d6573..aad843c2e 100644 --- a/util/options.cc +++ b/util/options.cc @@ -192,11 +192,29 @@ static gboolean parse_shapers (const char *name G_GNUC_UNUSED, const char *arg, gpointer data, - GError **error G_GNUC_UNUSED) + GError **error) { shape_options_t *shape_opts = (shape_options_t *) data; + char **shapers = g_strsplit (arg, ",", 0); + + for (char **shaper = shapers; *shaper; shaper++) { + bool found = false; + for (const char **hb_shaper = hb_shape_list_shapers (); *hb_shaper; hb_shaper++) { + if (strcmp (*shaper, *hb_shaper) == 0) { + found = true; + break; + } + } + if (!found) { + g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, + "Unknown or unsupported shaper: %s", *shaper); + g_strfreev (shapers); + return false; + } + } + g_strfreev (shape_opts->shapers); - shape_opts->shapers = g_strsplit (arg, ",", 0); + shape_opts->shapers = shapers; return true; }