add bytecount check when processing playlists

This commit is contained in:
F. Duncanh
2025-11-14 01:07:40 -05:00
parent 5afbdde169
commit 274c517ff2

View File

@@ -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);