aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRoman Arutyunyan <arut@nginx.com>2018-11-06 16:29:18 +0300
committerRoman Arutyunyan <arut@nginx.com>2018-11-06 16:29:18 +0300
commit9cd9526ba68a3dcfc763a3f7693ccb4f48e855fb (patch)
tree4880e4702511729b6706e93162b82567578767c7 /src
parentb66ee453cc6bc1832c3f056c9a46240bd390617c (diff)
downloadnginx-9cd9526ba68a3dcfc763a3f7693ccb4f48e855fb.tar.gz
nginx-9cd9526ba68a3dcfc763a3f7693ccb4f48e855fb.zip
Mp4: fixed reading 64-bit atoms.
Previously there was no validation for the size of a 64-bit atom in an mp4 file. This could lead to a CPU hog when the size is 0, or various other problems due to integer underflow when calculating atom data size, including segmentation fault or worker process memory disclosure.
Diffstat (limited to 'src')
-rw-r--r--src/http/modules/ngx_http_mp4_module.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/http/modules/ngx_http_mp4_module.c b/src/http/modules/ngx_http_mp4_module.c
index 08a68d07b..2a6fafa04 100644
--- a/src/http/modules/ngx_http_mp4_module.c
+++ b/src/http/modules/ngx_http_mp4_module.c
@@ -942,6 +942,13 @@ ngx_http_mp4_read_atom(ngx_http_mp4_file_t *mp4,
atom_size = ngx_mp4_get_64value(atom_header + 8);
atom_header_size = sizeof(ngx_mp4_atom_header64_t);
+ if (atom_size < sizeof(ngx_mp4_atom_header64_t)) {
+ ngx_log_error(NGX_LOG_ERR, mp4->file.log, 0,
+ "\"%s\" mp4 atom is too small:%uL",
+ mp4->file.name.data, atom_size);
+ return NGX_ERROR;
+ }
+
} else {
ngx_log_error(NGX_LOG_ERR, mp4->file.log, 0,
"\"%s\" mp4 atom is too small:%uL",