@@ -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 */
583583static 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