Make sure broken feature strings are not partially parsed

If user doesn't check hb_feature_from_string() return value, we
don't want them to end up see the partially-parsed feature.
This commit is contained in:
Behdad Esfahbod 2014-07-25 12:21:49 -04:00
parent a795fe6378
commit 5c5cdbbdf8

View File

@ -37,8 +37,7 @@
static bool static bool
parse_space (const char **pp, const char *end) parse_space (const char **pp, const char *end)
{ {
char c; while (*pp < end && ISSPACE (**pp))
while (*pp < end && (c = **pp, ISSPACE (c)))
(*pp)++; (*pp)++;
return true; return true;
} }
@ -201,7 +200,7 @@ parse_one_feature (const char **pp, const char *end, hb_feature_t *feature)
* hb_feature_from_string: * hb_feature_from_string:
* @str: (array length=len): * @str: (array length=len):
* @len: * @len:
* @feature: (out): * @feature: (out) (allow-none):
* *
* *
* *
@ -213,10 +212,21 @@ hb_bool_t
hb_feature_from_string (const char *str, int len, hb_feature_from_string (const char *str, int len,
hb_feature_t *feature) hb_feature_t *feature)
{ {
hb_feature_t feat;
if (len < 0) if (len < 0)
len = strlen (str); len = strlen (str);
return parse_one_feature (&str, str + len, feature); if (likely (parse_one_feature (&str, str + len, &feat)))
{
if (feature)
*feature = feat;
return true;
}
if (feature)
memset (feature, 0, sizeof (*feature));
return false;
} }
/** /**