diff options
Diffstat (limited to 'dbus/dbus-string.c')
| -rw-r--r-- | dbus/dbus-string.c | 61 | 
1 files changed, 60 insertions, 1 deletions
diff --git a/dbus/dbus-string.c b/dbus/dbus-string.c index 9acf5cfb..f453dcb6 100644 --- a/dbus/dbus-string.c +++ b/dbus/dbus-string.c @@ -608,7 +608,7 @@ _dbus_string_align_length (DBusString *str,    int delta;    DBUS_STRING_PREAMBLE (str);    _dbus_assert (alignment >= 1); -  _dbus_assert (alignment <= 16); /* arbitrary */ +  _dbus_assert (alignment <= 8); /* it has to be a bug if > 8 */    new_len = _DBUS_ALIGN_VALUE (real->len, alignment); @@ -1843,6 +1843,65 @@ _dbus_string_validate_ascii (const DBusString *str,    return TRUE;  } +/** + * Checks that the given range of the string + * is valid UTF-8. If the given range is not contained + * in the string, returns #FALSE. If the string + * contains any nul bytes in the given range, returns + * #FALSE. + * + * @todo right now just calls _dbus_string_validate_ascii() + *  + * @param str the string + * @param start first byte index to check + * @param len number of bytes to check + * @returns #TRUE if the byte range exists and is all valid UTF-8 + */ +dbus_bool_t +_dbus_string_validate_utf8  (const DBusString *str, +                             int               start, +                             int               len) +{ +  /* FIXME actually validate UTF-8 */ +  return _dbus_string_validate_ascii (str, start, len); +} + +/** + * Checks that the given range of the string + * is all nul bytes. If the given range is + * not contained in the string, returns #FALSE. + *  + * @param str the string + * @param start first byte index to check + * @param len number of bytes to check + * @returns #TRUE if the byte range exists and is all nul bytes + */ +dbus_bool_t +_dbus_string_validate_nul (const DBusString *str, +                           int               start, +                           int               len) +{ +  const unsigned char *s; +  const unsigned char *end; +  DBUS_CONST_STRING_PREAMBLE (str); +  _dbus_assert (start >= 0); +  _dbus_assert (len >= 0); +   +  if ((start + len) > real->len) +    return FALSE; +   +  s = real->str + start; +  end = s + len; +  while (s != end) +    { +      if (*s != '\0') +        return FALSE; +      ++s; +    } +   +  return TRUE; +} +  /** @} */  #ifdef DBUS_BUILD_TESTS  | 
