1
0
mirror of https://gitlab.xiph.org/xiph/icecast-server.git synced 2024-12-04 14:46:30 -05:00

Add parser for bodies of Integer elements.

This commit is contained in:
Joseph Wallace 2015-11-20 13:33:41 -05:00
parent f461ff6763
commit 9899413839

View File

@ -111,6 +111,11 @@ static int ebml_parse_tag(unsigned char *buffer,
static int ebml_parse_var_int(unsigned char *buffer,
unsigned char *buffer_end,
unsigned long long *out_value);
static int ebml_parse_sized_int(unsigned char *buffer,
unsigned char *buffer_end,
int len,
int is_signed,
unsigned long long *out_value);
int format_ebml_get_plugin(source_t *source)
{
@ -769,3 +774,42 @@ static int ebml_parse_var_int(unsigned char *buffer,
return size;
}
/* Parse a normal int that may be from 1-8 bytes long.
* Returns 0 if there's not enough space to read the number;
* Returns -1 if the number is mis-sized.
* Else, returns the length of the number in bytes and writes the
* value to *out_value.
*/
static int ebml_parse_sized_int(unsigned char *buffer,
unsigned char *buffer_end,
int len,
int is_signed,
unsigned long long *out_value)
{
long long value;
int i;
if (len < 1 || len > 8) {
ICECAST_LOG_DEBUG("Sized int of %i bytes", len);
return -1;
}
if (buffer + len >= buffer_end) {
return 0;
}
if (is_signed && ((signed char) buffer[0]) < 0) {
value = -1;
} else {
value = 0;
}
for (i = 0; i < len; i++) {
value = (value << 8) + ((unsigned char) buffer[i]);
}
*out_value = value;
return len;
}