Skip to content

Commit 8c52c5e

Browse files
committed
wip
1 parent 0f061fe commit 8c52c5e

File tree

6 files changed

+52
-122
lines changed

6 files changed

+52
-122
lines changed

src/php_spx.c

+23-40
Original file line numberDiff line numberDiff line change
@@ -924,29 +924,20 @@ static void http_ui_handler_shutdown(void)
924924
ui_uri = "/index.html";
925925
}
926926

927-
if (ui_uri[0] != '/') {
928-
goto error_404;
929-
}
930-
931927
if (0 == http_ui_handler_data(SPX_G(data_dir), ui_uri)) {
932928
goto finish;
933929
}
934930

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-
}
931+
char local_file_name[512];
932+
snprintf(
933+
local_file_name,
934+
sizeof(local_file_name),
935+
"%s%s",
936+
SPX_G(http_ui_assets_dir),
937+
ui_uri
938+
);
948939

949-
if (0 == http_ui_handler_output_file(local_file_absolute_path)) {
940+
if (0 == http_ui_handler_output_file(local_file_name)) {
950941
goto finish;
951942
}
952943

@@ -1034,34 +1025,26 @@ static int http_ui_handler_data(const char * data_dir, const char *relative_path
10341025

10351026
const char * get_report_metadata_uri = "/data/reports/metadata/";
10361027
if (spx_utils_str_starts_with(relative_path, get_report_metadata_uri)) {
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) - 1,
1042-
file_name,
1043-
sizeof(file_name)
1044-
) == NULL
1045-
) {
1046-
return -1;
1047-
}
1028+
char file_name[512];
1029+
spx_reporter_full_build_metadata_file_name(
1030+
data_dir,
1031+
relative_path + strlen(get_report_metadata_uri),
1032+
file_name,
1033+
sizeof(file_name)
1034+
);
10481035

10491036
return http_ui_handler_output_file(file_name);
10501037
}
10511038

10521039
const char * get_report_uri = "/data/reports/get/";
10531040
if (spx_utils_str_starts_with(relative_path, get_report_uri)) {
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) - 1,
1059-
file_name,
1060-
sizeof(file_name)
1061-
) == NULL
1062-
) {
1063-
return -1;
1064-
}
1041+
char file_name[512];
1042+
spx_reporter_full_build_file_name(
1043+
data_dir,
1044+
relative_path + strlen(get_report_uri),
1045+
file_name,
1046+
sizeof(file_name)
1047+
);
10651048

10661049
return http_ui_handler_output_file(file_name);
10671050
}

src/php_spx.h

+5-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,11 @@
3535
# error "Only the following PHP versions are supported: 5.4 to 8.3"
3636
#endif
3737

38+
#if defined(ZTS) && !defined(CONTINUOUS_INTEGRATION)
39+
# error "ZTS is not yet supported"
40+
#endif
41+
3842
#define PHP_SPX_EXTNAME "SPX"
39-
#define PHP_SPX_VERSION "0.4.16"
43+
#define PHP_SPX_VERSION "0.4.15"
4044

4145
extern zend_module_entry spx_module_entry;

src/spx_reporter_full.c

