From 64e1394ae76409f02b00c254f119a64a2d1ce11e Mon Sep 17 00:00:00 2001 From: Yuki Izumi Date: Sat, 5 Nov 2016 09:04:48 +1100 Subject: Fix for non-matching entities (#161) * Add test to illustrate issue * Provide some test fixes * Don't neglect CounterClockwiseContourIntegral * Fix ~10% of cases not matching strncmp returns 0 if the first 'len' bytes of cmark_entities[i].entity match s; we check equal length in the first if by checking if cmark_entities[i].entity[len] == 0, but we neglect the case where cmp == 0 && cmark_entities[i].entity[len] != 0. This should be treated as the same as cmp < 0, because strcmp("abc", "abcd") < 0. * Don't depend on py3.3 in tests --- src/entities.inc | 2 +- src/houdini_html_u.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/entities.inc b/src/entities.inc index ec3d2a9..a7c36e2 100644 --- a/src/entities.inc +++ b/src/entities.inc @@ -6,7 +6,7 @@ struct cmark_entity_node { }; #define CMARK_ENTITY_MIN_LENGTH 2 -#define CMARK_ENTITY_MAX_LENGTH 31 +#define CMARK_ENTITY_MAX_LENGTH 32 #define CMARK_NUM_ENTITIES 2125 static const struct cmark_entity_node cmark_entities[] = { diff --git a/src/houdini_html_u.c b/src/houdini_html_u.c index 6e8d620..30d08aa 100644 --- a/src/houdini_html_u.c +++ b/src/houdini_html_u.c @@ -16,7 +16,7 @@ static const unsigned char *S_lookup(int i, int low, int hi, strncmp((const char *)s, (const char *)cmark_entities[i].entity, len); if (cmp == 0 && cmark_entities[i].entity[len] == 0) { return (const unsigned char *)cmark_entities[i].bytes; - } else if (cmp < 0 && i > low) { + } else if (cmp <= 0 && i > low) { j = i - ((i - low) / 2); if (j == i) j -= 1; -- cgit v1.2.3