Skip to content

Commit d1bb125

Browse files
stackiaclaude
andcommitted
fix: restore URL encoding for service names in M3U output
Some clients don't handle raw UTF-8 in URL paths correctly. Re-add http_url_encode() for service names in build_service_url(). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 6e15d4c commit d1bb125

1 file changed

Lines changed: 13 additions & 5 deletions

File tree

src/m3u.c

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -574,44 +574,52 @@ static int extract_wrapped_url(const char *url, char *extracted,
574574
}
575575

576576
/* Build service URL for transformed M3U using placeholder
577-
* service_name: name of the service
577+
* service_name: name of the service (will be URL encoded)
578578
* query_params: optional query parameters (can be NULL)
579579
* output: buffer to store URL
580580
* output_size: size of output buffer
581581
* Returns: 0 on success, -1 on error
582582
*/
583583
static int build_service_url(const char *service_name, const char *query_params,
584584
char *output, size_t output_size) {
585+
char *encoded_name = http_url_encode(service_name);
585586
char *encoded_token = NULL;
586587
int result;
587588
int has_query_params = (query_params && strlen(query_params) > 0);
588589
int has_r2h_token = (config.r2h_token && config.r2h_token[0] != '\0');
589590

591+
if (!encoded_name) {
592+
logger(LOG_ERROR, "Failed to URL encode service name");
593+
return -1;
594+
}
595+
590596
/* URL encode r2h-token if configured */
591597
if (has_r2h_token) {
592598
encoded_token = http_url_encode(config.r2h_token);
593599
if (!encoded_token) {
594600
logger(LOG_ERROR, "Failed to URL encode r2h-token");
601+
free(encoded_name);
595602
return -1;
596603
}
597604
}
598605

599606
/* Build URL with placeholder and appropriate query parameters */
600607
if (has_query_params && has_r2h_token) {
601608
result = snprintf(output, output_size, "%s%s?%s&r2h-token=%s",
602-
M3U_BASE_URL_PLACEHOLDER, service_name, query_params,
609+
M3U_BASE_URL_PLACEHOLDER, encoded_name, query_params,
603610
encoded_token);
604611
} else if (has_query_params) {
605612
result = snprintf(output, output_size, "%s%s?%s", M3U_BASE_URL_PLACEHOLDER,
606-
service_name, query_params);
613+
encoded_name, query_params);
607614
} else if (has_r2h_token) {
608615
result = snprintf(output, output_size, "%s%s?r2h-token=%s",
609-
M3U_BASE_URL_PLACEHOLDER, service_name, encoded_token);
616+
M3U_BASE_URL_PLACEHOLDER, encoded_name, encoded_token);
610617
} else {
611618
result = snprintf(output, output_size, "%s%s", M3U_BASE_URL_PLACEHOLDER,
612-
service_name);
619+
encoded_name);
613620
}
614621

622+
free(encoded_name);
615623
if (encoded_token)
616624
free(encoded_token);
617625

0 commit comments

Comments
 (0)