/**
- * captive_validate_ucs2:
+ * captive_validate_ucs2_fixlen:
* @string_ucs2: #const #captive_ucs2 * type string to validate.
* Invalid string input is forbidden.
* UTF-16 encoded strings are forbidden.
+ * @string_ucs2_fixlen: Number of characters from @string_ucs2 to check.
+ * captive_ucs2_strlen(@string_ucs2)>=@string_ucs2_fixlen is required.
+ * Negative value is forbidden.
*
- * Checks the validity of all 16-bit unicharacters of 0-terminated string.
+ * Checks the validity of first @string_ucs2_fixlen 16-bit unicharacters of @string_ucs2.
* It is required to have characters complying to g_unichar_validate().
+ * String length must be equal or larger than @string_ucs2_fixlen;
*
* Returns: %TRUE if the string is valid.
*/
-gboolean captive_validate_ucs2(const captive_ucs2 *string_ucs2)
+gboolean captive_validate_ucs2_fixlen(const captive_ucs2 *string_ucs2,glong string_ucs2_fixlen)
{
const captive_ucs2 *cs_ucs2;
g_return_val_if_fail(captive_validate_unicode_types(),FALSE);
g_return_val_if_fail(string_ucs2!=NULL,FALSE);
+ g_return_val_if_fail(string_ucs2_fixlen>=0,FALSE);
/* g_unichar_validate() will reject surrogates (G_UNICODE_SURROGATE) */
- for (cs_ucs2=string_ucs2;*cs_ucs2;cs_ucs2++)
+ for (cs_ucs2=string_ucs2;cs_ucs2<string_ucs2+string_ucs2_fixlen;cs_ucs2++) {
+ g_return_val_if_fail(*cs_ucs2!=0,FALSE);
g_return_val_if_fail(g_unichar_validate(*cs_ucs2),FALSE);
+ }
return TRUE;
}
/**
+ * captive_validate_ucs2:
+ * @string_ucs2: #const #captive_ucs2 * type string to validate.
+ * Invalid string input is forbidden.
+ * UTF-16 encoded strings are forbidden.
+ *
+ * Checks the validity of all 16-bit unicharacters of 0-terminated string.
+ * It is required to have characters complying to g_unichar_validate().
+ *
+ * Returns: %TRUE if the string is valid.
+ */
+gboolean captive_validate_ucs2(const captive_ucs2 *string_ucs2)
+{
+ g_return_val_if_fail(captive_validate_unicode_types(),FALSE);
+ g_return_val_if_fail(string_ucs2!=NULL,FALSE);
+
+ return captive_validate_ucs2_fixlen(string_ucs2,captive_ucs2_strlen(string_ucs2));
+}
+
+
+/**
* captive_validate_utf8:
* @string_utf8: #const #gchar * utf8 type string to validate.
* Invalid string input is forbidden.
{
glong r;
- g_return_val_if_fail(captive_validate_ucs2(string_ucs2),0);
+ /* Do not call captive_validate_ucs2(string_ucs2) as we would be looping! */
+ g_return_val_if_fail(captive_validate_unicode_types(),FALSE);
+ g_return_val_if_fail(string_ucs2!=NULL,FALSE);
for (r=0;*string_ucs2;string_ucs2++)
r++;
*
* Checks the internal consistency of the given @string_UnicodeString.
* It is required to have characters complying to g_unichar_validate().
+ * @string_UnicodeString MUST be zero-terminated.
*
* Returns: %TRUE if the string is valid.
*/
/**
+ * captive_validate_UnicodeString_noterm:
+ * @string_UnicodeString_noterm: #PUNICODE_STRING type string to validate.
+ * Invalid string input is forbidden.
+ *
+ * Checks the internal consistency of the given @string_UnicodeString.
+ * It is required to have characters complying to g_unichar_validate().
+ * @string_UnicodeString_noterm does not neet to be zero-terminated.
+ *
+ * Returns: %TRUE if the string is valid.
+ */
+gboolean captive_validate_UnicodeString_noterm(const UNICODE_STRING *string_UnicodeString_noterm)
+{
+const WCHAR *cwp;
+
+ g_return_val_if_fail(captive_validate_unicode_types(),FALSE);
+ g_return_val_if_fail(sizeof(WCHAR)==sizeof(*string_UnicodeString_noterm->Buffer),FALSE);
+ g_return_val_if_fail(string_UnicodeString_noterm!=NULL,FALSE);
+ g_return_val_if_fail(string_UnicodeString_noterm->Length%sizeof(*string_UnicodeString_noterm->Buffer)==0,FALSE);
+ g_return_val_if_fail(string_UnicodeString_noterm->MaximumLength>=string_UnicodeString_noterm->Length,FALSE);
+
+ for (
+ cwp=string_UnicodeString_noterm->Buffer;
+ cwp<string_UnicodeString_noterm->Buffer
+ +(string_UnicodeString_noterm->Length/sizeof(*string_UnicodeString_noterm->Buffer));
+ cwp++)
+ g_return_val_if_fail(*cwp!=0,FALSE);
+
+ g_return_val_if_fail(captive_validate_ucs2_fixlen(string_UnicodeString_noterm->Buffer,
+ string_UnicodeString_noterm->Length/sizeof(*string_UnicodeString_noterm->Buffer)),
+ FALSE);
+
+ return TRUE;
+}
+
+
+/**
* captive_validate_AnsiString:
* @string_AnsiString: #PANSI_STRING type string to validate.
* Invalid string input is forbidden.