@@ -924,24 +924,29 @@ static void http_ui_handler_shutdown(void)
924924 ui_uri = "/index.html" ;
925925 }
926926
927- if (ui_uri [0 ] != '/' || strstr ( ui_uri , "/../" ) != NULL ) {
927+ if (ui_uri [0 ] != '/' ) {
928928 goto error_404 ;
929929 }
930930
931931 if (0 == http_ui_handler_data (SPX_G (data_dir ), ui_uri )) {
932932 goto finish ;
933933 }
934934
935- char local_file_name [512 ];
936- snprintf (
937- local_file_name ,
938- sizeof (local_file_name ),
939- "%s%s" ,
940- SPX_G (http_ui_assets_dir ),
941- ui_uri
942- );
935+ char local_file_absolute_path [PATH_MAX ];
936+
937+ if (
938+ spx_utils_resolve_confined_file_absolute_path (
939+ SPX_G (http_ui_assets_dir ),
940+ ui_uri ,
941+ NULL ,
942+ local_file_absolute_path ,
943+ sizeof (local_file_absolute_path )
944+ ) == NULL
945+ ) {
946+ goto error_404 ;
947+ }
943948
944- if (0 == http_ui_handler_output_file (local_file_name )) {
949+ if (0 == http_ui_handler_output_file (local_file_absolute_path )) {
945950 goto finish ;
946951 }
947952
@@ -1029,26 +1034,34 @@ static int http_ui_handler_data(const char * data_dir, const char *relative_path
10291034
10301035 const char * get_report_metadata_uri = "/data/reports/metadata/" ;
10311036 if (spx_utils_str_starts_with (relative_path , get_report_metadata_uri )) {
1032- char file_name [512 ];
1033- spx_reporter_full_build_metadata_file_name (
1034- data_dir ,
1035- relative_path + strlen (get_report_metadata_uri ),
1036- file_name ,
1037- sizeof (file_name )
1038- );
1037+ char file_name [PATH_MAX ];
1038+ if (
1039+ spx_reporter_full_build_metadata_file_name (
1040+ data_dir ,
1041+ relative_path + strlen (get_report_metadata_uri ),
1042+ file_name ,
1043+ sizeof (file_name )
1044+ ) == NULL
1045+ ) {
1046+ return -1 ;
1047+ }
10391048
10401049 return http_ui_handler_output_file (file_name );
10411050 }
10421051
10431052 const char * get_report_uri = "/data/reports/get/" ;
10441053 if (spx_utils_str_starts_with (relative_path , get_report_uri )) {
1045- char file_name [512 ];
1046- spx_reporter_full_build_file_name (
1047- data_dir ,
1048- relative_path + strlen (get_report_uri ),
1049- file_name ,
1050- sizeof (file_name )
1051- );
1054+ char file_name [PATH_MAX ];
1055+ if (
1056+ spx_reporter_full_build_file_name (
1057+ data_dir ,
1058+ relative_path + strlen (get_report_uri ),
1059+ file_name ,
1060+ sizeof (file_name )
1061+ ) == NULL
1062+ ) {
1063+ return -1 ;
1064+ }
10521065
10531066 return http_ui_handler_output_file (file_name );
10541067 }
0 commit comments