+23-25
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ typedef struct {
6767
typedef struct {
6868
spx_profiler_reporter_t base;
6969

70-
char metadata_file_name[PATH_MAX];
70+
char metadata_file_name[512];
7171
metadata_t * metadata;
7272
spx_output_stream_t * output;
7373

@@ -99,7 +99,7 @@ size_t spx_reporter_full_metadata_list_files(
9999
return 0;
100100
}
101101

102-
char file_path[PATH_MAX];
102+
char file_path[512];
103103
size_t count = 0;
104104
const struct dirent * entry;
105105
while ((entry = readdir(dir)) != NULL) {
@@ -124,33 +124,33 @@ size_t spx_reporter_full_metadata_list_files(
124124
return count;
125125
}
126126

127-
char * spx_reporter_full_build_metadata_file_name(
127+
int spx_reporter_full_build_metadata_file_name(
128128
const char * data_dir,
129129
const char * key,
130130
char * file_name,
131131
size_t size
132132
) {
133-
return spx_utils_resolve_confined_file_absolute_path(
134-
data_dir,
135-
key,
136-
".json",
133+
return snprintf(
137134
file_name,
138-
size
135+
size,
136+
"%s/%s.json",
137+
data_dir,
138+
key
139139
);
140140
}
141141

142-
char * spx_reporter_full_build_file_name(
142+
int spx_reporter_full_build_file_name(
143143
const char * data_dir,
144144
const char * key,
145145
char * file_name,
146146
size_t size
147147
) {
148-
return spx_utils_resolve_confined_file_absolute_path(
149-
data_dir,
150-
key,
151-
".txt.gz",
148+
return snprintf(
152149
file_name,
153-
size
150+
size,
151+
"%s/%s.txt.gz",
152+
data_dir,
153+
key
154154
);
155155
}
156156

@@ -173,21 +173,19 @@ spx_profiler_reporter_t * spx_reporter_full_create(const char * data_dir)
173173
goto error;
174174
}
175175

176-
char file_name[PATH_MAX];
177-
snprintf(
178-
file_name,
179-
sizeof(file_name),
180-
"%s/%s.txt.gz",
176+
char file_name[512];
177+
spx_reporter_full_build_file_name(
181178
data_dir,
182-
reporter->metadata->key
179+
reporter->metadata->key,
180+
file_name,
181+
sizeof(file_name)
183182
);
184183

185-
snprintf(
186-
reporter->metadata_file_name,
187-
sizeof(reporter->metadata_file_name),
188-
"%s/%s.json",
184+
spx_reporter_full_build_metadata_file_name(
189185
data_dir,
190-
reporter->metadata->key
186+
reporter->metadata->key,
187+
reporter->metadata_file_name,
188+
sizeof(reporter->metadata_file_name)
191189
);
192190

193191
(void) mkdir(data_dir, 0777);

src/spx_reporter_full.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ size_t spx_reporter_full_metadata_list_files(
2626
void (*callback) (const char *, size_t)
2727
);
2828

29-
char * spx_reporter_full_build_metadata_file_name(
29+
int spx_reporter_full_build_metadata_file_name(
3030
const char * data_dir,
3131
const char * key,
3232
char * file_name,

src/spx_utils.c

-46
Original file line numberDiff line numberDiff line change
@@ -21,52 +21,6 @@
2121
#include <string.h>
2222
#include "spx_utils.h"
2323

24-
char * spx_utils_resolve_confined_file_absolute_path(
25-
const char * root_dir,
26-
const char * relative_path,
27-
const char * suffix,
28-
char * dst,
29-
size_t size
30-
) {
31-
if (size < PATH_MAX) {
32-
spx_utils_die("size < PATH_MAX");
33-
}
34-
35-
char absolute_file_path[PATH_MAX];
36-
37-
snprintf(
38-
absolute_file_path,
39-
sizeof(absolute_file_path),
40-
"%s%s%s",
41-
root_dir,
42-
relative_path,
43-
suffix == NULL ? "" : suffix
44-
);
45-
46-
if (realpath(absolute_file_path, dst) == NULL) {
47-
return NULL;
48-
}
49-
50-
char root_dir_real_path[PATH_MAX];
51-
if (realpath(root_dir, root_dir_real_path) == NULL) {
52-
return NULL;
53-
}
54-
55-
char expected_path_prefix[PATH_MAX + 1];
56-
snprintf(
57-
expected_path_prefix,
58-
sizeof(expected_path_prefix),
59-
"%s/",
60-
root_dir_real_path
61-
);
62-
63-
if (! spx_utils_str_starts_with(dst, expected_path_prefix)) {
64-
return NULL;
65-
}
66-
67-
return dst;
68-
}
69-
7024
char * spx_utils_json_escape(char * dst, const char * src, size_t limit)
7125
{
7226
size_t i = 0;

src/spx_utils.h

-9
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
#define SPX_UTILS_H_DEFINED
2121

2222
#include <stddef.h>
23-
#include <limits.h> /* PATH_MAX */
2423

2524
#define SPX_UTILS_TOKENIZE_STRING(str, delim, token, size, block) \
2625
do { \
@@ -50,14 +49,6 @@ do { \
5049
} \
5150
} while (0)
5251

53-
char * spx_utils_resolve_confined_file_absolute_path(
54-
const char * root_dir,
55-
const char * relative_path,
56-
const char * suffix,
57-
char * dst,
58-
size_t size
59-
);
60-
6152
char * spx_utils_json_escape(char * dst, const char * src, size_t limit);
6253
int spx_utils_str_starts_with(const char * str, const char * prefix);
6354
int spx_utils_str_ends_with(const char * str, const char * suffix);

0 commit comments

Comments
 (0)