mirror of
https://github.com/morgan9e/UxPlay
synced 2026-04-14 00:04:13 +09:00
add bytecount check when processing playlists
This commit is contained in:
@@ -511,9 +511,11 @@ char *adjust_master_playlist (char *fcup_response_data, int fcup_response_datale
|
||||
|
||||
size_t len = uri_local_prefix_len - uri_prefix_len;
|
||||
len *= counter;
|
||||
len += fcup_response_datalen;
|
||||
char *new_master = (char *) malloc(len + 1);
|
||||
*(new_master + len) = '\0';
|
||||
len += fcup_response_datalen;
|
||||
int byte_count = 0;
|
||||
int new_len = (int) len;
|
||||
char *new_master = (char *) malloc(new_len + 1);
|
||||
new_master[new_len] = '\0';
|
||||
char *first = fcup_response_data;
|
||||
char *new = new_master;
|
||||
char *last = strstr(first, uri_prefix);
|
||||
@@ -522,17 +524,21 @@ char *adjust_master_playlist (char *fcup_response_data, int fcup_response_datale
|
||||
counter++;
|
||||
len = last - first;
|
||||
memcpy(new, first, len);
|
||||
first = last + uri_prefix_len;
|
||||
byte_count += len;
|
||||
first = last + uri_prefix_len;
|
||||
new += len;
|
||||
memcpy(new, uri_local_prefix, uri_local_prefix_len);
|
||||
byte_count += uri_local_prefix_len;
|
||||
new += uri_local_prefix_len;
|
||||
last = strstr(last + uri_prefix_len, uri_prefix);
|
||||
if (last == NULL) {
|
||||
if (last == NULL) {
|
||||
len = fcup_response_data + fcup_response_datalen - first;
|
||||
memcpy(new, first, len);
|
||||
byte_count += len;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
assert(byte_count == new_len);
|
||||
return new_master;
|
||||
}
|
||||
|
||||
@@ -623,10 +629,12 @@ char *adjust_yt_condensed_playlist(const char *media_playlist) {
|
||||
}
|
||||
|
||||
size_t old_size = strlen(media_playlist);
|
||||
size_t new_size = old_size;
|
||||
new_size += count * (base_uri_len + params_len);
|
||||
|
||||
char * new_playlist = (char *) calloc( new_size + 100, sizeof(char));
|
||||
size_t new_len = old_size;
|
||||
new_len += count * (base_uri_len + params_len);
|
||||
|
||||
int byte_count = 0;
|
||||
char * new_playlist = (char *) malloc(new_len + 1);
|
||||
new_playlist[new_len] = '\0';
|
||||
const char *old_pos = media_playlist;
|
||||
char *new_pos = new_playlist;
|
||||
ptr = old_pos;
|
||||
@@ -634,6 +642,7 @@ char *adjust_yt_condensed_playlist(const char *media_playlist) {
|
||||
size_t len = ptr - old_pos;
|
||||
/* copy header section before chunks */
|
||||
memcpy(new_pos, old_pos, len);
|
||||
byte_count += len;
|
||||
old_pos += len;
|
||||
new_pos += len;
|
||||
while (ptr) {
|
||||
@@ -643,11 +652,13 @@ char *adjust_yt_condensed_playlist(const char *media_playlist) {
|
||||
len = start - ptr;
|
||||
/* copy first line of chunk entry */
|
||||
memcpy(new_pos, old_pos, len);
|
||||
byte_count += len;
|
||||
old_pos += len;
|
||||
new_pos += len;
|
||||
|
||||
/* copy base uri to replace prefix*/
|
||||
memcpy(new_pos, base_uri, base_uri_len);
|
||||
byte_count += base_uri_len;
|
||||
new_pos += base_uri_len;
|
||||
old_pos += prefix_len;
|
||||
ptr = strstr(old_pos, "#EXTINF:");
|
||||
@@ -664,16 +675,20 @@ char *adjust_yt_condensed_playlist(const char *media_playlist) {
|
||||
end = strstr(end, "#EXT");
|
||||
}
|
||||
*new_pos = '/';
|
||||
byte_count++;
|
||||
new_pos++;
|
||||
memcpy(new_pos, params_start[i], params_size[i]);
|
||||
byte_count += params_size[i];
|
||||
new_pos += params_size[i];
|
||||
*new_pos = '/';
|
||||
byte_count++;
|
||||
new_pos++;
|
||||
|
||||
len = end - old_pos;
|
||||
end++;
|
||||
|
||||
memcpy (new_pos, old_pos, len);
|
||||
byte_count += len;
|
||||
new_pos += len;
|
||||
old_pos += len;
|
||||
if (i != last) {
|
||||
@@ -685,10 +700,11 @@ char *adjust_yt_condensed_playlist(const char *media_playlist) {
|
||||
|
||||
len = media_playlist + strlen(media_playlist) - old_pos;
|
||||
memcpy(new_pos, old_pos, len);
|
||||
byte_count += len;
|
||||
new_pos += len;
|
||||
old_pos += len;
|
||||
|
||||
new_playlist[new_size] = '\0';
|
||||
assert(byte_count == new_len);
|
||||
|
||||
free (prefix);
|
||||
free (base_uri);
|
||||
|
||||
Reference in New Issue
Block a user