Skip to content

Add new input validator API functions #1576

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Feb 16, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
117 changes: 116 additions & 1 deletion docs/02.API-REFERENCE.md
Original file line number Diff line number Diff line change
Expand Up @@ -1233,6 +1233,7 @@ jerry_get_string_size (const jerry_value_t value);

- [jerry_create_string](#jerry_create_string)
- [jerry_get_string_length](#jerry_get_string_length)
- [jerry_is_valid_cesu8_string](#jerry_is_valid_cesu8_string)


## jerry_get_utf8_string_size
Expand Down Expand Up @@ -1272,6 +1273,8 @@ jerry_get_utf8_string_size (const jerry_value_t value);

- [jerry_create_string_from_utf8](#jerry_create_string_from_utf8)
- [jerry_get_utf8_string_length](#jerry_get_utf8_string_length)
- [jerry_is_valid_utf8_string](#jerry_is_valid_utf8_string)


## jerry_get_string_length

Expand Down Expand Up @@ -1308,6 +1311,8 @@ jerry_get_string_length (const jerry_value_t value);

- [jerry_create_string](#jerry_create_string)
- [jerry_get_string_size](#jerry_get_string_size)
- [jerry_is_valid_cesu8_string](#jerry_is_valid_cesu8_string)


## jerry_get_utf8_string_length

Expand Down Expand Up @@ -1347,6 +1352,8 @@ jerry_get_utf8_string_length (const jerry_value_t value);

- [jerry_create_string_from_utf8](#jerry_create_string_from_utf8)
- [jerry_get_utf8_string_size](#jerry_get_utf8_string_size)
- [jerry_is_valid_utf8_string](#jerry_is_valid_utf8_string)


## jerry_string_to_char_buffer

Expand Down Expand Up @@ -1394,6 +1401,8 @@ jerry_string_to_char_buffer (const jerry_value_t value,

- [jerry_create_string](#jerry_create_string)
- [jerry_get_string_size](#jerry_get_string_size)
- [jerry_is_valid_cesu8_string](#jerry_is_valid_cesu8_string)


## jerry_string_to_utf8_char_buffer

Expand Down Expand Up @@ -1441,6 +1450,8 @@ jerry_string_to_utf8_char_buffer (const jerry_value_t value,

- [jerry_create_string_from_utf8](#jerry_create_string_from_utf8)
- [jerry_get_utf8_string_size](#jerry_get_utf8_string_size)
- [jerry_is_valid_utf8_string](#jerry_is_valid_utf8_string)


## jerry_substring_to_char_buffer

Expand Down Expand Up @@ -1496,6 +1507,8 @@ jerry_substring_to_char_buffer (const jerry_value_t value,
- [jerry_create_string](#jerry_create_string)
- [jerry_get_string_size](#jerry_get_string_size)
- [jerry_get_string_length](#jerry_get_string_length)
- [jerry_is_valid_cesu8_string](#jerry_is_valid_cesu8_string)


## jerry_substring_to_utf8_char_buffer

Expand Down Expand Up @@ -1548,9 +1561,12 @@ jerry_substring_to_utf8_char_buffer (const jerry_value_t value,

**See also**

- [jerry_create_string_from_utf8](#jerry_create_string)
- [jerry_create_string_from_utf8](#jerry_create_string_from_utf8)
- [jerry_get_utf8_string_size](#jerry_get_utf8_string_size)
- [jerry_get_utf8_string_length](#jerry_get_utf8_string_length)
- [jerry_is_valid_utf8_string](#jerry_is_valid_utf8_string)


# Functions for array object values

## jerry_get_array_length
Expand Down Expand Up @@ -2260,6 +2276,7 @@ jerry_create_string (const jerry_char_t *str_p);

**See also**

- [jerry_is_valid_cesu8_string](#jerry_is_valid_cesu8_string)
- [jerry_create_string_sz](#jerry_create_string_sz)


Expand Down Expand Up @@ -2298,8 +2315,10 @@ jerry_create_string_sz (const jerry_char_t *str_p,

**See also**

- [jerry_is_valid_cesu8_string](#jerry_is_valid_cesu8_string)
- [jerry_create_string](#jerry_create_string)


## jerry_create_string_from_utf8

**Summary**
Expand Down Expand Up @@ -2333,6 +2352,7 @@ jerry_create_string_from_utf8 (const jerry_char_t *str_p);

**See also**

- [jerry_is_valid_utf8_string](#jerry_is_valid_utf8_string)
- [jerry_create_string_sz_from_utf8](#jerry_create_string_sz_from_utf8)


Expand Down Expand Up @@ -2373,8 +2393,10 @@ jerry_create_string_sz (const jerry_char_t *str_p,

**See also**

- [jerry_is_valid_utf8_string](#jerry_is_valid_utf8_string)
- [jerry_create_string_from_utf8](#jerry_create_string_from_utf8)


## jerry_create_undefined

**Summary**
Expand Down Expand Up @@ -3287,6 +3309,99 @@ bool foreach_function (const jerry_value_t prop_name,
- [jerry_object_property_foreach_t](#jerry_object_property_foreach_t)


# Input validator functions

## jerry_is_valid_utf8_string

**Summary**

Validate UTF-8 string.

**Prototype**

```c
bool
jerry_is_valid_utf8_string (const jerry_char_t *utf8_buf_p, /**< UTF-8 string */
jerry_size_t buf_size) /**< string size */
```

- `utf8_buf_p` - UTF-8 input string
- `buf_size` - input string size

**Example**

```c
{
const jerry_char_t script[] = "print ('Hello, World!');";
size_t script_size = strlen ((const char *) script);

if (jerry_is_valid_utf8_string (script, (jerry_size_t) script_size))
{
jerry_run_simple (script, script_size, JERRY_INIT_EMPTY);
}
}
```

**See also**

- [jerry_run_simple](#jerry_run_simple)
- [jerry_create_string_from_utf8](#jerry_create_string_from_utf8)
- [jerry_create_string_sz_from_utf8](#jerry_create_string_sz_from_utf8)
- [jerry_get_utf8_string_size](#jerry_get_utf8_string_size)
- [jerry_get_utf8_string_length](#jerry_get_utf8_string_length)
- [jerry_string_to_utf8_char_buffer](#jerry_string_to_utf8_char_buffer)
- [jerry_substring_to_utf8_char_buffer](#jerry_substring_to_utf8_char_buffer)

## jerry_is_valid_cesu8_string

**Summary**

Validate CESU-8 string.

**Prototype**

```c
bool
jerry_is_valid_cesu8_string (const jerry_char_t *cesu8_buf_p, /**< CESU-8 string */
jerry_size_t buf_size) /**< string size */
```

- `cesu8_buf_p` - CESU-8 input string
- `buf_size` - input string size

**Example**

```c
{
jerry_init (JERRY_INIT_EMPTY);

const jerry_char_t script[] = "Hello, World!";
size_t script_size = strlen ((const char *) script);

if (jerry_is_valid_cesu8_string (script, (jerry_size_t) script_size))
{
jerry_value_t string_value = jerry_create_string_sz (script,
(jerry_size_t) script_size));

... // usage of string_value

jerry_release_value (string_value);
}

jerry_cleanup ();
}
```

**See also**

- [jerry_create_string](#jerry_create_string)
- [jerry_create_string_sz](#jerry_create_string_sz)
- [jerry_get_string_size](#jerry_get_string_size)
- [jerry_get_string_length](#jerry_get_string_length)
- [jerry_string_to_char_buffer](#jerry_string_to_char_buffer)
- [jerry_substring_to_char_buffer](#jerry_substring_to_char_buffer)


# Snapshot functions

## jerry_parse_and_save_snapshot
Expand Down
4 changes: 2 additions & 2 deletions jerry-core/ecma/base/ecma-helpers-string.c
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,7 @@ ecma_new_ecma_string_from_utf8 (const lit_utf8_byte_t *string_p, /**< utf-8 stri
lit_utf8_size_t string_size) /**< string size */
{
JERRY_ASSERT (string_p != NULL || string_size == 0);
JERRY_ASSERT (lit_is_cesu8_string_valid (string_p, string_size));
JERRY_ASSERT (lit_is_valid_cesu8_string (string_p, string_size));

lit_magic_string_id_t magic_string_id = lit_is_utf8_string_magic (string_p, string_size);

Expand Down Expand Up @@ -269,7 +269,7 @@ ecma_new_ecma_string_from_utf8_converted_to_cesu8 (const lit_utf8_byte_t *string
{
converted_string_size += string_size;

JERRY_ASSERT (lit_is_utf8_string_valid (string_p, string_size));
JERRY_ASSERT (lit_is_valid_utf8_string (string_p, string_size));

lit_utf8_byte_t *data_p;

Expand Down
4 changes: 2 additions & 2 deletions jerry-core/ecma/builtin-objects/ecma-builtin-global.c
Original file line number Diff line number Diff line change
Expand Up @@ -899,7 +899,7 @@ ecma_builtin_global_object_decode_uri_helper (ecma_value_t uri, /**< uri argumen
}

if (!is_valid
|| !lit_is_utf8_string_valid (octets, bytes_count))
|| !lit_is_valid_utf8_string (octets, bytes_count))
{
ret_value = ecma_raise_uri_error (ECMA_ERR_MSG ("Invalid UTF8 string."));
break;
Expand All @@ -923,7 +923,7 @@ ecma_builtin_global_object_decode_uri_helper (ecma_value_t uri, /**< uri argumen
{
JERRY_ASSERT (output_start_p + output_size == output_char_p);

if (lit_is_cesu8_string_valid (output_start_p, output_size))
if (lit_is_valid_cesu8_string (output_start_p, output_size))
{
ecma_string_t *output_string_p = ecma_new_ecma_string_from_utf8 (output_start_p, output_size);
ret_value = ecma_make_string_value (output_string_p);
Expand Down
36 changes: 32 additions & 4 deletions jerry-core/jerry.c
Original file line number Diff line number Diff line change
Expand Up @@ -982,7 +982,7 @@ jerry_create_object (void)
} /* jerry_create_object */

/**
* Create string from a valid UTF8 string
* Create string from a valid UTF-8 string
*
* Note:
* returned value must be freed with jerry_release_value when it is no longer needed.
Expand All @@ -996,7 +996,7 @@ jerry_create_string_from_utf8 (const jerry_char_t *str_p) /**< pointer to string
} /* jerry_create_string_from_utf8 */

/**
* Create string from a valid UTF8 string
* Create string from a valid UTF-8 string
*
* Note:
* returned value must be freed with jerry_release_value when it is no longer needed.
Expand All @@ -1016,7 +1016,7 @@ jerry_create_string_sz_from_utf8 (const jerry_char_t *str_p, /**< pointer to str
} /* jerry_create_string_sz_from_utf8 */

/**
* Create string from a valid CESU8 string
* Create string from a valid CESU-8 string
*
* Note:
* returned value must be freed with jerry_release_value, when it is no longer needed.
Expand All @@ -1030,7 +1030,7 @@ jerry_create_string (const jerry_char_t *str_p) /**< pointer to string */
} /* jerry_create_string */

/**
* Create string from a valid CESU8 string
* Create string from a valid CESU-8 string
*
* Note:
* returned value must be freed with jerry_release_value when it is no longer needed.
Expand Down Expand Up @@ -2006,6 +2006,34 @@ jerry_foreach_object_property (const jerry_value_t obj_val, /**< object value */
return false;
} /* jerry_foreach_object_property */

/**
* Validate UTF-8 string
*
* @return true - if UTF-8 string is well-formed
* false - otherwise
*/
bool
jerry_is_valid_utf8_string (const jerry_char_t *utf8_buf_p, /**< UTF-8 string */
jerry_size_t buf_size) /**< string size */
{
return lit_is_valid_utf8_string ((lit_utf8_byte_t *) utf8_buf_p,
(lit_utf8_size_t) buf_size);
} /* jerry_is_valid_utf8_string */

/**
* Validate CESU-8 string
*
* @return true - if CESU-8 string is well-formed
* false - otherwise
*/
bool
jerry_is_valid_cesu8_string (const jerry_char_t *cesu8_buf_p, /**< CESU-8 string */
jerry_size_t buf_size) /**< string size */
{
return lit_is_valid_cesu8_string ((lit_utf8_byte_t *) cesu8_buf_p,
(lit_utf8_size_t) buf_size);
} /* jerry_is_valid_cesu8_string */

/**
* @}
*/
Expand Down
6 changes: 6 additions & 0 deletions jerry-core/jerryscript.h
Original file line number Diff line number Diff line change
Expand Up @@ -329,6 +329,12 @@ void jerry_set_object_native_handle (const jerry_value_t obj_val, uintptr_t hand
bool jerry_foreach_object_property (const jerry_value_t obj_val, jerry_object_property_foreach_t foreach_p,
void *user_data_p);

/**
* Input validator functions
*/
bool jerry_is_valid_utf8_string (const jerry_char_t *utf8_buf_p, jerry_size_t buf_size);
bool jerry_is_valid_cesu8_string (const jerry_char_t *cesu8_buf_p, jerry_size_t buf_size);

/**
* Snapshot functions
*/
Expand Down
12 changes: 6 additions & 6 deletions jerry-core/lit/lit-strings.c
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
* false otherwise
*/
bool
lit_is_utf8_string_valid (const lit_utf8_byte_t *utf8_buf_p, /**< utf-8 string */
lit_is_valid_utf8_string (const lit_utf8_byte_t *utf8_buf_p, /**< utf-8 string */
lit_utf8_size_t buf_size) /**< string size */
{
lit_utf8_size_t idx = 0;
Expand Down Expand Up @@ -116,7 +116,7 @@ lit_is_utf8_string_valid (const lit_utf8_byte_t *utf8_buf_p, /**< utf-8 string *
}

return true;
} /* lit_is_utf8_string_valid */
} /* lit_is_valid_utf8_string */

/**
* Validate cesu-8 string
Expand All @@ -125,14 +125,14 @@ lit_is_utf8_string_valid (const lit_utf8_byte_t *utf8_buf_p, /**< utf-8 string *
* false otherwise
*/
bool
lit_is_cesu8_string_valid (const lit_utf8_byte_t *utf8_buf_p, /**< utf-8 string */
lit_is_valid_cesu8_string (const lit_utf8_byte_t *cesu8_buf_p, /**< cesu-8 string */
lit_utf8_size_t buf_size) /**< string size */
{
lit_utf8_size_t idx = 0;

while (idx < buf_size)
{
lit_utf8_byte_t c = utf8_buf_p[idx++];
lit_utf8_byte_t c = cesu8_buf_p[idx++];
if ((c & LIT_UTF8_1_BYTE_MASK) == LIT_UTF8_1_BYTE_MARKER)
{
continue;
Expand Down Expand Up @@ -166,7 +166,7 @@ lit_is_cesu8_string_valid (const lit_utf8_byte_t *utf8_buf_p, /**< utf-8 string

for (lit_utf8_size_t offset = 0; offset < extra_bytes_count; ++offset)
{
c = utf8_buf_p[idx + offset];
c = cesu8_buf_p[idx + offset];
if ((c & LIT_UTF8_EXTRA_BYTE_MASK) != LIT_UTF8_EXTRA_BYTE_MARKER)
{
/* invalid continuation byte */
Expand All @@ -186,7 +186,7 @@ lit_is_cesu8_string_valid (const lit_utf8_byte_t *utf8_buf_p, /**< utf-8 string
}

return true;
} /* lit_is_cesu8_string_valid */
} /* lit_is_valid_cesu8_string */

/**
* Check if the code point is UTF-16 low surrogate
Expand Down
4 changes: 2 additions & 2 deletions jerry-core/lit/lit-strings.h
Original file line number Diff line number Diff line change
Expand Up @@ -85,8 +85,8 @@
#define LIT_UTF8_FIRST_BYTE_MAX LIT_UTF8_5_BYTE_MARKER

/* validation */
bool lit_is_utf8_string_valid (const lit_utf8_byte_t *utf8_buf_p, lit_utf8_size_t buf_size);
bool lit_is_cesu8_string_valid (const lit_utf8_byte_t *utf8_buf_p, lit_utf8_size_t buf_size);
bool lit_is_valid_utf8_string (const lit_utf8_byte_t *utf8_buf_p, lit_utf8_size_t buf_size);
bool lit_is_valid_cesu8_string (const lit_utf8_byte_t *cesu8_buf_p, lit_utf8_size_t buf_size);

/* checks */
bool lit_is_code_point_utf16_low_surrogate (lit_code_point_t code_point);
Expand Down
Loading