diff --git a/apps/dav/lib/Connector/Sabre/File.php b/apps/dav/lib/Connector/Sabre/File.php
index d0826ee5a8c8cd0c6043a84efbf03007f45b40cf..391d42393f574d18e54ca87a6c6255e8c4634e9f 100644
--- a/apps/dav/lib/Connector/Sabre/File.php
+++ b/apps/dav/lib/Connector/Sabre/File.php
@@ -206,7 +206,12 @@ class File extends Node implements IFile {
 			// allow sync clients to send the mtime along in a header
 			$request = \OC::$server->getRequest();
 			if (isset($request->server['HTTP_X_OC_MTIME'])) {
-				if ($this->fileView->touch($this->path, $request->server['HTTP_X_OC_MTIME'])) {
+				$mtimeStr = $request->server['HTTP_X_OC_MTIME'];
+				if (!is_numeric($mtimeStr)) {
+					throw new \InvalidArgumentException('X-OC-Mtime header must be an integer (unix timestamp).');
+				}
+				$mtime = intval($mtimeStr);
+				if ($this->fileView->touch($this->path, $mtime)) {
 					header('X-OC-MTime: accepted');
 				}
 			}
diff --git a/apps/files/js/file-upload.js b/apps/files/js/file-upload.js
index c93abd5244df2d015a9398b40d3bb1ba639d0b9c..6f9fd9aafeab3c3e5d9f6539831f270196d4a39c 100644
--- a/apps/files/js/file-upload.js
+++ b/apps/files/js/file-upload.js
@@ -222,7 +222,7 @@ OC.FileUpload.prototype = {
 
 		if (file.lastModified) {
 			// preserve timestamp
-			this.data.headers['X-OC-Mtime'] = file.lastModified / 1000;
+			this.data.headers['X-OC-Mtime'] = (file.lastModified / 1000).toFixed(0);
 		}
 
 		var userName = this.uploader.filesClient.getUserName();