From d389437b875a46fdc136e11b81a781d04380d518 Mon Sep 17 00:00:00 2001 From: Johan Hedberg Date: Tue, 19 Sep 2006 22:10:00 +0000 Subject: Add check for end of string in all places after incrementing the current char --- common/glib-ectomy.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/common/glib-ectomy.c b/common/glib-ectomy.c index 56357648..83a2bb7b 100644 --- a/common/glib-ectomy.c +++ b/common/glib-ectomy.c @@ -532,11 +532,11 @@ gint g_timeout_remove(const guint id) (val) |= (c) & 0x3f; \ } while (0) -#define INCREMENT_AND_CHECK_MAX(i, max_len) \ - do { \ - (i)++; \ - if ((max_len) >= 0 && (i) >= (max_len)) \ - goto failed; \ +#define INCREMENT_AND_CHECK_MAX(p, i, max_len) \ + do { \ + (i)++; \ + if ((p)[(i)] == '\0' || ((max_len) >= 0 && (i) >= (max_len))) \ + goto failed; \ } while (0) @@ -559,7 +559,7 @@ gboolean g_utf8_validate(const gchar *str, gssize max_len, const gchar **end) if ((p[i] & 0xe0) == 0xc0) { /* 110xxxxx */ if ((p[i] & 0x1e) == 0) goto failed; - INCREMENT_AND_CHECK_MAX(i, max_len); + INCREMENT_AND_CHECK_MAX(p, i, max_len); if ((p[i] & 0xc0) != 0x80) goto failed; /* 10xxxxxx */ } else { @@ -575,13 +575,13 @@ gboolean g_utf8_validate(const gchar *str, gssize max_len, const gchar **end) } else goto failed; - INCREMENT_AND_CHECK_MAX(i, max_len); + INCREMENT_AND_CHECK_MAX(p, i, max_len); CONTINUATION_CHAR(p[i], val); two_remaining: - INCREMENT_AND_CHECK_MAX(i, max_len); + INCREMENT_AND_CHECK_MAX(p, i, max_len); CONTINUATION_CHAR(p[i], val); - INCREMENT_AND_CHECK_MAX(i, max_len); + INCREMENT_AND_CHECK_MAX(p, i, max_len); CONTINUATION_CHAR(p[i], val); if (val < min || !UNICODE_VALID(val)) -- cgit