mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-02 19:16:15 +00:00
stasis_recording: Perform a complete match on requested filename.
Using the length of a file found on the filesystem rather than the file being requested could result in filenames whose names are substrings of another to be erroneously matched. We now ensure a complete comparison before returning a positive result. ASTERISK-29960 #close Change-Id: Id3ffc77681b9b75b8569062f3d952a128a21c71a
This commit is contained in:
committed by
Kevin Harwell
parent
2b636f3766
commit
3a7d83087b
@@ -130,6 +130,7 @@ static int split_path(const char *path, char **dir, char **file)
|
|||||||
|
|
||||||
struct match_recording_data {
|
struct match_recording_data {
|
||||||
const char *file;
|
const char *file;
|
||||||
|
size_t length;
|
||||||
char *file_with_ext;
|
char *file_with_ext;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -160,7 +161,9 @@ static int handle_find_recording(const char *dir_name, const char *filename, voi
|
|||||||
int num;
|
int num;
|
||||||
|
|
||||||
/* If not a recording or the names do not match the keep searching */
|
/* If not a recording or the names do not match the keep searching */
|
||||||
if (!(num = is_recording(filename)) || strncmp(data->file, filename, num)) {
|
if (!(num = is_recording(filename))
|
||||||
|
|| data->length != num
|
||||||
|
|| strncmp(data->file, filename, num)) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -186,6 +189,7 @@ static char *find_recording(const char *dir_name, const char *file)
|
|||||||
{
|
{
|
||||||
struct match_recording_data data = {
|
struct match_recording_data data = {
|
||||||
.file = file,
|
.file = file,
|
||||||
|
.length = strlen(file),
|
||||||
.file_with_ext = NULL
|
.file_with_ext = NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user