aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--build/server.js19
-rw-r--r--src/server/HttpServer.hx12
-rw-r--r--src/server/Utils.hx4
3 files changed, 24 insertions, 11 deletions
diff --git a/build/server.js b/build/server.js
index 5f39892..28f6ff2 100644
--- a/build/server.js
+++ b/build/server.js
@@ -3646,15 +3646,17 @@ server_HttpServer.serveMedia = function(req,res,filePath) {
range = "bytes=0-";
}
var ranges = new EReg("[-=]","g").split(range);
- var start = Std.parseInt(ranges[1]);
- if(start == null) {
+ var start = parseFloat(ranges[1]);
+ if(server_Utils.isOutOfRange(start,0,videoSize - 1)) {
start = 0;
}
- var end = Std.parseInt(ranges[2]);
- if(end == null) {
+ var end = parseFloat(ranges[2]);
+ if(isNaN(end)) {
end = start + 5242880;
}
- end = Math.min(end,videoSize - 1) | 0;
+ if(server_Utils.isOutOfRange(end,start,videoSize - 1)) {
+ end = videoSize - 1;
+ }
res.setHeader("Content-Range","bytes " + start + "-" + end + "/" + videoSize);
res.setHeader("Content-Length","" + (end - start + 1));
res.statusCode = 206;
@@ -4802,6 +4804,13 @@ server_Utils.getLocalIp = function() {
}
return "127.0.0.1";
};
+server_Utils.isOutOfRange = function(value,min,max) {
+ if(!(value == null || isNaN(value) || value < min)) {
+ return value > max;
+ } else {
+ return true;
+ }
+};
server_Utils.sortedPush = function(ids,id) {
var _g_current = 0;
while(_g_current < ids.length) if(id < ids[_g_current++]) {
diff --git a/src/server/HttpServer.hx b/src/server/HttpServer.hx
index 0edf4e3..c4853ee 100644
--- a/src/server/HttpServer.hx
+++ b/src/server/HttpServer.hx
@@ -123,12 +123,12 @@ class HttpServer {
var range:String = req.headers["range"];
if (range == null) range = "bytes=0-";
final ranges = ~/[-=]/g.split(range);
- var start = Std.parseInt(ranges[1]);
- if (start == null) start = 0;
+ var start = Std.parseFloat(ranges[1]);
+ if (Utils.isOutOfRange(start, 0, videoSize - 1)) start = 0;
final CHUNK_SIZE = 1024 * 1024 * 5; // 5 MB
- var end = Std.parseInt(ranges[2]);
- if (end == null) end = start + CHUNK_SIZE;
- end = Std.int(Math.min(end, videoSize - 1));
+ var end = Std.parseFloat(ranges[2]);
+ if (Math.isNaN(end)) end = start + CHUNK_SIZE;
+ if (Utils.isOutOfRange(end, start, videoSize - 1)) end = videoSize - 1;
final contentLength = end - start + 1;
res.setHeader("Content-Range", 'bytes ${start}-${end}/${videoSize}');
@@ -136,7 +136,7 @@ class HttpServer {
// HTTP Status 206 for Partial Content
res.statusCode = 206;
// create video read stream for this particular chunk
- final videoStream = Fs.createReadStream(filePath, {start: start, end: end});
+ final videoStream = Fs.createReadStream(filePath, {start: cast start, end: cast end});
// stream the video chunk to the client
videoStream.pipe(res);
return true;
diff --git a/src/server/Utils.hx b/src/server/Utils.hx
index 9aa0d66..a2f4382 100644
--- a/src/server/Utils.hx
+++ b/src/server/Utils.hx
@@ -69,6 +69,10 @@ class Utils {
return "127.0.0.1";
}
+ public static function isOutOfRange(value:Float, min:Float, max:Float):Bool {
+ return value == null || Math.isNaN(value) || value < min || value > max;
+ }
+
public static function sortedPush(ids:Array<Int>, id:Int):Void {
for (i => n in ids) {
if (id < n) {
send patches to the email below
yukais@pinapelz.com
include the subject [PATCH repo_name]
pinapelz.com
homepage