Don't check null terminaion of source in hb_codepoint_parse
This isn't what intended originally, just checking if consumed
all the buffer is enough.
diff --git a/src/hb-algs.hh b/src/hb-algs.hh
index 66433a2..9caf5e9 100644
--- a/src/hb-algs.hh
+++ b/src/hb-algs.hh
@@ -902,8 +902,8 @@
const char *end = p + len;
if (unlikely (!hb_parse_uint (&p, end, &v, base))) return false;
- /* Pain because we don't know whether s is nul-terminated. */
- if (unlikely (p != end && *p)) return false;
+ /* Check if parser consumed all of the buffer */
+ if (unlikely (p != end)) return false;
*out = v;
return true;
diff --git a/src/test-number.cc b/src/test-number.cc
index 8ec66ee..0a33f7f 100644
--- a/src/test-number.cc
+++ b/src/test-number.cc
@@ -40,6 +40,7 @@
assert (pv == 123);
assert (pp - str == 3);
assert (end - pp == 0);
+ assert (!*end);
}
{
@@ -52,6 +53,20 @@
assert (pv == 123);
assert (pp - str == 3);
assert (end - pp == 0);
+ assert (!*end);
+ }
+
+ {
+ const char str[] = "12F";
+ const char *pp = str;
+ const char *end = str + 3;
+
+ unsigned int pv;
+ assert (hb_parse_uint (&pp, end, &pv, 16));
+ assert (pv == 0x12F);
+ assert (pp - str == 3);
+ assert (end - pp == 0);
+ assert (!*end);
}
{
@@ -64,6 +79,7 @@
assert (pv == -123);
assert (pp - str == 4);
assert (end - pp == 0);
+ assert (!*end);
}
{
@@ -77,6 +93,7 @@
assert (pv == 123);
assert (pp - str == 3);
assert (end - pp == 1);
+ assert (!*end);
}
{
@@ -89,7 +106,20 @@
assert (hb_parse_uint (&pp, end, &pv));
assert (pv == 123);
assert (pp - str == 3);
- assert (end - pp == 2); /* Similar to what hb_codepoint_parse needs */
+ assert (end - pp == 2);
+ }
+
+ {
+ const char str[] = "123V";
+ const char *pp = str;
+ assert (ARRAY_LENGTH (str) == 5);
+ const char *end = str + ARRAY_LENGTH (str);
+
+ unsigned int pv;
+ assert (hb_parse_uint (&pp, end, &pv));
+ assert (pv == 123);
+ assert (pp - str == 3);
+ assert (end - pp == 2);
}
{