summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPantelis Antoniou <panto@antoniou-consulting.com>2013-01-04 21:12:58 +0200
committerJon Loeliger <jdl@jdl.com>2013-01-06 15:37:19 -0600
commit1c1efd69545a101d7181fc8e5df2b9a3545a58e8 (patch)
tree6cb0d0c1ce04fedd486d0b7dae1ac4398dc160e5
parent94a4799b200451d4037ec9219023becfe8c45ef1 (diff)
downloaddtc-1c1efd69545a101d7181fc8e5df2b9a3545a58e8.tar.gz
Fix util_is_printable_string
The method used did not account for multi-part strings. Signed-off-by: Pantelis Antoniou <panto@antoniou-consulting.com> Acked-by: David Gibson <david@gibson.dropbear.id.au>
-rw-r--r--util.c20
1 files changed, 13 insertions, 7 deletions
diff --git a/util.c b/util.c
index 2422c34..45f186b 100644
--- a/util.c
+++ b/util.c
@@ -72,7 +72,7 @@ char *join_path(const char *path, const char *name)
int util_is_printable_string(const void *data, int len)
{
const char *s = data;
- const char *ss;
+ const char *ss, *se;
/* zero length is not */
if (len == 0)
@@ -82,13 +82,19 @@ int util_is_printable_string(const void *data, int len)
if (s[len - 1] != '\0')
return 0;
- ss = s;
- while (*s && isprint(*s))
- s++;
+ se = s + len;
- /* not zero, or not done yet */
- if (*s != '\0' || (s + 1 - ss) < len)
- return 0;
+ while (s < se) {
+ ss = s;
+ while (s < se && *s && isprint(*s))
+ s++;
+
+ /* not zero, or not done yet */
+ if (*s != '\0' || s == ss)
+ return 0;
+
+ s++;
+ }
return 1;
}